From 48721c85ebcfa973ee81719d2467ca80e4253dc9 Mon Sep 17 00:00:00 2001
From: Jake Vanderwerf <get@jakevanderwerf.ca>
Date: Fri, 01 May 2026 17:30:03 +0000
Subject: [PATCH] =Edmonton Ink hard test begins! Real testing of the managers and reset routes will commence. So far, just ensuring our classes are all loaded correctly: Site() and its sub-classes Membership, Login, etc. Care should be taken to load conditionally on 'init', as we finish defining most settings by 'plugins_loaded' at priority 5
---
base/_setup.php | 8
inc/managers/Notifications/Notifications.php | 9
assets/js/concise/navigation.js | 212
assets/js/min/navigation.min.js | 2
jvb.php | 7
inc/rest/routes/NotificationsRoutes.php | 2
inc/helpers/ui.php | 68
inc/rest/routes/TermRoutes.php | 2
inc/admin/ContentTaxonomy.php | 5
base/users.php | 38
inc/managers/DashboardManager.php | 4
inc/meta/_setup.php | 2
inc/managers/CRUDManager.php | 8
assets/js/concise/UtilityFunctions.js | 25
inc/managers/RoleManager.php | 174
inc/blocks/CustomBlocks.php | 95
inc/registrar/_setup.php | 2
inc/rest/routes/FeedRoutes.php | 2
assets/js/min/utility.min.js | 2
inc/rest/routes/ApprovalRoutes.php | 543 -
inc/managers/_setup.php | 29
inc/helpers/crud.php | 34
inc/managers/FavouritesManager.php | 2
inc/registrar/config/seo/Schema.php | 2
JVBase.php | 16
inc/managers/LoginManager.php | 24
inc/integrations/Square.php | 4
inc/managers/SEO/_setup.php | 16
inc/managers/NewsRelationships.php | 2
inc/managers/NotificationManager.php | 5
base/Site.php | 79
inc/ui/CRUDSkeleton.php | 10
base/SchemaHelper.php | 113
inc/integrations/Cloudflare.php | 6
inc/managers/IconsManager.php | 14
inc/registrar/fields/RepeaterField.php | 8
base/Membership.php | 46
inc/rest/RegisterRoutes.php | 2
inc/managers/DirectoryManager.php | 11
inc/managers/KarmaManager.php | 10
inc/registrar/Registrar.php | 46
assets/css/copy-hours.min.css | 2
package-lock.json | 17611 +++++++++++++++++++++++---------------------------
activate.php | 10
inc/registrar/helpers/MakeCalendarType.php | 4
inc/blocks/_setup.php | 112
inc/registrar/Posts.php | 1
inc/rest/routes/ReferralRoutes.php | 3
inc/helpers/dashboard.php | 2
inc/managers/ReferralManager.php | 7
inc/registrar/helpers/MakeVerification.php | 2
inc/registrar/config/Register.php | 76
inc/rest/routes/UploadRoutes.php | 4
inc/managers/SEO/SEOAdminPage.php | 1
inc/helpers/members.php | 4
inc/registrar/config/Section.php | 6
inc/registrar/Fields.php | 103
checks.php | 67
inc/managers/AdminPages.php | 2
inc/registrar/fields/Field.php | 36
assets/css/nav.min.css | 2
base/content.php | 6
inc/admin/_setup.php | 8
inc/registrar/helpers/MakeTrackChanges.php | 4
inc/managers/ApprovalManager.php | 144
inc/importers/JaneAppClientImporter.php | 6
inc/utility/setup.php | 4
/dev/null | 745 --
inc/rest/RestRouteManager.php | 6
inc/rest/routes/LoginRoutes.php | 8
package.json | 2
inc/managers/VerifyEntryManager.php | 2
inc/managers/InvitationsManager.php | 8
73 files changed, 9,286 insertions(+), 11,401 deletions(-)
diff --git a/JVBase.php b/JVBase.php
index cf531ec..4c0bac8 100644
--- a/JVBase.php
+++ b/JVBase.php
@@ -3,8 +3,10 @@
use JVBase\blocks\CustomBlocks;
use JVBase\base\Site;
+use JVBase\managers\ApprovalManager;
use JVBase\managers\EmailManager;
use JVBase\managers\ErrorHandler;
+use JVBase\managers\FavouritesManager;
use JVBase\managers\InvitationsManager;
use JVBase\managers\LoginManager;
use JVBase\managers\MagicLinkManager;
@@ -149,6 +151,9 @@
$this->managers['notifications'] = new NotificationManager();
$this->routes['notifications'] = new NotificationsRoutes();
}
+ if (!empty(Registrar::getFeatured('approve_new'))) {
+ $this->managers['approvals'] = new ApprovalManager();
+ }
if (Site::has('feed_block') || Site::has('dashboard')) {
$this->routes['term'] = new TermRoutes();
}
@@ -168,6 +173,7 @@
}
if (Site::has('favourites')) {
+ $this->managers['favourites'] = new FavouritesManager();
$this->routes['favourites'] = new FavouritesRoutes();
}
@@ -296,8 +302,9 @@
public function userCanConnect(string $service, int $userID): bool
{
- $allowed = JVB_USER[jvbUserRole($userID)]['integrations'] ?? [];
- return user_can($userID, 'manage_options') || in_array($service, $allowed);
+ $role = jvbUserRole($userID);
+ $registrar = Registrar::getInstance($role);
+ return user_can($userID, 'manage_options') || $registrar->hasIntegration($service);
}
public function getAvailableServices(bool $keys = true): array
@@ -388,4 +395,9 @@
{
return $this->managers['terms'];
}
+
+ public function approvals ():ApprovalManager|false
+ {
+ return $this->managers['approvals']??false;
+ }
}
diff --git a/activate.php b/activate.php
index 90db75b..c48344b 100644
--- a/activate.php
+++ b/activate.php
@@ -38,17 +38,9 @@
error_log('Starting schedules...');
jvbSchedules();
error_log('Schedules done!');
- error_log('checking Admin capabilities...');
- jvb_register_do_once('admin_caps', 'jvbAddAdminCaps');
+ RoleManager::activate();
- error_log('Admin caps done!');
- error_log('Removing unneeded roles...');
- remove_role('contributor');
- remove_role('author');
- remove_role('editor');
- error_log('Roles removed!');
- error_log('New Roles done!');
jvbRegisterAdminPages();
// if (array_key_exists('integrations', JVB_SITE) && array_key_exists('umami', JVB_SITE['integrations']) && JVB_SITE['integrations']['umami']=== true) {
// error_log('Adding Umami tables');
diff --git a/assets/css/copy-hours.min.css b/assets/css/copy-hours.min.css
index 7348331..d557a97 100644
--- a/assets/css/copy-hours.min.css
+++ b/assets/css/copy-hours.min.css
@@ -1 +1 @@
-.group-fields{position:relative}.hours-copy-btn:hover{background-color:var(--action-50);transform:scale(1.05)}.hours-copy-btn:active{transform:scale(.95)}.hours-copy-btn .icon{--w:0.875rem}.copy-hours-content h3{margin:0 0 1rem 0;color:var(--contrast);font-size:var(--txt-large)}.copy-hours-source{background-color:var(--base-100);padding:1rem;border-radius:var(--radius);margin-bottom:1.5rem;border:1px solid var(--base-200)}.copy-hours-source h4{margin:0 0 .5rem 0;color:var(--contrast-100);text-transform:uppercase;font-size:var(--txt-small);font-weight:600}.source-info{--gap:.25rem}.source-day{font-weight:600;color:var(--contrast);text-transform:capitalize}.source-hours{--gap:1rem;font-weight:500;color:var(--contrast)}.source-hours.closed{color:var(--contrast-200);font-style:italic}.copy-hours-targets{margin-bottom:2rem}.copy-hours-targets h4{margin:0 0 1rem 0;color:var(--contrast-100);text-transform:uppercase;font-size:var(--txt-small);font-weight:600}.day-checkboxes{display:grid;grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:.75rem}.feedback{position:fixed;top:2rem;right:2rem;background-color:var(--action-50);color:var(--action-contrast);padding:1rem 1.5rem;border-radius:var(--radius);box-shadow:rgba(var(--base-rgb),var(--op-45)) var(--shdw);z-index:10000;opacity:0;transform:translateX(100px);transition:all var(--trans-base);display:flex;align-items:center;gap:.5rem}.feedback.show{opacity:1;transform:translateX(0)}.feedback .icon{--w:1.25rem}
\ No newline at end of file
+:target{outline:0!important;padding:0!important}.dashboard .qtoggle{left:0;bottom:0}.dashboard>header{justify-content:flex-end;position:fixed}.dashboard>header img{width:var(--btn)}.dashboard h1:first-of-type{margin-top:4rem!important}nav.dashboard-nav,nav.dashboard-nav ul{--dir:row}nav.dashboard-nav ul{touch-action:pan-x;overflow:auto hidden}main>footer{padding:0}main>*{max-width:min(768px,90vw)!important;margin:0 auto!important}main h1{margin:0!important;font-size:var(--txt-large)}.item-grid .item{position:relative}img{width:100%;height:auto;aspect-ratio:1;object-fit:cover}.replace.replace{grid-column:full;padding:0 var(--btn_);max-width:none!important;margin:0!important}.replace .dashboard-page{max-width:var(--wide)}.group-display .item-grid{grid-template-columns:repeat(2,1fr)}.item-grid{margin-bottom:4rem}.item-grid:has(.select-item:checked) .item{padding:.75rem;opacity:.8;filter:var(--filter)}.item-grid .item:has(.select-item:checked){padding:.5rem;filter:none;opacity:1;background-color:var(--action-0)}.grid-view .item>input[type=checkbox]:not(.label-button)+label{padding-left:0;margin:0}.grid-view .item>input[type=checkbox]+label::before{transform:unset;top:.5rem;left:.5rem}.grid-view .item>input[type=checkbox]+label::after{top:.5rem;left:.75rem;transform:translateY(20%) rotate(45deg)}.grid-view .item .item-actions{bottom:0;right:0}.item-actions button{min-height:0;width:var(--chipchip);height:var(--chipchip);background-color:rgba(var(--base-rgb),var(--op-45))}.item-actions button:hover{background-color:var(--base)}.list-view h3,.list-view p{margin:0!important}.list-view h3{font-size:var(--txt-medium)}@media (min-width:768px){.grid-view{grid-template-columns:repeat(auto-fill,minmax(200px,1fr))}}@media (max-width:768px){.bulk-controls.bulk-controls.nowrap{--wrap:wrap}}.bulk-controls{margin:1rem 0}.bulk-controls .selected-count{font-weight:400;font-size:var(--txt-small);text-transform:none;font-style:italic;display:flex;gap:.25rem;margin-left:2rem}.selected-count::before{content:'{'}.selected-count::after{content:'}'}.bulk-edit-form .selected{display:grid;grid-template-columns:repeat(auto-fill,minmax(100px,1fr));gap:4px}.selected label{padding:.5rem;opacity:.6;filter:var(--filter);border:2px solid transparent;transition:filter var(--trans-base),opacity var(--trans-base),border var(--trans-base),padding var(--trans-base)}.selected label:has(:checked){border-color:var(--action-0);padding:0;opacity:1;filter:none;transition:filter var(--trans-base),opacity var(--trans-base),border var(--trans-base),padding var(--trans-base)}form.table img,form.table label.select-item{width:6rem;height:6rem}form.table .item-grid.preview{margin:0}td p{width:max-content}.timeline-point.is-dragging{opacity:.4;position:relative}.timeline-point.drop-above{position:relative}.timeline-point.drop-above::before{content:'';position:absolute;top:-4px;left:0;right:0;height:8px;background:var(--action-0);border-radius:4px;z-index:10;animation:pulse .6s ease-in-out infinite}.timeline-point.drop-below{position:relative}.timeline-point.drop-below::after{content:'';position:absolute;bottom:-4px;left:0;right:0;height:8px;background:var(--action-0);border-radius:4px;z-index:10;animation:pulse .6s ease-in-out infinite}@keyframes pulse{0%,100%{opacity:.6;transform:scaleY(1)}50%{opacity:1;transform:scaleY(1.2)}}.timeline-point.drop-above{margin-top:8px;transition:margin-top .2s ease}.timeline-point.drop-below{margin-bottom:8px;transition:margin-bottom .2s ease}.drag-handle{cursor:grab;padding:.5rem;background:0 0;border:none;opacity:.6;transition:opacity .2s ease}.drag-handle:hover{opacity:1}.drag-handle:active,.is-dragging .drag-handle{cursor:grabbing}.drag-preview .drag-handle{pointer-events:none}.all-filters{margin:0;padding:1rem 0;border-top:1px solid var(--base-200);border-bottom:1px solid var(--base-200);--gap:0}.all-filters .row{--justify:flex-start}.all-filters[open]{--gap:.5rem}.all-filters summary{width:100%;display:flex;justify-content:space-between}.all-filters summary [data-action=clear-filters]{--w:1em!important;width:max-content;font-size:var(--txt-x-small)}.all-filters [data-action=refresh]{margin-left:auto;--w:1em!important;flex-wrap:nowrap;justify-content:flex-start;transition:var(--trans-size);display:flex;font-size:var(--txt-x-small)}.all-filters [data-action=refresh]:focus,.all-filters [data-action=refresh]:hover{width:max-content}.all-filters [data-action=refresh] span{display:none;white-space:nowrap}.all-filters [data-action=refresh]:focus span,.all-filters [data-action=refresh]:hover span{display:block}.all-filters .btn+label{box-shadow:var(--shdw-none);color:var(--base-200)}.all-filters .radio-options input:not(.ch):checked+label{box-shadow:rgba(var(--base-rgb),var(--op-6)) var(--shdw-inset);color:var(--contrast-200);border-color:var(--contrast-200)}details.uploader+.items-list .all-filters{border-top:none}.all-filters .filters{width:100%}.controls .radio-options,.filters.row.start{--align:center;--justify:flex-start;--gap:.5rem}.all-filters span.label{text-transform:uppercase;font-size:var(--txt-small);font-weight:900;width:15vw;display:inline-flex;align-items:center;padding-right:2rem}@media (max-width:767px){.all-filters>.row{padding:.5rem 0}.all-filters span.label{padding-top:.5rem;width:100%;border-top:1px solid var(--base-200)}}.controls .icon{--w:1.4rem}.all-filters .btn+label,.all-filters button{height:var(--chip_);padding:.125rem!important;min-width:0;min-height:var(--chip_);width:var(--chip_)}.all-filters>.row{padding:.25rem 0}.all-filters .btn+label:focus,.all-filters .btn+label:hover,.all-filters button:focus,.all-filters button:hover{background-color:transparent;color:var(--action-0);border-color:var(--action-0)}.search-container:not(.open) .clear-search,.search-container:not(.open) input[type=search]{transform:scaleX(0);transform-origin:left;width:0;padding:0;transition:transform var(--trans-base),width var(--trans-base),padding var(--trans-base)}.search-container button{padding:.5rem}.search-container .icon{--w:1.5rem}.search-container.open .clear-search,.search-container.open input[type=search]{transform:scaleX(1);transform-origin:left;transition:transform var(--trans-base),width var(--trans-base),padding var(--trans-base)}.all-filters>.search,.search-container,input[type=search]{width:100%}.crud form.table td .label,.crud form.table td label:not(.select-item-label):not(.radio-option){display:none}form.table textarea{width:250px;padding:.5rem}.multi-select summary{--gap:2rem;padding-right:2.5rem}dialog.bulk-edit[open],dialog.create[open],dialog.edit[open]{height:98vh;width:98vw;max-width:none;max-height:none;inset:0;margin:auto}dialog>.wrap{min-height:100%}dialog .item.upload.upload{display:flex;gap:1rem}dialog .item.upload .preview{width:40%}dialog .item.upload .group{width:60%}.upload details{width:100%}.tab-content h2{display:none}.group-fields.hours .group-fields,.group-fields.hours .group-fields .field{display:flex;justify-content:space-between;align-items:center}.group-fields.hours .group-fields{padding:1rem .5rem;gap:1rem}.group-fields.hours .group-fields:nth-of-type(2n+1){background-color:var(--base)}.group-fields.hours .group-fields .field{margin:0}.group-fields.hours .true-false{flex:1}.group-fields.hours .time{position:relative}.group-fields.hours .time label{margin:0;font-size:var(--txt-small);position:absolute;top:-1rem;left:0;color:var(--contrast-200)}.today_hours{width:min(500px,90vw)}.today_hours .group-fields{width:100%;padding:0;display:flex;justify-content:center;gap:.5rem}@media (min-width:768px){.today_hours .group-fields{padding:2rem}}.today_hours .field{margin:0}.dash .true-false{margin:0}.dash [type=submit]{width:90%}.dashboard.dash h2{text-transform:none;font-size:var(--txt-large)}.dashboard.dash .replace>ul{display:flex;list-style:none;align-items:flex-start;justify-content:flex-start;flex-wrap:wrap;gap:.5rem}nav.tabs.tabs{bottom:0;left:0;right:var(--btn)}.dashboard.settings nav.tabs.tabs{--height:3.5rem;--x:var(--btn_);position:fixed;bottom:var(--btn);left:var(--x);right:var(--x);z-index:99;width:calc(100% - var(--x) - var(--x));background-color:var(--base)}.jvb-seo-admin nav.tabs.tabs{position:sticky;padding-bottom:0;bottom:unset;left:0;right:0;top:var(--btn)}.jvb-seo-admin nav.tabs button{border:none;margin:0 .125rem;background-color:var(--base-200);box-shadow:var(--shdw-none)}.jvb-seo-admin nav.tabs button.active{background-color:var(--base);color:var(--action-0)}nav.integrations,nav.integrations a,nav.integrations li,nav.integrations ul{height:auto}.replace{overflow:hidden}body.dash form#options{display:flex;flex-flow:column nowrap;justify-content:center;align-items:center}.item-grid.integrations{grid-template-columns:repeat(2,1fr);gap:2rem}.integration{background:var(--base);border:2px solid var(--base-200);border-radius:var(--radius-outer);padding:1rem;position:relative;transition:all var(--trans-base);box-shadow:rgba(var(--base-rgb),var(--op-45)) var(--shdw)}.integration.connected{border-color:var(--success)}.integration.disconnected,.integration.error{border-color:var(--error)}.integration.hasChanges{border-color:var(--warning)}.integration .header{margin-bottom:.75rem;padding-bottom:.75rem;border-bottom:2px solid var(--base-200)}.integration h3{letter-spacing:1px;font-size:var(--txt-medium);margin:0}.integration .meta{margin-bottom:1rem;text-align:right;color:var(--contrast-200);font-size:var(--txt-small)}.integration .setup{font-size:var(--txt-small);font-weight:700;text-transform:uppercase}.integration .setup .indicator{font-size:var(--txt-medium)}.integration .connected .indicator,.integration .setup .connected{color:var(--success)}.integration .disconnected .indicator,.integration .setup .disconnected{color:var(--error)}.integration.hasChanges .disconnected{color:var(--warning)}.connection-status.connected{background-color:var(--successBack);color:var(--successText)}.connection-status.disconnected{background-color:var(--errorBack);color:var(--errorText)}.integration code{display:inline-block;width:90%;margin:0 .5rem;user-select:all;padding:.75rem;border:2px solid var(--base);background-color:var(--base-200);word-break:break-all}.integration details+details{margin-top:1rem}.integration .actions{margin-top:1rem}.hasChanges button[data-action=save_credentials]{border-color:var(--warning);animation:pulse-color 1s infinite;animation-delay:1s}.flash{animation:flash .5s}.flash.connected{--b:var(--success)}.flash.disconnected{--b:var(--error)}.flash.syncing{--b:var(--success)}.flash.error,.flash.hasChanges{--b:var(--warning)}@keyframes flash{0%,100%{border-color:inherit}50%{border-color:var(--b)}}.location.field{width:80vw}.location.field>p{text-align:center}.location.field>p+p{margin:0 .5rem 0 0}.location.field .location-map{height:20vh}.location.field .location-links{padding:.5rem 0;display:flex;justify-content:space-evenly}.field.upload [data-upload-id],.item-grid .item{touch-action:none}.empty-state{grid-column:1/-1;padding:1rem 10vw;margin:0 10vw;border-radius:var(--radius-outer);background-color:var(--base-100)}.jvb-oauth-connect{position:relative;transition:opacity .2s}.jvb-oauth-connect.loading{opacity:.6;pointer-events:none}.jvb-oauth-connect.loading::after{content:'';position:absolute;right:-30px;top:50%;transform:translateY(-50%);width:16px;height:16px;border:2px solid #ccc;border-top-color:#0073aa;border-radius:50%;animation:oauth-spin .8s linear infinite}@keyframes oauth-spin{to{transform:translateY(-50%) rotate(360deg)}}.integration-status-message{padding:12px 16px;margin:16px 0;border-radius:4px;display:none;font-size:14px;line-height:1.5}.integration-status-message.success{display:block;background:#d4edda;color:#155724;border-left:4px solid #28a745}.integration-status-message.error{display:block;background:#f8d7da;color:#721c24;border-left:4px solid #dc3545}.integration-status-message.info{display:block;background:#d1ecf1;color:#0c5460;border-left:4px solid #17a2b8}.connection-status{display:inline-flex;align-items:center;gap:8px;padding:6px 12px;border-radius:4px;font-size:13px;font-weight:500}.connection-status.connected{background:#d4edda;color:#155724}.connection-status.disconnected{background:#f8d7da;color:#721c24}.status-indicator{font-size:10px;line-height:1}.connection-status.connected .status-indicator{color:#28a745}.connection-status.disconnected .status-indicator{color:#dc3545}.referral-dashboard{max-width:var(--wide)}.card{background-color:var(--base-100);padding:30px;border-radius:var(--radius-outer);text-align:center;margin-bottom:2rem}.dashboard-page.referral{text-align:center}.referral-dashboard .empty-state{padding:3rem 7vw}.referral-dashboard .empty-state h3{margin-top:0}.referral-dashboard .empty-state h3 .icon:first-of-type{margin-right:1rem}.referral-dashboard .empty-state h3 .icon:last-of-type{margin-left:1rem}.item-grid.stats .card{border:1px solid var(--base);display:flex;justify-content:flex-end;align-items:center;flex-direction:column}.item-grid.stats .card.highlight{box-shadow:var(--contrast-rgb) var(--shadow);background-color:var(--action-200);color:var(--action-contrast);grid-column:1/-1;margin:0 4rem 30px;aspect-ratio:unset}.card h4{font-size:var(--medium);color:var(--contrast-200);font-weight:var(--fw-b-bold);margin:0 0 .5rem}.card span{color:var(--action-0);font-weight:var(--fw-b-bold);font-size:var(--txt-xx-large)}.card.highlight span{color:var(--action-contrast)}nav.sidebar{--wrap:nowrap;position:fixed;top:var(--btn);bottom:0;left:0;z-index:var(--z-4);height:calc(100% - var(--btn));background-color:var(--base);box-shadow:rgba(var(--base-rgb),var(--op-45)) var(--shdw);width:var(--btn);transition:var(--trans-size);overflow:hidden auto}nav.sidebar .icon{--w:var(--chip_);width:var(--btn);transition:var(--trans-size),margin var(--trans-base)}nav.sidebar.open{width:fit-content;max-width:100%}nav.sidebar.open .icon{--w:var(--chip);margin:.75rem;width:var(--w)}nav.sidebar ul{height:max-content;width:100%;--gap:0}nav.sidebar .title{display:block}nav.sidebar .toggle{width:var(--btn);height:var(--chipchip);box-shadow:none;background-color:transparent;min-height:0}nav.sidebar .toggle:focus,nav.sidebar .toggle:hover{background-color:var(--action-0);color:var(--action-contrast)}nav.sidebar .toggle.main{position:fixed;left:unset;bottom:0;right:0;width:var(--btn);height:var(--btn);z-index:var(--z-8);box-shadow:rgba(var(--base-rgb),var(--op-45)) var(--shdw)}nav.sidebar .title{white-space:nowrap}nav.sidebar li{--justify:center;flex-wrap:nowrap;overflow:hidden;align-items:flex-start}nav.sidebar.open li>div{width:100%;padding-right:var(--btn)}nav.sidebar.open li.has-submenu>div{padding-right:0}nav.sidebar.open li.has-submenu>ul{padding-left:var(--chip)}nav.sidebar .a{color:var(--contrast-200)}nav.sidebar .a,nav.sidebar a{height:var(--chipchip);display:flex;justify-content:center;align-items:center;transition:none;padding-left:0}nav.sidebar.open .a,nav.sidebar.open a{width:100%;justify-content:flex-start}nav.sidebar .has-submenu ul{max-height:0;height:0;overflow:hidden;transition:var(--trans-size)}nav.sidebar .has-submenu.open>ul{height:100%;max-height:fit-content}header .title,header .title a{height:var(--btn);margin:0;display:block}header .title{margin-left:var(--btn)}header .title a{width:var(--btn)}.dashboard #queue{bottom:0}
\ No newline at end of file
diff --git a/assets/css/nav.min.css b/assets/css/nav.min.css
index 910f637..fc73ebd 100644
--- a/assets/css/nav.min.css
+++ b/assets/css/nav.min.css
@@ -1 +1 @@
-nav,nav ol,nav ul{--padding:0 1rem;--wrap:nowrap;display:flex;flex-direction:var(--dir,row);justify-content:var(--justify,flex-start);align-items:var(--align,center);gap:var(--gap,0);flex-wrap:var(--wrap,nowrap);height:var(--btn,3rem);max-width:100%;font-family:var(--heading);padding:0;margin:0}nav li{display:flex;align-items:center;height:max(var(--btn),max-content);width:100%;max-inline-size:none;padding:0}nav a,nav button{display:flex;text-decoration:none;align-items:center;justify-content:center;height:var(--btn);width:100%;white-space:nowrap;text-transform:uppercase;transition:var(--trans-color)}nav a{height:var(--btn);padding:var(--padding)}nav button{justify-content:center;aspect-ratio:1;padding:0;border:2px solid var(--base);color:var(--contrast);border-radius:0}nav .current a,nav a.current,nav a:focus,nav a:focus:visited,nav a:hover,nav button:focus{background-color:var(--action-0);color:var(--action-contrast)}.toggle .icon{transform:rotate(0);transition:transform var(--trans-base)}.has-submenu.open>button .icon{transform:rotate(900deg)}.has-submenu{position:relative}ul.submenu{--dir:column;height:max-content;position:absolute;top:100%;left:0;max-height:0;transform:scaleY(0);transform-origin:top;width:max(100%,max-content);background-color:rgba(var(--base-rgb),var(--op-3));border:2px solid rgba(var(--base-rgb),var(--op-3));transition:all var(--trans-t) var(--trans-fn);box-shadow:var(--shdw-none);overflow:hidden}.submenu li{background-color:rgba(var(--base-rgb),var(--op-6));border:1px solid var(--base-50)}.open>ul.submenu{transform:scaleY(1);max-height:1000%;box-shadow:rgba(var(--base-rgb),var(--op-45)) var(--shdw)}.screen-reader-text{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}nav a:focus:not(:focus-visible){outline:0}nav a:focus-visible{outline:2px solid var(--action-0);outline-offset:2px}nav.always{--dir:column;--wrap:nowrap;position:fixed;bottom:0;right:0;width:var(--btn);z-index:var(--z-10)}nav.always.open{--justify:flex-end;width:100vw;height:100vh;padding-bottom:var(--btn_);background-color:rgba(var(--base-rgb),var(--op-6));backdrop-filter:blur(5px)}nav.always>ul{--dir:column;--align:center;--justify:flex-start;--gap:0;height:100%;position:relative;right:-300vw;width:100vw;max-height:100%;padding:1rem 0 0;overflow:hidden auto;transition:right var(--trans-base)}nav.always.open>ul{right:0}nav.always li{flex-wrap:wrap;background-color:rgba(var(--base-rgb),var(--op-6))}nav.always a{padding:1rem;max-width:calc(100% - var(--btn));text-align:center}nav.always .has-submenu{display:flex}nav.always .has-submenu>a{flex:1}nav.always .has-submenu>button{flex:0 0 var(--btn)}nav.always .submenu{position:relative;padding-right:4rem;height:max-content;top:0;width:100%;border:2px solid var(--action-0);background-color:rgba(var(--contrast-rgb),var(--op-1))}nav.always .submenu li{background-color:rgba(var(--base-rgb),var(--op-3))}nav.always>button{position:fixed;bottom:0;right:0;width:var(--btn);height:var(--btn);background-color:var(--base);color:var(--contrast);box-shadow:rgba(var(--base-rgb),var(--op-45)) var(--shdw);transition:width var(--trans-base)}nav.always>button:hover{background-color:var(--action-0);color:var(--action-contrast)}nav.always.open>button{width:100%;background-color:rgba(var(--base-rgb),var(--op-6));backdrop-filter:blur(5px);z-index:1000000}nav.always.open>button .icon-list,nav.always>button .icon-x{display:none}nav.always.open>button .icon-x,nav.always>button .icon-list{display:block;width:32px;height:32px}@media (min-width:768px){nav.always>ul{padding-top:var(--btn)}}nav#breadcrumbs{height:max-content;--wrap:wrap;--gap:0;width:max-content;max-width:var(--full);position:absolute;background-color:rgba(var(--base-rgb),var(--op-4));font-size:var(--txt-x-small);padding:.125em;z-index:var(--z-7)}#breadcrumbs ol{height:max-content;--wrap:wrap!important;--justify:flex-start!important}#breadcrumbs li{width:max-content}#breadcrumbs a{height:var(--chip)}#breadcrumbs li::after{content:'/';color:var(--contrast-200);padding:0 .25rem}#breadcrumbs li:last-of-type::after{display:none}#breadcrumbs :is(a,span){padding:0 .125rem;color:var(--contrast);text-transform:none}#breadcrumbs a:focus{background-color:transparent;color:var(--action-0)}nav.fixed.bottom{position:fixed;bottom:0;left:0;width:calc(100% - var(--btn));box-shadow:rgba(var(--base-rgb),var(--op-45)) var(--shdw);z-index:var(--z-9)}nav.fixed.bottom ul{--justify:space-between;width:100%;background-color:var(--base);padding:0 .25rem}nav.fixed.bottom li{flex:1;justify-content:center}nav.fixed.bottom a{gap:1rem;--w:var(--chip_);color:var(--contrast);font-size:var(--txt-x-small)}@media (min-width:768px){nav.fixed.bottom a{font-size:var(--txt-medium)}}nav.on-this-page{--justify:space-between;position:fixed;bottom:0;left:0;width:calc(100% - var(--btn));max-width:none;padding:0 .5rem;background-color:rgba(var(--base-rgb),var(--op-4));color:var(--base-200);box-shadow:rgba(var(--base-rgb),var(--op-45)) var(--shdw);z-index:var(--z-6)}.on-this-page a,.on-this-page li{width:100%;height:100%}body:has(nav.fixed) nav.on-this-page{bottom:var(--btn)}body:has(.additional-actionsbutton) nav.on-this-page{width:calc(100vw - var(--btn_) - 1rem)}.on-this-page button{order:3;padding:0 1rem;width:max-content;aspect-ratio:unset;height:var(--btn)}.on-this-page.open button{order:0}.on-this-page ul{width:100%;gap:0}.on-this-page li{justify-content:center}.on-this-page .active a{background-color:rgba(var(--base-rgb),var(--op-6));color:var(--action-contrast)}.on-this-page a{padding:0}.on-this-page #back-to-top span{display:none}.on-this-page.open #back-to-top span{display:block}nav.letters li{height:var(--chip);max-width:calc(7.69% - 2px)}nav.letters ul{--wrap:wrap}nav.letters,nav.letters ul{height:var(--chipchip)}@media (min-width:768px){nav.letters,nav.letters ul{height:var(--chip)}nav.letters ul{--wrap:nowrap}nav.letters li{max-width:none}nav.letters a{padding:.25rem .66rem}}nav.index{--justify:space-between;--padding:0;background-color:rgba(var(--base-rgb),var(--op-6))}.index ul{width:100%}.index li{flex-shrink:0;transform:scaleX(0);max-width:0;overflow:hidden}.index li.active,.index li.adj{transform:scaleX(1);width:calc(100% - var(--btn_));flex-shrink:1;max-width:none}.index li:first-of-type{flex-shrink:1;transform:scaleX(1);order:9999;width:var(--btn);height:var(--btn);max-width:none}@media (max-width:767px){.index li.adj{transform:scaleX(0);max-width:0}}.index a{border-bottom:4px solid transparent}.index .active a{border-color:var(--action-0);color:var(--contrast)}.index.open{--dir:column-reverse;height:var(--maxHeight);width:100%;align-items:flex-end;background-color:rgba(var(--base-rgb),var(--op-6));backdrop-filter:blur(5px);z-index:var(--z-10)}.index.open ul{--dir:column;--justify:flex-end;height:100%;width:100%}.index.open li{width:100%;height:var(--btn);max-width:100%!important;transform:scaleX(1);overflow:visible}.index.open a{justify-content:flex-end;padding:0 2rem 0 0;background-color:transparent}nav.condensed{height:max-content;--wrap:wrap;--gap:0 .25rem}nav.condensed ul{min-height:var(--chip_);height:max-content;--justify:center;--wrap:wrap}.condensed li{width:max-content;min-height:var(--chip)}.condensed li+li::before{content:'·';padding:0 .25em}.condensed a{height:max-content;min-height:var(--chip);font-size:var(--txt-x-small);padding:0 .25rem;text-transform:none;border-bottom:2px solid transparent}.condensed a:focus{border-color:var(--action-0)}ul.socials{--dir:row;height:max-content;--gap:.5rem;--justify:stretch;--wrap:nowrap;overflow:auto hidden;touch-action:pan-x}.always ul.socials,.always ul.socials a,.always ul.socials li{width:100%}ul.socials a{padding:.5rem;max-width:none}ul.socials .icon{margin:0}nav.tabs{position:fixed;bottom:var(--btn);left:var(--btnbtn);right:var(--btnbtn);padding-bottom:2px;z-index:var(--z-6);touch-action:pan-x pan-y;--wrap:nowrap;overflow:auto hidden}nav.tabs button{aspect-ratio:unset}nav.tabs button.active{cursor:default}nav.tabs button.active:hover{background-color:var(--base-100);color:var(--contrast)}nav.tabs button h2{--wrap:nowrap;margin:0;font-size:var(--txt-x-small)}.tab-content nav.tabs button{height:var(--chip_);padding:.25rem .75rem;min-height:0}.tab-content.active{padding:1rem 0}.tab-content h2{margin:0 0 .5rem}.tab-content nav.tabs{height:max-content;background-color:var(--base);--gap:0}.tab-content .tab-content nav.tabs{background-color:var(--base-100)}.tab-content .tab-content .tab-content nav.tabs{background-color:var(--base-200)}.tab-content nav.tabs button.active h2{color:var(--action-0)}nav.menu a{padding:.5rem .66rem}nav.share{height:max-content;margin:1rem 0}nav.share ul{overflow:visible}nav.share h4{display:inline-block;width:max-content;margin:.25rem .5rem .25rem 0;font-size:var(--txt-x-small)}:where(body>header,.wp-site-blocks>header){--dir:row;--justify:space-between;position:sticky;top:0;left:0;right:0;height:var(--btn);width:100vw;display:flex;align-items:center;padding:0 .5rem;background-color:var(--base);box-shadow:rgba(var(--base-rgb),var(--op-45)) var(--shdw);z-index:var(--z-9)}.wp-site-blocks>header img{width:var(--btn)}nav.term-navigation:has([hidden]){display:none}.dashboard-nav{--justify:flex-start;width:100%}nav.filters{--dir:row;--justify:flex-start;overflow:auto hidden}nav.filters .filter{width:auto;padding:.25rem .75rem}
\ No newline at end of file
+nav,nav ol,nav ul{--padding:0 1rem;--wrap:nowrap;display:flex;flex-direction:var(--dir,row);justify-content:var(--justify,flex-start);align-items:var(--align,center);gap:var(--gap,0);flex-wrap:var(--wrap,nowrap);height:var(--btn,3rem);max-width:100%;font-family:var(--heading);padding:0;margin:0}nav li{display:flex;align-items:center;height:max(var(--btn),max-content);width:100%;max-inline-size:none;padding:0}nav a,nav button{display:flex;text-decoration:none;align-items:center;justify-content:center;height:var(--btn);width:100%;white-space:nowrap;text-transform:uppercase;transition:var(--trans-color);border-radius:0;background-color:transparent}nav a{height:var(--btn);padding:var(--padding)}nav button{justify-content:center;aspect-ratio:1;padding:0;border:2px solid var(--base);color:var(--contrast);border-radius:0}nav .current a,nav a.current,nav a:focus,nav a:focus:visited,nav button:focus{background-color:var(--action-0);color:var(--action-contrast)}.toggle .icon-caret-down{transform:rotate(0);transition:transform var(--trans-base)}.has-submenu.open>button .icon-caret-down{transform:rotate(900deg)}.has-submenu{position:relative}ul.submenu{--dir:column;height:max-content;position:absolute;top:100%;right:0;max-height:0;transform:scaleY(0);transform-origin:top;width:100%;min-width:max-content;background-color:rgba(var(--base-rgb),var(--op-3));border:2px solid rgba(var(--base-rgb),var(--op-3));transition:all var(--trans-t) var(--trans-fn);box-shadow:var(--shdw-none);overflow:hidden}.submenu li{background-color:rgba(var(--base-rgb),var(--op-6));border:1px solid var(--base-50)}.submenu a{height:var(--chipchip)}.open>ul.submenu{transform:scaleY(1);max-height:1000%;box-shadow:rgba(var(--base-rgb),var(--op-45)) var(--shdw)}.screen-reader-text{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}nav a:focus:not(:focus-visible){outline:0}nav a:focus-visible{outline:2px solid var(--action-0);outline-offset:2px}nav.always{--dir:column;--wrap:nowrap;position:fixed;bottom:0;right:0;width:var(--btn);z-index:var(--z-10)}nav.always.open{--justify:flex-end;width:100vw;height:100vh;padding-bottom:var(--btn_);background-color:rgba(var(--base-rgb),var(--op-6));backdrop-filter:blur(5px)}nav.always>ul{--dir:column;--align:center;--justify:flex-start;--gap:0;height:100%;position:relative;right:-300vw;width:100vw;max-height:100%;padding:1rem 0 0;overflow:hidden auto;transition:right var(--trans-base)}nav.always.open>ul{right:0}nav.always li{flex-wrap:wrap;background-color:rgba(var(--base-rgb),var(--op-6))}nav.always a{padding:1rem;max-width:calc(100% - var(--btn));text-align:center}nav.always .has-submenu{display:flex}nav.always .has-submenu>a{flex:1}nav.always .has-submenu>button{flex:0 0 var(--btn)}nav.always .submenu{position:relative;padding-right:4rem;height:max-content;top:0;width:100%;border:2px solid var(--action-0);background-color:rgba(var(--contrast-rgb),var(--op-1))}nav.always .submenu li{background-color:rgba(var(--base-rgb),var(--op-3))}nav.always>button{position:fixed;bottom:0;right:0;width:var(--btn);height:var(--btn);background-color:var(--base);color:var(--contrast);box-shadow:rgba(var(--base-rgb),var(--op-45)) var(--shdw);transition:width var(--trans-base)}nav.always>button:hover{background-color:var(--action-0);color:var(--action-contrast)}nav.always.open>button{width:100%;background-color:rgba(var(--base-rgb),var(--op-6));backdrop-filter:blur(5px);z-index:1000000}nav.always.open>button .icon-list,nav.always>button .icon-x{display:none}nav.always.open>button .icon-x,nav.always>button .icon-list{display:block;width:32px;height:32px}@media (min-width:768px){nav.always>ul{padding-top:var(--btn)}}nav#breadcrumbs{height:max-content;--wrap:wrap;--gap:0;width:max-content;max-width:var(--full);position:absolute;background-color:rgba(var(--base-rgb),var(--op-4));font-size:var(--txt-x-small);padding:.125em;z-index:var(--z-7)}#breadcrumbs ol{height:max-content;--wrap:wrap!important;--justify:flex-start!important}#breadcrumbs li{width:max-content}#breadcrumbs a{height:var(--chip)}#breadcrumbs li::after{content:'/';color:var(--contrast-200);padding:0 .25rem}#breadcrumbs li:last-of-type::after{display:none}#breadcrumbs :is(a,span){padding:0 .125rem;color:var(--contrast);text-transform:none}#breadcrumbs a:focus{background-color:transparent;color:var(--action-0)}nav.fixed.bottom{position:fixed;bottom:0;left:0;width:calc(100% - var(--btn));box-shadow:rgba(var(--base-rgb),var(--op-45)) var(--shdw);z-index:var(--z-9)}nav.fixed.bottom ul{--justify:space-between;width:100%;background-color:var(--base);padding:0 .25rem}nav.fixed.bottom li{flex:1;justify-content:center}nav.fixed.bottom a{gap:1rem;--w:var(--chip_);color:var(--contrast);font-size:var(--txt-x-small)}@media (min-width:768px){nav.fixed.bottom a{font-size:var(--txt-medium)}}nav.on-this-page{--justify:space-between;position:fixed;bottom:0;left:0;width:calc(100% - var(--btn));max-width:none;padding:0 .5rem;background-color:rgba(var(--base-rgb),var(--op-4));color:var(--base-200);box-shadow:rgba(var(--base-rgb),var(--op-45)) var(--shdw);z-index:var(--z-6)}.on-this-page a,.on-this-page li{width:100%;height:100%}body:has(nav.fixed) nav.on-this-page{bottom:var(--btn)}body:has(.additional-actionsbutton) nav.on-this-page{width:calc(100vw - var(--btn_) - 1rem)}.on-this-page button{order:3;padding:0 1rem;width:max-content;aspect-ratio:unset;height:var(--btn)}.on-this-page.open button{order:0}.on-this-page ul{width:100%;gap:0}.on-this-page li{justify-content:center}.on-this-page .active a{background-color:rgba(var(--base-rgb),var(--op-6));color:var(--action-contrast)}.on-this-page a{padding:0}.on-this-page #back-to-top span{display:none}.on-this-page.open #back-to-top span{display:block}nav.letters li{height:var(--chip);max-width:calc(7.69% - 2px)}nav.letters ul{--wrap:wrap}nav.letters,nav.letters ul{height:var(--chipchip)}@media (min-width:768px){nav.letters,nav.letters ul{height:var(--chip)}nav.letters ul{--wrap:nowrap}nav.letters li{max-width:none}nav.letters a{padding:.25rem .66rem}}nav.index{--justify:space-between;--padding:0;background-color:rgba(var(--base-rgb),var(--op-6))}.index ul{width:100%}.index li{flex-shrink:0;transform:scaleX(0);max-width:0;overflow:hidden}.index li.active,.index li.adj{transform:scaleX(1);width:calc(100% - var(--btn_));flex-shrink:1;max-width:none}.index li:first-of-type{flex-shrink:1;transform:scaleX(1);order:9999;width:var(--btn);height:var(--btn);max-width:none}@media (max-width:767px){.index li.adj{transform:scaleX(0);max-width:0}}.index a{border-bottom:4px solid transparent}.index .active a{border-color:var(--action-0);color:var(--contrast)}.index.open{--dir:column-reverse;height:var(--maxHeight);width:100%;align-items:flex-end;background-color:rgba(var(--base-rgb),var(--op-6));backdrop-filter:blur(5px);z-index:var(--z-10)}.index.open ul{--dir:column;--justify:flex-end;height:100%;width:100%}.index.open li{width:100%;height:var(--btn);max-width:100%!important;transform:scaleX(1);overflow:visible}.index.open a{justify-content:flex-end;padding:0 2rem 0 0;background-color:transparent}nav.condensed{height:max-content;--wrap:wrap;--gap:0 .25rem}nav.condensed ul{min-height:var(--chip_);height:max-content;--justify:center;--wrap:wrap}.condensed li{width:max-content;min-height:var(--chip)}.condensed li+li::before{content:'·';padding:0 .25em}.condensed a{height:max-content;min-height:var(--chip);font-size:var(--txt-x-small);padding:0 .25rem;text-transform:none;border-bottom:2px solid transparent}.condensed a:focus{border-color:var(--action-0)}ul.socials{--dir:row;height:max-content;--gap:.5rem;--justify:stretch;--wrap:nowrap;overflow:auto hidden;touch-action:pan-x}.always ul.socials,.always ul.socials a,.always ul.socials li{width:100%}ul.socials a{padding:.5rem;max-width:none}ul.socials .icon{margin:0}nav.tabs{position:fixed;bottom:var(--btn);left:var(--btnbtn);right:var(--btnbtn);padding-bottom:2px;z-index:var(--z-6);touch-action:pan-x pan-y;--wrap:nowrap;overflow:auto hidden}nav.tabs button{aspect-ratio:unset}nav.tabs button.active{cursor:default}nav.tabs button.active:hover{background-color:var(--base-100);color:var(--contrast)}nav.tabs button h2{--wrap:nowrap;margin:0;font-size:var(--txt-x-small)}.tab-content nav.tabs button{height:var(--chip_);padding:.25rem .75rem;min-height:0}.tab-content.active{padding:1rem 0}.tab-content h2{margin:0 0 .5rem}.tab-content nav.tabs{height:max-content;background-color:var(--base);--gap:0}.tab-content .tab-content nav.tabs{background-color:var(--base-100)}.tab-content .tab-content .tab-content nav.tabs{background-color:var(--base-200)}.tab-content nav.tabs button.active h2{color:var(--action-0)}nav.menu a{padding:.5rem .66rem}nav.share{height:max-content;margin:1rem 0}nav.share ul{overflow:visible}nav.share h4{display:inline-block;width:max-content;margin:.25rem .5rem .25rem 0;font-size:var(--txt-x-small)}:where(body>header,.wp-site-blocks>header){--dir:row;--justify:space-between;position:sticky;top:0;left:0;right:0;height:var(--btn);width:100vw;display:flex;align-items:center;padding:0 .5rem;background-color:var(--base);box-shadow:rgba(var(--base-rgb),var(--op-45)) var(--shdw);z-index:var(--z-9)}.wp-site-blocks>header img{width:var(--btn)}nav.term-navigation:has([hidden]){display:none}.dashboard-nav{--justify:flex-start;width:100%}nav.filters{--dir:row;--justify:flex-start;overflow:auto hidden}nav.filters .filter{width:auto;padding:.25rem .75rem}
\ No newline at end of file
diff --git a/assets/js/concise/UtilityFunctions.js b/assets/js/concise/UtilityFunctions.js
index efbf22f..2731174 100644
--- a/assets/js/concise/UtilityFunctions.js
+++ b/assets/js/concise/UtilityFunctions.js
@@ -1010,3 +1010,28 @@
window.decodeHelper.innerHTML = text;
return window.decodeHelper.value;
}
+
+
+window.focusNextElement = function() {
+ //add all elements we want to include in our selection
+ var focussableElements =
+ 'a:not([disabled]), button:not([disabled]), input[type=text]:not([disabled]), [tabindex]:not([disabled]):not([tabindex="-1"])';
+ if (document.activeElement && document.activeElement.form) {
+ var focussable = Array.prototype.filter.call(
+ document.activeElement.form.querySelectorAll(focussableElements),
+ function (element) {
+ //check for visibility while always include the current activeElement
+ return (
+ element.offsetWidth > 0 ||
+ element.offsetHeight > 0 ||
+ element === document.activeElement
+ );
+ }
+ );
+ var index = focussable.indexOf(document.activeElement);
+ if (index > -1) {
+ var nextElement = focussable[index + 1] || focussable[0];
+ nextElement.focus();
+ }
+ }
+}
diff --git a/assets/js/concise/navigation.js b/assets/js/concise/navigation.js
index 73667cf..3a9550f 100644
--- a/assets/js/concise/navigation.js
+++ b/assets/js/concise/navigation.js
@@ -7,6 +7,9 @@
}
this.openNav = null;
+ this.openSubmenu = null;
+ this.releaseFocusTrap = null;
+ this.clicked = new Set();
this.initListeners();
}
@@ -20,8 +23,8 @@
this.counter++;
}
if (nav.querySelector('.submenu')) {
- nav.addEventListener('mouseenter', this.hoverOnListener);
- nav.addEventListener('mouseleave', this.hoverOffListener);
+ nav.addEventListener('mouseenter', this.handleHoverOn.bind(this));
+ nav.addEventListener('mouseleave', this.handleHoverOff.bind(this));
}
let [
@@ -39,14 +42,20 @@
submenus: submenus,
submenuToggles: submenuToggles
}
- this.navs.set(navID, elements);
this.counter++;
+ submenus.forEach(menu => {
+ menu.id = 'submenu-'+this.counter;
+ menu.addEventListener('mouseenter', this.handleHoverOn.bind(this));
+ menu.addEventListener('mouseleave', this.handleHoverOff.bind(this));
+ this.counter++;
+ });
+ this.navs.set(navID, elements);
});
}
initListeners() {
this.clickListener = this.handleClick.bind(this);
- this.escapeListener = this.handleEscape.bind(this);
+ this.keysListener = this.handleKeys.bind(this);
this.hoverOnListener = this.handleHoverOn.bind(this);
this.hoverOffListener = this.handleHoverOff.bind(this);
@@ -56,59 +65,144 @@
if (this.navs.size === 0) {
return;
}
- if (this.openNav && e.target.closest(`#${this.openNav}`) === null) {
- console.log('Closing nav', this.openNav);
- this.toggleNav(false, this.openNav);
- }
-
- // if (!e.target.closest(this.openNav)) {
- // console.log('Not closest nav ids');
- // console.log(this.navIDs());
- // return;
- // }
let toggle = e.target.closest('.toggle.main');
if (toggle) {
let nav = toggle.closest('nav');
- this.toggleNav(!nav.classList.contains('open'), nav.id);
+ let isOpening = !this.clicked.has(nav);
+ let shouldToggle = nav.classList.contains('open') !== isOpening;
+ if (shouldToggle) {
+ this.toggleNav(isOpening, nav.id);
+ }
+
+ if (isOpening) {
+ this.clicked.add(nav);
+ } else {
+ this.clicked.delete(nav);
+ }
+ return;
}
let submenuToggle = e.target.closest('[data-action="toggle-submenu"], .has-submenu .a')
if (submenuToggle) {
let li = submenuToggle.closest('li');
- this.toggleSubmenu(!li.classList.contains('open'), li);
- }
+ let isOpening = !this.clicked.has(li);
+ let shouldToggle = li.classList.contains('open') !== isOpening;
+ if (isOpening) {
+ this.clicked.add(li);
+ } else {
+ this.clicked.delete(li);
+ }
+ if (shouldToggle) {
+ this.toggleSubmenu(isOpening, li);
+ }
+ return;
+ }
+ if (!this.openNav) {
+ return;
+ }
+ let close = true;
+ for (let [navID, elements] of this.navs) {
+ if (e.target.closest('#'+navID)) {
+ close = false;
+ break;
+ }
+ }
+ if (close) {
+ this.toggleNav(false, this.openNav);
+ }
}
handleHoverOn(e) {
- let nav = e.target.closest('nav');
- if (nav) {
- this.toggleNav(true, nav.id);
+ let target = e.currentTarget;
+ if (this.clicked.has(target)) {
+ return;
}
- let submenu = e.target.closest('.has-submenu');
- if (submenu) {
- this.toggleSubmenu(true, submenu);
+ if (target.classList.contains('has-submenu')) {
+ this.toggleSubmenu(true, target);
+ } else if (target.tagName === 'NAV') {
+ if (!target.classList.contains('mobile')) {
+ this.toggleNav(true, target.id);
+ }
}
}
handleHoverOff(e) {
- let nav = e.target.closest('nav');
- if (nav) {
- this.toggleNav(false, nav.id);
+ let target = e.currentTarget;
+ if (this.clicked.has(target)) {
+ return;
}
- // let submenu = e.target.closest('.has-submenu');
- // if (submenu) {
- // this.toggleSubmenu(false, submenu);
- // }
+ if (target.classList.contains('has-submenu')) {
+ this.toggleSubmenu(false, target);
+ } else if (target.tagName === 'NAV') {
+ if (target.classList.contains('mobile')) {
+ return;
+ }
+ let nav = this.navs.get(target.id);
+ let shouldToggle = true;
+ for (let submenu of nav.submenus) {
+ if (this.clicked.has(submenu)) {
+ shouldToggle = false;
+ break;
+ }
+ }
+ if (shouldToggle) {
+ this.toggleNav(false, target.id);
+ }
+
+ }
}
- handleEscape(e) {
- if (this.openNav && e.key === 'Escape') {
- this.toggleNav(false, this.openNav);
+ handleKeys(e) {
+ if (!this.openNav) return;
+
+ switch (e.key) {
+ case 'Escape':
+ this.closeAll();
+ break;
+
+ case 'ArrowDown':
+ this.focusNextItem();
+ e.preventDefault();
+ break;
+
+ case 'ArrowUp':
+ this.focusPrevItem();
+ e.preventDefault();
+ break;
}
}
+ closeAll() {
+ let nav = this.navs.get(this.openNav);
+
+ if (nav && this.clicked.has(nav.nav)) {
+ this.clicked.delete(nav.nav);
+ }
+ this.toggleNav(false, this.openNav);
+ }
+
+ focusNextItem() {
+ const items = this.getFocusableItems();
+ const i = items.indexOf(document.activeElement);
+ const next = items[i + 1] || items[0];
+ next.focus();
+ }
+
+ focusPrevItem() {
+ const items = this.getFocusableItems();
+ const i = items.indexOf(document.activeElement);
+ const prev = items[i - 1] || items[items.length - 1];
+ prev.focus();
+ }
+
+ getFocusableItems() {
+ return Array.from(document.querySelectorAll(
+ 'nav.open a, nav.open button'
+ )).filter(el => !el.disabled && !el.closest('[hidden]') && !el.closest('[inert]'));
+ }
+
toggleNav(on, id) {
let nav = this.navs.get(id);
if (!nav) {
@@ -120,12 +214,20 @@
}
if (on) {
this.openNav = id;
- document.addEventListener('keydown', this.escapeListener);
+ document.addEventListener('keydown', this.keysListener);
+ if (nav.nav.classList.contains('mobile')) {
+ this.releaseFocusTrap = window.jvbA11y.trapFocus(nav.nav);
+ }
+
} else {
+ if (this.releaseFocusTrap) {
+ this.releaseFocusTrap();
+ this.releaseFocusTrap = null;
+ }
if (this.openNav === id) {
this.openNav = null;
}
- document.removeEventListener('keydown', this.escapeListener);
+ document.removeEventListener('keydown', this.keysListener);
if (!nav.nav.classList.contains('sidebar')) {
Array.from(nav.submenus).forEach(submenu => {
if(submenu.classList.contains('open')) {
@@ -133,17 +235,41 @@
}
});
}
+ Array.from(nav.submenus).forEach(submenu => {
+ if (this.clicked.has(submenu)) {
+ this.clicked.delete(submenu);
+ }
+ });
}
- nav.nav.ariaExpanded = on;
nav.nav.classList.toggle('open', on);
- nav.ariaHidden = !on;
+
+ if (nav.nav.classList.contains('mobile')) {
+ const content = nav.nav.querySelector(':scope > ul');
+ if (content) content.inert = !on;
+ }
+
+ nav.nav.setAttribute('aria-expanded', on);
if (on) {
nav.nav.querySelector('a:not(.skip-to-content)')?.focus();
}
+
}
toggleSubmenu(on, submenu) {
+ if (on && this.openSubmenu && this.openSubmenu !== submenu) {
+ this.toggleSubmenu(false, this.openSubmenu);
+ }
+
+ if (on) {
+ this.openSubmenu = submenu;
+ } else if (this.openSubmenu === submenu) {
+ this.openSubmenu = null;
+ }
+
+
+
+
let [
toggle,
firstLink
@@ -152,14 +278,22 @@
submenu.querySelector('a')
];
+ if (!on) {
+ toggle.focus();
+ }
+ const content = submenu.querySelector(':scope > ul');
+ if (content) content.inert = !on;
+ let label = toggle.getAttribute('aria-label');
+ window.jvbA11y.announce(on ? `${label} expanded` : `${label} collapsed`);
+
submenu.classList.toggle('open', on);
- submenu.ariaHidden = !on;
- toggle.ariaExpanded = on;
+ toggle.setAttribute('aria-expanded', on);
if (on && firstLink) {
firstLink.focus();
}
}
+
}
document.addEventListener('DOMContentLoaded', function() {
diff --git a/assets/js/min/navigation.min.js b/assets/js/min/navigation.min.js
index e3c382b..dd15d23 100644
--- a/assets/js/min/navigation.min.js
+++ b/assets/js/min/navigation.min.js
@@ -1 +1 @@
-(()=>{class e{constructor(){this.counter=0,this.initElements(),0!==this.navs.size&&(this.openNav=null,this.initListeners())}initElements(){this.navs=new Map,document.querySelectorAll("nav:has(.submenu), nav:has(.toggle)").forEach((e=>{let t=e.id;""===t&&(t=`nav-${this.counter}`,e.id=t,this.counter++),e.querySelector(".submenu")&&(e.addEventListener("mouseenter",this.hoverOnListener),e.addEventListener("mouseleave",this.hoverOffListener));let[s,n,i]=[e.querySelectorAll("nav .toggle"),e.querySelectorAll(".has-submenu"),e.querySelectorAll(".toggle:not(.main)")],a={nav:e,toggles:s,submenus:n,submenuToggles:i};this.navs.set(t,a),this.counter++}))}initListeners(){this.clickListener=this.handleClick.bind(this),this.escapeListener=this.handleEscape.bind(this),this.hoverOnListener=this.handleHoverOn.bind(this),this.hoverOffListener=this.handleHoverOff.bind(this),document.addEventListener("click",this.clickListener)}handleClick(e){if(0===this.navs.size)return;this.openNav&&null===e.target.closest(`#${this.openNav}`)&&(console.log("Closing nav",this.openNav),this.toggleNav(!1,this.openNav));let t=e.target.closest(".toggle.main");if(t){let e=t.closest("nav");this.toggleNav(!e.classList.contains("open"),e.id)}let s=e.target.closest('[data-action="toggle-submenu"], .has-submenu .a');if(s){let e=s.closest("li");this.toggleSubmenu(!e.classList.contains("open"),e)}}handleHoverOn(e){let t=e.target.closest("nav");t&&this.toggleNav(!0,t.id);let s=e.target.closest(".has-submenu");s&&this.toggleSubmenu(!0,s)}handleHoverOff(e){let t=e.target.closest("nav");t&&this.toggleNav(!1,t.id)}handleEscape(e){this.openNav&&"Escape"===e.key&&this.toggleNav(!1,this.openNav)}toggleNav(e,t){let s=this.navs.get(t);s&&(e&&t!==this.openNav&&this.toggleNav(!1,this.openNav),e?(this.openNav=t,document.addEventListener("keydown",this.escapeListener)):(this.openNav===t&&(this.openNav=null),document.removeEventListener("keydown",this.escapeListener),s.nav.classList.contains("sidebar")||Array.from(s.submenus).forEach((e=>{e.classList.contains("open")&&this.toggleSubmenu(!1,e)}))),s.nav.ariaExpanded=e,s.nav.classList.toggle("open",e),s.ariaHidden=!e,e&&s.nav.querySelector("a:not(.skip-to-content)")?.focus())}toggleSubmenu(e,t){let[s,n]=[t.querySelector(".toggle"),t.querySelector("a")];t.classList.toggle("open",e),t.ariaHidden=!e,s.ariaExpanded=e,e&&n&&n.focus()}}document.addEventListener("DOMContentLoaded",(function(){window.jvbNav=new e}))})();
\ No newline at end of file
+(()=>{class e{constructor(){this.counter=0,this.initElements(),0!==this.navs.size&&(this.openNav=null,this.openSubmenu=null,this.releaseFocusTrap=null,this.clicked=new Set,this.initListeners())}initElements(){this.navs=new Map,document.querySelectorAll("nav:has(.submenu), nav:has(.toggle)").forEach((e=>{let t=e.id;""===t&&(t=`nav-${this.counter}`,e.id=t,this.counter++),e.querySelector(".submenu")&&(e.addEventListener("mouseenter",this.handleHoverOn.bind(this)),e.addEventListener("mouseleave",this.handleHoverOff.bind(this)));let[s,n,i]=[e.querySelectorAll("nav .toggle"),e.querySelectorAll(".has-submenu"),e.querySelectorAll(".toggle:not(.main)")],a={nav:e,toggles:s,submenus:n,submenuToggles:i};this.counter++,n.forEach((e=>{e.id="submenu-"+this.counter,e.addEventListener("mouseenter",this.handleHoverOn.bind(this)),e.addEventListener("mouseleave",this.handleHoverOff.bind(this)),this.counter++})),this.navs.set(t,a)}))}initListeners(){this.clickListener=this.handleClick.bind(this),this.keysListener=this.handleKeys.bind(this),this.hoverOnListener=this.handleHoverOn.bind(this),this.hoverOffListener=this.handleHoverOff.bind(this),document.addEventListener("click",this.clickListener)}handleClick(e){if(0===this.navs.size)return;let t=e.target.closest(".toggle.main");if(t){let e=t.closest("nav"),s=!this.clicked.has(e);return e.classList.contains("open")!==s&&this.toggleNav(s,e.id),void(s?this.clicked.add(e):this.clicked.delete(e))}let s=e.target.closest('[data-action="toggle-submenu"], .has-submenu .a');if(s){let e=s.closest("li"),t=!this.clicked.has(e),n=e.classList.contains("open")!==t;return t?this.clicked.add(e):this.clicked.delete(e),void(n&&this.toggleSubmenu(t,e))}if(!this.openNav)return;let n=!0;for(let[t,s]of this.navs)if(e.target.closest("#"+t)){n=!1;break}n&&this.toggleNav(!1,this.openNav)}handleHoverOn(e){let t=e.currentTarget;this.clicked.has(t)||(t.classList.contains("has-submenu")?this.toggleSubmenu(!0,t):"NAV"===t.tagName&&(t.classList.contains("mobile")||this.toggleNav(!0,t.id)))}handleHoverOff(e){let t=e.currentTarget;if(!this.clicked.has(t))if(t.classList.contains("has-submenu"))this.toggleSubmenu(!1,t);else if("NAV"===t.tagName){if(t.classList.contains("mobile"))return;let e=this.navs.get(t.id),s=!0;for(let t of e.submenus)if(this.clicked.has(t)){s=!1;break}s&&this.toggleNav(!1,t.id)}}handleKeys(e){if(this.openNav)switch(e.key){case"Escape":this.closeAll();break;case"ArrowDown":this.focusNextItem(),e.preventDefault();break;case"ArrowUp":this.focusPrevItem(),e.preventDefault()}}closeAll(){let e=this.navs.get(this.openNav);e&&this.clicked.has(e.nav)&&this.clicked.delete(e.nav),this.toggleNav(!1,this.openNav)}focusNextItem(){const e=this.getFocusableItems(),t=e.indexOf(document.activeElement);(e[t+1]||e[0]).focus()}focusPrevItem(){const e=this.getFocusableItems(),t=e.indexOf(document.activeElement);(e[t-1]||e[e.length-1]).focus()}getFocusableItems(){return Array.from(document.querySelectorAll("nav.open a, nav.open button")).filter((e=>!e.disabled&&!e.closest("[hidden]")&&!e.closest("[inert]")))}toggleNav(e,t){let s=this.navs.get(t);if(s){if(e&&t!==this.openNav&&this.toggleNav(!1,this.openNav),e?(this.openNav=t,document.addEventListener("keydown",this.keysListener),s.nav.classList.contains("mobile")&&(this.releaseFocusTrap=window.jvbA11y.trapFocus(s.nav))):(this.releaseFocusTrap&&(this.releaseFocusTrap(),this.releaseFocusTrap=null),this.openNav===t&&(this.openNav=null),document.removeEventListener("keydown",this.keysListener),s.nav.classList.contains("sidebar")||Array.from(s.submenus).forEach((e=>{e.classList.contains("open")&&this.toggleSubmenu(!1,e)})),Array.from(s.submenus).forEach((e=>{this.clicked.has(e)&&this.clicked.delete(e)}))),s.nav.classList.toggle("open",e),s.nav.classList.contains("mobile")){const t=s.nav.querySelector(":scope > ul");t&&(t.inert=!e)}s.nav.setAttribute("aria-expanded",e),e&&s.nav.querySelector("a:not(.skip-to-content)")?.focus()}}toggleSubmenu(e,t){e&&this.openSubmenu&&this.openSubmenu!==t&&this.toggleSubmenu(!1,this.openSubmenu),e?this.openSubmenu=t:this.openSubmenu===t&&(this.openSubmenu=null);let[s,n]=[t.querySelector(".toggle"),t.querySelector("a")];e||s.focus();const i=t.querySelector(":scope > ul");i&&(i.inert=!e);let a=s.getAttribute("aria-label");window.jvbA11y.announce(e?`${a} expanded`:`${a} collapsed`),t.classList.toggle("open",e),s.setAttribute("aria-expanded",e),e&&n&&n.focus()}}document.addEventListener("DOMContentLoaded",(function(){window.jvbNav=new e}))})();
\ No newline at end of file
diff --git a/assets/js/min/utility.min.js b/assets/js/min/utility.min.js
index da00b2d..abfbcda 100644
--- a/assets/js/min/utility.min.js
+++ b/assets/js/min/utility.min.js
@@ -1 +1 @@
-(()=>{window.fade=function(e,t=!0){t?e.style.animation="fadeIn var(--transition-base)":(e.style.animation="fadeOut var(--transition-base)",window.debouncer.schedule(`remove-${e.dataset.id??e.id??e.className.replace(" ","-")}`,(()=>{e.remove()}),500))},window.formatTimeAgo=function(e,t="default"){const n=e instanceof Date?e:new Date(e),i=n-new Date,o=i<0,r=Math.floor(Math.abs(i)/1e3),a=Math.floor(r/60),s=Math.floor(a/60),l=Math.floor(s/24);if(0===a)return"Just now";let c="";if(r<10)c="a moment";else if(r<60)c="less than a minute";else if(a<5)c="a few minutes";else if(s<24)c=0===s?`${a} ${1===a?"minute":"minutes"}`:`about ${s} ${1===s?"hour":"hours"}`;else{if(!(l<7)){if("default"===t)return n.toLocaleDateString();const e={Y:n.getFullYear(),y:String(n.getFullYear()).slice(-2),F:n.toLocaleDateString("en-CA",{month:"long"}),M:n.toLocaleDateString("en-CA",{month:"short"}),m:String(n.getMonth()+1).padStart(2,"0"),n:n.getMonth()+1,d:String(n.getDate()).padStart(2,"0"),j:n.getDate(),D:n.toLocaleDateString("en-CA",{weekday:"short"}),l:n.toLocaleDateString("en-CA",{weekday:"long"}),H:String(n.getHours()).padStart(2,"0"),i:String(n.getMinutes()).padStart(2,"0"),s:String(n.getSeconds()).padStart(2,"0"),h:String(n.getHours()%12||12).padStart(2,"0"),g:n.getHours()%12||12,A:n.getHours()>=12?"PM":"AM",a:n.getHours()>=12?"pm":"am"};return t.replace(/[YyFMmnjDlHishgAa]/g,(t=>e[t]))}if(1===l)return o?"yesterday":"tomorrow";c=`about ${l} days`,c=`${l} ${1===l?"day":"days"}`}return o?`${c} ago`:`in ${c}`},window.uppercaseFirst=function(e){return e.charAt(0).toUpperCase()+e.slice(1)},window.templates=new Map,document.addEventListener("DOMContentLoaded",(()=>{window.loadTemplates()})),window.loadTemplates=function(){document.querySelectorAll("template").forEach((e=>{const t=Array.from(e.classList);if(t.length>0){const n=e.content.cloneNode(!0).firstElementChild;t.forEach((e=>{window.templates.has(e)||window.templates.set(e,n)}))}}))},window.getTemplate=function(e){return 0===window.templates.size&&window.loadTemplates(),!!window.templates.has(e)&&window.templates.get(e).cloneNode(!0)};window.jvbTemplates=new class{constructor(){this.templates=new Map,this.definitions=new Map}registerAll(e=document){e.querySelectorAll("template").forEach((e=>{e.classList.forEach((t=>{this.templates.has(t)||this.templates.set(t,e)}))}))}define(e,t={},n=null){this.definitions.set(e,{refs:t.refs||null,manyRefs:t.manyRefs||null,setup:t.setup||null,context:n})}create(e,t={}){const n=this.templates.get(e);if(!n)return console.warn(`[TemplateRegistry] Template "${e}" not found`),null;const i=n.content.cloneNode(!0).firstElementChild;if(!i)return null;const o=this.definitions.get(e),r=o?.refs?this.#e(i,o.refs):{},a=o?.manyRefs?this.#e(i,o.manyRefs,!1):{};return o?.setup?.({el:i,refs:r,manyRefs:a,data:t}),i}#e(e,t,n=!0){const i={};for(const[o,r]of Object.entries(t)){let t,a=!1;"string"==typeof r?t=r:(t=r.selector,a=!!r.required);const s=n?e.querySelector(t):e.querySelectorAll(t);a&&(n&&!s&&console.warn(`[TemplateRegistry] Required ref "${o}" not found: ${t}`),n||0!==s.length||console.warn(`[TemplateRegistry] Required manyRef "${o}" not found: ${t}`)),i[o]=n?s:Array.from(s)}return i}},document.addEventListener("DOMContentLoaded",(()=>{window.jvbTemplates.registerAll()})),window.icon=null,window.getIcon=function(e,t=""){if(void 0===e)return"";window.icon||(window.icon=document.createElement("i"),window.icon.className="icon",window.icon.ariaHidden=!0);let n=window.icon.cloneNode(!0);return t=""!==t&&["regular","bold","duotone","fill","light","thin"].includes("style")?`-${t.slice(0,2)}`:"",n.classList.add(`icon-${e}${t}`),n},window.formatNumber=function(e){return e.toString().replace(/\B(?=(\d{3})+(?!\d))/g,",")},window.formatPrice=function(e,t="CAD"){return new Intl.NumberFormat("en-CA",{style:"currency",currency:t}).format(e)},window.escapeHtml=function(e){return e?("string"==typeof e||e instanceof String||(e=String(e)),e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")):""},window.removeChildren=function(e){if(0!==e.children.length)for(;e.firstChild;)e.removeChild(e.firstChild)},window.formatDateRange=function(e,t){const n=new Date(e),i=new Date(t);return n.toDateString()===i.toDateString()?n.toLocaleDateString("en-CA",{year:"numeric",month:"short",day:"numeric"}):n.getMonth()===i.getMonth()&&n.getFullYear()===i.getFullYear()?`${n.toLocaleDateString("en-CA",{month:"short",day:"numeric"})} - ${i.getDate()}, ${i.getFullYear()}`:n.getFullYear()===i.getFullYear()?`${n.toLocaleDateString("en-CA",{month:"short",day:"numeric"})} - ${i.toLocaleDateString("en-CA",{month:"short",day:"numeric"})}, ${i.getFullYear()}`:`${n.toLocaleDateString("en-CA",{month:"short",day:"numeric",year:"numeric"})} - ${i.toLocaleDateString("en-CA",{month:"short",day:"numeric",year:"numeric"})}`},window.throttle=function(e,t=300){let n;return function(...i){n||(e.apply(this,i),n=!0,setTimeout((()=>n=!1),t))}},window.chunkIt=async function(e,t,n,i=10){const o=[];for(let t=0;t<e.length;t+=i)o.push(e.slice(t,t+i));for(const e of o){const i=document.createDocumentFragment();e.forEach((e=>{const n=t(e);n&&i.append(n)})),n(i),await new Promise((e=>requestAnimationFrame(e)))}},window.prefixInput=function(e,t,n=null,i=!1,o=!1){if(!e)return void console.warn("prefixInput called with null/undefined input");const r=e.id,a=i?t:`${t}${e.name}`;let s=null;s=n?n.querySelector(`label[for="${r}"]`):e.labels&&e.labels.length>0?e.labels[0]:"LABEL"===e.previousElementSibling?.tagName?e.previousElementSibling:"LABEL"===e.nextElementSibling?.tagName?e.nextElementSibling:e.closest("[data-field]")?.querySelector(`label[for="${r}"]`),s&&(s.htmlFor=a),e.id=a,o&&(e.name=a)},window.uppercaseFirst=function(e){return e.charAt(0).toUpperCase()+e.slice(1)},window.sanitizeHtml=function(e){const t=document.createElement("div");return t.textContent=e,t.innerHTML},window.generateID=function(e="jvb"){return`${e}_${Date.now()}_${Math.random().toString(36).slice(2,9)}`},window.showProgress=function(e,t,n,i="",o=""){const r=t<n;e.progress&&r&&window.fade(e.progress,!0);const a=n>0?t/n*100:0;e.fill&&(e.fill.style.width=`${a}%`),e.details&&(e.details.textContent=i),e.count&&(e.count.textContent=`${t}/${n}`),e.icon&&(e.icon.className=""===o?"icon":"icon icon-"+o),e.progress&&t===n&&window.fade(e.progress,!1)},window.formatDate=function(e){if(!e)return"";const t=new Date(e),n=new Date,i=Math.floor((n-t)/864e5);return i<1?"Today":i<2?"Yesterday":i<7?`${i} days ago`:t.toLocaleDateString()},window.getPluralContent=function(e){return"artwork"===e?"artwork":e+"s"},window.showToast=function(e,t="success",n={}){window.jvbNotifications.showToast(e,t,n)},window.dateFormatter=new Intl.DateTimeFormat("en-CA",{year:"numeric",month:"long",day:"numeric",hour:"2-digit",minute:"2-digit",second:"2-digit",timeZoneName:"short"}),window.formatDate=function(e){return e instanceof Date&&!isNaN(e)||(e=new Date(e)),window.dateFormatter.format(e)},window.typeText=function(e,t,n=50){return new Promise((i=>{e._typeInterval&&(clearInterval(e._typeInterval),delete e._typeInterval);let o=0;e.textContent="",e._typeInterval=setInterval((()=>{o<t.length?(e.textContent+=t.charAt(o),o++):(clearInterval(e._typeInterval),delete e._typeInterval,i())}),n)}))},window.eraseText=function(e,t=10){return new Promise((n=>{e._eraseInterval&&(clearInterval(e._eraseInterval),delete e._eraseInterval);let i=e.textContent,o=i.length;e._eraseInterval=setInterval((()=>{o>0?(o--,e.textContent=i.substring(0,o)):(clearInterval(e._eraseInterval),delete e._eraseInterval,n())}),t)}))},window.typeLoop=function(e,t,n=50,i=10,o=1e3,r=250){const a=e.id||e.dataset.typeKey||`type-${Date.now()}`;e.dataset.typeKey||(e.dataset.typeKey=a),e._stopTyping&&e._stopTyping();let s=!0;const l=function(){s=!1,e._typeInterval&&(clearInterval(e._typeInterval),delete e._typeInterval),e._eraseInterval&&(clearInterval(e._eraseInterval),delete e._eraseInterval)};return e._stopTyping=l,async function(){for(;s&&(await window.typeText(e,t,n),s)&&(await new Promise((e=>setTimeout(e,o))),s)&&(await window.eraseText(e,i),s);)await new Promise((e=>setTimeout(e,r)))}(),l},window.toCamelCase=function(e){return e.replace(/-([a-z])/g,(function(e){return e[1].toUpperCase()}))},window.targetCheck=function(e,t){return Array.isArray(t)&&(t=t.join(",")),"string"==typeof t&&(e.target.closest(t)??!1)},window.getDifferences={VALUE_CREATED:"created",VALUE_UPDATED:"updated",VALUE_DELETED:"deleted",VALUE_UNCHANGED:"unchanged",map:function(e,t){if(this.isFunction(e)||this.isFunction(t))throw"Invalid argument. Function given, object expected.";if(this.isFile(e)||this.isFile(t)){const n=this.compareFiles(e,t);return n===this.VALUE_UNCHANGED?null:{type:n,data:void 0===e?t:e}}if(this.isValue(e)||this.isValue(t)){const n=this.compareValues(e,t);if(n===this.VALUE_UNCHANGED)return null;let i;switch(n){case this.VALUE_CREATED:i=t;break;case this.VALUE_DELETED:i=this.getEmptyValue(e);break;case this.VALUE_UPDATED:default:i=t}return{type:n,data:i}}let n={},i=!1;for(let o in e)if(!this.isFunction(e[o])){let r;t&&void 0!==t[o]&&(r=t[o]);const a=this.map(e[o],r);null!==a&&(a.hasOwnProperty("type")&&a.hasOwnProperty("data")?n[o]=a.data:n[o]=a,i=!0)}if(t)for(let o in t)if(!this.isFunction(t[o])&&(void 0===e||void 0===e[o])){const e=this.map(void 0,t[o]);null!==e&&(e.hasOwnProperty("type")&&e.hasOwnProperty("data")?n[o]=e.data:n[o]=e,i=!0)}return i?n:null},getEmptyValue:function(e){return this.isArray(e)?[]:this.isObject(e)?{}:"number"==typeof e?0:"boolean"!=typeof e&&""},compareValues:function(e,t){return e===t||this.isDate(e)&&this.isDate(t)&&e.getTime()===t.getTime()?this.VALUE_UNCHANGED:void 0===e?this.VALUE_CREATED:void 0===t?this.VALUE_DELETED:this.VALUE_UPDATED},isFunction:function(e){return"[object Function]"===Object.prototype.toString.call(e)},isArray:function(e){return"[object Array]"===Object.prototype.toString.call(e)},isDate:function(e){return"[object Date]"===Object.prototype.toString.call(e)},isObject:function(e){return"[object Object]"===Object.prototype.toString.call(e)},isFile:function(e){return e instanceof File},isValue:function(e){return!this.isObject(e)&&!this.isArray(e)},compareFiles:function(e,t){return!this.isFile(e)&&this.isFile(t)?this.VALUE_CREATED:this.isFile(e)&&!this.isFile(t)?this.VALUE_DELETED:this.isFile(e)&&this.isFile(t)?e.name===t.name&&e.size===t.size&&e.type===t.type&&e.lastModified===t.lastModified?this.VALUE_UNCHANGED:this.VALUE_UPDATED:this.VALUE_UNCHANGED},merge:function(e,t){if(null==e)return t;if(null==t)return e;if(this.isFunction(e)||this.isFunction(t))return t;if(this.isFile(e)||this.isFile(t))return t;if(this.isValue(e)||this.isValue(t)||this.isArray(e)||this.isArray(t))return t;if(this.isObject(e)&&this.isObject(t)){let n={};for(let t in e)this.isFunction(e[t])||(n[t]=e[t]);for(let i in t)this.isFunction(t[i])||(void 0!==e[i]?n[i]=this.merge(e[i],t[i]):n[i]=t[i]);return n}return t}},window.deepMerge=function(e,t){return window.getDifferences.merge(e,t)},window.isInt=function(e){return!isNaN(parseInt(e))&&isFinite(e)},window.isNumeric=function(e){return!isNaN(parseFloat(e))&&isFinite(e)},window.uiFromSelectors=function(e,t=null,n=!1){let i={};for(let[o,r]of Object.entries(e))i[o]="object"==typeof r?window.uiFromSelectors(r,t):t?n?t.querySelectorAll(r):t.querySelector(r):n?document.querySelectorAll(r):document.querySelector(r);return i},window.sleep=async function(e=50){return new Promise((t=>setTimeout(t,e)))};window.debouncer=new class{constructor(){this.timeouts=new Map,window.addEventListener("beforeunload",(()=>this.cleanup()))}schedule(e,t,n=1e3){this.cancel(e),this.timeouts.set(e,setTimeout((()=>{t(),this.timeouts.delete(e)}),n))}cancel(e){this.timeouts.has(e)&&(clearTimeout(this.timeouts.get(e)),this.timeouts.delete(e))}cleanup(){for(let e of this.timeouts.values())clearTimeout(e);this.timeouts.clear()}};document.body;const e=document.documentElement,t=document.querySelector(".scroll-progress .bar");let n=window.scrollY||e.scrollTop||0,i=-1,o=!1,r=0;function a(){r=Math.max(0,e.scrollHeight-window.innerHeight)}function s(e){if(!t)return;const n=r>0?e/r:0,i=Math.max(0,Math.min(1,n));t.style.transform=`scaleX(${i})`}function l(){const t=window.scrollY||e.scrollTop||0;t>n?i=1:t<n&&(i=-1),n=t,document.body.classList.toggle("scroll-up",i<0&&t>0),s(t),o=!1}window.addEventListener("scroll",(()=>{o||(o=!0,requestAnimationFrame(l))}),{passive:!0}),window.addEventListener("resize",(()=>{window.debouncer.schedule("recalc-max-scroll",(()=>{a(),s(window.scrollY||e.scrollTop||0)}),20)})),a(),s(n),window.decodeHTMLEntities=function(e){return window.decodeHelper||(window.decodeHelper=document.createElement("textarea")),window.decodeHelper.innerHTML=e,window.decodeHelper.value}})();
\ No newline at end of file
+(()=>{window.fade=function(e,t=!0){t?e.style.animation="fadeIn var(--transition-base)":(e.style.animation="fadeOut var(--transition-base)",window.debouncer.schedule(`remove-${e.dataset.id??e.id??e.className.replace(" ","-")}`,(()=>{e.remove()}),500))},window.formatTimeAgo=function(e,t="default"){const n=e instanceof Date?e:new Date(e),i=n-new Date,o=i<0,r=Math.floor(Math.abs(i)/1e3),a=Math.floor(r/60),s=Math.floor(a/60),l=Math.floor(s/24);if(0===a)return"Just now";let c="";if(r<10)c="a moment";else if(r<60)c="less than a minute";else if(a<5)c="a few minutes";else if(s<24)c=0===s?`${a} ${1===a?"minute":"minutes"}`:`about ${s} ${1===s?"hour":"hours"}`;else{if(!(l<7)){if("default"===t)return n.toLocaleDateString();const e={Y:n.getFullYear(),y:String(n.getFullYear()).slice(-2),F:n.toLocaleDateString("en-CA",{month:"long"}),M:n.toLocaleDateString("en-CA",{month:"short"}),m:String(n.getMonth()+1).padStart(2,"0"),n:n.getMonth()+1,d:String(n.getDate()).padStart(2,"0"),j:n.getDate(),D:n.toLocaleDateString("en-CA",{weekday:"short"}),l:n.toLocaleDateString("en-CA",{weekday:"long"}),H:String(n.getHours()).padStart(2,"0"),i:String(n.getMinutes()).padStart(2,"0"),s:String(n.getSeconds()).padStart(2,"0"),h:String(n.getHours()%12||12).padStart(2,"0"),g:n.getHours()%12||12,A:n.getHours()>=12?"PM":"AM",a:n.getHours()>=12?"pm":"am"};return t.replace(/[YyFMmnjDlHishgAa]/g,(t=>e[t]))}if(1===l)return o?"yesterday":"tomorrow";c=`about ${l} days`,c=`${l} ${1===l?"day":"days"}`}return o?`${c} ago`:`in ${c}`},window.uppercaseFirst=function(e){return e.charAt(0).toUpperCase()+e.slice(1)},window.templates=new Map,document.addEventListener("DOMContentLoaded",(()=>{window.loadTemplates()})),window.loadTemplates=function(){document.querySelectorAll("template").forEach((e=>{const t=Array.from(e.classList);if(t.length>0){const n=e.content.cloneNode(!0).firstElementChild;t.forEach((e=>{window.templates.has(e)||window.templates.set(e,n)}))}}))},window.getTemplate=function(e){return 0===window.templates.size&&window.loadTemplates(),!!window.templates.has(e)&&window.templates.get(e).cloneNode(!0)};window.jvbTemplates=new class{constructor(){this.templates=new Map,this.definitions=new Map}registerAll(e=document){e.querySelectorAll("template").forEach((e=>{e.classList.forEach((t=>{this.templates.has(t)||this.templates.set(t,e)}))}))}define(e,t={},n=null){this.definitions.set(e,{refs:t.refs||null,manyRefs:t.manyRefs||null,setup:t.setup||null,context:n})}create(e,t={}){const n=this.templates.get(e);if(!n)return console.warn(`[TemplateRegistry] Template "${e}" not found`),null;const i=n.content.cloneNode(!0).firstElementChild;if(!i)return null;const o=this.definitions.get(e),r=o?.refs?this.#e(i,o.refs):{},a=o?.manyRefs?this.#e(i,o.manyRefs,!1):{};return o?.setup?.({el:i,refs:r,manyRefs:a,data:t}),i}#e(e,t,n=!0){const i={};for(const[o,r]of Object.entries(t)){let t,a=!1;"string"==typeof r?t=r:(t=r.selector,a=!!r.required);const s=n?e.querySelector(t):e.querySelectorAll(t);a&&(n&&!s&&console.warn(`[TemplateRegistry] Required ref "${o}" not found: ${t}`),n||0!==s.length||console.warn(`[TemplateRegistry] Required manyRef "${o}" not found: ${t}`)),i[o]=n?s:Array.from(s)}return i}},document.addEventListener("DOMContentLoaded",(()=>{window.jvbTemplates.registerAll()})),window.icon=null,window.getIcon=function(e,t=""){if(void 0===e)return"";window.icon||(window.icon=document.createElement("i"),window.icon.className="icon",window.icon.ariaHidden=!0);let n=window.icon.cloneNode(!0);return t=""!==t&&["regular","bold","duotone","fill","light","thin"].includes("style")?`-${t.slice(0,2)}`:"",n.classList.add(`icon-${e}${t}`),n},window.formatNumber=function(e){return e.toString().replace(/\B(?=(\d{3})+(?!\d))/g,",")},window.formatPrice=function(e,t="CAD"){return new Intl.NumberFormat("en-CA",{style:"currency",currency:t}).format(e)},window.escapeHtml=function(e){return e?("string"==typeof e||e instanceof String||(e=String(e)),e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")):""},window.removeChildren=function(e){if(0!==e.children.length)for(;e.firstChild;)e.removeChild(e.firstChild)},window.formatDateRange=function(e,t){const n=new Date(e),i=new Date(t);return n.toDateString()===i.toDateString()?n.toLocaleDateString("en-CA",{year:"numeric",month:"short",day:"numeric"}):n.getMonth()===i.getMonth()&&n.getFullYear()===i.getFullYear()?`${n.toLocaleDateString("en-CA",{month:"short",day:"numeric"})} - ${i.getDate()}, ${i.getFullYear()}`:n.getFullYear()===i.getFullYear()?`${n.toLocaleDateString("en-CA",{month:"short",day:"numeric"})} - ${i.toLocaleDateString("en-CA",{month:"short",day:"numeric"})}, ${i.getFullYear()}`:`${n.toLocaleDateString("en-CA",{month:"short",day:"numeric",year:"numeric"})} - ${i.toLocaleDateString("en-CA",{month:"short",day:"numeric",year:"numeric"})}`},window.throttle=function(e,t=300){let n;return function(...i){n||(e.apply(this,i),n=!0,setTimeout((()=>n=!1),t))}},window.chunkIt=async function(e,t,n,i=10){const o=[];for(let t=0;t<e.length;t+=i)o.push(e.slice(t,t+i));for(const e of o){const i=document.createDocumentFragment();e.forEach((e=>{const n=t(e);n&&i.append(n)})),n(i),await new Promise((e=>requestAnimationFrame(e)))}},window.prefixInput=function(e,t,n=null,i=!1,o=!1){if(!e)return void console.warn("prefixInput called with null/undefined input");const r=e.id,a=i?t:`${t}${e.name}`;let s=null;s=n?n.querySelector(`label[for="${r}"]`):e.labels&&e.labels.length>0?e.labels[0]:"LABEL"===e.previousElementSibling?.tagName?e.previousElementSibling:"LABEL"===e.nextElementSibling?.tagName?e.nextElementSibling:e.closest("[data-field]")?.querySelector(`label[for="${r}"]`),s&&(s.htmlFor=a),e.id=a,o&&(e.name=a)},window.uppercaseFirst=function(e){return e.charAt(0).toUpperCase()+e.slice(1)},window.sanitizeHtml=function(e){const t=document.createElement("div");return t.textContent=e,t.innerHTML},window.generateID=function(e="jvb"){return`${e}_${Date.now()}_${Math.random().toString(36).slice(2,9)}`},window.showProgress=function(e,t,n,i="",o=""){const r=t<n;e.progress&&r&&window.fade(e.progress,!0);const a=n>0?t/n*100:0;e.fill&&(e.fill.style.width=`${a}%`),e.details&&(e.details.textContent=i),e.count&&(e.count.textContent=`${t}/${n}`),e.icon&&(e.icon.className=""===o?"icon":"icon icon-"+o),e.progress&&t===n&&window.fade(e.progress,!1)},window.formatDate=function(e){if(!e)return"";const t=new Date(e),n=new Date,i=Math.floor((n-t)/864e5);return i<1?"Today":i<2?"Yesterday":i<7?`${i} days ago`:t.toLocaleDateString()},window.getPluralContent=function(e){return"artwork"===e?"artwork":e+"s"},window.showToast=function(e,t="success",n={}){window.jvbNotifications.showToast(e,t,n)},window.dateFormatter=new Intl.DateTimeFormat("en-CA",{year:"numeric",month:"long",day:"numeric",hour:"2-digit",minute:"2-digit",second:"2-digit",timeZoneName:"short"}),window.formatDate=function(e){return e instanceof Date&&!isNaN(e)||(e=new Date(e)),window.dateFormatter.format(e)},window.typeText=function(e,t,n=50){return new Promise((i=>{e._typeInterval&&(clearInterval(e._typeInterval),delete e._typeInterval);let o=0;e.textContent="",e._typeInterval=setInterval((()=>{o<t.length?(e.textContent+=t.charAt(o),o++):(clearInterval(e._typeInterval),delete e._typeInterval,i())}),n)}))},window.eraseText=function(e,t=10){return new Promise((n=>{e._eraseInterval&&(clearInterval(e._eraseInterval),delete e._eraseInterval);let i=e.textContent,o=i.length;e._eraseInterval=setInterval((()=>{o>0?(o--,e.textContent=i.substring(0,o)):(clearInterval(e._eraseInterval),delete e._eraseInterval,n())}),t)}))},window.typeLoop=function(e,t,n=50,i=10,o=1e3,r=250){const a=e.id||e.dataset.typeKey||`type-${Date.now()}`;e.dataset.typeKey||(e.dataset.typeKey=a),e._stopTyping&&e._stopTyping();let s=!0;const l=function(){s=!1,e._typeInterval&&(clearInterval(e._typeInterval),delete e._typeInterval),e._eraseInterval&&(clearInterval(e._eraseInterval),delete e._eraseInterval)};return e._stopTyping=l,async function(){for(;s&&(await window.typeText(e,t,n),s)&&(await new Promise((e=>setTimeout(e,o))),s)&&(await window.eraseText(e,i),s);)await new Promise((e=>setTimeout(e,r)))}(),l},window.toCamelCase=function(e){return e.replace(/-([a-z])/g,(function(e){return e[1].toUpperCase()}))},window.targetCheck=function(e,t){return Array.isArray(t)&&(t=t.join(",")),"string"==typeof t&&(e.target.closest(t)??!1)},window.getDifferences={VALUE_CREATED:"created",VALUE_UPDATED:"updated",VALUE_DELETED:"deleted",VALUE_UNCHANGED:"unchanged",map:function(e,t){if(this.isFunction(e)||this.isFunction(t))throw"Invalid argument. Function given, object expected.";if(this.isFile(e)||this.isFile(t)){const n=this.compareFiles(e,t);return n===this.VALUE_UNCHANGED?null:{type:n,data:void 0===e?t:e}}if(this.isValue(e)||this.isValue(t)){const n=this.compareValues(e,t);if(n===this.VALUE_UNCHANGED)return null;let i;switch(n){case this.VALUE_CREATED:i=t;break;case this.VALUE_DELETED:i=this.getEmptyValue(e);break;case this.VALUE_UPDATED:default:i=t}return{type:n,data:i}}let n={},i=!1;for(let o in e)if(!this.isFunction(e[o])){let r;t&&void 0!==t[o]&&(r=t[o]);const a=this.map(e[o],r);null!==a&&(a.hasOwnProperty("type")&&a.hasOwnProperty("data")?n[o]=a.data:n[o]=a,i=!0)}if(t)for(let o in t)if(!this.isFunction(t[o])&&(void 0===e||void 0===e[o])){const e=this.map(void 0,t[o]);null!==e&&(e.hasOwnProperty("type")&&e.hasOwnProperty("data")?n[o]=e.data:n[o]=e,i=!0)}return i?n:null},getEmptyValue:function(e){return this.isArray(e)?[]:this.isObject(e)?{}:"number"==typeof e?0:"boolean"!=typeof e&&""},compareValues:function(e,t){return e===t||this.isDate(e)&&this.isDate(t)&&e.getTime()===t.getTime()?this.VALUE_UNCHANGED:void 0===e?this.VALUE_CREATED:void 0===t?this.VALUE_DELETED:this.VALUE_UPDATED},isFunction:function(e){return"[object Function]"===Object.prototype.toString.call(e)},isArray:function(e){return"[object Array]"===Object.prototype.toString.call(e)},isDate:function(e){return"[object Date]"===Object.prototype.toString.call(e)},isObject:function(e){return"[object Object]"===Object.prototype.toString.call(e)},isFile:function(e){return e instanceof File},isValue:function(e){return!this.isObject(e)&&!this.isArray(e)},compareFiles:function(e,t){return!this.isFile(e)&&this.isFile(t)?this.VALUE_CREATED:this.isFile(e)&&!this.isFile(t)?this.VALUE_DELETED:this.isFile(e)&&this.isFile(t)?e.name===t.name&&e.size===t.size&&e.type===t.type&&e.lastModified===t.lastModified?this.VALUE_UNCHANGED:this.VALUE_UPDATED:this.VALUE_UNCHANGED},merge:function(e,t){if(null==e)return t;if(null==t)return e;if(this.isFunction(e)||this.isFunction(t))return t;if(this.isFile(e)||this.isFile(t))return t;if(this.isValue(e)||this.isValue(t)||this.isArray(e)||this.isArray(t))return t;if(this.isObject(e)&&this.isObject(t)){let n={};for(let t in e)this.isFunction(e[t])||(n[t]=e[t]);for(let i in t)this.isFunction(t[i])||(void 0!==e[i]?n[i]=this.merge(e[i],t[i]):n[i]=t[i]);return n}return t}},window.deepMerge=function(e,t){return window.getDifferences.merge(e,t)},window.isInt=function(e){return!isNaN(parseInt(e))&&isFinite(e)},window.isNumeric=function(e){return!isNaN(parseFloat(e))&&isFinite(e)},window.uiFromSelectors=function(e,t=null,n=!1){let i={};for(let[o,r]of Object.entries(e))i[o]="object"==typeof r?window.uiFromSelectors(r,t):t?n?t.querySelectorAll(r):t.querySelector(r):n?document.querySelectorAll(r):document.querySelector(r);return i},window.sleep=async function(e=50){return new Promise((t=>setTimeout(t,e)))};window.debouncer=new class{constructor(){this.timeouts=new Map,window.addEventListener("beforeunload",(()=>this.cleanup()))}schedule(e,t,n=1e3){this.cancel(e),this.timeouts.set(e,setTimeout((()=>{t(),this.timeouts.delete(e)}),n))}cancel(e){this.timeouts.has(e)&&(clearTimeout(this.timeouts.get(e)),this.timeouts.delete(e))}cleanup(){for(let e of this.timeouts.values())clearTimeout(e);this.timeouts.clear()}};document.body;const e=document.documentElement,t=document.querySelector(".scroll-progress .bar");let n=window.scrollY||e.scrollTop||0,i=-1,o=!1,r=0;function a(){r=Math.max(0,e.scrollHeight-window.innerHeight)}function s(e){if(!t)return;const n=r>0?e/r:0,i=Math.max(0,Math.min(1,n));t.style.transform=`scaleX(${i})`}function l(){const t=window.scrollY||e.scrollTop||0;t>n?i=1:t<n&&(i=-1),n=t,document.body.classList.toggle("scroll-up",i<0&&t>0),s(t),o=!1}window.addEventListener("scroll",(()=>{o||(o=!0,requestAnimationFrame(l))}),{passive:!0}),window.addEventListener("resize",(()=>{window.debouncer.schedule("recalc-max-scroll",(()=>{a(),s(window.scrollY||e.scrollTop||0)}),20)})),a(),s(n),window.decodeHTMLEntities=function(e){return window.decodeHelper||(window.decodeHelper=document.createElement("textarea")),window.decodeHelper.innerHTML=e,window.decodeHelper.value},window.focusNextElement=function(){if(document.activeElement&&document.activeElement.form){var e=Array.prototype.filter.call(document.activeElement.form.querySelectorAll('a:not([disabled]), button:not([disabled]), input[type=text]:not([disabled]), [tabindex]:not([disabled]):not([tabindex="-1"])'),(function(e){return e.offsetWidth>0||e.offsetHeight>0||e===document.activeElement})),t=e.indexOf(document.activeElement);if(t>-1)(e[t+1]||e[0]).focus()}}})();
\ No newline at end of file
diff --git a/base/Membership.php b/base/Membership.php
index 9032758..dd57219 100644
--- a/base/Membership.php
+++ b/base/Membership.php
@@ -1,5 +1,7 @@
<?php
namespace JVBase\base;
+use JVBase\registrar\Registrar;
+
/**
* JVB_MEMBERSHIP defines the structure of the directory
* Options include:
@@ -38,6 +40,7 @@
{
protected bool $member_content = true;
protected bool $invitable = false;
+ protected bool $member_verified = false;
protected array $can_invite = [];
protected bool $notifications = true;
protected bool $member_expires = false;
@@ -89,6 +92,35 @@
return false;
}
+ public function setInvitable(array $invitable):void
+ {
+ $users = Registrar::getRegistered('user');
+
+ $invitable = array_filter($invitable, function($role) use ($users) {
+ if (!in_array($role, $users)) {
+ error_log('[Membership]::set Invitable role '.$role.' does not exist.');
+ return false;
+ }
+ return true;
+ }, ARRAY_FILTER_USE_KEY);
+ $allowed = [];
+ foreach ($invitable as $inviter => $canInvites) {
+ $canInvites = array_filter($canInvites, function($role) use ($users){
+ if (!in_array($role, $users)) {
+ error_log('[Membership]::set Invitable role '.$role.' does not exist.');
+ return false;
+ }
+ return true;
+ });
+ if (!empty($canInvites)) {
+ $allowed[$inviter] = $canInvites;
+ }
+ }
+ if (!empty($allowed)) {
+ $this->can_invite = $allowed;
+ }
+ }
+
public function getInviters():array
{
return $this->can_invite;
@@ -102,6 +134,13 @@
return array_key_exists($role, $this->can_invite) ? $this->can_invite[$role] : [];
}
+ public function setApprovers(array $roles):void
+ {
+ $allowed = Registrar::getRegistered('users');
+ $this->can_approve = array_filter($roles, function($role) use ($allowed){
+ return in_array($role, $allowed);
+ });
+ }
public function getApprovers():array
{
return $this->can_approve;
@@ -113,6 +152,13 @@
}
+ public function setCanSeeForum(array $roles):void
+ {
+ $allowed = Registrar::getRegistered('users');
+ $this->member_only = array_filter($roles, function($role) use ($allowed){
+ return in_array($role, $allowed);
+ });
+ }
public function canSeeForum(string $role):bool
{
return $this->forum && (empty($this->member_only) || in_array($role, $this->member_only));
diff --git a/base/seo.php b/base/SchemaHelper.php
similarity index 75%
rename from base/seo.php
rename to base/SchemaHelper.php
index 5e12d47..6a329d5 100644
--- a/base/seo.php
+++ b/base/SchemaHelper.php
@@ -295,116 +295,3 @@
return $class;
}
}
-
-
-
-
-
-
-/**
- * JVB_SCHEMA: Site-wide schema configuration
- *
- * Structure:
- * - business: LocalBusiness/Organization for home page
- * - website: WebSite schema configuration
- * - actions: PotentialAction definitions
- * - attribution: Developer/maintainer info
- */
-
-
-/**
-JVB_CONTENT['artwork'] = [
- 'singular' => 'Artwork',
- 'plural' => 'Artworks',
- // ... other config
-
- 'seo' => [
- 'meta' => [
- 'title' => '{{post_title}} by {{linked_user.display_name}} | {{site_title}}',
- 'description' => '{{style.primary.name}} artwork by {{linked_user.display_name}}. {{short_bio|default:View this piece and more.}}',
- 'archive_title' => 'Artwork Gallery',
- 'archive_description' => 'Browse our collection of tattoo artwork and designs.',
- ],
- 'schema' => [
- 'type' => 'VisualArtwork',
- 'mappings' => [
- 'artform' => 'style.primary', // DefinedTerm from taxonomy
- 'creator' => 'linked_user', // Person from linked user
- 'image' => 'featured_image', // ImageObject
- 'artMedium' => 'medium.names:3', // Comma-separated term names
- ],
- 'overrides' => [
- 'inLanguage' => 'en',
- ]
- ]
- ]
-];
-
-JVB_CONTENT['artist'] = [
- 'singular' => 'Artist',
- 'plural' => 'Artists',
-
- 'seo' => [
- 'meta' => [
- 'title' => '{{post_title}} - {{artist_type|default:Tattoo Artist}} in {{city.primary.name|default:Edmonton}}',
- 'description' => '{{short_bio|truncate:155}}',
- ],
- 'schema' => [
- 'type' => 'Person',
- 'mappings' => [
- 'image' => 'image_portrait',
- 'jobTitle' => 'artist_type',
- 'worksFor' => 'shop.primary', // LocalBusiness reference
- 'knowsAbout' => 'style.names', // Array of style names
- 'areaServed' => 'city.primary.name',
- ]
- ]
- ]
-];
-
-JVB_TAXONOMY['shop'] = [
- 'singular' => 'Shop',
- 'plural' => 'Shops',
-
- 'seo' => [
- 'meta' => [
- 'title' => '{{term_name}} - Tattoo Shop in {{city.primary.name|default:Edmonton}}',
- 'description' => '{{tagline|default:Visit}} {{term_name}}. {{short_bio|truncate:120}}',
- ],
- 'schema' => [
- 'type' => 'TattooParlor', // or LocalBusiness
- 'mappings' => [
- 'address' => 'location',
- 'telephone' => 'phone',
- 'email' => 'email',
- 'openingHoursSpecification' => 'hours',
- 'image' => 'image',
- 'priceRange' => 'price_range',
- 'paymentAccepted' => 'payment_accepted',
- ],
- 'overrides' => [
- 'additionalTypeTrait' => 'https://schema.org/TattooParlor',
- ]
- ]
- ]
-];
-
-JVB_TAXONOMY['style'] = [
- 'singular' => 'Style',
- 'plural' => 'Styles',
-
- 'seo' => [
- 'meta' => [
- 'title' => '{{term_name}} Tattoos in Edmonton | {{site_title}}',
- 'description' => '{{tagline|default:Explore}} {{term_name}} tattoo artists and designs. {{characteristics|strip|truncate:100}}',
- ],
- 'schema' => [
- 'type' => 'DefinedTerm',
- 'mappings' => [
- 'alternateName' => 'alternate_name',
- ]
- ]
- ]
-];
-
-**/
diff --git a/base/Site.php b/base/Site.php
index dfdff4d..e082012 100644
--- a/base/Site.php
+++ b/base/Site.php
@@ -14,11 +14,21 @@
protected static Membership $membershipConfig;
protected static Site $instance;
protected static string $icons = 'regular';
+ /**
+ * @var array Dashboard config
+ */
+ protected static string $dashboardTitle;
/**
* @var bool $is_directory Whether this is a membership directory
*/
protected static bool $is_directory = false;
+ protected static string $directory_singular;
+ protected static string $directory_plural;
+ /**
+ * @var bool Whether to add a help menu to the header
+ */
+ protected static bool $help_menu = false;
/**
* @var bool $has_membership Whether this site has membership
*/
@@ -31,6 +41,7 @@
* @var bool $referrals Whether to implement a referral system, with rewards
*/
protected static bool $referrals = false;
+ protected static string $defaultReferralRole = BASE.'client';
/**
* @var bool $magic_link Whether users can login without a password
*/
@@ -200,35 +211,41 @@
}
return self::$membershipConfig;
}
+
+ public function setDashboardTitle(string $title):void
+ {
+ self::$dashboardTitle = $title;
+ }
+
+ public static function dashboardTitle():bool|string
+ {
+ return self::$dashboardTitle ?? false;
+ }
+
+ public function setDirectorySingular(string $title):void
+ {
+ self::$directory_singular = $title;
+ }
+ public static function getDirectorySingular():bool|string
+ {
+ return self::$directory_singular ?? false;
+ }
+
+ public function setDirectoryPlural(string $title):void
+ {
+ self::$directory_plural = $title;
+ }
+ public static function getDirectoryPlural():bool|string
+ {
+ return self::$directory_plural ?? false;
+ }
+
+ public static function setDefaultReferralRole(string $role):void
+ {
+ self::$defaultReferralRole = $role;
+ }
+ public static function getDefaultReferralRole():string
+ {
+ return self::$defaultReferralRole;
+ }
}
-
-
-$defaults = [
- 'icons' => 'light',
- 'directory' => false, //as in, a membership directory
- 'membership' => false,
- 'has_map' => false, //TODO: migrate to integrations['gmb']
- 'dashboard' => false,
- 'support' => false,
- 'feed_block' => false,
- 'email_notifications' => false,
- 'integrations' => [
- 'bluesky' => false,
- 'cloudflare' => false,
- 'facebook' => false,
- 'maps' => false,
- 'gmb' => false,
- 'helcim' => false,
- 'instagram' => false,
- 'square' => false,
- 'umami' => false,
- ],
- 'is_restaurant' => false,
- 'limit_hours' => false,
- 'enthusiast' => false,
- 'favourites' => false, //optional flag to allow enthusiasts, but not favourites
-];
-
-$jvb_site = array_merge($defaults, apply_filters('jvb_site', []));
-
-define('JVB_SITE', $jvb_site);
diff --git a/base/_setup.php b/base/_setup.php
index 2edffb9..b8ec0e2 100644
--- a/base/_setup.php
+++ b/base/_setup.php
@@ -9,14 +9,14 @@
function jvbDefineSite() {
Site::getInstance();
}
-require(JVB_DIR.'/base/content.php');
+//require(JVB_DIR.'/base/content.php');
require(JVB_DIR.'/base/email.php');
-require(JVB_DIR.'/base/taxonomies.php');
-require(JVB_DIR.'/base/users.php');
+//require(JVB_DIR.'/base/taxonomies.php');
+//require(JVB_DIR.'/base/users.php');
require(JVB_DIR.'/base/Login.php');
require(JVB_DIR.'/base/Membership.php');
require(JVB_DIR.'/base/options.php');
-require(JVB_DIR.'/base/seo.php');
+require(JVB_DIR.'/base/SchemaHelper.php');
$base = apply_filters('jvb_base', 'jvb_');
$base = (str_ends_with($base, '_')) ? $base : $base.'_';
diff --git a/base/content.php b/base/content.php
index fb5f436..215c697 100644
--- a/base/content.php
+++ b/base/content.php
@@ -18,9 +18,9 @@
* - rewrites = (array) key = associated taxonomy; value = what to append to rewrite base
*/
$defaults = [];
-if (!empty(JVB_SITE) && array_key_exists('has_support', JVB_SITE) && JVB_SITE['has_support'] === true) {
- $defaults = array_merge($defaults, jvb_support_post_type());
-}
+//if (!empty(JVB_SITE) && array_key_exists('has_support', JVB_SITE) && JVB_SITE['has_support'] === true) {
+// $defaults = array_merge($defaults, jvb_support_post_type());
+//}
$content = array_merge($defaults, apply_filters('jvb_content', []));
define('JVB_CONTENT', $content);
diff --git a/base/users.php b/base/users.php
index c7abd64..02efdb4 100644
--- a/base/users.php
+++ b/base/users.php
@@ -25,25 +25,25 @@
*/
$defaults = [];
-if (array_key_exists('enthusiast', JVB_SITE) && JVB_SITE['enthusiast'] === true) {
- $defaults['enthusiast'] = [
- 'label' => 'Enthusiast',
- 'has_dashboard' => true,
- 'can_create' => [],
- 'can_register' => true,
- 'can_favourite' => true,
- 'keep_stats' => true,
- 'join_text' => 'Save your favourites. Get Notified.',
- 'join_title' => 'Welcome to the Scene.',
- 'join_description' => [
- 'Save your favourites for easy access',
- 'Get notified when your favourite artists add new content',
- 'Stay in the loop with local flash days and events',
- 'Discover styles and artists that match your vision'
- ],
- 'join_bonus' => '<strong>BONUS: </strong>Everything\'s free. And always will be. We work with partners vetted by the community to keep the lights on.',
- ];
-}
+//if (array_key_exists('enthusiast', JVB_SITE) && JVB_SITE['enthusiast'] === true) {
+// $defaults['enthusiast'] = [
+// 'label' => 'Enthusiast',
+// 'has_dashboard' => true,
+// 'can_create' => [],
+// 'can_register' => true,
+// 'can_favourite' => true,
+// 'keep_stats' => true,
+// 'join_text' => 'Save your favourites. Get Notified.',
+// 'join_title' => 'Welcome to the Scene.',
+// 'join_description' => [
+// 'Save your favourites for easy access',
+// 'Get notified when your favourite artists add new content',
+// 'Stay in the loop with local flash days and events',
+// 'Discover styles and artists that match your vision'
+// ],
+// 'join_bonus' => '<strong>BONUS: </strong>Everything\'s free. And always will be. We work with partners vetted by the community to keep the lights on.',
+// ];
+//}
$users = array_merge($defaults, apply_filters('jvb_user', []));
define('JVB_USER', $users);
diff --git a/checks.php b/checks.php
index d92ef49..6b55711 100644
--- a/checks.php
+++ b/checks.php
@@ -12,61 +12,28 @@
return (array_key_exists($key, $config) && $config[$key] === true);
}
-function jvbUserIsVerified():bool
-{
- $membership = Site::membership();
-
- return !($membership && $membership->has('member_verified')) || current_user_can('skip_moderation');
-}
-
function jvbUserTypes():array
{
- $types = get_option(BASE.'user_types');
- if (JVB_TESTING) {
- $types = false;
- }
- if ($types === false) {
- $types = [];
- foreach (JVB_USER as $type => $config) {
- if (array_key_exists('profile', $config)) {
- $types[$type] = BASE.$config['profile'];
- }
- }
- update_option(BASE.'user_types', $types);
- }
- return $types;
+ return Registrar::getFeatured('profile_link', 'user');
}
-function isJVBContentTax():bool
-{
- return is_tax(array_map(function ($tax) {
- return jvbCheckBase($tax);
- }, Registrar::getFeatured('is_content', 'term')));
-}
-function taxIsJVBContentTax($tax):bool
-{
- $allowed = Registrar::getFeatured('is_content', 'term');
- $tax = jvbNoBase($tax);
- return in_array($tax, $allowed);
-}
-
-function jvbIsOpen():bool
-{
-
- if (!jvbCheck('limit_hours', JVB_SITE)) {
- return true;
- }
- if (get_option(BASE.'open_to_public') !== '1') {
- return false;
- }
- //Check if today_hours is set
- if (get_option(BASE.'today_hours')) {
- return jvbIsTimeBetween();
- }
- //Default to the stored settings
- return jvbIsCurrentlyOpen();
-}
+//function jvbIsOpen():bool
+//{
+//
+// if (!jvbCheck('limit_hours', JVB_SITE)) {
+// return true;
+// }
+// if (get_option(BASE.'open_to_public') !== '1') {
+// return false;
+// }
+// //Check if today_hours is set
+// if (get_option(BASE.'today_hours')) {
+// return jvbIsTimeBetween();
+// }
+// //Default to the stored settings
+// return jvbIsCurrentlyOpen();
+//}
function jvbTermHasPosts(int $termID, string $taxonomy):bool
diff --git a/inc/admin/ContentTaxonomy.php b/inc/admin/ContentTaxonomy.php
index fcbca46..73476d4 100644
--- a/inc/admin/ContentTaxonomy.php
+++ b/inc/admin/ContentTaxonomy.php
@@ -6,7 +6,6 @@
}
use JVBase\registrar\Registrar;
-use JVBase\registry\TaxonomyRegistrar;
use WP_Error;
use Exception;
@@ -51,7 +50,7 @@
// Handle individual taxonomy rebuild
if (isset($_POST['rebuild_taxonomy']) && wp_verify_nonce($_POST['_wpnonce'], 'rebuild_taxonomy')) {
$taxonomy = sanitize_text_field($_POST['taxonomy']);
- $registrar = Registrar::getInstance($taxonomy));
+ $registrar = Registrar::getInstance($taxonomy);
if ($registrar && $registrar->hasFeature('is_content')) {
$results = $this->rebuildCustomTable($taxonomy);
// Store results in transient to display after redirect
@@ -324,7 +323,7 @@
];
// Check if this is a content taxonomy
- $registrar = Registrar::getInstance($taxonomy));
+ $registrar = Registrar::getInstance($taxonomy);
if (!$registrar->hasFeature('is_content')) {
$results['messages'][] = "Taxonomy {$taxonomy} is not a content taxonomy";
return $results;
diff --git a/inc/admin/_setup.php b/inc/admin/_setup.php
index da84e83..6ae125f 100644
--- a/inc/admin/_setup.php
+++ b/inc/admin/_setup.php
@@ -5,6 +5,10 @@
require(JVB_DIR . '/inc/admin/Integrations.php');
require(JVB_DIR . '/inc/admin/SEOAdmin.php');
-if (!empty(Registrar::getFeatured('is_content', 'term'))) {
- require(JVB_DIR . '/inc/admin/ContentTaxonomy.php');
+add_action('init', 'jvb_maybe_setup_content_taxonomy', 1);
+function jvb_maybe_setup_content_taxonomy(): void
+{
+ if (!empty(Registrar::getFeatured('is_content', 'term'))) {
+ require(JVB_DIR . '/inc/admin/ContentTaxonomy.php');
+ }
}
diff --git a/inc/blocks/CustomBlocks.php b/inc/blocks/CustomBlocks.php
index f0c0f9d..c68cdb5 100644
--- a/inc/blocks/CustomBlocks.php
+++ b/inc/blocks/CustomBlocks.php
@@ -4,6 +4,7 @@
use DateTime;
use DOMDocument;
use JVBase\managers\Cache;
+use JVBase\managers\SEO\BreadcrumbManager;
use WP_Block;
use WP_Query;
@@ -18,7 +19,7 @@
{
$this->cache = Cache::for('blocks', WEEK_IN_SECONDS);
$this->cache->connect('post')->connect('taxonomy');
- add_filter('render_block', [$this, 'render'], 900, 3);
+ add_filter('render_block', [$this, 'render'], 900, 2);
add_action('init', [$this, 'registerBlockStyles']);
}
@@ -64,7 +65,7 @@
);
}
- public function render(string $content, array $block, WP_Block $instance)
+ public function render(string $content, array $block)
{
$blockName = $this->sanitizeBlockName($block);
$method = 'render_'.$blockName;
@@ -344,7 +345,7 @@
'</h'.$level.'>';
}
- public function render_core_list(array $block):string
+ public function render_core_list(array $block, string $content):string
{
$tag = (array_key_exists('ordered', $block['attrs'])) ? 'ol' : 'ul';
return '<'.$tag.$this->getClassesAndStyles($block['attrs']).'>'.$this->innerBlocks($block).'</'.$tag.'>';
@@ -490,7 +491,7 @@
aria-expanded="false">'.
jvbIcon('list', ['title'=>'Toggle Menu']).
jvbIcon('x', ['title'=>'Toggle Menu']).
- '</button>';
+ '</button>';
$class = ($toggle === '') ?
$this->getClassesAndStyles($block['attrs'], ['mobile']) :
$this->getClassesAndStyles($block['attrs']);
@@ -498,6 +499,7 @@
'<nav><ul>'.jvbNotificationMenu().jvbHelpMenu().'</ul></nav>' :
'';
+
//Allows to add custom items to a menu, based on the menu name
$helpmenu = apply_filters('jvbMenuExtraAfter', $helpmenu, get_the_title($ID));
$main = trim(apply_filters('jvbMenuExtra', $this->innerBlocks($block), get_the_title($ID), $block));
@@ -818,6 +820,7 @@
if (($isHeaderTemplate || $isFooterTemplate)) {
+ $innerContent = $content;
$tag = $isHeaderTemplate ?: $isFooterTemplate ?: 'div';
@@ -836,7 +839,7 @@
jvbIcon('sun-dim', ['title'=> 'Light Mode']).
jvbIcon('moon', ['title'=>'Dark Mode']).
'</span></label>' : '';
- $breadcrumbs = jvbBuildBreadcrumbs();
+ $breadcrumbs = BreadcrumbManager::getInstance()->renderNavigation();
$afterHeader = apply_filters('jvbBelowHeader', $afterHeader);
if ($afterHeader !== '') {
@@ -851,17 +854,12 @@
}
$footerText = jvbRandomFooterText();
}
-// jvbDump($beforeHeader,'beforeHeader');
-// jvbDump('<'.$tag.$this->getClassesAndStyles($block['attrs']).'>','tag');
-// jvbDump($themeSwitch,'themeSwitch');
-// jvbDump($this->inside($block, $tag, $content),'inside');
-// jvbDump($footerText,'footerText');
-// jvbDump($afterHeader, 'afterheader');
-// jvbDump($breadcrumbs, 'breadcrumbs');
- return $beforeHeader.'<'.$tag.$this->getClassesAndStyles($block['attrs']).'>'.
+ $content = $beforeHeader.'<'.$tag.$this->getClassesAndStyles($block['attrs']).'>'.
$themeSwitch .
- $this->inside($block, $tag, $content) .
+ $this->inside($block, false, $innerContent).
+// $this->innerBlocks($block).
+// $innerContent.
$footerText.'</'.$tag.'>'.$afterHeader.$breadcrumbs;
}
@@ -929,51 +927,46 @@
{
$content = '';
foreach ($block['innerBlocks'] as $b) {
- $method = 'render_'.$this->sanitizeBlockName($b);
- $function = BASE.$method;
-
- $content .= $before;
- if (function_exists($function)) {
- $content .= $function($b, '');
- } else if (method_exists($this, $method)) {
- $content .= $this->$method($b, '');
- } else {
- $content .= render_block($b);
- }
- $content .= $after;
+ $content .= $this->render('', $b);
}
return $content;
}
- public function inside(array $block, mixed $tag = false, mixed $o = false):string
- {
- if (!$o) {
- $o = trim($block['innerHTML']);
- }
- if (!$tag) {
- //check to see if there was one dynamically set first
- $tag = (array_key_exists('tagName', $block['attrs'])) ? $block['attrs']['tagName'] : '';
- $tag = ($tag == '') ? str_replace('<', '', strtok($o, '>')) : '';
- $tag = (str_contains($tag, ' class')) ? strtok($tag, ' class') : $tag;
- $tag = trim($tag);
- }
- if (!str_starts_with($o, '<'.$tag)) {
+ public function inside(array $block, mixed $tag = false, mixed $o = false): string
+ {
+ if (!$o) {
+ $o = trim($block['innerHTML']);
+ }
+
+ $dom = new \DOMDocument();
+
+ @$dom->loadHTML('<?xml encoding="utf-8"?>' . $o, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
+
+ // Find the real outermost element
+ $root = null;
+ foreach ($dom->childNodes as $node) {
+ if ($node->nodeType === XML_ELEMENT_NODE) {
+ $root = $node;
+ break;
+ }
+ }
+
+ if (!$root) {
return $o;
}
- $len = strlen('</'.$tag.'>');
+ // Only enforce tag match if explicitly provided
+ if ($tag && strtolower($root->nodeName) !== strtolower($tag)) {
+ return $o;
+ }
- return substr_replace(
- str_replace(
- strtok($o, '>').'>',
- ' ',
- $o
- ),
- '',
- -$len,
- $len
- );
- }
+ $inner = '';
+ foreach ($root->childNodes as $child) {
+ $inner .= $dom->saveHTML($child);
+ }
+
+ return trim($inner);
+ }
/**
* Extract content from a specific nested element
diff --git a/inc/blocks/_setup.php b/inc/blocks/_setup.php
index c5b6d1d..43ff5c5 100644
--- a/inc/blocks/_setup.php
+++ b/inc/blocks/_setup.php
@@ -6,30 +6,64 @@
//require(JVB_DIR . '/inc/blocks/RegisterBlocks.php');
require(JVB_DIR . '/inc/blocks/CustomBlocks.php');
-if (Site::has('feed_block')) {
- require(JVB_DIR . '/inc/blocks/FeedBlock.php');
- new JVBase\blocks\FeedBlock();
+
+add_action('init', 'jvb_conditionally_load_blocks', 1);
+function jvb_conditionally_load_blocks(): void
+{
+ if (Site::has('feed_block')) {
+ require(JVB_DIR . '/inc/blocks/FeedBlock.php');
+ new JVBase\blocks\FeedBlock();
+ }
+
+ if (Site::has('is_restaurant')) {
+ require(JVB_DIR . '/inc/blocks/MenuBlock.php');
+ new JVBase\blocks\MenuBlock();
+ }
+
+ if (Site::has('faq')) {
+ require(JVB_DIR . '/inc/blocks/FAQBlock.php');
+ new JVBase\blocks\FAQBlock();
+ }
+
+ if (!empty(Registrar::getFeatured('is_glossary'))) {
+ require(JVB_DIR . '/inc/blocks/GlossaryBlock.php');
+ new JVBase\blocks\GlossaryBlock();
+ }
+
+ if (!empty(Registrar::getFeatured('is_timeline'))) {
+ require(JVB_DIR . '/inc/blocks/TimelineBlock.php');
+ new JVBase\blocks\TimelineBlock();
+ }
+
+ if (Site::hasIntegration('gmb')) {
+ require(JVB_DIR . '/build/gmbreviews/render.php');
+ register_block_type(
+ JVB_DIR . '/build/gmbreviews',
+ [
+ 'render_callback' => 'jvbRenderGMBReviewsBlock'
+ ]);
+ }
+// if (jvbSiteUsesFeedBlock()) {
+// register_block_type(
+// JVB_DIR . '/build/feed',
+// [
+// 'render_callback' => 'jvbRenderFeedBlock'
+// ]
+// );
+// }
+ if (!empty(Registrar::getFeatured('show_directory'))) {
+ register_block_type(
+ JVB_DIR . '/build/list',
+ [
+ 'render_callback' => 'jvbRenderListBlock'
+ ]
+ );
+ }
+ register_block_type(
+ JVB_DIR . '/build/drawer-menu',
+ );
}
-if (Site::has('is_restaurant')) {
- require(JVB_DIR . '/inc/blocks/MenuBlock.php');
- new JVBase\blocks\MenuBlock();
-}
-
-if (Site::has('faq')) {
- require(JVB_DIR . '/inc/blocks/FAQBlock.php');
- new JVBase\blocks\FAQBlock();
-}
-
-if (!empty(Registrar::getFeatured('is_glossary'))) {
- require(JVB_DIR . '/inc/blocks/GlossaryBlock.php');
- new JVBase\blocks\GlossaryBlock();
-}
-
-if (!empty(Registrar::getFeatured('is_timeline'))) {
- require(JVB_DIR . '/inc/blocks/TimelineBlock.php');
- new JVBase\blocks\TimelineBlock();
-}
require(JVB_DIR . '/inc/blocks/SummaryBlock.php');
new JVBase\blocks\SummaryBlock();
@@ -52,37 +86,3 @@
]);
}
add_filter('block_categories_all', 'jvbRegisterBlockCategory');
-
-if (Site::hasIntegration('gmb')) {
- require(JVB_DIR . '/build/gmbreviews/render.php');
-}
-function jvbRegisterBlocks():void
-{
- if (Site::hasIntegration('gmb')) {
- register_block_type(
- JVB_DIR . '/build/gmbreviews',
- [
- 'render_callback' => 'jvbRenderGMBReviewsBlock'
- ]);
- }
-// if (jvbSiteUsesFeedBlock()) {
-// register_block_type(
-// JVB_DIR . '/build/feed',
-// [
-// 'render_callback' => 'jvbRenderFeedBlock'
-// ]
-// );
-// }
- if (!empty(Registrar::getFeatured('show_directory'))) {
- register_block_type(
- JVB_DIR . '/build/list',
- [
- 'render_callback' => 'jvbRenderListBlock'
- ]
- );
- }
- register_block_type(
- JVB_DIR . '/build/drawer-menu',
- );
-}
-add_action('init', 'jvbRegisterBlocks');
diff --git a/inc/helpers/crud.php b/inc/helpers/crud.php
index 6245bff..c5e3611 100644
--- a/inc/helpers/crud.php
+++ b/inc/helpers/crud.php
@@ -5,6 +5,7 @@
}
use JVBase\managers\Cache;
+use JVBase\managers\RoleManager;
use JVBase\meta\Form;
use JVBase\registrar\Registrar;
@@ -94,10 +95,8 @@
'label' => 'Scrapped',
]
];
- $permission = ($content === 'news') ? 'update' : $content;
- $permission = JVB_CONTENT[$content]['plural']??$content.'s';
-
- $canPublish = current_user_can("publish_{$permission}");
+ $permission = JVB()->roles()->getContentPlural($content);
+ $canPublish = current_user_can("publish_{$permission}") && current_user_can('skip_moderation');
$out = '<div class="filters">';
if (!empty($statusFilters)) {
$out .= '<div class="status">';
@@ -173,9 +172,6 @@
*/
function jvbGetBulkActions(string $content):array
{
-
- $permission = ($content === 'news') ? 'update' : $content;
- $permission = JVB_CONTENT[$content]['plural']??$content.'s';
$bulkActions = [
'publish' => [
'icon' => 'show',
@@ -198,7 +194,8 @@
'disabled' => true,
]
];
- if (current_user_can("publish_{$permission}")) {
+ $permission = JVB()->roles()->getContentPlural($content);
+ if (current_user_can('skip_moderation') && current_user_can("publish_{$permission}")) {
$bulkActions['publish']['disabled'] = false;
}
if (current_user_can("edit_{$permission}")) {
@@ -311,28 +308,15 @@
string $postType = '',
bool $prefix = false
):void {
- switch ($contentType) {
- case 'post':
- $settings = JVB_CONTENT;
- break;
- case 'term':
- $settings = JVB_TAXONOMY;
- break;
- case 'user':
- $settings = JVB_USER;
- break;
- default:
- return;
- }
- $sections = $settings[$postType]['sections']??[];
- if (empty($sections)) {
+ $registrar = Registrar::getInstance($postType);
+ if (!$registrar || empty($registrar->getSections())) {
return;
}
echo '<div class="container">';
$nav = '<nav class="tabs row start" role="tablist">';
$i = 1;
- foreach ($sections as $slug => $section) {
+ foreach ($registrar->getSections() as $slug => $section) {
$nav .= '<button type="button" class="tab';
$ariaActive = 'false';
@@ -354,7 +338,7 @@
data-object-id="<?=$ID?>" data-content-type="<?=$postType?>">
<?php
$i = 0;
- foreach ($sections as $slug => $section) {
+ foreach ($registrar->getSections() as $slug => $section) {
$tabName = ($prefix) ? $ID.'-'.$slug : $slug;
$class = ($i == 0) ? ' active' : '';
diff --git a/inc/helpers/dashboard.php b/inc/helpers/dashboard.php
index 06f574b..bd1b1ac 100644
--- a/inc/helpers/dashboard.php
+++ b/inc/helpers/dashboard.php
@@ -78,7 +78,7 @@
$types = get_post_meta($postID, BASE.'content_types', true);
if ($types === '') {
$types = [];
- $link = (int) get_post_meta($postID, BASE.'link', true);
+ $link = (int) get_post_meta($postID, BASE.'profile_link', true);
if ($link === '' || !is_numeric($link)) {
return $types;
}
diff --git a/inc/helpers/members.php b/inc/helpers/members.php
index d2fdb9f..4e610be 100644
--- a/inc/helpers/members.php
+++ b/inc/helpers/members.php
@@ -173,7 +173,7 @@
if (!$user) {
return [];
}
- $id = (int) get_user_meta($userID, BASE.'link', true);
+ $id = (int) get_user_meta($userID, BASE.'profile_link', true);
$meta = Meta::forPost($id);
$artist = $meta->getAll(['first_name','type','city','shop']);
@@ -211,7 +211,7 @@
}
$user = ($ID === 0) ? wp_get_current_user() : get_userdata($ID);
return array_values(array_intersect(
- array_keys(array_merge(JVB_USER, ['administrator'])),
+ array_keys(array_merge(Registrar::getRegistered('user'), ['administrator'])),
array_map(function ($role) {
return jvbNoBase($role);
},
diff --git a/inc/helpers/ui.php b/inc/helpers/ui.php
index c9a5c1f..7b72fc1 100644
--- a/inc/helpers/ui.php
+++ b/inc/helpers/ui.php
@@ -1,5 +1,6 @@
<?php
+use JVBase\managers\Cache;
use JVBase\meta\Form;
use JVBase\base\Site;
use JVBase\utility\Image;
@@ -123,13 +124,13 @@
</a>
</li>
<li class="notifications has-submenu">
- <button class="toggle notifications" type="button" title="Toggle Notifications" aria-expanded="false" aria-controls="notifications-dropdown">
+ <button class="toggle notifications" type="button" data-action="toggle-submenu" title="Toggle Notifications" aria-expanded="false" aria-controls="notifications-dropdown">
<?= jvbIcon('bell', ['title'=> 'No Notifications'])?>
<?= jvbIcon('bell-ringing', ['title'=> 'New Notifications']) ?>
<span class="notification-badge" aria-label="Notifications">
</span>
</button>
- <ul class="notifications-preview submenu">
+ <ul class="notifications-preview submenu" id="notifications-dropdown">
<li id="view-all"><a href="<?=get_home_url(null, '/dash/notifications/')?>" class="view-all">View All Notifications</a></li>
</ul>
<template class="notificationItem">
@@ -159,45 +160,46 @@
*/
function jvbHelpMenu():string
{
- if (!Site::has('helpMenu')) {
+ if (!Site::has('help_menu')) {
return '';
}
- $out = get_option(BASE.'help_menu');
- if ($out === false) {
- $open = '<li><a href="';
- $mid = '">';
- $close = '</a></li>';
+ $cache = Cache::for('help_menu');
+ $out = $cache->remember(
+ 'help_menu',
+ function () {
+ $open = '<li><a href="';
+ $mid = '">';
+ $close = '</a></li>';
- $titles = array(
- 'About',
- 'Contact',
- 'Request a Feature',
- 'Technical Issue',
- );
- $links = '';
- foreach ($titles as $t) {
- $page = new WP_Query(array(
- 'post_type' => 'page',
- 'title' => $t,
- 'fields' => 'ids'
- ));
- if ($page->have_posts()) {
- $end = ($t == 'About') ? '<li><a href="'.get_home_url(null, '/directory/partners/').'" title="View our Partners">Partners</a></li>' : '';
- $links .= $open.get_the_permalink($page->posts[0]).'" title="'.$t.$mid.$t.$close.$end;
- }
- wp_reset_postdata();
- }
+ $titles = array(
+ 'About',
+ 'Contact',
+ 'Request a Feature',
+ 'Technical Issue',
+ );
+ $links = '';
+ foreach ($titles as $t) {
+ $page = new WP_Query(array(
+ 'post_type' => 'page',
+ 'title' => $t,
+ 'fields' => 'ids'
+ ));
+ if ($page->have_posts()) {
+ $end = ($t == 'About') ? '<li><a href="'.get_home_url(null, '/directory/partners/').'" title="View our Partners">Partners</a></li>' : '';
+ $links .= $open.get_the_permalink($page->posts[0]).'" title="'.$t.$mid.$t.$close.$end;
+ }
+ wp_reset_postdata();
+ }
- $out = '<li class="has-submenu">
- <button class="toggle quick-help" type="button" title="Toggle Quick Help Menu" aria-expanded="false" aria-controls="quick-help" aria-label="Toggle Quick Help Menu">'.jvbIcon('question', ['title'=> 'Quick Help']).'</button>
- <ul class="submenu">
+ return '<li class="has-submenu">
+ <button class="toggle quick-help" data-action="toggle-submenu" type="button" title="Toggle Quick Help Menu" aria-expanded="false" aria-controls="quick-help" aria-label="Toggle Quick Help Menu">'.jvbIcon('question', ['title'=> 'Quick Help']).'</button>
+ <ul class="submenu" id="quick-help">
'.$links.'
</ul>
</li>';
-
- update_option(BASE.'help_menu', $out);
- }
+ }
+ );
if (is_user_logged_in()) {
$out .= '<li><a href="'.wp_logout_url(get_home_url()).'" title="Logout">'.jvbIcon('sign-out').'<span class="screen-reader-text">Logout</span></a></li>';
diff --git a/inc/importers/JaneAppClientImporter.php b/inc/importers/JaneAppClientImporter.php
index ea26f6d..a16f68c 100644
--- a/inc/importers/JaneAppClientImporter.php
+++ b/inc/importers/JaneAppClientImporter.php
@@ -320,11 +320,11 @@
}
// Get the role from options with proper fallback
- $role = $options['default_role'] ?? get_option(BASE . 'client_import_role', JVB_USER);
+ $role = $options['default_role'] ?? get_option(BASE . 'client_import_role', BASE.'client');
- // Ensure role exists, fallback to JVB_USER if not
+ // Ensure role exists
if (!get_role($role)) {
- $role = JVB_USER;
+ return new WP_Error('invalid_role', 'Invalid role');
}
// Create user
diff --git a/inc/integrations/Cloudflare.php b/inc/integrations/Cloudflare.php
index 2dad696..9d86ad7 100644
--- a/inc/integrations/Cloudflare.php
+++ b/inc/integrations/Cloudflare.php
@@ -253,10 +253,4 @@
// Cloudflare Turnstile uses POST parameters, not headers
return [];
}
-
- protected function getApiUrl(string $endpoint, ?string $baseKey = null): string
- {
- // Only used for direct API calls, not through base class methods
- return 'https://challenges.cloudflare.com/turnstile/v0/siteverify';
- }
}
diff --git a/inc/integrations/Square.php b/inc/integrations/Square.php
index cd200a6..fda4da4 100644
--- a/inc/integrations/Square.php
+++ b/inc/integrations/Square.php
@@ -1660,7 +1660,7 @@
// Set user role (assuming you have a customer role defined)
$user = new \WP_User($user_id);
- $user->set_role(BASE.'foodie'); // Or whatever role from JVB_USER
+ $user->set_role(BASE.'foodie'); // Or whatever role
// Generate password reset key
$reset_key = get_password_reset_key($user);
@@ -2005,7 +2005,7 @@
wp_enqueue_script('jvb-square-checkout');
wp_localize_script('jvb-square-checkout', 'squareConfig', [
- 'isOpen' => jvbIsOpen(),
+//TODO 'isOpen' => jvbIsOpen(),
'application_id' => $this->credentials['client_id'] ?? '',
'location_id' => $this->locationId,
'environment' => $this->environment,
diff --git a/inc/managers/AdminPages.php b/inc/managers/AdminPages.php
index 03d4c4d..5878e17 100644
--- a/inc/managers/AdminPages.php
+++ b/inc/managers/AdminPages.php
@@ -32,7 +32,7 @@
'menu_title' => 'JakeVan',
'capability' => 'manage_options',
'menu_slug' => BASE . 'settings',
- 'icon' => jvbCSSIcon('settings'),
+ 'icon' => jvbCSSIcon('gear-six'),
'position' => 0
];
$this->subpages = get_option(BASE.'adminSubpage', []);
diff --git a/inc/managers/ApprovalManager.php b/inc/managers/ApprovalManager.php
index f381d58..42200e0 100644
--- a/inc/managers/ApprovalManager.php
+++ b/inc/managers/ApprovalManager.php
@@ -3,8 +3,8 @@
use DateTime;
+use JVBase\base\Site;
use JVBase\registrar\Registrar;
-use JVBase\managers\CustomTable;
if (!defined('ABSPATH')) {
exit;
@@ -14,12 +14,20 @@
protected array $tables =[];
protected int $expiresAt = 21; //days for request
protected int $requiredVotes = 3; //Number of votes before a term is approved
+ protected bool $hasApproval = false;
public function __construct()
{
$this->defineTables();
if (empty($this->tables)) {
return;
}
+
+ $this->hasApproval = Site::membership() && Site::membership()->has('member_verified');
+ if ($this->hasApproval) {
+ add_action('user_register', [$this, 'handleRegistration'], 10, 2);
+ }
+
+ add_action('jvb_cleanup_expired_approvals', [$this, 'cleanupExpired']);
}
protected function defineTables():void
@@ -27,6 +35,7 @@
$types = Registrar::getFeatured('approve_new');
foreach ($types as $type) {
$requests = CustomTable::for("approval_{$type}_requests");
+ $registrar = Registrar::getInstance($type);
$requests->setColumns([
'id' => 'bigint(20) unsigned NOT NULL AUTO_INCREMENT',
@@ -54,9 +63,9 @@
]);
$base = BASE;
$requests->setConstraints([
- "CONSTRAINTS `{$base}{$type}_approval_requester` FOREIGN KEY (`user_id`)
+ "CONSTRAINT `{$base}{$type}_approval_requester` FOREIGN KEY (`user_id`)
REFERENCES `{$requests->getUserTable()}` (`ID`) ON DELETE CASCADE",
- "CONSTRAINTS `{$base}{$type}_approval_parent_term` FOREIGN KEY (`parent_id`)
+ "CONSTRAINT `{$base}{$type}_approval_parent_term` FOREIGN KEY (`parent_id`)
REFERENCES `{$requests->getTermTable()}` (`term_id`) ON DELETE CASCADE"
]);
$requests->defineTable();
@@ -81,7 +90,7 @@
$votes->setConstraints([
"CONSTRAINT `{$base}{$type}_user_approval_request` FOREIGN KEY (`request_id`)
- REFERENCES `{$requests->getFullTableName()} (`id`) ON DELETE CASCADE",
+ REFERENCES `{$requests->getFullTableName()}` (`id`) ON DELETE CASCADE",
"CONSTRAINT `{$base}{$type}_user_approval_voter` FOREIGN KEY (`user_id`)
REFERENCES `{$votes->getUserTable()}` (`ID`) ON DELETE CASCADE"
]);
@@ -94,7 +103,23 @@
];
}
}
+ /**
+ * Handler for user registration
+ *
+ * @param int $user_id New user ID
+ * @param object $user the new user object
+ *
+ * @return void
+ */
+ public function handleRegistration(int $user_id, object $user): void
+ {
+ $registrar = Registrar::getInstance(jvbUserRole($user_id));
+ if ($registrar && $registrar->hasFeature('approve_new')) {
+ $user->add_cap('skip_moderation', false);
+ $this->createApproval($user_id, $registrar->getSlug(), $user->display_name);
+ }
+ }
public function canApprove(int $userID, string $type):bool
{
$type = jvbNoBase($type);
@@ -198,6 +223,8 @@
return $this->response(false, 'Invalid vote');
}
+
+
$response = $votes->findOrCreate([
'request_id' => $request_id,
'user_id' => $userID
@@ -209,12 +236,37 @@
if (!$response) {
return $this->response(false, 'Could not store vote for some reason.');
}
+ $approvers = $request['approved_by'];
+ $rejectors = $request['rejected_By'];
+ $both = array_merge($approvers, $rejectors);
+
+ //See if the user has already voted
+ //If the user is changing their vote, proceed. If it's the same, we can bail early.
+ if (in_array($userID, $both)) {
+ switch ($vote) {
+ case 'reject':
+ if (in_array($userID, $approvers)) {
+ unset($approvers[array_search($userID, $approvers)]);
+ } else {
+ return $this->response(true, 'You already voted this way.');
+ }
+ break;
+ case 'approve':
+ if (in_array($userID, $rejectors)) {
+ unset($rejectors[array_search($userID, $rejectors)]);
+ } else {
+ return $this->response(true, 'You already voted this way.');
+ }
+ }
+ }
switch ($vote) {
case 'reject':
+ $rejectors[] = $userID;
$request['rejections']++;
break;
case 'approve':
+ $approvers[] = $userID;
$request['approvals']++;
break;
default:
@@ -227,8 +279,10 @@
$this->finalizeApproval($request_id, $type);
}
$updated = $requests->update([
- 'rejections'=> $request['rejections'],
- 'approvals' => $request['approvals']
+ 'rejections' => $request['rejections'],
+ 'approvals' => $request['approvals'],
+ 'rejected_by' => $rejectors,
+ 'approved_by' => $approvers
],
[
'request_id' => $request_id
@@ -298,7 +352,9 @@
$updatedID = $term['term_id'];
}
} elseif ($registrar->getType() === 'user') {
-
+ $user = get_userdata($request['user_id']);
+ $user->add_cap('skip_moderation', true);
+ update_user_meta($request['user_id'], BASE.'verification_date', current_time('mysql'));
}
$updates = [
@@ -314,7 +370,7 @@
]);
- JVB()->notification()->addNotification($request['user_id'], $type.'approved', null, 'Your suggestion "'.$request['name'].'" was denied.');
+ JVB()->notification()->notify($request['user_id'], $type.'approved', null, 'Your suggestion "'.$request['name'].'" was denied.');
}
public function finalizeDenial(int $request_id, string $type):void
{
@@ -331,7 +387,7 @@
'request_id' => $request_id
]);
- JVB()->notification()->addNotification($request['user_id'], $type.'denied', null, 'Your suggestion "'.$request['name'].'" was denied.');
+ JVB()->notification()->notify($request['user_id'], $type.'denied', null, 'Your suggestion "'.$request['name'].'" was denied.');
}
public function getApprovalRequests(int $userID, ?string $type = null):array
@@ -429,4 +485,74 @@
]
];
}
+
+ /**
+ * Create artist approval request
+ *
+ * @param int $user_id User ID to be approved
+ *
+ * @return int|false Request ID or false on failure
+ */
+ /**
+ * Create artist approval request - REFACTORED
+ */
+ public function createArtistApprovalRequest(int $user_id): int|false
+ {
+ $userRole = jvbUserRole($user_id);
+ $table = $this->tables[$userRole]['requests']??false;
+ if (!$table) {
+ return false;
+ }
+ return $table->transaction(function($table) use ($user_id) {
+ // Check for existing request
+ $existing = $table->where(['user_id' => $user_id])->first();
+
+ if ($existing) {
+ return $existing->id;
+ }
+
+ $user_data = get_userdata($user_id);
+
+ return $table->create([
+ 'user_id' => $user_id,
+ 'status' => 'pending',
+ 'expires_at' => date('Y-m-d H:i:s', strtotime('+30 days')),
+ 'current_approvals' => 0,
+ 'current_rejections' => 0,
+ 'required_approvals' => 3, // From config
+ 'approved_by' => json_encode([]),
+ 'rejected_by' => json_encode([]),
+ ]);
+ });
+ }
+
+ public function getRequest(int $requestID, string $type):array|false
+ {
+ $table = $this->requests($type);
+ if (!$table) {
+ return false;
+ }
+ return $table->get(['id' => $requestID])??false;
+ }
+ public function getVotes(int $requestID, string $type):array|false
+ {
+ $table = $this->votes($type);
+ if (!$table) {
+ return false;
+ }
+ return $table->getMany(['request_id' => $requestID])??false;
+ }
+ public function cleanupExpired():void
+ {
+ $now = current_time('mysql');
+ foreach ($this->tables as $type => $tables) {
+ $tables['requests']->query(
+ "UPDATE {table}
+ SET status = 'expired'
+ WHERE status = 'pending'
+ AND expires_at <%s",
+ [$now]
+ );
+ }
+ }
}
diff --git a/inc/managers/CRUDManager.php b/inc/managers/CRUDManager.php
index 4051bc6..c6b6266 100644
--- a/inc/managers/CRUDManager.php
+++ b/inc/managers/CRUDManager.php
@@ -1,6 +1,7 @@
<?php
namespace JVBase\managers;
+use JVBase\base\Site;
use JVBase\registrar\Registrar;
use JVBase\ui\CRUDSkeleton;
@@ -99,7 +100,7 @@
$this->skeleton->addCapabilities(['view', 'edit', 'create', 'delete']);
$plural = strtolower($this->registrar->getPlural() ?? $this->content . 's');
- $canPublish = jvbUserIsVerified() && user_can($this->user_id, "publish_{$plural}");
+ $canPublish = $this->userIsVerified() && user_can($this->user_id, "publish_{$plural}");
$this->skeleton->userCanPublish($canPublish);
// Bulk actions
@@ -122,6 +123,11 @@
add_filter('jvbAdditionalActions', [$this, 'createItem']);
}
+ protected function userIsVerified():bool {
+ $membership = Site::membership();
+
+ return !($membership && $membership->has('member_verified')) || current_user_can('skip_moderation');
+ }
/**
* Setup uploader configuration
*/
diff --git a/inc/managers/DashboardManager.php b/inc/managers/DashboardManager.php
index 68f7fe3..4d3c544 100644
--- a/inc/managers/DashboardManager.php
+++ b/inc/managers/DashboardManager.php
@@ -33,7 +33,7 @@
$this->cache->flush();
$this->user = wp_get_current_user();
$this->role = jvbUserRole($this->user->ID);
- $this->userLink = (int)get_user_meta($this->user->ID, BASE.'link', true);
+ $this->userLink = (int)get_user_meta($this->user->ID, BASE.'profile_link', true);
$this->baseURL = get_home_url(null, '/dash');
add_action('template_redirect', [$this, 'handleRedirects']);
@@ -647,7 +647,7 @@
<!DOCTYPE html>
<html <?php language_attributes(); ?>>
<head>
- <title><?= (array_key_exists('dashboard_title', JVB_SITE)) ? JVB_SITE['dashboard_title'] : 'Dashboard | '.get_bloginfo('name') ?></title>
+ <title><?= Site::dashboardTitle()??'Dashboard | '.get_bloginfo('name') ?></title>
<meta charset="<?php bloginfo('charset'); ?>">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<?php
diff --git a/inc/managers/DirectoryManager.php b/inc/managers/DirectoryManager.php
index 65c8559..3be452e 100644
--- a/inc/managers/DirectoryManager.php
+++ b/inc/managers/DirectoryManager.php
@@ -38,14 +38,14 @@
jvb_register_do_once('buildDirectories', [$this, 'activate']);
add_action('init', [$this, 'registerDirectories']);
- add_action('render_block', [$this, 'renderBlock'], 998, 3);
+ add_filter('render_block', [$this, 'renderBlock'], 998, 3);
}
public function registerDirectories():void
{
- $singular = (array_key_exists('directory_label', JVB_SITE)) ? JVB_SITE['directory_label'][0] : 'Directory';
- $plural = (array_key_exists('directory_label', JVB_SITE)) ? JVB_SITE['directory_label'][1] : 'Directories';
+ $singular = !empty(Site::getDirectorySingular())?:'Directory';
+ $plural = !empty(Site::getDirectorySingular())?: 'Directories';
$config = [
'labels' => [
'name' => $plural,
@@ -712,10 +712,7 @@
public function referAs($plural = false):string
{
- if (!empty(JVB_SITE) && array_key_exists('directory_label', JVB_SITE)) {
- return ($plural) ? JVB_SITE['directory_label'][1] : JVB_SITE['directory_label'][0];
- }
- return ($plural) ? 'Directories' : 'Directory';
+ return ($plural) ? Site::getDirectoryPlural()??'Directories' : Site::getDirectorySingular()??'Directory';
}
/*****************************************************
diff --git a/inc/managers/FavouritesManager.php b/inc/managers/FavouritesManager.php
index a2cfb88..563dde2 100644
--- a/inc/managers/FavouritesManager.php
+++ b/inc/managers/FavouritesManager.php
@@ -135,7 +135,7 @@
$table->setKeys([
['key' => 'PRIMARY', 'value' => '(`id`)'],
['key' => 'UNIQUE', 'value' => '`unique_share_user` (`list_id`, `user_id`)'],
- ['key'=> 'UNIQUE', 'value' => '`unique_share_email` (`list_id`, `email`'],
+ ['key'=> 'UNIQUE', 'value' => '`unique_share_email` (`list_id`, `email`)'],
'`list_shares` (`list_id`)',
'`list_user` (`list_id`, `user_id`)',
'`status_index` (`status`)'
diff --git a/inc/managers/IconsManager.php b/inc/managers/IconsManager.php
index ee98705..45890c5 100644
--- a/inc/managers/IconsManager.php
+++ b/inc/managers/IconsManager.php
@@ -44,9 +44,7 @@
{
$this->source = $source;
$this->cache = Cache::for('icons_' . $source, WEEK_IN_SECONDS);
- $this->style = (array_key_exists('icons', JVB_SITE) && in_array(JVB_SITE['icons'], $this->styles))
- ? JVB_SITE['icons']
- : 'regular';
+ $this->style = Site::icon();
$this->addMap();
@@ -521,7 +519,7 @@
*/
public function get(string $name, array $options = []): string
{
- if ($name === '') {
+ if (empty($name)) {
//No icon requested
return '';
}
@@ -699,6 +697,14 @@
if (!$style) {
$style = $this->style;
}
+
+ $icon = $this->map[$icon] ?? $icon;
+
+ // Validate icon exists
+ if (!$this->iconExists($icon, $style)) {
+ error_log('[IconsManager] Icon not found: ' . $icon);
+ return '';
+ }
$svg = $this->getEncodedSVG($icon, $style);
if ($svg !== '') {
return "data:image/svg+xml;base64,{$svg}";
diff --git a/inc/managers/InvitationsManager.php b/inc/managers/InvitationsManager.php
index 4ab9654..ccb2f2f 100644
--- a/inc/managers/InvitationsManager.php
+++ b/inc/managers/InvitationsManager.php
@@ -49,9 +49,9 @@
'name' => 'varchar(255) NOT NULL',
'email' => 'varchar(255) NOT NULL',
'invitation_token' => 'varchar(255) NOT NULL',
- 'invited_role' => 'varchar(50) NOT NULL COMMENT \'Role being invited to\'',
- 'status' => 'ENUM(\'pending\',\'accepted\',\'rejected\',\'expired\',\'revoked\') DEFAULT \'pending\'',
- 'inviters' => 'JSON NOT NULL COMMENT \'Array of {user_id, invited_at}\'',
+ 'invited_role' => 'varchar(50) NOT NULL', //Role being invited to
+ 'status' => "ENUM('pending','accepted','rejected','expired','revoked') DEFAULT 'pending'",
+ 'inviters' => 'JSON NOT NULL', // Array of {user_id, invited_at}
'new_user_id' => $table->getUserIDType().' DEFAULT NULL',
'expires_at' => 'datetime NOT NULL',
'accepted_at' => 'datetime DEFAULT NULL',
@@ -67,7 +67,7 @@
$table->setKeys([
['key' => 'PRIMARY', 'value' => '(`id`)'],
- ['key' => 'UNIQUE KEY', 'value' => '`unique_email_role` (`email`, `invited_role`)'],
+ ['key' => 'UNIQUE', 'value' => '`unique_email_role` (`email`, `invited_role`)'],
'`token_lookup` (`invitation_token`)',
'`status_expiry` (`status`, `expires_at`)',
'`role_status` (`invited_role`, `status`)',
diff --git a/inc/managers/KarmaManager.php b/inc/managers/KarmaManager.php
index 6bba6da..4aaa56e 100644
--- a/inc/managers/KarmaManager.php
+++ b/inc/managers/KarmaManager.php
@@ -122,7 +122,7 @@
protected function defineTable():bool
{
$table = CustomTable::for('karma_'.$this->key);
- [$type, $table, $column] = $this->getReferenceTable($table);
+ [$type, $referenceTable, $column] = $this->getReferenceTable($table);
if (!$type) {
error_log('[KarmaManager]::defineTable Attempted to build reference for invalid table: '.$this->references);
CustomTable::destroyInstance('karma_'.$this->key);
@@ -134,7 +134,7 @@
'item_id' => "{$type} NOT NULL",
'user_id' => "{$table->getUserIDType()} NOT NULL",
'content' => 'varchar(255) NOT NULL',
- 'vote' => "ENUM('up,'down') NOT NULL",
+ 'vote' => "ENUM('up','down') NOT NULL",
'created_at'=> 'datetime NOT NULL DEFAULT CURRENT_TIMESTAMP',
'updated_at'=> 'datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP'
]);
@@ -147,9 +147,9 @@
]);
$base = BASE;
$table->setConstraints([
- "CONSTRAINT `{$base}kt_{$type}_item_id` FOREIGN KEY (`item_id`)
- REFERENCES `{$table}` (`{$column}`) ON DELETE CASCADE",
- "CONSTRAINT `{$base}kt_{$type}_user_id` FOREIGN KEY (`user_id`)
+ "CONSTRAINT `{$base}kt_{$this->key}_{$type}_item_id` FOREIGN KEY (`item_id`)
+ REFERENCES `{$referenceTable}` (`{$column}`) ON DELETE CASCADE",
+ "CONSTRAINT `{$base}kt_{$this->key}_{$type}_user_id` FOREIGN KEY (`user_id`)
REFERENCES `{$table->getUserTable()}` (`ID`) ON DELETE CASCADE"
]);
$table->defineTable();
diff --git a/inc/managers/LoginManager.php b/inc/managers/LoginManager.php
index d86d1e8..ac51292 100644
--- a/inc/managers/LoginManager.php
+++ b/inc/managers/LoginManager.php
@@ -5,7 +5,7 @@
use JVBase\forms\TaxonomySelector;
use JVBase\meta\Form;
-use WP_Error;
+use JVBase\registrar\Registrar;use WP_Error;
use WP_User;
if (!defined('ABSPATH')) {
@@ -133,19 +133,19 @@
'hint' => 'Have a referral code? Paste it here!'
];
}
- if (count(JVB_USER) > 1) {
- foreach (JVB_USER as $slug => $config) {
- if (!array_key_exists('can_register', $config) || !$config['can_register']) {
- continue;
- }
- $icon = $config['icon'] ?? '';
+ $canRegister = Registrar::getFeatured('can_register', 'user');
+ if (!empty($canRegister)) {
+ foreach ($canRegister as $role) {
+ $registrar = Registrar::getInstance($role);
+ $config = $registrar->getConfig('register');
+ $icon = $registrar->getIcon('user');
$icon = ($icon !== '') ? jvbIcon($icon) : '';
- $select[$slug] = '<span class="label">'.$icon.$config['label'].'</span><span class="text">'.$config['register']['text']??''.'</span>';
- if (!empty($config['register']['fields']??[])){
- foreach ($config['register']['fields'] as $field) {
+ $select[$role] = '<span class="label">'.$icon.$registrar->getSingular().'</span><span class="text">'.$config['description']??Site::login()->getDescription('register')??''.'</span>';
+ if (!empty($config['fields'])){
+ foreach ($config['fields'] as $field) {
$field['condition'] = [
'field' => 'user_select',
- 'value' => $slug,
+ 'value' => $role,
'operator' => '=='
];
$fields[] = $field;
@@ -289,7 +289,7 @@
}
}
}
- public function loginUrl(string $login_url, string $redirect, bool $force_reauth):string
+ public function loginUrl(string $login_url, ?string $redirect, bool $force_reauth):string
{
// This will append /custom-login/ to you main site URL as configured in general settings (ie https://domain.com/custom-login/)
$login_url = site_url( '/login/', 'login' );
diff --git a/inc/managers/NewsRelationships.php b/inc/managers/NewsRelationships.php
index 12098e9..5156256 100644
--- a/inc/managers/NewsRelationships.php
+++ b/inc/managers/NewsRelationships.php
@@ -215,7 +215,7 @@
*/
public function handleLinkChange(int $meta_id, int $object_id, string $meta_key, string|null $meta_value = null):void
{
- // Only proceed for BASE.'link' meta key
+ // Only proceed for BASE.'profile_link' meta key
if ($meta_key !== BASE . 'link') {
return;
}
diff --git a/inc/managers/NotificationManager.php b/inc/managers/NotificationManager.php
index eeec9a6..99a771f 100644
--- a/inc/managers/NotificationManager.php
+++ b/inc/managers/NotificationManager.php
@@ -82,6 +82,11 @@
return $this->notifications->markActioned($userID, $notification_id, $result);
}
+ public function getNotificationTypes(bool $all = false):array
+ {
+ return $this->notifications->getNotificationTypes($all);
+ }
+
/************************************************
* CONTENT NOTIFICATIONS
* These are pooled notifications of new content for:
diff --git a/inc/managers/Notifications/Notifications.php b/inc/managers/Notifications/Notifications.php
index 8e83c41..4700c1d 100644
--- a/inc/managers/Notifications/Notifications.php
+++ b/inc/managers/Notifications/Notifications.php
@@ -130,11 +130,16 @@
$this->types = $types;
}
+ public function getNotificationTypes(bool $all = false):array
+ {
+ return ($all) ? $this->types : array_keys($this->types);
+ }
+
private function defineTable():void
{
$table = CustomTable::for('notifications_main');
- $typeEnum = implode(',',array_map(function($type) { return '`'.$type.'`';}, array_keys($this->types)));
+ $typeEnum = implode(',',array_map(function($type) { return "'{$type}'";}, array_keys($this->types)));
$table->setColumns([
'id' => 'bigint(20) unsigned NOT NULL AUTO_INCREMENT',
@@ -159,7 +164,7 @@
'`user_status` (`for_user`, `status`)',
'`target_lookup` (`target_id`, `target_type`)',
'`unread_notifications` (`for_user`, `status`, `created_at`)',
- '`requires_action` (`for_user`, `requires_action`, `action_taken`)',
+ '`requires_action` (`for_user`, `action_taken`)',
'`from_user_lookup` (`for_user`, `from_user`, `target_id`, `target_type`, `type`)'
]);
diff --git a/inc/managers/ReferralManager.php b/inc/managers/ReferralManager.php
index 6ac1630..b5db099 100644
--- a/inc/managers/ReferralManager.php
+++ b/inc/managers/ReferralManager.php
@@ -43,16 +43,17 @@
'referee_reward_type' => 'percentage', // 'percentage' or 'fixed'
'referee_reward_amount' => 20, // 20% or $20
'referee_reward_applies_to' => 'first_order', // 'first_order' or 'all_orders'
- 'referral_role' => BASE.'client'
];
- protected string $role = BASE.'client';
+ protected string $role;
protected array $settings;
public function __construct()
{
$this->defineTables();
+ $this->role = Site::getDefaultReferralRole();
+ $this->default_settings['referral_role'] = $this->role;
global $wpdb;
$this->wpdb = $wpdb;
$this->cache = Cache::for('referrals', WEEK_IN_SECONDS);
@@ -2837,7 +2838,7 @@
update_option(BASE . 'referral_page_id', $page_id);
// Save client import role
- $import_role = sanitize_text_field($post_data[BASE . 'referral_role'] ?? JVB_USER);
+ $import_role = sanitize_text_field($post_data[BASE . 'referral_role'] ?? Site::getDefaultReferralRole());
update_option(BASE . 'referral_role', $import_role);
// Save reward settings
diff --git a/inc/managers/RoleManager.php b/inc/managers/RoleManager.php
index 863ff46..b275f12 100644
--- a/inc/managers/RoleManager.php
+++ b/inc/managers/RoleManager.php
@@ -13,6 +13,7 @@
{
private array $roles;
private array $content;
+ private array $subTypes = [];
public function __construct()
{
@@ -26,8 +27,23 @@
Registrar::getFeatured('is_content', 'term')
));
add_action('set_user_role', [$this, 'updateRoles'], 10, 3);
+
+ $this->checkRoleSubTypes();
}
+ public function checkRoleSubTypes():void
+ {
+ foreach ($this->roles as $role) {
+ $registrar = Registrar::getInstance($role);
+ if ($registrar->getUserSubtype()){
+ $this->subTypes[jvbCheckBase($registrar->getUserSubtype())] = $registrar->getCreatable();
+ }
+ }
+ if (!empty($this->subTypes)) {
+ add_action('set_object_terms', [$this, 'maybeSwitchPermissions'],10, 6);
+ }
+ }
+
public function updateRoles(int $userID, string $role, array $oldRoles):void
{
if (doing_action('set_user_role') > 1) {
@@ -93,7 +109,6 @@
$roles = array_keys($user->roles);
foreach ($roles as $role) {
- $role = jvbNoBase($role);
$registrar = Registrar::getInstance($role);
if (!$registrar) {
return false;
@@ -217,7 +232,7 @@
if (!in_array($type, $this->roles)) {
return false;
}
- $link = get_user_meta($user->ID, BASE.'link', true);
+ $link = get_user_meta($user->ID, BASE.'profile_link', true);
if ($link === '') {
$type = BASE.$type;
$name = $user->display_name;
@@ -230,8 +245,8 @@
'post_author' => $user->ID,
]);
if ($link) {
- update_user_meta($user->ID, BASE.'link', $link);
- update_post_meta($link, BASE.'link', $user->ID);
+ update_user_meta($user->ID, BASE.'profile_link', $link);
+ update_post_meta($link, BASE.'profile_link', $user->ID);
}
}
return $link;
@@ -259,8 +274,8 @@
if ($registrar->hasFeature('has_dashboard') ?? false) {
$admin_role = get_role('administrator');
if ($admin_role) {
- $admin_role->add_cap("manage_{$role_name}s", true);
- $admin_role->add_cap("edit_{$role_name}_settings", true);
+ $admin_role->add_cap("manage_{$role_name}s");
+ $admin_role->add_cap("edit_{$role_name}_settings");
}
}
}
@@ -392,12 +407,15 @@
return [
"edit_{$content}",
+ "edit_published_{$content}",
"read_{$content}",
"delete_{$content}",
+ "delete_published_{$content}",
"edit_{$plural}",
- "edit_others_{$plural}",
"publish_{$plural}",
"read_private_{$plural}",
+ "edit_private_{$plural}",
+ "delete_private_{$plural}",
];
}
protected function getOthersCapabilities(string $content):array
@@ -410,9 +428,6 @@
return [
"edit_others_{$plural}",
"delete_others_{$plural}",
- "read_private_{$plural}",
- "edit_private_{$plural}",
- "delete_private_{$plural}",
];
}
@@ -431,12 +446,60 @@
return str_replace(' ', '_', $content.'s');
}
- public function activate(): void
+ public static function activate(): void
{
+ error_log('[RoleManager]::activate');
+ error_log('Registering roles...');
+ $instance = new self;
foreach (Registrar::getRegistered('user') as $role) {
- $this->registerRole($role);
+ $instance->registerRole($role);
}
+ error_log('Roles registered!');
+ error_log('Removing unneeded roles...');
+ remove_role('contributor');
+ remove_role('author');
+ remove_role('editor');
+ error_log('Roles removed!');
+
+ error_log('Adding Admin Capabilities');
+ $instance->addAdminCaps();
+ error_log('Ensuring Existing User\'s Roles...');
+ $instance->ensureRoleCaps();
+ error_log('Roles activated!');
}
+ protected function addAdminCaps():void
+ {
+ $users = get_users(['role' => 'administrator']);
+ foreach (array_merge(Registrar::getRegistered('post'), Registrar::getFeatured('is_content')) as $slug) {
+ $this->grantRoleCapabilities('administrator', $slug);
+ $this->grantRoleOthersCapabilities('administrator', $slug);
+
+ foreach ($users as $user) {
+ $this->grantContent($user, $slug);
+ $this->grantOthersContent($user, $slug);
+ }
+ }
+ }
+ protected function ensureRoleCaps():void
+ {
+ $roles = Registrar::getRegistered('user');
+ foreach ($roles as $role) {
+ $registrar = Registrar::getInstance($role);
+ $creatable = $registrar->getCreatable();
+ $manageable = $registrar->getManageOthers();
+ if (!empty($creatable) || !empty($manageable)) {
+ $users = get_users(['role' => jvbCheckBase($role)]);
+ foreach ($users as $user) {
+ foreach ($creatable as $slug) {
+ $this->grantContent($user, $slug);
+ }
+ foreach ($manageable as $slug) {
+ $this->grantOthersContent($user, $slug);
+ }
+ }
+ }
+ }
+ }
/******************************************************************
* OWNABLE and MANAGABLE terms (ie: tattoo shops)
@@ -758,4 +821,91 @@
}
return null;
}
+
+ public function maybeSwitchPermissions(int $object_id, array $terms, array $tt_ids, string $taxonomy, bool $append, array $old_tt_ids):void
+ {
+ //This shouldn't happen, but whatever
+ if (empty($this->subTypes)) {
+ return;
+ }
+
+ if (!in_array($taxonomy, array_keys($this->subTypes))) {
+ return;
+ }
+
+ $new = array_diff($tt_ids, $old_tt_ids);
+ $old = array_diff($old_tt_ids, $tt_ids);
+
+ $userID = (int)get_post_meta($object_id, BASE.'profile_link',true);
+ if ($userID === 0) {
+ return;
+ }
+ $user = get_userdata($userID);
+ if (!$user) {
+ return;
+ }
+
+ //Revoke old first
+ if (!empty($old)) {
+ $old = array_filter(array_map(function ($id) use ($taxonomy) {
+ $termID = $this->getTermIDFromTTID($id);
+ return $this->getRootTermSlug($termID, $taxonomy);
+ }, $old));
+ foreach ($old as $slug) {
+ if (!array_key_exists($slug, $this->subTypes[$taxonomy])) {
+ error_log('[RoleManager]::maybeSwitchPermissions Could not find creatable types for role subtype '.$slug);
+ continue;
+ }
+ foreach ($this->subTypes[$taxonomy][$slug] ?? [] as $s) {
+ $this->grantContent($user, $s, false);
+ }
+ }
+ }
+
+ if (!empty($new)) {
+ $new = array_filter(array_map(function ($id) use ($taxonomy){
+ $termID = $this->getTermIDFromTTID($id);
+ return $this->getRootTermSlug($termID, $taxonomy);
+ }, $new));
+ foreach ($new as $slug) {
+ if (!array_key_exists($slug, $this->subTypes[$taxonomy])) {
+ error_log('[RoleManager]::maybeSwitchPermissions Could not find creatable types for role subtype '.$slug);
+ continue;
+ }
+ foreach ($this->subTypes[$taxonomy][$slug] ?? [] as $s) {
+ $this->grantContent($user, $s);
+ }
+ }
+ }
+ }
+
+ /**
+ * Helper function to get term_id from term_taxonomy_id
+ * @param int $tt_id
+ *
+ * @return int
+ */
+ private function getTermIDFromTTID(int $tt_id):int
+ {
+ global $wpdb;
+ return $wpdb->get_var($wpdb->prepare(
+ "SELECT term_id FROM {$wpdb->term_taxonomy} WHERE term_taxonomy_id = %d",
+ $tt_id
+ ));
+ }
+
+ private function getRootTermSlug(int $termID, string $taxonomy): string|false
+ {
+ $term = get_term($termID, $taxonomy);
+ if (!$term || is_wp_error($term)) {
+ return false;
+ }
+ while ($term->parent !== 0) {
+ $term = get_term($term->parent, $taxonomy);
+ if (!$term || is_wp_error($term)) {
+ return false;
+ }
+ }
+ return $term->slug;
+ }
}
diff --git a/inc/managers/SEO/ConfigManager.php b/inc/managers/SEO/ConfigManager.php
deleted file mode 100644
index b16a675..0000000
--- a/inc/managers/SEO/ConfigManager.php
+++ /dev/null
@@ -1,399 +0,0 @@
-<?php
-namespace JVBase\managers\SEO;
-
-use JVBase\registrar\Registrar;
-
-if (!defined('ABSPATH')) {
- exit;
-}
-
-/**
- * Interface for options for schema and meta, defaulting to what is defined in the constants
- */
-class ConfigManager
-{
- private ?string $type = null;
- private ?string $metaKey = null;
- private ?string $schemaKey = null;
- private ?string $archiveKey = null;
- protected bool $hasArchive = false;
- private static array $instances = [];
- protected ?array $schema = null;
- protected ?array $meta = null;
- protected ?array $archive = null;
- protected SchemaBuilder $registry;
-
- /**
- * Private constructor; use for() factory method instead
- */
- private function __construct(string $type) {
- $this->type = $type;
- $this->schemaKey = BASE.'schema_for_'.$type;
- $this->metaKey = BASE.'meta_for_'.$type;
- $this->registry = SchemaBuilder::getInstance();
- $this->schema = $this->getConfigFor($type);
- $this->meta = $this->getMetaFor($type);
- }
-
- /**
- * Factory method - returns singleton instance per type
- */
- public static function for(string $type): self
- {
- $key = jvbNoBase($type);
- if (!isset(self::$instances[$key])) {
- self::$instances[$key] = new self($type);
- }
- return self::$instances[$key];
- }
-
- public function meta():array
- {
- return $this->meta ?? [];
- }
- public function schema():array
- {
- return $this->schema ?? [];
- }
-
- public function archive(): array
- {
- return $this->archive ?? [];
- }
-
- public function setupArchive()
- {
- $this->hasArchive = true;
- $this->archiveKey = BASE.'archive_for_'.$this->type;
- $this->archive = $this->getArchiveFor($this->type);
- }
-
- /**
- * Get default meta configuration for a type
- */
- protected function getMetaFor(string $type): array
- {
- $default = $this->registry->getDefaultMetaValues();
-
- // Check if content/taxonomy config has SEO meta defined
- $configMeta = $this->getDefaultConfig($type, 'meta');
- if (!empty($configMeta)) {
- $configMeta = $this->normalizeMetaKeys($configMeta);
- $default = array_merge($default, $configMeta);
- }
-
- return get_option($this->metaKey, $default);
- }
-
- /**
- * Normalize content-defined meta keys to system keys
- */
- private function normalizeMetaKeys(array $meta): array
- {
- $map = [
- 'title' => 'metaTitle',
- 'description' => 'metaDescription',
- ];
-
- $normalized = [];
- foreach ($meta as $key => $value) {
- $normalized[$map[$key] ?? $key] = $value;
- }
- return $normalized;
- }
-
- /**
- * Get default schema configuration for a type
- */
- protected function getConfigFor(string $type): array
- {
- $default = $this->getDefaultConfig($type, 'schema');
- return get_option($this->schemaKey, $default);
- }
-
- /**
- * Get default schema configuration for a type
- */
- protected function getArchiveFor(string $type): array
- {
- $default = $this->getDefaultConfig($type, 'archive');
- return get_option($this->archiveKey, $default);
- }
-
- /**
- * Get default configuration from constants
- */
- private function getDefaultConfig(string $type, string $configType): array
- {
- switch ($type) {
- case 'website':
- // Try actual schema type first, then semantic key
- if (defined('JVB_SCHEMA')) {
- if (array_key_exists('website', JVB_SCHEMA)) {
- return JVB_SCHEMA['website'];
- }
- }
- return [];
- case 'organization':
-
- // Try actual schema types first, then semantic keys
- if (defined('JVB_SCHEMA')) {
- if (array_key_exists('organization', JVB_SCHEMA)) {
- return JVB_SCHEMA['organization'];
- }
- }
- return [];
-
- default:
- // Try to find in content, taxonomy, or user configs
- $registrar = Registrar::getInstance($type);
- $config = $registrar->getConfig('seo');
-
- // If asking for archive config and none exists, provide default
- if ($configType === 'archive' && !isset($config['archive'])) {
- return [
- 'type' => 'CollectionPage',
- 'name' => '{{archive_title}}',
- 'description' => '{{archive_description}}',
- 'url' => '{{archive_url}}'
- ];
- }
- return $config[$configType] ?? [];
- }
- }
-
- public function resetConfig(): bool
- {
- $result = delete_option($this->schemaKey);
- if ($result) {
- $this->schema = $this->getConfigFor($this->type);
- }
- return $result;
- }
- /**
- * Reset meta configuration to defaults
- */
- public function resetMeta(): bool
- {
- $result = delete_option($this->metaKey);
- if ($result) {
- $this->meta = $this->getMetaFor($this->type);
- }
- return $result;
- }
-
- public function resetArchive():bool
- {
- $result = delete_option($this->archiveKey);
- if ($result) {
- $this->archive = $this->getArchiveFor($this->type);
- }
- return $result;
- }
-
- /**
- * Reset both configurations to defaults
- */
- public function resetAll(): bool
- {
- return !($this->resetConfig() && $this->resetMeta() && ($this->hasArchive)) || $this->resetArchive();
- }
- /**
- * Validate and update schema configuration
- *
- * @param array $config Schema configuration to save
- * @return bool|\WP_Error True on success, WP_Error on failure
- */
- public function updateConfig(array $config): bool|\WP_Error
- {
- // Validate type is provided
- if (!isset($config['type'])) {
- return new \WP_Error('missing_type', 'Schema type is required');
- }
-
- // Validate type exists in registry
- if (!$this->registry->getTypeDefinition($config['type'])) {
- return new \WP_Error('invalid_type', sprintf('Schema type "%s" is not registered', $config['type']));
- }
-
- // Get allowed fields for this type
- $allowedFields = $this->registry->getFieldsForType($config['type']);
-
- // Filter to only allowed fields
- $validated = array_filter($config, function($key) use ($allowedFields) {
- return in_array($key, $allowedFields);
- }, ARRAY_FILTER_USE_KEY);
-
- // Validate template syntax for field values
- $fieldErrors = [];
- foreach ($validated as $field => $value) {
- if (is_string($value) && $field !== 'type') {
- $validationResult = $this->validateTemplate($value, $field);
- if (is_wp_error($validationResult)) {
- $fieldErrors[$field] = $validationResult->get_error_message();
- }
- }
- }
-
- if (!empty($fieldErrors)) {
- return new \WP_Error('validation_failed', 'Template validation failed', $fieldErrors);
- }
-
- // Remove completely empty values (but keep false/0)
- $validated = array_filter($validated, function($value) {
- return $value !== '' && $value !== null && $value !== [];
- });
-
- // Update option
- $result = update_option($this->schemaKey, $validated);
-
- if ($result) {
- // Update instance cache
- $this->schema = $validated;
- }
-
- return $result;
- }
- /**
- * Validate and update meta configuration
- *
- * @param array $meta Meta configuration to save
- * @return bool|\WP_Error True on success, WP_Error on failure
- */
- public function updateMeta(array $meta): bool|\WP_Error
- {
- // Validate template syntax
- $errors = [];
- foreach ($meta as $field => $value) {
- if (is_string($value)) {
- $validationResult = $this->validateTemplate($value, $field);
- if (is_wp_error($validationResult)) {
- $errors[$field] = $validationResult->get_error_message();
- }
- }
- }
-
- if (!empty($errors)) {
- return new \WP_Error('validation_failed', 'Template validation failed', $errors);
- }
-
- // Update option
- $result = update_option($this->metaKey, $meta);
-
- if ($result) {
- // Update instance cache
- $this->meta = $meta;
- }
-
- return $result;
- }
-
- /**
- * Validate and update archive configuration
- *
- * @param array $archive Archive configuration to save
- * @return bool|\WP_Error True on success, WP_Error on failure
- */
- public function updateArchive(array $archive): bool|\WP_Error
- {
- if (!$this->hasArchive) {
- return new \WP_Error('no_archive', 'This type does not support archives');
- }
-
- // Validate type is provided
- if (!isset($archive['type'])) {
- return new \WP_Error('missing_type', 'Schema type is required');
- }
-
- // Validate type exists in registry
- if (!$this->registry->getTypeDefinition($archive['type'])) {
- return new \WP_Error('invalid_type', sprintf('Schema type "%s" is not registered', $archive['type']));
- }
-
- // Get allowed fields for this type
- $allowedFields = $this->registry->getFieldsForType($archive['type']);
-
- // Filter to only allowed fields
- $validated = array_filter($archive, function($key) use ($allowedFields) {
- return in_array($key, $allowedFields);
- }, ARRAY_FILTER_USE_KEY);
-
- // Validate template syntax
- $fieldErrors = [];
- foreach ($validated as $field => $value) {
- if (is_string($value) && $field !== 'type') {
- $validationResult = $this->validateTemplate($value, $field);
- if (is_wp_error($validationResult)) {
- $fieldErrors[$field] = $validationResult->get_error_message();
- }
- }
- }
-
- if (!empty($fieldErrors)) {
- return new \WP_Error('validation_failed', 'Template validation failed', $fieldErrors);
- }
-
- // Remove completely empty values
- $validated = array_filter($validated, function($value) {
- return $value !== '' && $value !== null && $value !== [];
- });
-
- // Update option
- $result = update_option($this->archiveKey, $validated);
-
- if ($result) {
- $this->archive = $validated;
- }
-
- return $result;
- }
-
- /**
- * Validate template syntax
- *
- * @param string $template Template string to validate
- * @param string $field Field name (for error messages)
- * @return bool|\WP_Error True if valid, WP_Error if invalid
- */
- private function validateTemplate(string $template, string $field): bool|\WP_Error
- {
- // Check for unclosed template tags
- $openCount = substr_count($template, '{{');
- $closeCount = substr_count($template, '}}');
-
- if ($openCount !== $closeCount) {
- return new \WP_Error(
- 'malformed_template',
- sprintf('Unclosed template tag in field "%s"', $field)
- );
- }
-
- // Extract all template variables
- preg_match_all('/\{\{([^}]+)\}\}/', $template, $matches);
-
- if (!empty($matches[1])) {
- foreach ($matches[1] as $variable) {
- $variable = trim($variable);
-
- // Check for empty variables
- if (empty($variable)) {
- return new \WP_Error(
- 'empty_variable',
- sprintf('Empty template variable in field "%s"', $field)
- );
- }
-
- // Check for invalid characters (basic validation)
- // Allows: field_name, field_name|filter, nested.field
- if (!preg_match('/^[a-zA-Z_][a-zA-Z0-9_.]*(?:\|[a-zA-Z_][a-zA-Z0-9_]*)*$/', $variable)) {
- return new \WP_Error(
- 'invalid_variable',
- sprintf('Invalid template variable "%s" in field "%s"', $variable, $field)
- );
- }
- }
- }
-
- return true;
- }
-}
diff --git a/inc/managers/SEO/FieldBuilder.php b/inc/managers/SEO/FieldBuilder.php
deleted file mode 100644
index 8d46316..0000000
--- a/inc/managers/SEO/FieldBuilder.php
+++ /dev/null
@@ -1,89 +0,0 @@
-<?php
-
-namespace JVBase\managers\SEO;
-
-
-/**
- * Field Builder - Fluent API for field definitions
- */
-class FieldBuilder
-{
- private SchemaBuilder $schema;
- private string $name;
- private array $definition = [];
-
- public function __construct(SchemaBuilder $schema, string $name, array $baseDefinition = [])
- {
- $this->schema = $schema;
- $this->name = $name;
- $this->definition = $baseDefinition;
- }
-
- public function type(string $type): self
- {
- $this->definition['type'] = $type;
- return $this;
- }
-
- public function label(string $label): self
- {
- $this->definition['label'] = $label;
- return $this;
- }
-
- public function description(string $description): self
- {
- $this->definition['description'] = $description;
- return $this;
- }
-
- public function transformer(string $transformer): self
- {
- $this->definition['transformer'] = $transformer;
- return $this;
- }
-
- public function required(bool $required = true): self
- {
- $this->definition['required'] = $required;
- return $this;
- }
-
- public function repeater(bool $repeater = true): self
- {
- $this->definition['repeater'] = $repeater;
- return $this;
- }
-
- public function options(array $options): self
- {
- $this->definition['options'] = $options;
- return $this;
- }
-
- public function placeholder(string $placeholder): self
- {
- $this->definition['placeholder'] = $placeholder;
- return $this;
- }
-
- public function fields(array $fields): self
- {
- $this->definition['fields'] = $fields;
- return $this;
- }
-
- public function default($default): self
- {
- $this->definition['default'] = $default;
- return $this;
- }
-
- /**
- * Finish building and register the field
- */
- public function __destruct()
- {
- $this->schema->registerField($this->name, $this->definition);
- }
-}
diff --git a/inc/managers/SEO/FieldOverrideBuilder.php b/inc/managers/SEO/FieldOverrideBuilder.php
deleted file mode 100644
index 2737fcc..0000000
--- a/inc/managers/SEO/FieldOverrideBuilder.php
+++ /dev/null
@@ -1,44 +0,0 @@
-<?php
-namespace JVBase\managers\SEO;
-
-
-
-/**
- * Field Override Builder - For customizing fields within a specific type
- */
-class FieldOverrideBuilder
-{
- private TypeBuilder $typeBuilder;
- private string $fieldName;
- private array $overrides = [];
-
- public function __construct(TypeBuilder $typeBuilder, string $fieldName)
- {
- $this->typeBuilder = $typeBuilder;
- $this->fieldName = $fieldName;
- }
-
- public function label(string $label): TypeBuilder
- {
- $this->overrides['label'] = $label;
- return $this->finish();
- }
-
- public function description(string $description): TypeBuilder
- {
- $this->overrides['description'] = $description;
- return $this->finish();
- }
-
- public function required(bool $required = true): TypeBuilder
- {
- $this->overrides['required'] = $required;
- return $this->finish();
- }
-
- private function finish(): TypeBuilder
- {
- $this->typeBuilder->setFieldOverride($this->fieldName, $this->overrides);
- return $this->typeBuilder;
- }
-}
diff --git a/inc/managers/SEO/SEOAdminPage.php b/inc/managers/SEO/SEOAdminPage.php
index 845b3c8..ec1f850 100644
--- a/inc/managers/SEO/SEOAdminPage.php
+++ b/inc/managers/SEO/SEOAdminPage.php
@@ -19,7 +19,6 @@
*/
class SEOAdminPage
{
- private ConfigManager $config;
// private SchemaBuilder $registry;
public function __construct()
diff --git a/inc/managers/SEO/SchemaBuilder.php b/inc/managers/SEO/SchemaBuilder.php
deleted file mode 100644
index d4a2ee6..0000000
--- a/inc/managers/SEO/SchemaBuilder.php
+++ /dev/null
@@ -1,1761 +0,0 @@
-<?php
-namespace JVBase\managers\SEO;
-
-use JVBase\registrar\Registrar;
-
-if (!defined('ABSPATH')) {
- exit;
-}
-
-/**
- * Schema.org Builder - Fluent API for field and type definitions
- *
- * Usage:
- * - Define fields: $schema->field('custom_name')->type('text')->label('Custom Label')
- * - Use presets: $schema->preset('name')->label('Override Label')
- * - Define types: $schema->type('WebSite')->fields(['name', 'url', 'description'])
- */
-class SchemaBuilder
-{
- private static ?self $instance = null;
- private array $fieldDefinitions = [];
- private array $typeDefinitions = [];
- private array $typeGroups = [];
-
- private ?FieldBuilder $currentField = null;
- private ?TypeBuilder $currentType = null;
-
- public array $schemaTypes = [
- 'WebSite' => 'Web Site',
- 'Organization' => 'Organization',
- 'LocalBusiness' => ' - Local Business',
- 'TattooParlor' => ' - - Tattoo Shop',
- 'HealthBusiness' => ' - - Health Business',
- 'FoodEstablishment' => ' - - Restaurant',
- 'WebPage' => 'Web Page',
- 'CollectionPage' => ' - Collection Page',
- 'DefinedTermSet' => ' - Glossary/Collection',
- 'FAQPage' => ' - FAQ Page',
- 'Person' => 'Person',
- 'CreativeWork' => 'Creative Work',
- 'DefinedTerm' => ' - Defined Term',
- 'VisualArtwork' => ' - Visual Artwork',
- 'Tattoo' => ' - - Tattoo',
- 'BeforeAfter' => ' - Before & After',
- 'Product' => 'Product',
- 'Event' => 'Event',
- ];
-
- private array $metaFields = ['metaTitle', 'metaDescription', 'socialPreviewImage', 'twitterImage'];
-
- private array $defaultMetaValues = [
- 'metaTitle' => '{{post_title}}',
- 'metaDescription' => '{{post_excerpt}}',
- 'socialPreviewImage' => '{{featured_image}}',
- 'twitterImage' => ''
- ];
-
- public static function getInstance(): self
- {
- if (self::$instance === null) {
- self::$instance = new self();
- }
- return self::$instance;
- }
-
- private function __construct()
- {
- $this->registerPresetFields();
- $this->registerTypes();
- $this->registerTypeGroups();
-
- do_action(BASE . 'schema_builder_loaded', $this);
- }
-
- /**
- * Start defining a custom field
- */
- public function field(string $name): FieldBuilder
- {
- $this->currentField = new FieldBuilder($this, $name);
- return $this->currentField;
- }
-
- /**
- * Start with a preset field (can be customized)
- */
- public function preset(string $name): FieldBuilder
- {
- $presets = $this->getPresetDefinitions();
-
- if (!isset($presets[$name])) {
- throw new \InvalidArgumentException("Unknown preset field: {$name}");
- }
-
- $this->currentField = new FieldBuilder($this, $name, $presets[$name]);
- return $this->currentField;
- }
-
- /**
- * Start defining a schema type
- */
- public function type(string $typeName): TypeBuilder
- {
- $this->currentType = new TypeBuilder($this, $typeName);
- return $this->currentType;
- }
-
- /**
- * Register a custom field definition
- */
- public function registerField(string $fieldName, array $config): void
- {
- $this->fieldDefinitions[$fieldName] = $config;
- }
-
- /**
- * Register a custom type definition
- */
- public function registerType(string $typeName, array $config): void
- {
- $this->typeDefinitions[$typeName] = $config;
- }
-
- /**
- * Get field definition
- */
- public function getFieldDefinition(string $fieldName): ?array
- {
- $definitions = apply_filters(BASE . 'schema_field_definitions', $this->fieldDefinitions);
- return $definitions[$fieldName] ?? null;
- }
-
-
- /**
- * Get type definition
- */
- public function getTypeDefinition(string $type): ?array
- {
- $definitions = $this->getTypeDefinitions();
- return $definitions[$type] ?? null;
- }
-
- /**
- * Get all type definitions
- */
- public function getTypeDefinitions(): array
- {
- return apply_filters(BASE . 'schema_type_definitions', $this->typeDefinitions);
- }
-
- public function getTypeGroups(): array
- {
- return $this->typeGroups;
- }
-
- public function getMetaFields(): array
- {
- return $this->metaFields;
- }
-
- public function getDefaultMetaValues(): array
- {
- return $this->defaultMetaValues;
- }
-
- /**
- * Get all fields for a specific type (with inheritance)
- */
- public function getFieldsForType(string $type): array
- {
- $fields = [];
-
- $typeDefinition = $this->getTypeDefinition($type);
- if (!$typeDefinition) {
- return $fields;
- }
-
- $fields = array_merge($fields, $typeDefinition['fields'] ?? []);
-
- // Handle inheritance
- if (!empty($typeDefinition['extends'])) {
- $parentFields = $this->getFieldsForType($typeDefinition['extends']);
- $fields = array_unique(array_merge($parentFields, $fields));
- }
-
- return $fields;
- }
-
- /**
- * Get Meta configuration for a schema type
- * This creates the form fields for the selected @type
- */
- public function getMetaConfigForType(string $type): array
- {
- $fields = $this->getFieldsForType($type);
- $config = [];
-
- foreach ($fields as $fieldName) {
- $fieldDef = $this->getFieldDefinition($fieldName);
- if ($fieldDef) {
- // Use the field name as the key (this IS the schema property)
- $config[$fieldName] = $fieldDef;
- }
- }
-
- return $config;
- }
-
- /**
- * Get types organized by group for UI display
- */
- public function getTypesByGroup(): array
- {
- $types = $this->getTypeDefinitions();
- $grouped = [];
-
- foreach ($types as $typeName => $config) {
- $group = $config['group'] ?? 'general';
-
- if (!isset($grouped[$group])) {
- $grouped[$group] = [
- 'label' => $this->typeGroups[$group] ?? ucfirst($group),
- 'types' => []
- ];
- }
-
- $grouped[$group]['types'][$typeName] = $config['label'] ?? $typeName;
- }
-
- return $grouped;
- }
-
- /**
- * Register a type group
- */
- public function registerGroup(string $key, string $label): void
- {
- $this->typeGroups[$key] = $label;
- }
-
- /**
- * Get post types for select options
- */
- public static function getContentPostTypes(): array
- {
- $options = ['' => '-- Select Post Type --'];
-
- $content = Registrar::getRegistered('post');
- if (!empty($content)){
- foreach ($content as $c) {
- $registrar = Registrar::getInstance($c);
- $options[jvbCheckBase($c)] = $registrar->getPlural();
- }
- }
-
- return $options;
- }
-
- /**
- * Get taxonomies for select options
- */
- public static function getContentTaxonomies(): array
- {
- $options = ['' => '-- Select Taxonomy --'];
-
-
- $tax = Registrar::getRegistered('term');
- if (!empty($tax)){
- foreach ($tax as $c) {
- $registrar = Registrar::getInstance($c);
- $options[jvbCheckBase($c)] = $registrar->getPlural();
- }
- }
-
- return $options;
- }
-
- /**
- * Define preset fields that can be reused
- */
- private function registerPresetFields(): void
- {
- // Special type selector field
- $this->field('type')
- ->type('select')
- ->label('Type')
- ->options(array_merge(['' => '-- Content Type'], $this->schemaTypes));
-
- /**************************************************************
- * META FIELDS
- **************************************************************/
- $this->field('metaTitle')
- ->type('text')
- ->label('Meta Title')
- ->description('Used in search results and when shared on social media. Leave blank to use default.');
-
- $this->field('metaDescription')
- ->type('textarea')
- ->label('Meta Description')
- ->description('Brief description shown in search results and social previews.');
-
- $this->field('socialPreviewImage')
- ->type('group')
- ->label('Social Preview Image')
- ->description('Image shown when shared on social media. Recommended: 1200x630px.')
- ->transformer('image_url_with_fallback')
- ->fields([
- 'source_field' => [
- 'type' => 'text',
- 'label' => 'Image Source Field',
- 'description' => 'Template field to get image from (e.g., {{post_thumbnail}}, {{custom_image_field}})',
- 'placeholder' => '{{post_thumbnail}}'
- ],
- 'fallback' => [
- 'type' => 'upload',
- 'label' => 'Fallback Image',
- 'description' => 'Used when source field returns no image'
- ]
- ]);
-
- $this->field('twitterImage')
- ->type('group')
- ->label('Twitter Card Image')
- ->description('Separate image for Twitter. Falls back to main social image if empty.')
- ->transformer('image_url_with_fallback')
- ->fields([
- 'source_field' => [
- 'type' => 'text',
- 'label' => 'Image Source Field',
- 'placeholder' => '{{twitter_specific_image}}'
- ],
- 'fallback' => [
- 'type' => 'upload',
- 'label' => 'Fallback Image'
- ]
- ]);
-
- /**************************************************************
- * QA FIELD FAQ
- **************************************************************/
- $this->field('question')
- ->type('text')
- ->label('Question')
- ->description('Template for the question (e.g., {{post_title}})')
- ->default('{{post_title}}')
- ->transformer('text');
-
- $this->field('answer')
- ->type('textarea')
- ->label('Answer')
- ->description('Template for the answer (e.g., {{post_content}})')
- ->default('{{post_content}}')
- ->transformer('text');
- /**************************************************************
- * CORE IDENTITY FIELDS
- **************************************************************/
- $this->field('name')
- ->type('text')
- ->label('Name')
- ->description('The name of the item')
- ->transformer('text');
-
- $this->field('alternateName')
- ->type('repeater')
- ->label('Alternate Name(s)')
- ->description('Alternative names or nicknames')
- ->transformer('text_array')
- ->fields([
- 'name' => [
- 'type' => 'text',
- 'label' => 'Name'
- ]
- ]);
-
- $this->field('legalName')
- ->type('text')
- ->label('Legal Name')
- ->description('The official legal name')
- ->transformer('text');
-
- $this->field('description')
- ->type('textarea')
- ->label('Description')
- ->description('A description of the item')
- ->transformer('text');
-
- $this->field('disambiguatingDescription')
- ->type('textarea')
- ->label('Disambiguating Description')
- ->description('Brief clarification to distinguish from similar items')
- ->transformer('text');
-
- $this->field('url')
- ->type('url')
- ->label('URL')
- ->description('Website URL')
- ->transformer('url');
-
- $this->field('slogan')
- ->type('text')
- ->label('Slogan')
- ->description('A slogan or tagline')
- ->transformer('text');
-
- /**************************************************************
- * BEFORE/AFTER FIELDS
- **************************************************************/
- $this->field('about')
- ->type('reference')
- ->label('About')
- ->transformer('reference');
-
- $this->field('temporalCoverage')
- ->type('text')
- ->label('Time Period')
- ->description('ISO 8601 format: 2024-01-10/2024-09-01')
- ->transformer('text');
-
- $this->field('associatedMedia')
- ->type('repeater')
- ->label('Associated Media')
- ->transformer('image_object_array')
- ->fields([
- 'image' => ['type' => 'image', 'label' => 'Image'],
- 'caption' => ['type' => 'text', 'label' => 'Caption'],
- 'position' => ['type' => 'number', 'label' => 'Position'],
- ]);
-
- $this->field('additionalProperty')
- ->type('repeater')
- ->label('Additional Properties')
- ->transformer('property_value_array')
- ->fields([
- 'name' => ['type' => 'text', 'label' => 'Property Name'],
- 'value' => ['type' => 'text', 'label' => 'Value'],
- ]);
-
- /**************************************************************
- * IMAGE FIELDS
- **************************************************************/
- $this->field('image')
- ->type('upload')
- ->label('Image')
- ->description('Primary image')
- ->transformer('image_object');
-
- $this->field('logo')
- ->type('upload')
- ->label('Logo')
- ->transformer('image_object');
-
- $this->field('photo')
- ->type('upload')
- ->label('Photo of Location')
- ->transformer('image_object');
-
- $this->field('video')
- ->type('upload')
- ->label('Video')
- ->transformer('video_object');
-
- /**************************************************************
- * LOCATION & CONTACT FIELDS
- **************************************************************/
- $this->field('location')
- ->type('location')
- ->label('Location')
- ->description('Physical location with address and coordinates')
- ->transformer('location_complex');
-
- $this->field('address')
- ->type('location')
- ->label('Address')
- ->description('Postal address')
- ->transformer('postal_address');
-
- $this->field('geo')
- ->type('group')
- ->label('Geographic Coordinates')
- ->description('Latitude and longitude')
- ->transformer('geo_coordinates')
- ->fields([
- 'latitude' => [
- 'type' => 'text',
- 'subtype' => 'number',
- 'label' => 'Latitude',
- ],
- 'longitude' => [
- 'type' => 'text',
- 'subtype' => 'number',
- 'label' => 'Longitude',
- ]
- ]);
-
- $this->field('telephone')
- ->type('text')
- ->label('Telephone')
- ->description('Phone number')
- ->transformer('text');
-
- $this->field('faxNumber')
- ->type('text')
- ->label('Fax Number')
- ->transformer('text');
-
- $this->field('email')
- ->type('email')
- ->label('Email')
- ->description('Email address')
- ->transformer('email');
-
- $this->field('contactPoint')
- ->type('repeater')
- ->label('Contact Points')
- ->description('Additional contact methods')
- ->transformer('contact_point_array')
- ->fields([
- 'contactType' => [
- 'type' => 'text',
- 'label' => 'Contact Type',
- 'description' => 'e.g., customer service, sales',
- ],
- 'telephone' => [
- 'type' => 'text',
- 'label' => 'Phone',
- ],
- 'email' => [
- 'type' => 'email',
- 'label' => 'Email',
- ]
- ]);
-
- $this->field('potentialAction')
- ->type('repeater')
- ->label('Potential Actions')
- ->transformer('potential_action_array')
- ->fields([
- 'action' => [
- 'type' => 'radio',
- 'label' => 'Action',
- 'options' => [
- 'searchAction' => 'Search Action',
- 'communicateAction' => 'Contact Action',
- 'scheduleAction' => 'Reserve Action',
- 'applyAction' => 'Estimate Action'
- ]
- ],
- 'name' => [
- 'type' => 'text',
- 'label' => 'Name',
- ],
- 'target' => [
- 'type' => 'url',
- 'label' => 'Action URL',
- ],
- 'description' => [
- 'type' => 'textarea',
- 'label' => 'Description'
- ]
- ])
- ->default([
- [
- 'action' => 'searchAction',
- 'target' => get_home_url(null, '/search/?s={query}')
- ]
- ]);
-
- /**************************************************************
- * HOURS & OPERATIONAL FIELDS
- **************************************************************/
- $this->field('openingHours')
- ->type('group')
- ->label('Opening Hours')
- ->description('Business hours specification')
- ->transformer('opening_hours_specification')
- ->fields([
- 'monday' => [
- 'type' => 'group',
- 'label' => 'Monday',
- 'fields' => [
- 'opens' => ['type' => 'time', 'label' => 'Opens'],
- 'closes' => ['type' => 'time', 'label' => 'Closes']
- ]
- ],
- 'tuesday' => [
- 'type' => 'group',
- 'label' => 'Tuesday',
- 'fields' => [
- 'opens' => ['type' => 'time', 'label' => 'Opens'],
- 'closes' => ['type' => 'time', 'label' => 'Closes']
- ]
- ],
- 'wednesday' => [
- 'type' => 'group',
- 'label' => 'Wednesday',
- 'fields' => [
- 'opens' => ['type' => 'time', 'label' => 'Opens'],
- 'closes' => ['type' => 'time', 'label' => 'Closes']
- ]
- ],
- 'thursday' => [
- 'type' => 'group',
- 'label' => 'Thursday',
- 'fields' => [
- 'opens' => ['type' => 'time', 'label' => 'Opens'],
- 'closes' => ['type' => 'time', 'label' => 'Closes']
- ]
- ],
- 'friday' => [
- 'type' => 'group',
- 'label' => 'Friday',
- 'fields' => [
- 'opens' => ['type' => 'time', 'label' => 'Opens'],
- 'closes' => ['type' => 'time', 'label' => 'Closes']
- ]
- ],
- 'saturday' => [
- 'type' => 'group',
- 'label' => 'Saturday',
- 'fields' => [
- 'opens' => ['type' => 'time', 'label' => 'Opens'],
- 'closes' => ['type' => 'time', 'label' => 'Closes']
- ]
- ],
- 'sunday' => [
- 'type' => 'group',
- 'label' => 'Sunday',
- 'fields' => [
- 'opens' => ['type' => 'time', 'label' => 'Opens'],
- 'closes' => ['type' => 'time', 'label' => 'Closes']
- ]
- ],
- ]);
-
- $this->field('hasPart')
- ->type('repeater')
- ->label('Site Navigation')
- ->description('Main navigation menu items')
- ->transformer('navigation_array')
- ->fields([
- 'name' => ['type' => 'text', 'label' => 'Link Text'],
- 'url' => ['type' => 'url', 'label' => 'URL'],
- 'description' => ['type' => 'textarea', 'label' => 'Description (optional)'],
- ]);
-
- $this->field('priceRange')
- ->type('text')
- ->label('Price Range')
- ->description('e.g., $$, $100-$500')
- ->transformer('text');
-
- $this->field('currenciesAccepted')
- ->type('checkbox')
- ->label('Currencies Accepted')
- ->options(['CAD' => 'CAD', 'USD' => 'USD'])
- ->transformer('text_array');
-
- $this->field('paymentAccepted')
- ->type('checkbox')
- ->label('Payment Methods')
- ->options([
- 'Cash' => 'Cash',
- 'Credit Card' => 'Credit Card',
- 'Debit' => 'Debit',
- 'Google Pay' => 'Google Pay',
- 'Apple Pay' => 'Apple Pay',
- 'PayPal' => 'PayPal',
- 'Interac' => 'Interac',
- 'AMEX' => 'AMEX',
- ])
- ->transformer('text_array');
-
- /**************************************************************
- * ORGANIZATION & BUSINESS FIELDS
- **************************************************************/
- $this->field('foundingDate')
- ->type('date')
- ->label('Founding Date')
- ->description('Date the organization was founded')
- ->transformer('date');
-
- $this->field('dissolutionDate')
- ->type('date')
- ->label('Dissolution Date')
- ->description('Date the organization closed')
- ->transformer('date');
-
- $this->field('founders')
- ->type('repeater')
- ->label('Founders')
- ->description('Name of founder(s)')
- ->transformer('person_array')
- ->fields([
- 'name' => ['type' => 'text', 'label' => 'Name'],
- 'url' => ['type' => 'url', 'label' => 'URL'],
- ]);
-
- $this->field('numberOfEmployees')
- ->type('text')
- ->label('Number of Employees')
- ->transformer('number');
-
- $this->field('taxID')
- ->type('text')
- ->label('Tax ID')
- ->description('Tax identification number')
- ->transformer('text');
-
- $this->field('vatID')
- ->type('text')
- ->label('VAT ID')
- ->description('VAT registration number')
- ->transformer('text');
-
- $this->field('duns')
- ->type('text')
- ->label('D-U-N-S Number')
- ->description('Dun & Bradstreet number')
- ->transformer('text');
-
- /**************************************************************
- * SOCIAL & LINKS
- **************************************************************/
- $this->field('sameAs')
- ->type('repeater')
- ->label('Social Media & Links')
- ->description('URLs to social profiles and related pages')
- ->transformer('url_array')
- ->fields([
- 'url' => ['type' => 'url', 'label' => 'URL']
- ]);
-
- /**************************************************************
- * AREA & GEOGRAPHY
- **************************************************************/
- $this->field('areaServed')
- ->type('repeater')
- ->label('Area Served')
- ->description('Geographic areas served')
- ->transformer('text_array')
- ->fields([
- 'name' => ['type' => 'text', 'label' => 'Location Name'],
- 'url' => ['type' => 'url', 'label' => 'Wikipedia Page'],
- ]);
-
- $this->field('hasMap')
- ->type('url')
- ->label('Map URL')
- ->description('Link to a map (e.g., Google Maps)')
- ->transformer('url');
-
- /**************************************************************
- * AMENITIES & FEATURES
- **************************************************************/
- $this->field('amenityFeature')
- ->type('checkbox')
- ->label('Amenity Features')
- ->description('Available facilities and features')
- ->transformer('text')
- ->options([
- 'Wheelchair Accessible' => 'Wheelchair Accessible',
- 'Free Parking' => 'Free Parking',
- 'Private Rooms' => 'Private Rooms',
- 'Air Conditioning' => 'Air Conditioning',
- 'WiFi' => 'WiFi',
- 'Gender Neutral Restroom' => 'Gender Neutral Restroom',
- 'LGBTQ+ Friendly' => 'LGBTQ+ Friendly',
- 'Sterilization Room' => 'Sterilization Room',
- 'Refreshments Available' => 'Refreshments Available',
- 'Street Level Access' => 'Street Level Access',
- 'Single Use Needles' => 'Single Use Needles',
- 'Consultation Room' => 'Consultation Room',
- 'Aftercare Products Available' => 'Aftercare Products Available',
- 'Walk-Ins Welcome' => 'Walk-Ins Welcome',
- 'By Appointment' => 'By Appointment Only',
- ]);
-
- /**************************************************************
- * LANGUAGES
- **************************************************************/
- $this->field('availableLanguage')
- ->type('repeater')
- ->label('Languages Available')
- ->description('Languages spoken or supported')
- ->transformer('language_array')
- ->fields([
- 'language' => ['type' => 'text', 'label' => 'Language']
- ]);
-
- $this->field('knowsLanguage')
- ->type('repeater')
- ->label('Languages Known')
- ->description('Languages the person knows')
- ->transformer('language_array')
- ->fields([
- 'language' => ['type' => 'text', 'label' => 'Language']
- ]);
-
- $this->field('inLanguage')
- ->type('radio')
- ->label('In Language')
- ->options([
- 'en-CA' => 'English, Canadian',
- 'en-US' => 'English, American',
- 'fr-CA' => 'French, Canadian'
- ])
- ->transformer('text');
-
- /**************************************************************
- * RATINGS & REVIEWS
- **************************************************************/
- $this->field('aggregateRating')
- ->type('group')
- ->label('Aggregate Rating')
- ->description('Overall rating and review count')
- ->transformer('aggregate_rating')
- ->fields([
- 'ratingValue' => [
- 'type' => 'text',
- 'subtype' => 'number',
- 'label' => 'Rating Value',
- 'description' => 'Average rating (e.g., 4.5)',
- ],
- 'bestRating' => [
- 'type' => 'text',
- 'subtype' => 'number',
- 'label' => 'Best Rating',
- 'default' => 5,
- 'description' => 'Highest possible rating (e.g., 5)',
- ],
- 'worstRating' => [
- 'type' => 'text',
- 'subtype' => 'number',
- 'label' => 'Worst Rating',
- 'default' => 1,
- 'description' => 'Lowest possible rating (e.g., 1)',
- ],
- 'ratingCount' => [
- 'type' => 'text',
- 'subtype' => 'number',
- 'label' => 'Rating Count',
- 'description' => 'Total number of ratings',
- ],
- 'reviewCount' => [
- 'type' => 'text',
- 'subtype' => 'number',
- 'label' => 'Review Count',
- 'description' => 'Total number of reviews',
- ]
- ]);
-
- /**************************************************************
- * KEYWORDS & CATEGORIZATION
- **************************************************************/
- $this->field('keywords')
- ->type('repeater')
- ->label('Keywords')
- ->description('Keywords or tags')
- ->transformer('text_array')
- ->fields([
- 'keyword' => ['type' => 'text', 'label' => 'Keyword']
- ]);
-
- /**************************************************************
- * PERSON FIELDS
- **************************************************************/
- $this->field('givenName')
- ->type('text')
- ->label('First Name')
- ->transformer('text');
-
- $this->field('familyName')
- ->type('text')
- ->label('Last Name')
- ->transformer('text');
-
- $this->field('honorificPrefix')
- ->type('text')
- ->label('Honorific Prefix')
- ->description('e.g., Dr., Mr., Ms.')
- ->transformer('text');
-
- $this->field('honorificSuffix')
- ->type('text')
- ->label('Honorific Suffix')
- ->description('e.g., PhD, MD')
- ->transformer('text');
-
- $this->field('jobTitle')
- ->type('text')
- ->label('Job Title')
- ->transformer('text');
-
- $this->field('birthDate')
- ->type('date')
- ->label('Birth Date')
- ->description('For public figures')
- ->transformer('date');
-
- $this->field('gender')
- ->type('text')
- ->label('Gender')
- ->transformer('text');
-
- /**************************************************************
- * CREATIVE WORK FIELDS
- **************************************************************/
- $this->field('author')
- ->type('text')
- ->label('Author')
- ->description('Author name or reference')
- ->transformer('person_reference');
-
- $this->field('creator')
- ->type('text')
- ->label('Creator')
- ->description('Creator name or reference')
- ->transformer('text');
-
- $this->field('dateCreated')
- ->type('text')
- ->label('Date Created')
- ->transformer('text');
-
- $this->field('datePublished')
- ->type('text')
- ->label('Date Published')
- ->default('{{post_date')
- ->transformer('text');
-
- $this->field('dateModified')
- ->type('text')
- ->default('{{post_modified}}')
- ->label('Date Modified')
- ->transformer('text');
-
- /**************************************************************
- * VISUAL ARTWORK FIELDS
- **************************************************************/
- $this->field('artform')
- ->type('text')
- ->label('Art Form')
- ->description('e.g., Painting, Sculpture, Tattoo')
- ->transformer('text');
-
- $this->field('artMedium')
- ->type('text')
- ->label('Art Medium')
- ->description('e.g., Oil, Watercolor, Ink')
- ->transformer('text');
-
- $this->field('artworkSurface')
- ->type('text')
- ->label('Artwork Surface')
- ->description('e.g., Canvas, Paper, Skin')
- ->transformer('text');
-
- $this->field('width')
- ->type('text')
- ->label('Width')
- ->description('Width with unit (e.g., 10cm, 5in)')
- ->transformer('dimension');
-
- $this->field('height')
- ->type('text')
- ->label('Height')
- ->description('Height with unit (e.g., 15cm, 8in)')
- ->transformer('dimension');
-
- /**************************************************************
- * EVENT FIELDS
- **************************************************************/
- $this->field('startDate')
- ->type('text')
- ->default('{{start_date}}')
- ->label('Start Date/Time')
- ->transformer('text');
-
- $this->field('endDate')
- ->type('text')
- ->default('{{end_date}}')
- ->label('End Date/Time')
- ->transformer('text');
-
- $this->field('eventStatus')
- ->type('select')
- ->label('Event Status')
- ->options([
- 'https://schema.org/EventScheduled' => 'Scheduled',
- 'https://schema.org/EventCancelled' => 'Cancelled',
- 'https://schema.org/EventPostponed' => 'Postponed',
- 'https://schema.org/EventRescheduled' => 'Rescheduled',
- ])
- ->transformer('text');
-
- $this->field('eventAttendanceMode')
- ->type('select')
- ->label('Attendance Mode')
- ->options([
- 'https://schema.org/OfflineEventAttendanceMode' => 'In-Person',
- 'https://schema.org/OnlineEventAttendanceMode' => 'Online',
- 'https://schema.org/MixedEventAttendanceMode' => 'Mixed/Hybrid',
- ])
- ->transformer('text');
-
- /**************************************************************
- * PRODUCT FIELDS
- **************************************************************/
- $this->field('brand')
- ->type('group')
- ->label('Brand')
- ->transformer('brand_object')
- ->fields([
- 'type' => [
- 'type' => 'select',
- 'label' => 'Brand Type',
- 'options' => [
- 'text' => 'Text Only',
- 'organization' => 'Organization/Brand',
- ]
- ],
- 'name' => [
- 'type' => 'text',
- 'label' => 'Brand Name',
- ],
- 'url' => [
- 'type' => 'url',
- 'label' => 'Brand Website',
- 'condition' => [
- 'field' => 'type',
- 'value' => 'organization'
- ]
- ],
- 'logo' => [
- 'type' => 'upload',
- 'label' => 'Brand Logo',
- 'condition' => [
- 'field' => 'type',
- 'value' => 'organization'
- ]
- ],
- ]);
-
- $this->field('sku')
- ->type('text')
- ->label('SKU')
- ->description('Stock Keeping Unit')
- ->transformer('text');
-
- $this->field('gtin')
- ->type('text')
- ->label('GTIN')
- ->description('Global Trade Item Number')
- ->transformer('text');
-
- /**************************************************************
- * SERVICES & OFFERS
- **************************************************************/
- $this->field('hasOfferCatalog')
- ->type('group')
- ->label('Offer Catalog')
- ->transformer('offer_catalog_array')
- ->fields([
- 'source' => [
- 'type' => 'select',
- 'label' => 'Source',
- 'options' => [
- 'auto' => 'Auto from post type',
- 'manual' => 'Manual entry',
- ]
- ],
- 'post_type' => [
- 'type' => 'select',
- 'label' => 'Post Type',
- 'options' => self::getContentPostTypes(),
- 'condition' => ['field' => 'source', 'value' => 'auto']
- ],
- 'group_by_taxonomy' => [
- 'type' => 'true_false',
- 'label' => 'Group by category/taxonomy',
- 'condition' => ['field' => 'source', 'value' => 'auto']
- ],
- 'taxonomy' => [
- 'type' => 'select',
- 'label' => 'Taxonomy',
- 'options' => self::getContentTaxonomies(),
- 'condition' => ['field' => 'group_by_taxonomy', 'value' => '1']
- ],
- 'manual_items' => [
- 'type' => 'repeater',
- 'label' => 'Manual Offers',
- 'condition' => ['field' => 'source', 'value' => 'manual'],
- 'fields' => [
- 'type' => ['type' => 'radio', 'label' => 'Type', 'options' => ['Service' => 'Service', 'Product' => 'Product']],
- 'name' => ['type' => 'text', 'label' => 'Offer Name'],
- 'description' => ['type' => 'textarea', 'label' => 'Description'],
- 'price' => ['type' => 'text', 'label' => 'Price'],
- ]
- ]
- ]);
-
- $this->field('knowsAbout')
- ->type('repeater')
- ->label('Areas of Expertise')
- ->description('Skills and specialties')
- ->transformer('text_array')
- ->fields([
- 'topic' => ['type' => 'text', 'label' => 'Topic']
- ]);
-
- /**************************************************************
- * CREDENTIALS & CERTIFICATIONS
- **************************************************************/
- $this->field('hasCredential')
- ->type('repeater')
- ->label('Credentials / Certifications')
- ->description('Professional certifications')
- ->transformer('credential_array')
- ->fields([
- 'credentialCategory' => ['type' => 'text', 'label' => 'Category'],
- 'name' => ['type' => 'text', 'label' => 'Name'],
- 'issuedBy' => ['type' => 'text', 'label' => 'Issued By']
- ]);
-
- $this->field('award')
- ->type('repeater')
- ->label('Awards & Recognition')
- ->transformer('text_array')
- ->fields([
- 'award' => ['type' => 'text', 'label' => 'Award']
- ]);
-
- $this->field('serviceArea')
- ->type('repeater')
- ->label('Service Areas')
- ->description('Geographic areas served (cities, neighborhoods, or radius)')
- ->transformer('service_area_array')
- ->fields([
- 'name' => ['type' => 'text', 'label' => 'Area Name'],
- 'type' => [
- 'type' => 'select',
- 'label' => 'Type',
- 'options' => [
- 'City' => 'City',
- 'AdministrativeArea' => 'Region/Province',
- 'GeoCircle' => 'Radius',
- ]
- ],
- 'radius' => ['type' => 'text', 'subtype' => 'number', 'label' => 'Radius (km)'],
- ]);
-
- $this->field('makesOffer')
- ->type('group')
- ->label('Featured Offerings')
- ->transformer('offers_from_posts')
- ->fields([
- 'source' => [
- 'type' => 'select',
- 'label' => 'Source',
- 'options' => ['auto' => 'Auto from post type', 'manual' => 'Manual entry']
- ],
- 'post_type' => [
- 'type' => 'select',
- 'label' => 'Post Type',
- 'options' => self::getContentPostTypes(),
- 'condition' => ['field' => 'source', 'value' => 'auto']
- ],
- 'limit' => [
- 'type' => 'text',
- 'subtype' => 'number',
- 'label' => 'Featured Count',
- 'default' => 5,
- 'condition' => ['field' => 'source', 'value' => 'auto']
- ],
- 'manual_items' => [
- 'type' => 'repeater',
- 'label' => 'Manual Offers',
- 'condition' => ['field' => 'source', 'value' => 'manual'],
- 'fields' => [
- 'name' => ['type' => 'text', 'label' => 'Offer Name'],
- 'description' => ['type' => 'textarea', 'label' => 'Description'],
- 'price' => ['type' => 'text', 'label' => 'Price/Range'],
- ]
- ]
- ]);
-
- $this->field('hasMenu')
- ->type('group')
- ->label('Menu Items')
- ->description('Auto-populate from post type or enter manually')
- ->transformer('menu_from_posts')
- ->fields([
- 'source' => [
- 'type' => 'select',
- 'label' => 'Source',
- 'options' => ['auto' => 'Auto from post type', 'manual' => 'Manual entry']
- ],
- 'post_type' => [
- 'type' => 'select',
- 'label' => 'Post Type',
- 'options' => self::getContentPostTypes(),
- 'condition' => ['field' => 'source', 'value' => 'auto']
- ],
- 'limit' => [
- 'type' => 'text',
- 'subtype' => 'number',
- 'label' => 'Number of items',
- 'default' => 10,
- 'condition' => ['field' => 'source', 'value' => 'auto']
- ],
- 'orderby' => [
- 'type' => 'select',
- 'label' => 'Order By',
- 'options' => ['menu_order' => 'Menu Order', 'title' => 'Title', 'date' => 'Date'],
- 'condition' => ['field' => 'source', 'value' => 'auto']
- ],
- 'manual_items' => [
- 'type' => 'repeater',
- 'label' => 'Manual Items',
- 'condition' => ['field' => 'source', 'value' => 'manual'],
- 'fields' => [
- 'name' => ['type' => 'text', 'label' => 'Item Name'],
- 'description' => ['type' => 'textarea', 'label' => 'Description'],
- 'price' => ['type' => 'text', 'label' => 'Price'],
- ]
- ]
- ]);
-
- /**************************************************************
- * FAQ FIELDS
- **************************************************************/
- $this->field('faq')
- ->type('repeater')
- ->label('FAQ Items')
- ->description('Question and Answer pairs')
- ->transformer('faq_array')
- ->fields([
- 'question' => ['type' => 'text', 'label' => 'Question'],
- 'answer' => ['type' => 'text', 'label' => 'Answer']
- ]);
-
- /**************************************************************
- * FOOD & CUISINE
- **************************************************************/
- $this->field('servesCuisine')
- ->type('repeater')
- ->label('Cuisine Types')
- ->description('Types of cuisine served')
- ->transformer('text_array')
- ->fields([
- 'cuisine' => ['type' => 'text', 'label' => 'Cuisine Type', 'description' => 'e.g., Italian, Mexican, Vegan']
- ]);
-
- $this->field('menu')
- ->type('url')
- ->label('Menu URL')
- ->description('Link to online menu')
- ->transformer('url');
-
- /**************************************************************
- * PRODUCT/OFFER FIELDS
- **************************************************************/
- $this->field('offers')
- ->type('group')
- ->label('Offer Details')
- ->description('Price and availability information')
- ->transformer('offer_object')
- ->fields([
- 'price' => ['type' => 'text', 'subtype' => 'number', 'label' => 'Price'],
- 'priceCurrency' => ['type' => 'text', 'label' => 'Currency', 'default' => 'USD'],
- 'availability' => [
- 'type' => 'select',
- 'label' => 'Availability',
- 'options' => [
- 'InStock' => 'In Stock',
- 'PreOrder' => 'Pre-Order',
- 'SoldOut' => 'Sold Out',
- 'OutOfStock' => 'Out of Stock',
- 'Discontinued' => 'Discontinued',
- ]
- ],
- 'validFrom' => ['type' => 'text', 'label' => 'Valid From', 'default' => '{{validFrom}}'],
- 'validThrough' => ['type' => 'text', 'label' => 'Valid Through', 'default' => '{{validTo}}'],
- ]);
-
- $this->field('mpn')
- ->type('text')
- ->label('Manufacturer Part Number')
- ->transformer('text');
-
- /**************************************************************
- * BUSINESS POLICIES & FEATURES
- **************************************************************/
- $this->field('isAccessibleForFree')
- ->type('true_false')
- ->label('Accessible For Free')
- ->description('Is this service/location accessible without payment?')
- ->transformer('boolean');
-
- $this->field('smokingAllowed')
- ->type('true_false')
- ->label('Smoking Allowed')
- ->transformer('boolean');
-
- $this->field('petsAllowed')
- ->type('select')
- ->label('Pets Allowed')
- ->options([
- '' => 'Not specified',
- 'yes' => 'Yes',
- 'no' => 'No',
- ])
- ->transformer('boolean');
-
- /**************************************************************
- * ORGANIZATION RELATIONSHIPS
- **************************************************************/
- $this->field('parentOrganization')
- ->type('group')
- ->label('Parent Organization')
- ->description('Organization this is a part of')
- ->transformer('organization_reference')
- ->fields([
- 'name' => ['type' => 'text', 'label' => 'Organization Name'],
- 'url' => ['type' => 'url', 'label' => 'Website'],
- ]);
-
- $this->field('subOrganization')
- ->type('repeater')
- ->label('Sub-Organizations')
- ->description('Child organizations or departments')
- ->transformer('organization_reference_array')
- ->fields([
- 'name' => ['type' => 'text', 'label' => 'Organization Name'],
- 'url' => ['type' => 'url', 'label' => 'Website'],
- ]);
-
- $this->field('employee')
- ->type('repeater')
- ->label('Employees')
- ->transformer('person_reference_array')
- ->fields([
- 'name' => ['type' => 'text', 'label' => 'Name'],
- 'jobTitle' => ['type' => 'text', 'label' => 'Job Title'],
- ]);
-
- /**************************************************************
- * HOSPITALITY
- **************************************************************/
- $this->field('checkinTime')
- ->type('time')
- ->label('Check-in Time')
- ->transformer('time');
-
- $this->field('checkoutTime')
- ->type('time')
- ->label('Check-out Time')
- ->transformer('time');
-
- $this->field('starRating')
- ->type('group')
- ->label('Star Rating')
- ->transformer('rating_object')
- ->fields([
- 'ratingValue' => ['type' => 'text', 'subtype' => 'number', 'label' => 'Rating', 'min' => 1, 'max' => 5]
- ]);
-
- /**************************************************************
- * REVIEW & RATING
- **************************************************************/
- $this->field('review')
- ->type('repeater')
- ->label('Reviews')
- ->transformer('review_array')
- ->fields([
- 'author' => ['type' => 'text', 'label' => 'Reviewer Name'],
- 'reviewRating' => ['type' => 'text', 'subtype' => 'number', 'label' => 'Rating', 'min' => 1, 'max' => 5],
- 'reviewBody' => ['type' => 'textarea', 'label' => 'Review Text'],
- 'datePublished' => ['type' => 'date', 'label' => 'Date'],
- ]);
-
- /**************************************************************
- * HEALTH & MEDICAL
- **************************************************************/
- $this->field('medicalSpecialty')
- ->type('repeater')
- ->label('Medical Specialties')
- ->transformer('text_array')
- ->fields([
- 'specialty' => ['type' => 'text', 'label' => 'Specialty']
- ]);
-
- $this->field('healthcareService')
- ->type('repeater')
- ->label('Healthcare Services')
- ->transformer('text_array')
- ->fields([
- 'service' => ['type' => 'text', 'label' => 'Service']
- ]);
-
- /***************************************************************
-
- ***************************************************************/
- $this->field('termCode')
- ->type('text')
- ->label('Term Code')
- ->description('Unique identifier or code for this term')
- ->transformer('text');
-
- $this->field('hasDefinedTerm')
- ->type('group')
- ->label('Defined Terms')
- ->description('Terms included in this glossary or collection')
- ->transformer('defined_terms_from_posts')
- ->fields([
- 'source' => [
- 'type' => 'select',
- 'label' => 'Source',
- 'options' => ['auto' => 'Auto from post type', 'manual' => 'Manual entry']
- ],
- 'post_type' => [
- 'type' => 'select',
- 'label' => 'Post Type',
- 'options' => self::getContentPostTypes(),
- 'condition' => ['field' => 'source', 'value' => 'auto']
- ],
- 'taxonomy' => [
- 'type' => 'select',
- 'label' => 'Filter by Taxonomy',
- 'options' => self::getContentTaxonomies(),
- 'condition' => ['field' => 'source', 'value' => 'auto']
- ]
- ]);
- }
-
-
- /**
- * Get raw preset definitions (before filters)
- */
- private function getPresetDefinitions(): array
- {
- return $this->fieldDefinitions;
- }
-
- /**
- * Define schema types
- */
- private function registerTypes(): void
- {
- /**************************************************************
- * GENERAL / SITE-WIDE
- **************************************************************/
- $this->type('WebSite')
- ->label('Website')
- ->group('general')
- ->fields([
- 'name',
- 'description',
- 'url',
- 'inLanguage',
- 'potentialAction',
- 'hasPart',
- 'creator',
- ]);
-
- /**************************************************************
- * PAGE TYPES
- **************************************************************/
- $this->type('WebPage')
- ->label('Web Page')
- ->group('page')
- ->fields([
- 'type',
- 'name',
- 'description',
- 'url',
- 'image',
- 'datePublished',
- 'dateModified',
- 'author',
- ]);
-
- $this->type('CollectionPage')
- ->label('Collection Page')
- ->group('page')
- ->extends('WebPage');
-
- $this->type('FAQPage')
- ->label('FAQ Page')
- ->group('page')
- ->extends('WebPage')
- ->addFields([
- 'question',
- 'answer'
- ]);
-
- $this->type('Place')
- ->label('Place')
- ->group('general')
- ->fields([
- 'type',
- 'name',
- 'description',
- 'url',
- 'image',
- 'geo',
- 'address',
- 'sameAs',
- ]);
-
- $this->type('City')
- ->label('City')
- ->group('general')
- ->extends('Place')
- ->addFields([
- 'containedInPlace',
- ]);
- $this->field('containedInPlace')
- ->type('reference')
- ->label('Contained In')
- ->description('Parent place (province, country)')
- ->transformer('reference');
- /**************************************************************
- * ORGANIZATION & BUSINESS
- **************************************************************/
- $this->type('Organization')
- ->label('Organization')
- ->group('business')
- ->fields([
- 'type',
- 'name',
- 'legalName',
- 'alternateName',
- 'description',
- 'url',
- 'logo',
- 'image',
- 'email',
- 'telephone',
- 'sameAs',
- 'founders',
- 'foundingDate',
- 'numberOfEmployees',
- 'taxID',
- 'vatID',
- 'duns',
- 'slogan',
- 'disambiguatingDescription',
- ]);
-
- $this->type('LocalBusiness')
- ->label('Local Business')
- ->group('business')
- ->extends('Organization')
- ->addFields([
- 'location',
- 'openingHours',
- 'priceRange',
- 'currenciesAccepted',
- 'paymentAccepted',
- 'serviceArea',
- 'areaServed',
- 'hasMap',
- 'amenityFeature',
- 'availableLanguage',
- 'hasOfferCatalog',
- 'makesOffer',
- 'hasMenu',
- 'knowsAbout',
- 'hasCredential',
- 'aggregateRating',
- 'review',
- 'award',
- ]);
-
- $this->type('TattooParlor')
- ->label('Tattoo Parlor')
- ->group('business')
- ->extends('LocalBusiness')
- ->addFields([
- 'makesOffer',
- 'hasOfferCatalog',
- 'award',
- ]);
-
- $this->type('HealthBusiness')
- ->label('Health Business')
- ->group('business')
- ->extends('LocalBusiness');
-
- $this->type('FoodEstablishment')
- ->label('Food Establishment')
- ->group('business')
- ->extends('LocalBusiness')
- ->addFields([
- 'hasMenu',
- 'servesCuisine',
- ]);
-
- $this->type('FoodTruck')
- ->label('Food Truck')
- ->group('business')
- ->extends('FoodEstablishment')
- ->addField('serviceArea');
-
- $this->type('Store')
- ->label('Store / Shop')
- ->group('business')
- ->extends('LocalBusiness')
- ->addFields([
- 'hasOfferCatalog',
- 'makesOffer',
- ]);
-
- $this->type('ProfessionalService')
- ->label('Professional Service')
- ->group('business')
- ->extends('LocalBusiness')
- ->addFields([
- 'serviceArea',
- 'makesOffer',
- 'award',
- ]);
-
- /**************************************************************
- * PERSON
- **************************************************************/
- $this->type('Person')
- ->label('Person')
- ->group('person')
- ->fields([
- 'type',
- 'name',
- 'givenName',
- 'familyName',
- 'honorificPrefix',
- 'honorificSuffix',
- 'alternateName',
- 'description',
- 'image',
- 'url',
- 'email',
- 'telephone',
- 'sameAs',
- 'jobTitle',
- 'knowsLanguage',
- 'knowsAbout',
- 'award',
- 'hasCredential',
- 'birthDate',
- 'gender',
- ]);
-
- /**************************************************************
- * CREATIVE WORKS
- **************************************************************/
- $this->type('CreativeWork')
- ->label('Creative Work')
- ->group('creative')
- ->fields([
- 'type',
- 'name',
- 'description',
- 'image',
- 'author',
- 'creator',
- 'dateCreated',
- 'datePublished',
- 'dateModified',
- 'keywords',
- 'aggregateRating'
- ]);
-
- $this->type('DefinedTerm')
- ->label('Defined Term')
- ->group('creative')
- ->extends('CreativeWork')
- ->addFields([
- 'termCode',
-// 'inDefinedTermSet',
- ]);
-
- $this->type('BeforeAfter')
- ->label('Before & After Case')
- ->group('creative')
- ->extends('CreativeWork')
- ->addFields([
- 'about',
- 'temporalCoverage',
- 'hasPart',
- 'associatedMedia',
- 'additionalProperty',
- ]);
-
- $this->type('VisualArtwork')
- ->label('Visual Artwork')
- ->group('creative')
- ->extends('CreativeWork')
- ->addFields([
- 'artform',
- 'artMedium',
- 'artworkSurface',
- 'width',
- 'height',
- ]);
-
- $this->type('Tattoo')
- ->label('Tattoo')
- ->group('creative')
- ->extends('VisualArtwork');
-
- $this->type('Product')
- ->label('Product')
- ->group('creative')
- ->fields([
- 'name',
- 'description',
- 'image',
- 'brand',
- 'sku',
- 'gtin',
- 'offers',
- 'aggregateRating',
- 'review',
- 'award',
- ]);
-
- /**************************************************************
- * EVENTS
- **************************************************************/
- $this->type('Event')
- ->label('Event')
- ->group('event')
- ->fields([
- 'type',
- 'name',
- 'description',
- 'image',
- 'startDate',
- 'endDate',
- 'location',
- 'eventStatus',
- 'eventAttendanceMode',
- ]);
- }
-
- /**
- * Define type groups for organization
- */
- private function registerTypeGroups(): void
- {
- $this->typeGroups = [
- 'general' => 'General',
- 'page' => 'Page Types',
- 'business' => 'Business & Organization',
- 'person' => 'People',
- 'creative' => 'Creative Works',
- 'event' => 'Events',
- ];
- }
-}
diff --git a/inc/managers/SEO/SchemaFieldHelpers.php b/inc/managers/SEO/SchemaFieldHelpers.php
deleted file mode 100644
index e3d544c..0000000
--- a/inc/managers/SEO/SchemaFieldHelpers.php
+++ /dev/null
@@ -1,1219 +0,0 @@
-<?php
-namespace JVBase\managers\SEO;
-
-use JVBase\meta\Meta;
-
-if (!defined('ABSPATH')) {
- exit;
-}
-
-/**
- * Helper methods for auto-building complex schema fields
- *
- * SINGLE SOURCE OF TRUTH for field enhancement.
- * All pattern resolution and value enhancement flows through here.
- */
-class SchemaFieldHelpers
-{
- /**
- * Auto-resolve and enhance field values
- * Main entry point for all field enhancement logic
- *
- * @param string $fieldName Field name
- * @param mixed $value Raw value
- * @param Meta|null $meta Optional Meta for accessing related fields
- * @return mixed Enhanced value
- */
- public static function autoResolve(string $fieldName, mixed $value, ?Meta $meta = null): mixed
- {
- // Skip empty values
- if ($value === null || $value === '') {
- return $value;
- }
-
- // Skip if already enhanced (has @type)
- if (is_array($value) && isset($value['@type'])) {
- return $value;
- }
-
- // Auto-enhance based on field name
- return match($fieldName) {
- // Location data -> PostalAddress + GeoCoordinates
- 'location', 'address' => is_array($value) ? self::buildLocation($value) : $value,
-
- // Image fields -> ImageObject
- 'image', 'logo', 'photo','image_portrait', 'image_landscape', 'featured_image'
- => is_numeric($value) ? self::buildImage($value) : self::wrapImageUrl($value),
-
- // Hours -> openingHours array
- 'hours', 'opening_hours', 'openingHoursSpecification'
- => is_array($value) ? self::buildOpeningHours($value)['openingHours'] ?? $value : $value,
-
- // Links -> sameAs array
- 'links', 'sameAs'
- => is_array($value) ? self::buildSameAs($value)['sameAs'] ?? $value : [$value],
-// Navigation -> SiteNavigationElement array
-
- 'hasPart'
- => is_array($value) ? self::buildSiteNavigation($value)['hasPart'] ?? $value : $value,
- 'hasOfferCatalog'
- => is_array($value) ? self::offer_catalog_array($value) : $value,
- // Services -> OfferCatalog
- 'services'
- => is_array($value) ? self::buildServiceCatalog($value) : $value,
-
- // Amenities -> amenityFeature
- 'amenities'
- => self::buildAmenityFeatures($value)['amenityFeature'] ?? $value,
-
- // Languages -> availableLanguage
- 'languages'
- => is_array($value) ? self::buildAvailableLanguages($value)['availableLanguage'] ?? $value : $value,
-
- // Rating -> AggregateRating (needs rating_count from meta)
- 'rating'
- => $meta ? self::buildAggregateRating($value, $meta->get('rating_count')) : $value,
-
- // Geo coordinates
- 'geo'
- => is_array($value) ? self::buildGeoCoordinates($value) : $value,
- 'image_object' => self::image_object($value),
- 'image_url' => self::image_url($value),
- 'associatedMedia', 'image_object_array' => self::image_object_array($value),
- // Add to the match statement:
- 'brand' => is_array($value) ? self::buildBrandObject($value) : $value,
- 'offers' => is_array($value) ? self::buildOfferObject($value) : $value,
- 'review' => is_array($value) ? self::buildReviewArray($value) : $value,
- 'parentOrganization', 'subOrganization'
- => is_array($value) ? self::buildOrganizationReference($value) : $value,
- 'employee' => is_array($value) ? self::buildPersonReferenceArray($value) : $value,
- 'starRating' => is_array($value) ? self::buildRatingObject($value) : $value,
- // Default: return as-is
- default => $value
- };
- }
-
- /**
- * Check if a value is a pattern (contains {{...}})
- */
- public static function isPattern(mixed $value): bool
- {
- return is_string($value) && str_contains($value, '{{') && str_contains($value, '}}');
- }
-
- /**
- * Get Jake Van creator attribution (ONLY for Website schema)
- */
- public static function getCreator(): array
- {
- return [
- '@type' => 'Person',
- '@id' => 'https://jakevan.ca/#person',
- 'name' => 'Jake Vanderwerf',
- 'alternateName' => 'JakeVan',
- 'url' => 'https://jakevan.ca',
- 'jobTitle' => ['Graphic Designer', 'Website Designer', 'Website Developer'],
- 'sameAs' => [
- 'https://github.com/jakevanderwerf',
- 'https://www.linkedin.com/in/jakevanderwerf'
- ]
- ];
- }
-
- /**
- * Create proper ImageObject from WordPress attachment ID or URL
- *
- * @param int|string $image Image ID or URL
- * @param string $size Image size (default: 'full')
- * @return array|string ImageObject schema or URL
- */
- public static function buildImage(int|string $image, string $size = 'full'): array|string
- {
- // If it's empty, return empty string
- if (empty($image)) {
- return '';
- }
-
- // If it's already a URL, wrap it
- if (is_string($image) && (str_starts_with($image, 'http://') || str_starts_with($image, 'https://'))) {
- return self::wrapImageUrl($image);
- }
-
- // Treat as attachment ID
- $image_id = (int)$image;
- $image_url = wp_get_attachment_image_url($image_id, $size);
-
- if (!$image_url) {
- return '';
- }
-
- $image_meta = wp_get_attachment_metadata($image_id);
- $image_post = get_post($image_id);
-
- $imageObject = [
- '@type' => 'ImageObject',
- 'url' => $image_url,
- 'contentUrl' => $image_url,
- ];
-
- // Add dimensions if available
- if (!empty($image_meta['width']) && !empty($image_meta['height'])) {
- $imageObject['width'] = $image_meta['width'];
- $imageObject['height'] = $image_meta['height'];
- }
-
- // Add caption if available
- if ($image_post && !empty($image_post->post_excerpt)) {
- $imageObject['caption'] = $image_post->post_excerpt;
- }
-
- // Add alt text
- $alt = get_post_meta($image_id, '_wp_attachment_image_alt', true);
- if ($alt) {
- $imageObject['description'] = $alt;
- }
-
- return $imageObject;
- }
-
- /**
- * Wrap a URL string in minimal ImageObject
- */
- private static function wrapImageUrl(mixed $value): array|string
- {
- if (!is_string($value) || !filter_var($value, FILTER_VALIDATE_URL)) {
- return $value;
- }
-
- return [
- '@type' => 'ImageObject',
- 'url' => $value,
- 'contentUrl' => $value,
- ];
- }
-
- /**
- * Build PostalAddress and GeoCoordinates from location data
- *
- * Returns array with 'address' and 'geo' keys
- *
- * @param array $location Location data from Meta
- * @return array Schema with address and geo fields
- */
- public static function buildLocation(array $location): array
- {
- $schema = [];
-
- // Build PostalAddress
- if (!empty($location['address'])) {
- $address = [
- '@type' => 'PostalAddress',
- 'streetAddress' => $location['address']
- ];
-
- if (!empty($location['city'])) {
- $address['addressLocality'] = $location['city'];
- }
-
- if (!empty($location['province'])) {
- $address['addressRegion'] = $location['province'];
- }
-
- if (!empty($location['postal_code'])) {
- $address['postalCode'] = $location['postal_code'];
- }
-
- if (!empty($location['country'])) {
- $address['addressCountry'] = $location['country'];
- }
-
- $schema['address'] = $address;
- }
-
- // Build GeoCoordinates
- if (!empty($location['lat']) && !empty($location['lng'])) {
- $schema['geo'] = self::buildGeoCoordinates([
- 'latitude' => $location['lat'],
- 'longitude' => $location['lng']
- ]);
- }
-
- return $schema;
- }
-
- /**
- * Build GeoCoordinates from lat/lng data
- */
- public static function buildGeoCoordinates(array $coords): array
- {
- $lat = $coords['latitude'] ?? $coords['lat'] ?? null;
- $lng = $coords['longitude'] ?? $coords['lng'] ?? null;
-
- if (!$lat || !$lng) {
- return [];
- }
-
- return [
- '@type' => 'GeoCoordinates',
- 'latitude' => (float)$lat,
- 'longitude' => (float)$lng
- ];
- }
-
- /**
- * Build opening hours from repeater field
- *
- * @param array $hours Hours data from Meta
- * @return array Schema with openingHours field
- */
- public static function buildOpeningHours(array $hours): array
- {
- if (empty($hours)) {
- return [];
- }
-
- $formatted = [];
-
- foreach ($hours as $entry) {
- if (empty($entry['day'])) {
- continue;
- }
-
- $day = ucfirst($entry['day']);
- $opens = $entry['time_opens'] ?? '09:00';
- $closes = $entry['time_closes'] ?? '17:00';
-
- // Format: "Mo-Fr 09:00-17:00" or "Mo 09:00-17:00"
- $formatted[] = "{$day} {$opens}-{$closes}";
- }
-
- return !empty($formatted) ? ['openingHours' => $formatted] : [];
- }
-
- /**
- * Build sameAs array from links repeater
- *
- * @param array $links Links data from Meta
- * @return array Schema with sameAs field
- */
- public static function buildSameAs(array $links): array
- {
- if (empty($links)) {
- return [];
- }
-
- $urls = [];
-
- foreach ($links as $link) {
- if (is_array($link) && !empty($link['url'])) {
- $urls[] = $link['url'];
- } elseif (is_string($link)) {
- $urls[] = $link;
- }
- }
-
- return !empty($urls) ? ['sameAs' => $urls] : [];
- }
-
- /**
- * Build service catalog from services array
- * Returns properly formatted OfferCatalog with itemListElement
- *
- * @param array $services Services data
- * @return array OfferCatalog schema
- */
- public static function buildServiceCatalog(array $services): array
- {
- if (empty($services)) {
- return [];
- }
-
- $items = [];
-
- foreach ($services as $service) {
- // Support both 'type' and '@type' in service data
- $serviceType = $service['type'] ?? $service['@type'] ?? 'Service';
-
- $item = [
- '@type' => $serviceType,
- 'name' => $service['name'] ?? $service['title'] ?? ''
- ];
-
- if (!empty($service['description'])) {
- $item['description'] = $service['description'];
- }
-
- // Handle pricing - can be simple text or structured
- if (!empty($service['price'])) {
- // Check if price is already an Offer object
- if (is_array($service['price']) && isset($service['price']['@type'])) {
- $item['offers'] = $service['price'];
- } else {
- // Create simple offer with price text
- $item['offers'] = [
- '@type' => 'Offer',
- 'price' => (string)$service['price'],
- 'priceCurrency' => $service['currency'] ?? $service['priceCurrency'] ?? 'CAD'
- ];
- }
- }
-
- // Handle priceRange if provided instead of price
- if (!empty($service['priceRange'])) {
- $item['offers'] = [
- '@type' => 'Offer',
- 'price' => $service['priceRange'],
- 'priceCurrency' => $service['currency'] ?? $service['priceCurrency'] ?? 'CAD'
- ];
- }
-
- if (!empty($item['name'])) {
- $items[] = $item;
- }
- }
-
- if (empty($items)) {
- return [];
- }
-
- return [
- '@type' => 'OfferCatalog',
- 'name' => 'Services',
- 'itemListElement' => $items
- ];
- }
-
- /**
- * Build amenity features from amenities array or string
- *
- * @param array|string $amenities Amenities data
- * @return array Schema with amenityFeature field
- */
- public static function buildAmenityFeatures(array|string $amenities): array
- {
- if (empty($amenities)) {
- return [];
- }
-
- // Convert string to array
- if (is_string($amenities)) {
- $amenities = array_map('trim', explode(',', $amenities));
- }
-
- $features = [];
-
- foreach ($amenities as $amenity) {
- if (is_array($amenity) && isset($amenity['name'])) {
- $features[] = [
- '@type' => 'LocationFeatureSpecification',
- 'name' => $amenity['name'],
- 'value' => true
- ];
- } elseif (is_string($amenity) && $amenity !== '') {
- $features[] = [
- '@type' => 'LocationFeatureSpecification',
- 'name' => $amenity,
- 'value' => true
- ];
- }
- }
-
- return !empty($features) ? ['amenityFeature' => $features] : [];
- }
-
- /**
- * Build available languages from languages array
- *
- * @param array $languages Languages data
- * @return array Schema with availableLanguage field
- */
- public static function buildAvailableLanguages(array $languages): array
- {
- if (empty($languages)) {
- return [];
- }
-
- $items = [];
-
- foreach ($languages as $lang) {
- if (is_array($lang) && isset($lang['language'])) {
- $items[] = [
- '@type' => 'Language',
- 'name' => $lang['language']
- ];
- } elseif (is_string($lang) && $lang !== '') {
- $items[] = [
- '@type' => 'Language',
- 'name' => $lang
- ];
- }
- }
-
- return !empty($items) ? ['availableLanguage' => $items] : [];
- }
-
- /**
- * Build aggregate rating from rating value and count
- *
- * @param float|string $rating Rating value
- * @param int|string|null $count Number of ratings
- * @return array|null Schema with aggregateRating or null
- */
- public static function buildAggregateRating(float|string $rating, int|string|null $count): ?array
- {
- if (empty($rating)) {
- return null;
- }
-
- $ratingValue = (float)$rating;
- $ratingCount = (int)($count ?? 0);
-
- if ($ratingCount === 0) {
- // Can't have aggregate rating without count
- return null;
- }
-
- return [
- '@type' => 'AggregateRating',
- 'ratingValue' => $ratingValue,
- 'ratingCount' => $ratingCount,
- 'bestRating' => 5.0,
- 'worstRating' => 1.0
- ];
- }
-
- /**
- * Transform text value
- */
- public static function text($value): string
- {
- return (string)$value;
- }
-
- /**
- * Transform URL value
- */
- public static function url($value): string
- {
- return esc_url_raw($value);
- }
-
- /**
- * Transform email value
- */
- public static function email($value): string
- {
- return sanitize_email($value);
- }
-
- /**
- * Transform number value
- */
- public static function number($value): float|int
- {
- return is_numeric($value) ? (float)$value : 0;
- }
-
- /**
- * Transform date value to ISO format (YYYY-MM-DD)
- */
- public static function date($value): string
- {
- if (empty($value)) return '';
-
- // If already in ISO format, return as-is
- if (preg_match('/^\d{4}-\d{2}-\d{2}$/', $value)) {
- return $value;
- }
-
- // Otherwise convert to ISO format
- $timestamp = is_numeric($value) ? $value : strtotime($value);
- return $timestamp ? date('Y-m-d', $timestamp) : '';
- }
-
- /**
- * Transform datetime value to ISO 8601 format
- */
- public static function datetime($value): string
- {
- if (empty($value)) return '';
-
- // If already in ISO format, return as-is
- if (preg_match('/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}/', $value)) {
- return $value;
- }
-
- // Otherwise convert to ISO format
- $timestamp = is_numeric($value) ? $value : strtotime($value);
- return $timestamp ? date('c', $timestamp) : '';
- }
-
- /**
- * Transform dimension value to QuantitativeValue schema
- * Examples: "10cm" -> {value: 10, unitCode: "CM"}
- */
- public static function dimension($value): array|string
- {
- if (empty($value)) return '';
-
- // If already an object, return as-is
- if (is_array($value) && isset($value['@type'])) {
- return $value;
- }
-
- // Extract number and unit (e.g., "10cm" -> ["10", "cm"])
- if (preg_match('/^([\d.]+)\s*([a-z]+)$/i', $value, $matches)) {
- return [
- '@type' => 'QuantitativeValue',
- 'value' => (float)$matches[1],
- 'unitCode' => strtoupper($matches[2])
- ];
- }
-
- return $value;
- }
-
- /**
- * Transform array of text values from repeater
- * Handles various repeater field formats
- */
- public static function text_array($value): array
- {
- if (!is_array($value)) {
- return [$value];
- }
-
- return array_map(function($item) {
- if (is_array($item)) {
- // Handle repeater format with common field names
- return $item['name'] ?? $item['keyword'] ?? $item['topic'] ?? $item['value'] ?? '';
- }
- return (string)$item;
- }, array_filter($value));
- }
-
- /**
- * Transform array of URLs from repeater
- */
- public static function url_array($value): array
- {
- if (!is_array($value)) {
- return [$value];
- }
-
- return array_map(function($item) {
- if (is_array($item)) {
- return esc_url_raw($item['url'] ?? '');
- }
- return esc_url_raw($item);
- }, array_filter($value));
- }
-
- /**
- * Transform image ID to ImageObject
- * Reuses existing buildImage method
- */
- public static function image_object($imageId): array|string
- {
- if (!$imageId) return '';
- return self::buildImage($imageId);
- }
-
- /**
- * Transform array of image IDs to ImageObject array
- * Handles two formats:
- * 1. Simple array: [123, 456, 789]
- * 2. Repeater format: [['image' => 123, 'caption' => 'Before'], ...]
- */
- public static function image_object_array($value): array
- {
- if (!is_array($value)) {
- return [];
- }
-
- return array_values(array_filter(array_map(function($item, $index) {
- // Handle repeater format with sub-fields
- if (is_array($item) && isset($item['image'])) {
- $imageObject = self::buildImage($item['image']);
-
- if (empty($imageObject)) {
- return null;
- }
-
- if (!empty($item['caption'])) {
- $imageObject['caption'] = $item['caption'];
- }
-
- if (isset($item['position'])) {
- $imageObject['position'] = (int)$item['position'];
- } else {
- $imageObject['position'] = $index;
- }
-
- return $imageObject;
- }
-
- // Handle simple array of IDs
- if (is_numeric($item)) {
- $imageObject = self::buildImage($item);
-
- if (empty($imageObject)) {
- return null;
- }
-
- $imageObject['position'] = $index;
-
- // Try to get caption from image post
- $post = get_post($item);
- if ($post && !empty($post->post_excerpt)) {
- $imageObject['caption'] = $post->post_excerpt;
- }
-
- return $imageObject;
- }
-
- return null;
- }, $value, array_keys($value))));
- }
-
- public static function image_url($imageId): string
- {
- if (!$imageId) {
- return '';
- }
-
- // If already a URL string, return as-is
- if (is_string($imageId) && (str_starts_with($imageId, 'http://') || str_starts_with($imageId, 'https://'))) {
- return $imageId;
- }
-
- // Get URL from attachment ID
- $image_url = wp_get_attachment_image_url((int)$imageId, 'full');
-
- return $image_url ?: '';
- }
- /**
- * Transform location to PostalAddress + GeoCoordinates
- * Returns array with 'address' and 'geo' keys
- *
- * Special case: returns multiple schema properties
- */
- public static function location_complex($location): array
- {
- if (!$location) return [];
- return self::buildLocation($location);
- }
-
- /**
- * Transform location to just PostalAddress
- */
- public static function postal_address($location): array
- {
- if (!is_array($location) || empty($location['address'])) {
- return [];
- }
-
- $address = [
- '@type' => 'PostalAddress',
- 'streetAddress' => $location['address']
- ];
-
- if (!empty($location['city'])) {
- $address['addressLocality'] = $location['city'];
- }
-
- if (!empty($location['province'])) {
- $address['addressRegion'] = $location['province'];
- }
-
- if (!empty($location['postal_code'])) {
- $address['postalCode'] = $location['postal_code'];
- }
-
- if (!empty($location['country'])) {
- $address['addressCountry'] = $location['country'];
- }
-
- return $address;
- }
-
- /**
- * Transform coordinates to GeoCoordinates
- * Reuses existing buildGeoCoordinates method
- */
- public static function geo_coordinates($coords): array
- {
- if (!is_array($coords)) return [];
- return self::buildGeoCoordinates($coords);
- }
-
- /**
- * Transform opening hours group to OpeningHoursSpecification
- * Reuses existing buildOpeningHours method
- */
- public static function opening_hours_specification($hours): array
- {
- if (!is_array($hours)) return [];
- $result = self::buildOpeningHours($hours);
- return $result['openingHours'] ?? [];
- }
-
- /**
- * Transform contact points repeater to ContactPoint array
- */
- public static function contact_point_array($contacts): array
- {
- if (!is_array($contacts)) return [];
-
- $contactPoints = [];
- foreach ($contacts as $contact) {
- if (empty($contact['contactType'])) continue;
-
- $point = [
- '@type' => 'ContactPoint',
- 'contactType' => $contact['contactType']
- ];
-
- if (!empty($contact['telephone'])) {
- $point['telephone'] = $contact['telephone'];
- }
-
- if (!empty($contact['email'])) {
- $point['email'] = $contact['email'];
- }
-
- $contactPoints[] = $point;
- }
-
- return $contactPoints;
- }
-
- /**
- * Transform amenity features repeater
- * Reuses existing buildAmenityFeatures method
- */
- public static function amenity_feature_array($amenities): array
- {
- if (!is_array($amenities)) return [];
- $result = self::buildAmenityFeatures($amenities);
- return $result['amenityFeature'] ?? [];
- }
-
- /**
- * Transform languages repeater
- * Reuses existing buildAvailableLanguages method
- */
- public static function language_array($languages): array
- {
- if (!is_array($languages)) return [];
- $result = self::buildAvailableLanguages($languages);
- return $result['availableLanguage'] ?? [];
- }
-
- /**
- * Transform aggregate rating group to AggregateRating schema
- */
- public static function aggregate_rating($rating): ?array
- {
- if (!is_array($rating) || empty($rating['ratingValue'])) {
- return null;
- }
-
- $aggregateRating = [
- '@type' => 'AggregateRating',
- 'ratingValue' => (float)$rating['ratingValue']
- ];
-
- if (!empty($rating['bestRating'])) {
- $aggregateRating['bestRating'] = (float)$rating['bestRating'];
- }
-
- if (!empty($rating['worstRating'])) {
- $aggregateRating['worstRating'] = (float)$rating['worstRating'];
- }
-
- if (!empty($rating['ratingCount'])) {
- $aggregateRating['ratingCount'] = (int)$rating['ratingCount'];
- }
-
- if (!empty($rating['reviewCount'])) {
- $aggregateRating['reviewCount'] = (int)$rating['reviewCount'];
- }
-
- return $aggregateRating;
- }
-
- /**
- * Transform hasOfferCatalog field data to OfferCatalog schema
- * Handles both manual items and auto-generated from post type
- * Reuses existing buildServiceCatalog method
- */
- public static function offer_catalog_array($data): array
- {
- if (!is_array($data)) return [];
-
- // Extract manual items if present
- if (array_key_exists('manual_items', $data) && !empty($data['manual_items'])) {
- $services = $data['manual_items'];
- }
- // Otherwise expect array of items directly
- else if (isset($data[0])) {
- $services = $data;
- }
- else {
- return [];
- }
-
- // Build the catalog using existing method
- return self::buildServiceCatalog($services);
- }
-
- /**
- * Transform credentials repeater to EducationalOccupationalCredential array
- */
- public static function credential_array($credentials): array
- {
- if (!is_array($credentials)) return [];
-
- $items = [];
- foreach ($credentials as $cred) {
- if (empty($cred['name'])) continue;
-
- $item = [
- '@type' => 'EducationalOccupationalCredential',
- 'name' => $cred['name']
- ];
-
- if (!empty($cred['credentialCategory'])) {
- $item['credentialCategory'] = $cred['credentialCategory'];
- }
-
- if (!empty($cred['issuedBy'])) {
- $item['recognizedBy'] = [
- '@type' => 'Organization',
- 'name' => $cred['issuedBy']
- ];
- }
-
- $items[] = $item;
- }
-
- return $items;
- }
-
- /**
- * Transform FAQ repeater to Question schema array
- */
- public static function faq_array($faqs): array
- {
- if (!is_array($faqs)) return [];
-
- $questions = [];
- foreach ($faqs as $faq) {
- if (empty($faq['question']) || empty($faq['answer'])) {
- continue;
- }
-
- $questions[] = [
- '@type' => 'Question',
- 'name' => $faq['question'],
- 'acceptedAnswer' => [
- '@type' => 'Answer',
- 'text' => $faq['answer']
- ]
- ];
- }
-
- return $questions;
- }
-
- /**
- * Transform PotentialAction configurations to schema.org format
- *
- * @param array $actions Array of action configurations
- * @return array Formatted PotentialAction array
- */
- public static function potential_action_array($actions): array
- {
- if (empty($actions) || !is_array($actions)) {
- return [];
- }
-
- $formatted = [];
-
- foreach ($actions as $action) {
- if (empty($action['type']) || empty($action['name'])) {
- continue; // Skip invalid actions
- }
-
- $formattedAction = [
- '@type' => $action['type'],
- 'name' => $action['name'],
- ];
-
- // Add target (required for most actions)
- if (!empty($action['target'])) {
- $target = $action['target'];
-
- // If target contains a query placeholder, format as EntryPoint
- if (str_contains($target, '{')) {
- $formattedAction['target'] = [
- '@type' => 'EntryPoint',
- 'urlTemplate' => $target,
- ];
- } else {
- $formattedAction['target'] = $target;
- }
- }
-
- // Add optional fields
- if (!empty($action['description'])) {
- $formattedAction['description'] = $action['description'];
- }
-
- if (!empty($action['url'])) {
- $formattedAction['url'] = $action['url'];
- }
-
- $formatted[] = $formattedAction;
- }
-
- return $formatted;
- }
-
-
- /**
- * Build a JSON-LD @id reference
- * String → ['@id' => $value], array with @id → pass through
- */
- public static function reference(mixed $value): array|string
- {
- if (is_array($value) && isset($value['@id'])) {
- return $value;
- }
-
- if (is_string($value) && !empty($value)) {
- return ['@id' => $value];
- }
-
- return $value;
- }
-
-
-
- /**
- * Build SiteNavigationElement array from navigation items
- */
- public static function buildSiteNavigation(array $items): array
- {
- $elements = [];
- $position = 1;
-
- foreach ($items as $item) {
- if (empty($item['name']) || empty($item['url'])) continue;
-
- $nav = [
- '@type' => 'SiteNavigationElement',
- '@id' => $item['url'] . '#navigation',
- 'position' => $position++,
- 'name' => $item['name'],
- 'url' => $item['url'],
- ];
-
- if (!empty($item['description'])) {
- $nav['description'] = $item['description'];
- }
-
- $elements[] = $nav;
- }
-
- return ['hasPart' => $elements];
- }
-
- /**
- * Build Offer object
- */
- public static function buildOfferObject(array $data): array
- {
- $offer = ['@type' => 'Offer'];
-
- if (!empty($data['price'])) {
- $offer['price'] = (string)$data['price'];
- $offer['priceCurrency'] = $data['priceCurrency'] ?? 'USD';
- }
-
- if (!empty($data['availability'])) {
- $offer['availability'] = 'https://schema.org/' . $data['availability'];
- }
-
- if (!empty($data['validFrom'])) {
- $offer['validFrom'] = $data['validFrom'];
- }
-
- if (!empty($data['validThrough'])) {
- $offer['validThrough'] = $data['validThrough'];
- }
-
- return $offer;
- }
-
- /**
- * Build Brand object or simple text
- */
- public static function buildBrandObject(array $data): array|string
- {
- if (empty($data['name'])) {
- return '';
- }
-
- // Simple text brand
- if (empty($data['type']) || $data['type'] === 'text') {
- return $data['name'];
- }
-
- // Organization/Brand object
- $brand = [
- '@type' => 'Brand',
- 'name' => $data['name'],
- ];
-
- if (!empty($data['url'])) {
- $brand['url'] = $data['url'];
- }
-
- if (!empty($data['logo'])) {
- $brand['logo'] = self::buildImage($data['logo']);
- }
-
- return $brand;
- }
-
- /**
- * Build Review array
- */
- public static function buildReviewArray(array $reviews): array
- {
- $output = [];
-
- foreach ($reviews as $review) {
- if (empty($review['author']) && empty($review['reviewBody'])) {
- continue;
- }
-
- $item = ['@type' => 'Review'];
-
- if (!empty($review['author'])) {
- $item['author'] = [
- '@type' => 'Person',
- 'name' => $review['author']
- ];
- }
-
- if (!empty($review['reviewRating'])) {
- $item['reviewRating'] = [
- '@type' => 'Rating',
- 'ratingValue' => $review['reviewRating'],
- ];
- }
-
- if (!empty($review['reviewBody'])) {
- $item['reviewBody'] = $review['reviewBody'];
- }
-
- if (!empty($review['datePublished'])) {
- $item['datePublished'] = $review['datePublished'];
- }
-
- $output[] = $item;
- }
-
- return $output;
- }
-
- /**
- * Build organization reference
- */
- public static function buildOrganizationReference(array $data): array
- {
- if (empty($data['name'])) {
- return [];
- }
-
- $org = [
- '@type' => 'Organization',
- 'name' => $data['name'],
- ];
-
- if (!empty($data['url'])) {
- $org['url'] = $data['url'];
- }
-
- return $org;
- }
-
- /**
- * Build organization reference array
- */
- public static function buildOrganizationReferenceArray(array $items): array
- {
- return array_map([self::class, 'buildOrganizationReference'], $items);
- }
-
- /**
- * Build person reference array
- */
- public static function buildPersonReferenceArray(array $items): array
- {
- $output = [];
-
- foreach ($items as $item) {
- if (empty($item['name'])) continue;
-
- $person = [
- '@type' => 'Person',
- 'name' => $item['name'],
- ];
-
- if (!empty($item['jobTitle'])) {
- $person['jobTitle'] = $item['jobTitle'];
- }
-
- $output[] = $person;
- }
-
- return $output;
- }
-
- /**
- * Boolean transformer
- */
- public static function buildBoolean(mixed $value): bool
- {
- return (bool)$value;
- }
-
- /**
- * Time transformer
- */
- public static function buildTime(string $value): string
- {
- // Ensure format is HH:MM
- return date('H:i', strtotime($value));
- }
-
- /**
- * Rating object
- */
- public static function buildRatingObject(array $data): array
- {
- if (empty($data['ratingValue'])) {
- return [];
- }
-
- return [
- '@type' => 'Rating',
- 'ratingValue' => (float)$data['ratingValue'],
- 'bestRating' => 5,
- ];
- }
-}
diff --git a/inc/managers/SEO/SchemaOutputManager.php b/inc/managers/SEO/SchemaOutputManager.php
deleted file mode 100644
index e7a44f4..0000000
--- a/inc/managers/SEO/SchemaOutputManager.php
+++ /dev/null
@@ -1,650 +0,0 @@
-<?php
-namespace JVBase\managers\SEO;
-
-use JVBase\managers\Cache;
-use JVBase\managers\SEO\schemas\SchemaResolverRegistry;
-use JVBase\meta\Meta;
-use JVBase\managers\SEO\schemas\SchemaDefinition;
-use JVBase\registrar\Registrar;
-use WP_Term;
-use WP_User;
-
-if (!defined('ABSPATH')) {
- exit;
-}
-
-/**
- * Handles SEO output: Schema.org JSON and TSF meta filtering
- *
- * Integrates with The SEO Framework, letting it handle defaults
- * while we override with our configured templates.
- *
- * Now with integrated caching via Cache for performance.
- */
-class SchemaOutputManager
-{
- private ConfigManager $config;
- private SchemaBuilder $registry;
- private ?TemplateResolver $resolver = null;
- private Cache $cache;
- private array $pseudoTypes = [
- 'BeforeAfter',
- ];
-
- public function __construct()
- {
- $this->registry = SchemaBuilder::getInstance();
- $this->cache = Cache::for('schema')
- ->connect('post',true)
- ->connect('taxonomy',true)
- ->connect('user',true);
-
- // Hook into TSF for meta
- add_filter('the_seo_framework_title_from_generation', [$this, 'filterTitle'], 10, 2);
- add_filter('the_seo_framework_generated_description', [$this, 'filterDescription'], 10, 3);
-
- // Add image filters
- add_filter('the_seo_framework_image_generation_params', [$this, 'filterImage'], 10, 3);
-
- // Disable TSF schema on our content (we'll output our own)
- add_filter('the_seo_framework_schema_graph_data', [$this, 'filterTSFSchema'], 10, 2);
-
- // Output our schema
- add_action('wp_head', [$this, 'outputSchema'], 1);
- add_filter('the_seo_framework_sitemap_exclude_ids', [$this, 'excludeHiddenSingles'], 10, 1);
- }
-
- /**
- * Exclude posts from sitemap based on hide_single and is_timeline flags
- *
- * @param array $ids Array of post IDs to exclude
- * @return array Modified array with hidden posts added
- */
- public function excludeHiddenSingles(array $ids): array
- {
- $hiddenTypes = array_map(function($type) {
- return jvbCheckBase($type);
- },
- Registrar::getFeatured('hide_single', 'post')
- );
-
- $timelineTypes = array_map(function($type) {
- return jvbCheckBase($type);
- }, Registrar::getFeatured('is_timeline', 'post'));
-
-
- $hiddenIds = [];
-
- // Get all posts from hide_single types
- if (!empty($hiddenTypes)) {
- $hiddenIds = $this->cache->remember(
- 'hidden_single_posts',
- function() use ($hiddenTypes) {
- return get_posts([
- 'post_type' => $hiddenTypes,
- 'posts_per_page' => -1,
- 'fields' => 'ids',
- 'post_status' => 'publish',
- ]);
- }
- );
- }
-
- // Get child posts from timeline types
- if (!empty($timelineTypes)) {
- $timelineChildIds = $this->cache->remember(
- 'timeline_child_posts',
- function() use ($timelineTypes) {
- return get_posts([
- 'post_type' => $timelineTypes,
- 'posts_per_page' => -1,
- 'fields' => 'ids',
- 'post_status' => 'publish',
- 'post_parent__not_in' => [0], // Only get posts with a parent
- ]);
- }
- );
-
- $hiddenIds = array_merge($hiddenIds, $timelineChildIds);
- }
-
- return array_merge($ids, $hiddenIds);
- }
-
- /**
- * Filter the SEO title
- */
- public function filterTitle(string $title, ?array $args): string
- {
- if ($args !== null) {
- return $title;
- }
-
- $context = $this->getCurrentContext();
- if (!$context) {
- return $title;
- }
-
- $metaConfig = $this->config->meta();
-
- if (empty($metaConfig['metaTitle'])) {
- return $title;
- }
-
- $resolver = $this->getResolver();
- $customTitle = $resolver->resolve($metaConfig['metaTitle']);
-
- if (!$customTitle) {
- return $title;
- }
-
- // Strip trailing site name — TSF adds its own branding
- $siteName = get_bloginfo('name');
- $customTitle = preg_replace('/\s*[|\-–—]\s*' . preg_quote($siteName, '/') . '\s*$/i', '', $customTitle);
-
- return $customTitle;
- }
-
- /**
- * Filter the SEO description
- */
- public function filterDescription(string $description, ?array $args, string $type): string
- {
- if ($args !== null) {
- return $description;
- }
-
- $context = $this->getCurrentContext();
- if (!$context) {
- return $description;
- }
-
- $metaConfig = $this->config->meta();
-
- if (empty($metaConfig['metaDescription'])) {
- return $description;
- }
-
- $resolver = $this->getResolver();
- $customDescription = $resolver->resolve($metaConfig['metaDescription']);
-
- // Truncate to reasonable length
- if (strlen($customDescription) > 160) {
- $customDescription = substr($customDescription, 0, 157) . '...';
- }
-
- return $customDescription ?: $description;
- }
-
- /**
- * Filter the SEO image for social previews
- */
- public function filterImage(array $params, ?array $args, $tsf_id): array
- {
- if ($args !== null) {
- return $params;
- }
-
- $context = $this->getCurrentContext();
- if (!$context) {
- return $params;
- }
-
- $metaConfig = $this->config->meta();
-
- // Check for custom image
- if (!empty($metaConfig['socialPreviewImage'])) {
- $resolver = $this->getResolver();
- $imageUrl = $resolver->resolve($metaConfig['socialPreviewImage']);
-
- if ($imageUrl) {
- $params['og:image'] = $imageUrl;
-
- // Use twitter-specific image if set, otherwise use main image
- if (!empty($metaConfig['twitterImage'])) {
- $twitterImage = $resolver->resolve($metaConfig['twitterImage']);
- $params['twitter:image'] = $twitterImage ?: $imageUrl;
- } else {
- $params['twitter:image'] = $imageUrl;
- }
- }
- }
-
- return $params;
- }
-
- /**
- * Disable TSF schema for our custom content types
- */
- public function filterTSFSchema(array $graph, ?array $args): array
- {
- if ($args !== null) {
- return $graph;
- }
-
- $context = $this->getCurrentContext();
- if ($context) {
- // We're handling schema for this content
- return [];
- }
-
- return $graph;
- }
-
- /**
- * Output schema JSON-LD
- */
- public function outputSchema(): void
- {
- // Build cache key
- $context = $this->getCurrentContext();
- $cacheKey = $this->buildCacheKey($context);
-
- // Try to get from cache
- $schema = $this->cache->get($cacheKey);
-
- if ($schema === false) {
- // Build schema
- $schema = $this->buildSchema();
-
- // Cache for 1 hour (will auto-invalidate on content update)
- $this->cache->set($cacheKey, $schema, HOUR_IN_SECONDS);
- }
-
- if (empty($schema)) {
- return;
- }
-
- echo "\n<!-- SEO Schema by Jake Van -->\n";
- echo '<script type="application/ld+json">' . "\n";
- echo wp_json_encode($schema, JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT);
- echo "\n" . '</script>' . "\n";
- }
-
- private function resolveSchemaType(string $configuredType): string
- {
- // Only resolve pseudo-types (custom types not in schema.org)
- if (in_array($configuredType, $this->pseudoTypes)) {
- $typeDef = $this->registry->getTypeDefinition($configuredType);
- if ($typeDef && !empty($typeDef['extends'])) {
- // Recursively resolve in case parent is also pseudo
- return $this->resolveSchemaType($typeDef['extends']);
- }
- }
-
- // Use configured type (it's a real schema.org type)
- return $configuredType;
- }
-
- /**
- * Build cache key for current context
- */
- private function buildCacheKey(?array $context): string
- {
- if (!$context) {
- return 'home_' . get_current_blog_id();
- }
-
- return "{$context['objectType']}_{$context['objectId']}_{$context['type']}";
- }
-
- /**
- * Build complete schema structure
- */
- private function buildSchema(): array
- {
- $schema = [
- '@context' => 'https://schema.org',
- '@graph' => []
- ];
-
- // Always include Website schema
- $websiteSchema = $this->buildSchemaForType('website', 'WebSite', '/#website');
- if ($websiteSchema) {
- $websiteSchema['url'] = $websiteSchema['url'] ?? get_home_url();
- $websiteSchema['name'] = $websiteSchema['name'] ?? get_bloginfo('name');
- $websiteSchema['publisher'] = ['@id' => get_home_url() . '/#organization'];
- $websiteSchema['creator'] = SchemaFieldHelpers::getCreator();
- $schema['@graph'][] = $websiteSchema;
- }
-
- // Include Organization schema on home page
- if (is_front_page()) {
- $orgSchema = $this->buildSchemaForType('organization', null, '/#organization');
- if ($orgSchema && !empty($orgSchema['name'])) {
- $schema['@graph'][] = $orgSchema;
- }
- }
-
- $webPageSchema = $this->buildWebPageSchema();
- if ($webPageSchema) {
- $schema['@graph'][] = $webPageSchema;
- }
-
- // Include context-specific schema
- $contextSchema = $this->buildContextSchema();
- if ($contextSchema) {
- $schema['@graph'][] = $contextSchema;
- }
-
- // Include breadcrumbs
- $breadcrumbs = $this->buildBreadcrumbSchema();
- if ($breadcrumbs) {
- $schema['@graph'][] = $breadcrumbs;
- }
-
- return $schema;
- }
-
- /**
- * Generic schema builder - replaces buildWebsiteSchema, buildOrganizationSchema, etc.
- *
- * @param string $configKey Config key (site, business, post_type, etc.)
- * @param string|null $forceType Force a specific schema type (optional)
- * @param string|null $id Schema @id suffix
- */
- private function buildSchemaForType(string $configKey, ?string $forceType = null, ?string $id = null): ?array
- {
- $this->config = ConfigManager::for($configKey);
- $config = $this->config->schema();
-
- if (empty($config)) {
- return null;
- }
-
- $schemaType = $forceType ?? $config['type'] ?? null;
- if (!$schemaType) {
- return null;
- }
-
- // Build full @id if suffix provided
- $fullId = $id ? get_home_url() . $id : null;
-
- // Use the generic builder
- return $this->buildSchemaFromConfig($config, $schemaType, $fullId);
- }
-
- /**
- * Build schema for current context (page, post, term, etc.)
- */
- private function buildContextSchema(): ?array
- {
- $context = $this->getCurrentContext();
-
- if (!$context) {
- return null;
- }
-
- // For archives, use archive config
- if (in_array($context['objectType'], ['archive', 'term'])) {
- return $this->buildArchiveSchema($context);
- }
-
- $schemaConfig = $this->config->schema();
-
- if (empty($schemaConfig) || empty($schemaConfig['type'])) {
- return null;
- }
-
- $resolver = $this->getResolver();
- $schemaType = $schemaConfig['type'];
-
- // Resolve templates (resolver handles transformation)
- $resolvedConfig = $this->resolveConfigTemplates($schemaConfig, $resolver);
-
- // Build via resolver system
- $schema = $this->buildSchemaFromConfig(
- $resolvedConfig,
- $schemaType,
- $resolver->resolveVariable('permalink') . '#' . strtolower($schemaType)
- );
-
- // Add mainEntityOfPage for content items
- if ($schema && $schemaType !== 'FAQPage') {
- $schema['mainEntityOfPage'] = [
- '@type' => 'WebPage',
- '@id' => $resolver->resolveVariable('permalink'),
- ];
- }
-
- return $schema;
- }
- /**
- * Build schema for archive pages.
- * mainEntity is now handled by CollectionPageResolver::getAutoFields()
- */
- private function buildArchiveSchema(array $context): ?array
- {
- if (!$this->config->archive()) {
- $this->config->setupArchive();
- }
-
- $archiveConfig = $this->config->archive();
-
- if (empty($archiveConfig) || empty($archiveConfig['type'])) {
- return null;
- }
-
- $resolver = $this->getResolver();
- $resolvedConfig = $this->resolveConfigTemplates($archiveConfig, $resolver);
-
- // Resolver handles mainEntity auto-enrichment now
- return $this->buildSchemaFromConfig(
- $resolvedConfig,
- $archiveConfig['type'],
- $resolver->resolveVariable('permalink') . '#' . strtolower($archiveConfig['type'])
- );
- }
-
- /**
- * Resolve all template patterns in config
- */
- private function resolveConfigTemplates(array $config, TemplateResolver $resolver): array
- {
- $resolved = ['type' => $config['type']];
-
- foreach ($config as $fieldName => $value) {
- if ($fieldName === 'type') {
- continue;
- }
-
- $resolvedValue = $this->resolveFieldValue($fieldName, $value, $resolver);
-
- if ($resolvedValue !== null && $resolvedValue !== '') {
- $resolved[$fieldName] = $resolvedValue;
- }
- }
-
- return $resolved;
- }
-
- /**
- * Build schema from config using the resolver system.
- *
- * Replaces the old double-transform approach with a single-pass
- * resolver that handles template resolution and transformation.
- */
- private function buildSchemaFromConfig(array $config, string $schemaType, ?string $id = null): ?array
- {
- $context = $this->getCurrentContext();
-
- $definition = SchemaDefinition::fromContext(
- $this->resolveSchemaType($schemaType),
- $config,
- $id,
- $context
- );
-
- $resolver = SchemaResolverRegistry::getInstance()->get($schemaType);
- $meta = $context ? new Meta($context['objectId'], $context['objectType']) : null;
-
- return $resolver->resolve($definition, $meta);
- }
-
- /**
- * Resolve a field value from template
- */
- private function resolveFieldValue(string $key, mixed $template, TemplateResolver $resolver): mixed
- {
- if (is_string($template)) {
- // Simple template pattern
- $value = $resolver->resolve($template);
-
- // If it's still a pattern (unresolved), skip it
- if (SchemaFieldHelpers::isPattern($value)) {
- return null;
- }
-
- return $value !== '' ? $value : null;
- }
-
- if (is_array($template)) {
- // Complex nested structure - resolve recursively
- $resolved = [];
- foreach ($template as $subKey => $subValue) {
- $resolvedValue = $this->resolveFieldValue($subKey, $subValue, $resolver);
- if ($resolvedValue !== null) {
- $resolved[$subKey] = $resolvedValue;
- }
- }
- return !empty($resolved) ? $resolved : null;
- }
-
- // Direct value (not a template)
- return $template;
- }
-
- /**
- * Build WebPage schema for current page (including homepage)
- */
- private function buildWebPageSchema(): ?array
- {
- $webpage = [
- '@type' => 'WebPage',
- '@id' => get_permalink() . '/#webpage',
- 'url' => get_permalink(),
- 'isPartOf' => ['@id' => get_home_url() . '/#website'],
- ];
-
- // Add about relationship on homepage (pointing to organization)
- if (is_front_page()) {
- $webpage['about'] = ['@id' => get_home_url() . '/#organization'];
- $webpage['name'] = get_bloginfo('name');
- $webpage['description'] = get_bloginfo('description');
- } else {
- // For other pages, use page-specific meta
- $resolver = $this->getResolver();
- $metaConfig = $this->config->meta();
-
- if (!empty($metaConfig['metaTitle'])) {
- $webpage['name'] = $resolver->resolve($metaConfig['metaTitle']);
- }
-
- if (!empty($metaConfig['metaDescription'])) {
- $webpage['description'] = $resolver->resolve($metaConfig['metaDescription']);
- }
- }
-
- return $webpage;
- }
-
- /**
- * Build breadcrumb schema
- */
- private function buildBreadcrumbSchema(): array
- {
- $breadcrumbs = BreadcrumbManager::getInstance();
- return $breadcrumbs->toSchema();
- }
-
- /**
- * Get current context (what page/content are we on?)
- */
- private function getCurrentContext(): ?array
- {
- if (is_singular()) {
- $post = get_post();
- if ($post) {
- $postType = jvbNoBase($post->post_type);
- if (Registrar::getInstance($postType)) {
- $this->config = ConfigManager::for($postType);
- return [
- 'objectType' => 'post',
- 'objectId' => $post->ID,
- 'type' => $postType,
- ];
- }
- }
- } elseif (is_tax()) {
- $term = get_queried_object();
- if ($term instanceof WP_Term) {
- $taxonomy = jvbNoBase($term->taxonomy);
- if (Registrar::getInstance($taxonomy)) {
- $this->config = ConfigManager::for($taxonomy);
- return [
- 'objectType' => 'term',
- 'objectId' => $term->term_id,
- 'type' => $taxonomy,
- ];
- }
- }
- } elseif (is_author()) {
- $user = get_queried_object();
- if ($user instanceof WP_User) {
- $role = jvbUserRole($user->ID);
- if (Registrar::getInstance($role)) {
- $this->config = ConfigManager::for($role);
- return [
- 'objectType' => 'user',
- 'objectId' => $user->ID,
- 'type' => $role,
- ];
- }
- }
- } elseif (is_post_type_archive()) {
- $postType = get_query_var('post_type');
- if (is_array($postType)) {
- $postType = reset($postType);
- }
- $postType = jvbNoBase($postType);
-
- if (Registrar::getInstance($postType)) {
- $this->config = ConfigManager::for($postType);
- return [
- 'objectType' => 'archive',
- 'objectId' => 0,
- 'type' => $postType,
- ];
- }
- }
-
- return null;
- }
-
- /**
- * Get or create resolver for current context
- */
- private function getResolver(): TemplateResolver
- {
- if ($this->resolver === null) {
- $this->resolver = TemplateResolver::forCurrentObject();
- }
- return $this->resolver;
- }
-
- /**
- * Extract URLs from array of link objects or strings
- */
- private function extractUrls(array $links): array
- {
- $urls = [];
- foreach ($links as $link) {
- if (is_array($link) && isset($link['url'])) {
- $urls[] = $link['url'];
- } elseif (is_string($link)) {
- $urls[] = $link;
- }
- }
- return $urls;
- }
-}
diff --git a/inc/managers/SEO/SchemaReferenceBuilder.php b/inc/managers/SEO/SchemaReferenceBuilder.php
deleted file mode 100644
index ed362fc..0000000
--- a/inc/managers/SEO/SchemaReferenceBuilder.php
+++ /dev/null
@@ -1,498 +0,0 @@
-<?php
-namespace JVBase\managers\SEO;
-
-use JVBase\meta\Meta;
-use JVBase\registrar\Registrar;
-
-if (!defined('ABSPATH')) {
- exit;
-}
-
-/**
- * Builds minimal schema references for related entities
- *
- * When an artist references a shop or an artwork references an artist,
- * we don't want to embed the full schema—just a reference with minimal data.
- *
- * Usage:
- * - Artist referencing a Shop: "worksFor": SchemaReferenceBuilder::build('term', $shop_id)
- * - Artwork referencing an Artist: "creator": SchemaReferenceBuilder::build('post', $artist_id)
- */
-class SchemaReferenceBuilder
-{
- /**
- * Build a schema reference
- * Automatically transforms types for archives (FAQPage → Question)
- *
- * @param string $objectType 'post', 'term', or 'user'
- * @param int $objectId Object ID
- * @param string|null $schemaType Override @type (null = auto-infer and transform)
- * @param bool $includeContext Add contextual fields
- * @return array|string Schema reference or empty string if invalid
- */
- public static function build(
- string $objectType,
- int $objectId,
- ?string $schemaType = null,
- bool $includeContext = true
- ): array|string {
- // Get basic info
- $url = self::getUrl($objectType, $objectId);
- $name = self::getName($objectType, $objectId);
-
- if (!$url || !$name) {
- return '';
- }
-
- // Get config for templates and schema type
- $schemaConfig = [];
- $registrar = Registrar::getInstance($objectType);
- if ($registrar) {
- $schemaConfig = $registrar->getConfig('seo')['schema']??[];
- }
-
- // Determine schema type
- if ($schemaType === null) {
- // Auto-infer from config
- $schemaType = self::inferSchemaType($objectType, $objectId);
- $inferredType = true;
- } else {
- // Explicit type provided (for cross-references)
- $inferredType = false;
- }
-
- // If type was inferred, check for archive transformations
- if ($inferredType) {
- $schemaType = self::transformForArchive($schemaType);
- }
-
- // Create resolver for template resolution
- $resolver = new TemplateResolver($objectId, $objectType)??null;
-
- // Build reference based on schema type
- switch ($schemaType) {
- case 'Question':
- // Build Question from FAQPage config
- $questionTemplate = $schemaConfig['question'] ?? '{{post_title}}';
- $answerTemplate = $schemaConfig['answer'] ?? '{{post_content}}';
-
- return [
- '@type' => 'Question',
- '@id' => $url . '#question',
- 'name' => $resolver ? $resolver->resolve($questionTemplate) : $name,
- 'acceptedAnswer' => [
- '@type' => 'Answer',
- 'text' => $resolver ? $resolver->resolve($answerTemplate) : ''
- ]
- ];
-
- default:
- // Standard reference: @type, @id, name, url
- $reference = [
- '@type' => $schemaType,
- '@id' => $url . '#' . strtolower($schemaType),
- 'name' => $name,
- 'url' => $url,
- ];
-
- // Add contextual fields if requested
- if ($includeContext) {
- // Add description if in config
- if ($resolver && isset($schemaConfig['description'])) {
- $description = $resolver->resolve($schemaConfig['description']);
- if ($description) {
- $reference['description'] = $description;
- }
- }
-
- // Add image if in config
- if ($resolver && isset($schemaConfig['image'])) {
- $imageUrl = $resolver->resolve($schemaConfig['image']);
- if ($imageUrl) {
- $reference['image'] = SchemaFieldHelpers::image_object($imageUrl);
- }
- }
-
- // Add minimal type-specific fields (existing logic)
- $reference = self::addMinimalFields($reference, $objectType, $objectId, $schemaType);
- }
-
- return $reference;
- }
- }
-
- /**
- * Transform schema types for archive/collection contexts
- *
- * @param string $schemaType Original schema type
- * @return string Transformed type (or original if no transform needed)
- */
- private static function transformForArchive(string $schemaType): string
- {
- return match($schemaType) {
- 'FAQPage' => 'Question',
- // Add other transformations as needed
- default => $schemaType
- };
- }
-
-
- /**
- * Build just an @id reference (most minimal)
- *
- * @param string $objectType 'post', 'term', or 'user'
- * @param int $objectId Object ID
- * @param string|null $schemaType Override @type
- * @return string @id URL or empty string
- */
- public static function buildIdOnly(
- string $objectType,
- int $objectId,
- ?string $schemaType = null
- ): string {
- $url = self::getUrl($objectType, $objectId);
- if (!$url) {
- return '';
- }
-
- if (!$schemaType) {
- $schemaType = self::inferSchemaType($objectType, $objectId);
- }
-
- return $url . '#' . strtolower($schemaType);
- }
-
- /**
- * Build array of references from array of IDs
- *
- * @param string $objectType 'post', 'term', or 'user'
- * @param array $objectIds Array of object IDs
- * @param string|null $schemaType Override @type
- * @param bool $includeContext Add contextual fields
- * @return array Array of schema references
- */
- public static function buildMultiple(
- string $objectType,
- array $objectIds,
- ?string $schemaType = null,
- bool $includeContext = false
- ): array {
- $references = [];
-
- foreach ($objectIds as $id) {
- $ref = self::build($objectType, $id, $schemaType, $includeContext);
- if ($ref !== '') {
- $references[] = $ref;
- }
- }
-
- return $references;
- }
-
- /**
- * Build references for posts related to a term
- *
- * Perfect for: shop showing its artists, style showing its artists, etc.
- *
- * @param int $termId Term ID to get posts from
- * @param string $postType Post type to query (without BASE prefix)
- * @param int $limit Maximum number of references to return (default: 10)
- * @param string|null $schemaType Override @type for all references
- * @param bool $includeContext Add contextual fields
- * @param string $orderby How to order results (default: 'date')
- * @return array Array of schema references
- */
- public static function buildFromTerm(
- int $termId,
- string $postType,
- int $limit = 10,
- ?string $schemaType = null,
- bool $includeContext = false,
- string $orderby = 'date'
- ): array {
- $term = get_term($termId);
- if (!$term || is_wp_error($term)) {
- return [];
- }
-
- // Get posts in this term
- $args = [
- 'post_type' => jvbCheckBase($postType),
- 'posts_per_page' => $limit,
- 'post_status' => 'publish',
- 'orderby' => $orderby,
- 'order' => 'DESC',
- 'tax_query' => [
- [
- 'taxonomy' => $term->taxonomy,
- 'field' => 'term_id',
- 'terms' => $termId,
- ]
- ],
- 'fields' => 'ids', // Only get IDs for performance
- ];
-
- $post_ids = get_posts($args);
-
- if (empty($post_ids)) {
- return [];
- }
-
- return self::buildMultiple('post', $post_ids, $schemaType, $includeContext);
- }
-
- /**
- * Build references for posts in a post type archive
- *
- * @param string $postType Post type (without BASE prefix)
- * @param int $limit Maximum number of references to return (default: 10)
- * @param bool $includeContext Add contextual fields
- * @param string $orderby How to order results (default: 'date')
- * @return array Array of schema references
- */
- public static function buildFromArchive(
- string $postType,
- int $limit = 10,
- bool $includeContext = true,
- string $orderby = 'date'
- ): array {
- // Get posts from current query or fresh query
- global $wp_query;
-
- // If we're already on the archive, use those posts
- if (is_post_type_archive() && !empty($wp_query->posts)) {
- $post_ids = wp_list_pluck($wp_query->posts, 'ID');
- } else {
- // Otherwise query fresh
- $args = [
- 'post_type' => jvbCheckBase($postType),
- 'posts_per_page' => $limit,
- 'post_status' => 'publish',
- 'orderby' => $orderby,
- 'order' => 'DESC',
- 'fields' => 'ids',
- ];
- $post_ids = get_posts($args);
- }
-
- if (empty($post_ids)) {
- return [];
- }
-
- // Let build() infer types and transform as needed
- return self::buildMultiple('post', $post_ids, null, $includeContext);
- }
-
- /**
- * Build references for terms related to a post
- *
- * Perfect for: artist showing their styles, artwork showing its themes, etc.
- *
- * @param int $postId Post ID to get terms from
- * @param string $taxonomy Taxonomy to query (without BASE prefix)
- * @param int $limit Maximum number of references to return (default: 10)
- * @param string|null $schemaType Override @type for all references
- * @param bool $includeContext Add contextual fields
- * @return array Array of schema references
- */
- public static function buildFromPost(
- int $postId,
- string $taxonomy,
- int $limit = 10,
- ?string $schemaType = null,
- bool $includeContext = false
- ): array {
- $terms = wp_get_post_terms($postId, jvbCheckBase($taxonomy), [
- 'number' => $limit,
- 'fields' => 'ids',
- ]);
-
- if (is_wp_error($terms) || empty($terms)) {
- return [];
- }
-
- return self::buildMultiple('term', $terms, $schemaType, $includeContext);
- }
-
- /**
- * Build ID-only references (most performant)
- *
- * Use when you just need the @id URIs without any additional data
- *
- * @param string $objectType 'post', 'term', or 'user'
- * @param array $objectIds Array of object IDs
- * @param string|null $schemaType Override @type
- * @return array Array of @id strings
- */
- public static function buildIdOnlyMultiple(
- string $objectType,
- array $objectIds,
- ?string $schemaType = null
- ): array {
- $ids = [];
-
- foreach ($objectIds as $id) {
- $idString = self::buildIdOnly($objectType, $id, $schemaType);
- if ($idString !== '') {
- $ids[] = $idString;
- }
- }
-
- return $ids;
- }
-
- /**
- * Get URL for object
- */
- private static function getUrl(string $objectType, int $objectId): string
- {
- return match($objectType) {
- 'post' => get_permalink($objectId) ?: '',
- 'term' => is_wp_error($link = get_term_link($objectId)) ? '' : $link,
- 'user' => get_author_posts_url($objectId) ?: '',
- default => ''
- };
- }
-
- /**
- * Get name for object
- */
- private static function getName(string $objectType, int $objectId): string
- {
- return match($objectType) {
- 'post' => get_the_title($objectId) ?: '',
- 'term' => get_term($objectId)?->name ?: '',
- 'user' => get_userdata($objectId)?->display_name ?: '',
- default => ''
- };
- }
-
- /**
- * Infer schema type from content configuration
- */
- private static function inferSchemaType(string $objectType, int $objectId): string
- {
- $default = 'Thing';
- $registrar = false;
- if ($objectType === 'post') {
- $postType = get_post_type($objectId);
- $registrar = Registrar::getInstance($postType));
- $default = 'CreativeWork';
- } else if ($objectType === 'term') {
- $term = get_term($objectId);
- if (!$term || is_wp_error($term)) {
- return 'DefinedTerm';
- }
-
- $registrar = Registrar::getInstance($term->taxonomy));
- $default = 'DefinedTerm';
- } elseif ($objectType === 'user') {
- return 'Person';
- }
-
- $type = false;
-
- if ($registrar) {
- $type = $registrar->getConfig('seo')['schema']['type'];
- }
-
- return ($type && !empty($type)) ? $type : $default;
- }
-
- /**
- * Add minimal context-specific fields based on schema type
- */
- private static function addMinimalFields(
- array $reference,
- string $objectType,
- int $objectId,
- string $schemaType
- ): array {
- switch ($schemaType) {
- case 'Person':
- // Add small thumbnail image if available
- $imageId = null;
-
- if ($objectType === 'user') {
- $imageId = get_user_meta($objectId, 'image_portrait', true);
- } elseif ($objectType === 'post') {
- $imageId = get_post_thumbnail_id($objectId);
- }
-
- if ($imageId) {
- $imageUrl = wp_get_attachment_image_url($imageId, 'thumbnail');
- if ($imageUrl) {
- $reference['image'] = $imageUrl; // Simple URL for refs
- }
- }
-
- // Add job title if in user meta
- if ($objectType === 'user') {
- $jobTitle = get_user_meta($objectId, 'job_title', true);
- if ($jobTitle) {
- $reference['jobTitle'] = $jobTitle;
- }
- }
- break;
-
- case 'LocalBusiness':
- case 'TattooParlor':
- case 'Organization':
- // Add minimal location (just street address)
- $meta = new Meta($objectId, $objectType);
- $location = $meta->get('location');
-
- if ($location && isset($location['address'])) {
- $reference['address'] = [
- '@type' => 'PostalAddress',
- 'streetAddress' => $location['address']
- ];
- }
- break;
-
- case 'CreativeWork':
- case 'VisualArtwork':
- case 'Article':
- // Add featured image if available
- if ($objectType === 'post') {
- $imageId = get_post_thumbnail_id($objectId);
- if ($imageId) {
- $imageUrl = wp_get_attachment_image_url($imageId, 'medium');
- if ($imageUrl) {
- $reference['image'] = $imageUrl;
- }
- }
- }
- break;
-
- case 'DefinedTerm':
- // Add term description if available
- if ($objectType === 'term') {
- $term = get_term($objectId);
- if ($term && !is_wp_error($term) && !empty($term->description)) {
- $reference['description'] = wp_trim_words($term->description, 20);
- }
- } elseif ($objectType === 'post') {
- // Add post content as description
- $post = get_post($objectId);
- if ($post && !empty($post->post_content)) {
- $reference['description'] = wp_trim_words(strip_tags($post->post_content), 20);
- }
-
- // If we're in an archive context, add inDefinedTermSet
- if (is_post_type_archive()) {
- $postType = get_post_type($objectId);
- $archiveUrl = get_post_type_archive_link($postType);
- if ($archiveUrl) {
- $reference['inDefinedTermSet'] = [
- '@id' => $archiveUrl . '#definedtermset'
- ];
- }
- }
- }
- break;
- }
-
- return $reference;
- }
-}
diff --git a/inc/managers/SEO/TemplateResolver.php b/inc/managers/SEO/TemplateResolver.php
deleted file mode 100644
index bae31b9..0000000
--- a/inc/managers/SEO/TemplateResolver.php
+++ /dev/null
@@ -1,664 +0,0 @@
-<?php
-namespace JVBase\managers\SEO;
-
-use JVBase\meta\Meta;
-use JVBase\registrar\Registrar;
-use WP_Post;
-use WP_Term;
-use WP_User;
-
-if (!defined('ABSPATH')) {
- exit;
-}
-
-/**
- * Resolves template variables like {{post_title}} and {{author.name}}
- *
- * Supports:
- * - Direct field access: {{post_title}}, {{bio}}
- * - Relation access: {{author.name}}, {{shop.location}}
- * - Site variables: {{site_name}}, {{site_url}}
- * - Special accessors: {{featured_image_url}}, {{permalink}}
- * - Auto-enhancement via SchemaFieldHelpers
- */
-class TemplateResolver
-{
- private ?int $objectId = null;
- private ?string $objectType = null;
- private ?string $contentType = null;
- private ?Meta $meta = null;
- private array $context = [];
- private array $fieldDefinitions = [];
-
- /**
- * Create resolver for a specific object
- */
- public function __construct(?int $objectId = null, ?string $objectType = null, ?string $contentType = null)
- {
- $this->objectId = $objectId;
- $this->objectType = $objectType;
- $this->contentType = $contentType;
-
- if ($objectId && $objectType) {
- $this->meta = new Meta($objectId, $objectType, $contentType);
- $this->loadFieldDefinitions();
- }
-
- $this->buildContext();
- }
-
- /**
- * Create resolver for current queried object
- */
- public static function forCurrentObject(): self
- {
- if (is_singular()) {
- $post = get_post();
- if ($post) {
- return new self($post->ID, 'post', $post->post_type);
- }
- } elseif (is_tax() || is_category() || is_tag()) {
- $term = get_queried_object();
- if ($term instanceof WP_Term) {
- return new self($term->term_id, 'term', $term->taxonomy);
- }
- } elseif (is_author()) {
- $author = get_queried_object();
- if ($author instanceof WP_User) {
- return new self($author->ID, 'user', jvbUserRole($author->ID));
- }
- } elseif (is_post_type_archive()) {
- // Get the post type being archived
- $postType = get_query_var('post_type');
- if (is_array($postType)) {
- $postType = reset($postType);
- }
-
- // Create resolver with archive context (no objectId needed)
- return new self(null, 'archive', $postType);
- }
-
- // Fallback for pages without specific objects
- return new self();
- }
-
- /**
- * Resolve a template string
- *
- * @param string $template Template with {{variables}}
- * @return string Resolved string
- */
- public function resolve(string $template): string
- {
- return preg_replace_callback(
- '/\{\{([^}]+)\}\}/',
- fn($matches) => $this->resolveVariable($matches[1]),
- $template
- );
- }
-
- /**
- * Resolve a single variable
- */
- public function resolveVariable(string $variable): mixed
- {
- $variable = trim($variable);
-
- $custom = apply_filters(
- 'jvbSEOResolveVariable',
- null,
- $variable,
- $this->objectId,
- $this->objectType,
- $this->contentType,
- $this->meta
- );
-
- if ($custom !== null) {
- return $this->formatValue($custom, $variable);
- }
-
- // Check for dot notation (relation access)
- if (str_contains($variable, '.')) {
- return $this->resolveRelation($variable);
- }
-
- // Check context first (site variables, etc.)
- if (isset($this->context[$variable])) {
- return $this->context[$variable];
- }
-
- // Check special accessors
- $special = $this->resolveSpecial($variable);
- if ($special !== null) {
- return $special;
- }
-
- // Try to get from Meta.php
- if ($this->meta) {
- $value = $this->meta->get($variable);
-
- // Auto-resolve complex field types via SchemaFieldHelpers
- $value = $this->autoResolveField($variable, $value);
-
- return $this->formatValue($value, $variable);
- }
-
- // Return empty if not found
- return '';
- }
-
- /**
- * Auto-resolve field via SchemaFieldHelpers (DELEGATED)
- *
- * This is the main integration point - all enhancement logic
- * is now handled by SchemaFieldHelpers.autoResolve()
- */
- private function autoResolveField(string $fieldName, mixed $value): mixed
- {
- if ($value === null || $value === '') {
- return $value;
- }
-
- // Check if this is a relational field that needs a schema reference
- $fieldDef = $this->fieldDefinitions[$fieldName] ?? null;
- if ($fieldDef && $this->isRelationalField($fieldDef) && is_numeric($value)) {
- $objectType = $this->mapFieldTypeToObjectType($fieldDef['type']);
- return SchemaReferenceBuilder::build($objectType, (int)$value);
- }
-
- // Check if this is a term asking for related posts (e.g., shop → artists)
- if ($this->objectType === 'term' && $this->isRelatedPostsField($fieldName)) {
- return $this->buildRelatedPostsReferences($fieldName);
- }
-
- // Check if this is a post asking for related terms (e.g., artist → styles)
- if ($this->objectType === 'post' && $this->isRelatedTermsField($fieldName)) {
- return $this->buildRelatedTermsReferences($fieldName);
- }
-
- // Delegate to SchemaFieldHelpers for all other enhancement
- return SchemaFieldHelpers::autoResolve($fieldName, $value, $this->meta);
- }
-
- /**
- * Check if field name indicates related posts (plural form of post type)
- *
- * Examples: "artists", "artworks", "partners"
- */
- private function isRelatedPostsField(string $fieldName): bool
- {
- $posts = Registrar::getRegistered('post');
- if (empty($posts)) {
- return false;
- }
-
- foreach ($posts as $post) {
- $registrar = Registrar::getInstance($post);
- if ($registrar && strtolower($registrar->getPlural()) === $fieldName){
- return true;
- }
- }
-
- return false;
- }
-
- /**
- * Check if field name indicates related terms (plural form of taxonomy)
- *
- * Examples: "styles", "themes", "shops"
- */
- private function isRelatedTermsField(string $fieldName): bool
- {
-
- $posts = Registrar::getRegistered('term');
- if (empty($posts)) {
- return false;
- }
-
- foreach ($posts as $post) {
- $registrar = Registrar::getInstance($post);
- if ($registrar && strtolower($registrar->getPlural()) === $fieldName){
- return true;
- }
- }
-
- return false;
- }
-
- /**
- * Build references for posts related to current term
- */
- private function buildRelatedPostsReferences(string $fieldName): array
- {
- if ($this->objectType !== 'term' || !$this->objectId) {
- return [];
- }
-
- // Find the post type from the field name
- $postType = $this->getPostTypeFromPluralName($fieldName);
- if (!$postType) {
- return [];
- }
-
- // Build references (default: 10 items, minimal context)
- return SchemaReferenceBuilder::buildFromTerm(
- $this->objectId,
- $postType,
- limit: 10,
- includeContext: true
- );
- }
-
- /**
- * Build references for terms related to current post
- */
- private function buildRelatedTermsReferences(string $fieldName): array
- {
- if ($this->objectType !== 'post' || !$this->objectId) {
- return [];
- }
-
- // Find the taxonomy from the field name
- $taxonomy = $this->getTaxonomyFromPluralName($fieldName);
- if (!$taxonomy) {
- return [];
- }
-
- // Build references (default: 10 items, minimal context)
- return SchemaReferenceBuilder::buildFromPost(
- $this->objectId,
- $taxonomy,
- limit: 10,
- includeContext: false // Terms usually don't need context
- );
- }
-
- /**
- * Get post type key from plural name
- */
- private function getPostTypeFromPluralName(string $pluralName): ?string
- {
-
- $posts = Registrar::getRegistered('post');
- if (empty($posts)) {
- return null;
- }
-
- foreach ($posts as $post) {
- $registrar = Registrar::getInstance($post);
- if ($registrar && strtolower($registrar->getPlural()) === $pluralName){
- return $post;
- }
- }
-
-
- return null;
- }
-
- /**
- * Get taxonomy key from plural name
- */
- private function getTaxonomyFromPluralName(string $pluralName): ?string
- {
-
- $posts = Registrar::getRegistered('term');
- if (empty($posts)) {
- return null;
- }
-
- foreach ($posts as $post) {
- $registrar = Registrar::getInstance($post);
- if ($registrar && strtolower($registrar->getPlural()) === $pluralName){
- return $post;
- }
- }
- return null;
- }
-
- /**
- * Check if field is relational (references another entity)
- */
- private function isRelationalField(array $fieldDef): bool
- {
- return in_array($fieldDef['type'] ?? '', ['post', 'post_object', 'taxonomy', 'user']);
- }
-
- /**
- * Map field type to object type for SchemaReferenceBuilder
- */
- private function mapFieldTypeToObjectType(string $fieldType): string
- {
- return match($fieldType) {
- 'post', 'post_object' => 'post',
- 'taxonomy' => 'term',
- 'user' => 'user',
- default => 'post'
- };
- }
-
- /**
- * Resolve dot notation like {{author.name}} or {{shop.location.address}}
- */
- private function resolveRelation(string $path): string
- {
- $parts = explode('.', $path);
- $relation = array_shift($parts);
- $field = implode('.', $parts);
-
- // Get the related object
- $related = $this->getRelatedObject($relation);
- if (!$related) {
- return '';
- }
-
- // Create a resolver for the related object and resolve the field
- $relatedResolver = $this->createRelatedResolver($related);
- if (!$relatedResolver) {
- return '';
- }
-
- return $relatedResolver->resolveVariable($field);
- }
-
- /**
- * Get a related object by relation name
- */
- private function getRelatedObject(string $relation): mixed
- {
- if (!$this->meta) {
- return null;
- }
-
- // Common relations
- switch ($relation) {
- case 'author':
- if ($this->objectType === 'post') {
- $post = get_post($this->objectId);
- return $post ? get_user_by('id', $post->post_author) : null;
- }
- break;
-
- case 'featured_image':
- if ($this->objectType === 'post') {
- $imageId = get_post_thumbnail_id($this->objectId);
- return $imageId ? get_post($imageId) : null;
- }
- break;
- }
-
- // Check field definitions for taxonomy or post relations
- if (isset($this->fieldDefinitions[$relation])) {
- $fieldDef = $this->fieldDefinitions[$relation];
- $value = $this->meta->get($relation);
-
- if (!$value) {
- return null;
- }
-
- switch ($fieldDef['type'] ?? '') {
- case 'taxonomy':
- // Get first term from taxonomy
- $taxonomy = $fieldDef['taxonomy'] ?? $relation;
- if ($this->objectType === 'post') {
- $terms = wp_get_post_terms($this->objectId, jvbCheckBase($taxonomy));
- return !empty($terms) && !is_wp_error($terms) ? $terms[0] : null;
- }
- return is_numeric($value) ? get_term($value) : null;
-
- case 'post':
- case 'post_object':
- return get_post($value);
-
- case 'user':
- return get_user_by('id', $value);
- }
- }
-
- // Check if it's a taxonomy on the post
- if ($this->objectType === 'post') {
- $taxonomyName = jvbCheckBase($relation);
- if (taxonomy_exists($taxonomyName)) {
- $terms = wp_get_post_terms($this->objectId, $taxonomyName);
- return !empty($terms) && !is_wp_error($terms) ? $terms[0] : null;
- }
- }
-
- return null;
- }
-
- /**
- * Create a resolver for a related object
- */
- private function createRelatedResolver(mixed $object): ?self
- {
- if ($object instanceof WP_Post) {
- return new self($object->ID, 'post', $object->post_type);
- } elseif ($object instanceof WP_Term) {
- return new self($object->term_id, 'term', $object->taxonomy);
- } elseif ($object instanceof WP_User) {
- return new self($object->ID, 'user', jvbUserRole($object->ID));
- }
-
- return null;
- }
-
- /**
- * Resolve special built-in variables
- */
- private function resolveSpecial(string $variable): ?string
- {
- // Location component accessors
- if (str_starts_with($variable, 'location_')) {
- $component = substr($variable, 9);
- return $this->resolveLocationComponent($component);
- }
-
- // Image URL accessors for different sizes
- if (str_ends_with($variable, '_image_url')) {
- $field = str_replace('_image_url', '', $variable);
- $imageId = $this->meta?->get($field);
- if ($imageId) {
- return wp_get_attachment_image_url($imageId, 'full') ?: '';
- }
- }
-
- switch ($variable) {
- case 'permalink':
- case 'url':
- return $this->getObjectUrl();
-
- case 'featured_image_url':
- case 'thumbnail_url':
- if ($this->objectType === 'post') {
- $url = get_the_post_thumbnail_url($this->objectId, 'full');
- return $url ?: '';
- }
- return '';
-
- case 'post_date':
- case 'date_published':
- if ($this->objectType === 'post') {
- return get_the_date('c', $this->objectId);
- }
- return '';
-
- case 'post_modified':
- case 'date_modified':
- if ($this->objectType === 'post') {
- return get_the_modified_date('c', $this->objectId);
- }
- return '';
-
- case 'term_count':
- case 'count':
- if ($this->objectType === 'term') {
- $term = get_term($this->objectId);
- return $term ? (string)$term->count : '0';
- }
- return '';
- }
-
- return null;
- }
-
- /**
- * Resolve location component (e.g., location_address, location_city)
- */
- private function resolveLocationComponent(string $component): string
- {
- $location = $this->meta?->get('location');
-
- if (!is_array($location)) {
- return '';
- }
-
- return (string)($location[$component] ?? '');
- }
-
- /**
- * Get URL for current object
- */
- private function getObjectUrl(): string
- {
- return match($this->objectType) {
- 'post' => get_permalink($this->objectId) ?: '',
- 'term' => is_wp_error($link = get_term_link($this->objectId)) ? '' : $link,
- 'user' => get_author_posts_url($this->objectId) ?: '',
- 'archive' => $this->contentType ? (get_post_type_archive_link(jvbCheckBase($this->contentType)) ?: '') : '',
- default => ''
- };
- }
-
- /**
- * Format a value for output
- */
- private function formatValue(mixed $value, string $field = ''): string
- {
- if (is_null($value) || $value === '') {
- return '';
- }
-
- if (is_array($value)) {
- return $this->formatArrayValue($value, $field);
- }
-
- if (is_bool($value)) {
- return $value ? 'true' : 'false';
- }
-
- return (string)$value;
- }
-
- /**
- * Format array values
- */
- private function formatArrayValue(array $value, string $field): string
- {
- // Check if it's a repeater with sub-fields
- if (isset($value[0]) && is_array($value[0])) {
- // Extract specific field if pattern indicates
- $subField = $this->getArraySubField($field);
- if ($subField) {
- $extracted = array_column($value, $subField);
- return implode(', ', array_filter($extracted));
- }
-
- // Default: try common field names
- foreach (['name', 'title', 'url', 'value', 'keyword', 'language'] as $key) {
- if (isset($value[0][$key])) {
- return implode(', ', array_column($value, $key));
- }
- }
- }
-
- // Simple array
- return implode(', ', array_filter($value));
- }
-
- /**
- * Check if field name indicates a sub-field extraction
- */
- private function getArraySubField(string $field): ?string
- {
- // Pattern: field_name[sub_field]
- if (preg_match('/\[(\w+)\]$/', $field, $matches)) {
- return $matches[1];
- }
- return null;
- }
-
- /**
- * Build context with site-wide variables
- */
- private function buildContext(): void
- {
- $this->context = [
- 'site_name' => get_bloginfo('name'),
- 'site_description' => get_bloginfo('description'),
- 'site_url' => get_home_url(),
- 'current_url' => $this->getCurrentUrl(),
- 'current_year' => date('Y'),
- 'current_date' => date('Y-m-d'),
- ];
-
- // Add object-specific context
- if ($this->objectType === 'post' && $this->objectId) {
- $post = get_post($this->objectId);
- if ($post) {
- $this->context['post_title'] = $post->post_title;
- $this->context['post_excerpt'] = $post->post_excerpt ?: wp_trim_words($post->post_content, 20);
- $this->context['post_type'] = $post->post_type;
- }
- } elseif ($this->objectType === 'term' && $this->objectId) {
- $term = get_term($this->objectId);
- if ($term && !is_wp_error($term)) {
- $this->context['term_name'] = html_entity_decode($term->name);
- $this->context['term_description'] = wptexturize($term->description);
- $this->context['taxonomy'] = $term->taxonomy;
- }
- } elseif ($this->objectType === 'user' && $this->objectId) {
- $user = get_userdata($this->objectId);
- if ($user) {
- $this->context['user_name'] = $user->display_name;
- $this->context['user_login'] = $user->user_login;
- }
- } elseif ($this->objectType === 'archive' && $this->contentType) {
- // Archive-specific context
- $postType = jvbCheckBase($this->contentType);
- $postTypeObject = get_post_type_object($postType);
-
- if ($postTypeObject) {
- $this->context['archive_title'] = $postTypeObject->labels->name ?? '';
- $this->context['archive_description'] = $postTypeObject->description ?? '';
- $this->context['archive_url'] = get_post_type_archive_link($postType) ?: '';
- $this->context['post_type'] = $postType;
- $this->context['post_type_label'] = $postTypeObject->labels->singular_name ?? '';
- }
- }
- }
-
- /**
- * Get current URL
- */
- private function getCurrentUrl(): string
- {
- global $wp;
- return home_url($wp->request);
- }
-
- /**
- * Load field definitions from content config
- */
- private function loadFieldDefinitions(): void
- {
- if (!$this->contentType) {
- return;
- }
-
- $registrar = Registrar::getInstance($this->contentType));
- if ($registrar) {
- $this->fieldDefinitions = $registrar->getFields();
- }
- }
-}
diff --git a/inc/managers/SEO/TypeBuilder.php b/inc/managers/SEO/TypeBuilder.php
deleted file mode 100644
index 5ecd450..0000000
--- a/inc/managers/SEO/TypeBuilder.php
+++ /dev/null
@@ -1,85 +0,0 @@
-<?php
-namespace JVBase\managers\SEO;
-
-
-/**
- * Type Builder - Fluent API for schema type definitions
- */
-class TypeBuilder
-{
- private SchemaBuilder $schema;
- private string $name;
- private array $definition = [
- 'fields' => [],
- ];
-
- public function __construct(SchemaBuilder $schema, string $name)
- {
- $this->schema = $schema;
- $this->name = $name;
- }
-
- public function label(string $label): self
- {
- $this->definition['label'] = $label;
- return $this;
- }
-
- public function group(string $group): self
- {
- $this->definition['group'] = $group;
- return $this;
- }
-
- public function extends(string $parentType): self
- {
- $this->definition['extends'] = $parentType;
- return $this;
- }
-
- public function fields(array $fields): self
- {
- $this->definition['fields'] = $fields;
- return $this;
- }
-
- public function addField(string $field): self
- {
- $this->definition['fields'][] = $field;
- return $this;
- }
-
- public function addFields(array $fields): self
- {
- $this->definition['fields'] = array_merge($this->definition['fields'], $fields);
- return $this;
- }
-
- /**
- * Override a specific field's definition for this type
- */
- public function field(string $fieldName): FieldOverrideBuilder
- {
- return new FieldOverrideBuilder($this, $fieldName);
- }
-
- /**
- * Internal: Store field override
- */
- public function setFieldOverride(string $fieldName, array $overrides): self
- {
- if (!isset($this->definition['fieldOverrides'])) {
- $this->definition['fieldOverrides'] = [];
- }
- $this->definition['fieldOverrides'][$fieldName] = $overrides;
- return $this;
- }
-
- /**
- * Finish building and register the type
- */
- public function __destruct()
- {
- $this->schema->registerType($this->name, $this->definition);
- }
-}
diff --git a/inc/managers/SEO/_setup.php b/inc/managers/SEO/_setup.php
index 07a0e80..247083b 100644
--- a/inc/managers/SEO/_setup.php
+++ b/inc/managers/SEO/_setup.php
@@ -1,19 +1,5 @@
<?php
//New System
require(JVB_DIR . '/inc/managers/SEO/render/_setup.php');
-
-
-//require(JVB_DIR . '/inc/managers/SEO/schemas/_setup.php');
-//
-//require(JVB_DIR . '/inc/managers/SEO/FieldBuilder.php');
-//require(JVB_DIR . '/inc/managers/SEO/FieldOverrideBuilder.php');
-//require(JVB_DIR . '/inc/managers/SEO/TypeBuilder.php');
-//require(JVB_DIR . '/inc/managers/SEO/SchemaBuilder.php');
-//require(JVB_DIR.'/base/seo.php');
-//require(JVB_DIR . '/inc/managers/SEO/ConfigManager.php');
require(JVB_DIR . '/inc/managers/SEO/BreadcrumbManager.php');
-//require(JVB_DIR . '/inc/managers/SEO/SchemaFieldHelpers.php');
-//require(JVB_DIR . '/inc/managers/SEO/SchemaReferenceBuilder.php');
-//require(JVB_DIR . '/inc/managers/SEO/TemplateResolver.php');
-//require(JVB_DIR . '/inc/managers/SEO/SchemaOutputManager.php');
-require(JVB_DIR . '/inc/managers/SEO/SEOAdminPage.php');
+//require(JVB_DIR . '/inc/managers/SEO/SEOAdminPage.php');
diff --git a/inc/managers/SEO/schemas/SchemaDefinition.php b/inc/managers/SEO/schemas/SchemaDefinition.php
deleted file mode 100644
index d7f08f3..0000000
--- a/inc/managers/SEO/schemas/SchemaDefinition.php
+++ /dev/null
@@ -1,59 +0,0 @@
-<?php
-namespace JVBase\managers\SEO\schemas;
-
-if (!defined('ABSPATH')) {
- exit;
-}
-
-/**
- * Value object representing a schema entity to be resolved.
- *
- * Like Operation.php holds the data for a queue item,
- * this holds the data for a schema entity being built.
- */
-final class SchemaDefinition
-{
- /** @var string Schema.org type (e.g., 'TattooParlor', 'VisualArtwork') */
- public string $schemaType = '';
-
- /** @var string|null JSON-LD @id (e.g., 'https://site.com/#organization') */
- public ?string $id = null;
-
- /** @var int|null WordPress object ID (post ID, term ID, user ID) */
- public ?int $objectId = null;
-
- /** @var string|null Object type: post, term, user, archive */
- public ?string $objectType = null;
-
- /** @var string|null Content type slug from constants (tattoo, artist, shop) */
- public ?string $contentType = null;
-
- /** @var array Saved SEO config from ConfigManager */
- public array $config = [];
-
- /** @var array Additional context (archive type, parent term, etc.) */
- public array $context = [];
-
- /**
- * Create from the current SchemaOutputManager context
- */
- public static function fromContext(
- string $schemaType,
- array $config,
- ?string $id = null,
- ?array $wpContext = null
- ): self {
- $def = new self();
- $def->schemaType = $schemaType;
- $def->config = $config;
- $def->id = $id;
-
- if ($wpContext) {
- $def->objectId = $wpContext['objectId'] ?? null;
- $def->objectType = $wpContext['objectType'] ?? null;
- $def->contentType = $wpContext['type'] ?? null;
- }
-
- return $def;
- }
-}
diff --git a/inc/managers/SEO/schemas/SchemaResolverInterface.php b/inc/managers/SEO/schemas/SchemaResolverInterface.php
deleted file mode 100644
index 7944ba6..0000000
--- a/inc/managers/SEO/schemas/SchemaResolverInterface.php
+++ /dev/null
@@ -1,39 +0,0 @@
-<?php
-namespace JVBase\managers\SEO\schemas;
-
-use JVBase\meta\Meta;
-
-if (!defined('ABSPATH')) {
- exit;
-}
-
-/**
- * Interface for type-specific schema resolution.
- *
- * Like the Queue's Executor interface, each resolver
- * knows how to build schema for its content type family.
- */
-interface SchemaResolverInterface
-{
- /**
- * Resolve all fields and return the complete schema array for JSON-LD.
- *
- * @param SchemaDefinition $definition Schema definition with config and context
- * @param Meta|null $meta Optional Meta instance for field lookups
- * @return array|null Complete schema array, or null if empty
- */
- public function resolve(SchemaDefinition $definition, ?Meta $meta = null): ?array;
-
- /**
- * Get auto-enrichment fields beyond what's in config.
- *
- * Allows type-specific intelligence like:
- * - TattooParlor auto-includes artists as `employee`
- * - VisualArtwork derives `artform` from taxonomy terms
- * - Person adds `worksFor` from shop association
- *
- * @param SchemaDefinition $definition Schema definition with context
- * @return array Field name => value pairs to merge (won't override config)
- */
- public function getAutoFields(SchemaDefinition $definition): array;
-}
diff --git a/inc/managers/SEO/schemas/SchemaResolverRegistry.php b/inc/managers/SEO/schemas/SchemaResolverRegistry.php
deleted file mode 100644
index 097ff28..0000000
--- a/inc/managers/SEO/schemas/SchemaResolverRegistry.php
+++ /dev/null
@@ -1,76 +0,0 @@
-<?php
-namespace JVBase\managers\SEO\schemas;
-
-use JVBase\managers\SEO\SchemaBuilder;
-use JVBase\managers\SEO\schemas\resolvers\BaseResolver;
-use JVBase\managers\SEO\schemas\resolvers\CollectionPageResolver;
-use JVBase\managers\SEO\schemas\resolvers\FAQPageResolver;
-use JVBase\managers\SEO\schemas\resolvers\LocalBusinessResolver;
-use JVBase\managers\SEO\schemas\resolvers\PersonResolver;
-use JVBase\managers\SEO\schemas\resolvers\VisualArtworkResolver;
-/**
- * Registry mapping schema types to their resolvers.
- * Like Queue's TypeRegistry maps operation types to executors.
- */
-class SchemaResolverRegistry
-{
- private static ?self $instance = null;
- private array $resolvers = [];
- private BaseResolver $default;
-
- private function __construct()
- {
- $this->default = new BaseResolver();
- $this->registerDefaults();
-
- do_action(BASE . 'schema_resolvers_loaded', $this);
- }
-
- public static function getInstance(): self
- {
- if (self::$instance === null) {
- self::$instance = new self();
- }
- return self::$instance;
- }
-
- public function register(string $schemaType, SchemaResolverInterface $resolver): void
- {
- $this->resolvers[$schemaType] = $resolver;
- }
-
- public function get(string $schemaType): SchemaResolverInterface
- {
- // Check exact match, then parent chain
- if (isset($this->resolvers[$schemaType])) {
- return $this->resolvers[$schemaType];
- }
-
- // Check parent type (TattooParlor → LocalBusiness → Organization)
- $builder = SchemaBuilder::getInstance();
- $typeDef = $builder->getTypeDefinition($schemaType);
- if ($typeDef && !empty($typeDef['extends'])) {
- return $this->get($typeDef['extends']);
- }
-
- return $this->default;
- }
-
- private function registerDefaults(): void
- {
- $localBusiness = new LocalBusinessResolver();
- $this->register('LocalBusiness', $localBusiness);
-
- $visualArtwork = new VisualArtworkResolver();
- $this->register('VisualArtwork', $visualArtwork);
- $this->register('CreativeWork', new BaseResolver());
-
- $this->register('Person', new PersonResolver());
-
- $collection = new CollectionPageResolver();
- $this->register('CollectionPage', $collection);
- $this->register('DefinedTermSet', $collection);
-
- $this->register('FAQPage', new FAQPageResolver());
- }
-}
diff --git a/inc/managers/SEO/schemas/_setup.php b/inc/managers/SEO/schemas/_setup.php
deleted file mode 100644
index 23d3e45..0000000
--- a/inc/managers/SEO/schemas/_setup.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-/**
- * Schema Resolver System
- *
- * Loads the resolver interface, definition value object,
- * and all concrete resolver implementations.
- *
- * Include this from the parent SEO _setup.php or SchemaOutputManager.
- */
-
-if (!defined('ABSPATH')) {
- exit;
-}
-
-// Core
-require(JVB_DIR . '/inc/managers/SEO/schemas/SchemaDefinition.php');
-require(JVB_DIR . '/inc/managers/SEO/schemas/SchemaResolverInterface.php');
-
-// Resolvers
-require(JVB_DIR . '/inc/managers/SEO/schemas/resolvers/BaseResolver.php');
-require(JVB_DIR . '/inc/managers/SEO/schemas/resolvers/LocalBusinessResolver.php');
-require(JVB_DIR . '/inc/managers/SEO/schemas/resolvers/VisualArtworkResolver.php');
-require(JVB_DIR . '/inc/managers/SEO/schemas/resolvers/PersonResolver.php');
-require(JVB_DIR . '/inc/managers/SEO/schemas/resolvers/FAQPageResolver.php');
-require(JVB_DIR . '/inc/managers/SEO/schemas/resolvers/CollectionPageResolver.php');
-
-require(JVB_DIR . '/inc/managers/SEO/schemas/SchemaResolverRegistry.php');
diff --git a/inc/managers/SEO/schemas/resolvers/BaseResolver.php b/inc/managers/SEO/schemas/resolvers/BaseResolver.php
deleted file mode 100644
index 68dc297..0000000
--- a/inc/managers/SEO/schemas/resolvers/BaseResolver.php
+++ /dev/null
@@ -1,228 +0,0 @@
-<?php
-namespace JVBase\managers\SEO\schemas\resolvers;
-
-use JVBase\managers\SEO\schemas\SchemaDefinition;
-use JVBase\managers\SEO\schemas\SchemaResolverInterface;
-use JVBase\managers\SEO\SchemaBuilder;
-use JVBase\managers\SEO\SchemaFieldHelpers;
-use JVBase\managers\SEO\TemplateResolver;
-use JVBase\meta\Meta;
-
-if (!defined('ABSPATH')) {
- exit;
-}
-
-/**
- * Default schema resolver - handles generic field resolution.
- *
- * Type-specific resolvers extend this and override:
- * - getAutoFields() for auto-enrichment
- * - resolveField() for custom field handling
- * - transformField() for custom transformations
- *
- * Single transformation pass (fixes the double-transform bug).
- */
-class BaseResolver implements SchemaResolverInterface
-{
- protected ?TemplateResolver $templateResolver = null;
- protected ?SchemaBuilder $builder = null;
-
- /**
- * Properties that multi-property transformers expand into
- * (e.g., location_complex returns both 'address' and 'geo')
- */
- private const MULTI_PROPS = ['address', 'geo', 'openingHours', 'sameAs'];
-
- public function resolve(SchemaDefinition $definition, ?Meta $meta = null): ?array
- {
- $schema = ['@type' => $definition->schemaType];
-
- if ($definition->id) {
- $schema['@id'] = $definition->id;
- }
-
- $this->builder = SchemaBuilder::getInstance();
- $this->templateResolver = $this->buildTemplateResolver($definition);
-
- // Resolve each config field (single pass)
- foreach ($definition->config as $fieldName => $value) {
- if ($fieldName === 'type' || $this->isEmpty($value)) {
- continue;
- }
-
- $resolved = $this->resolveField($fieldName, $value, $meta);
-
- if (!$this->isEmpty($resolved)) {
- $schema = $this->mergeField($schema, $fieldName, $resolved);
- }
- }
-
- // Auto-enrich with type-specific fields (won't override existing)
- foreach ($this->getAutoFields($definition) as $fieldName => $value) {
- if (!isset($schema[$fieldName]) && !$this->isEmpty($value)) {
- $schema[$fieldName] = $value;
- }
- }
-
- return count($schema) > 1 ? $schema : null;
- }
-
- /**
- * Override in subclasses to add type-specific auto-fields.
- */
- public function getAutoFields(SchemaDefinition $definition): array
- {
- return [];
- }
-
- /**
- * Resolve a single field value.
- *
- * Template resolution → transformation in one pass.
- * Subclasses can override for specific field handling.
- */
- protected function resolveField(string $fieldName, mixed $value, ?Meta $meta): mixed
- {
- // Resolve template patterns ({{post_title}}, etc.)
- $value = $this->resolveTemplates($value);
-
- if ($value === null) {
- return null;
- }
-
- // Single transformation pass
- return $this->transformField($fieldName, $value, $meta);
- }
-
- /**
- * Resolve template patterns in a value (string or nested array).
- *
- * @return mixed Resolved value, or null if unresolvable pattern
- */
- protected function resolveTemplates(mixed $value): mixed
- {
- if (is_string($value) && SchemaFieldHelpers::isPattern($value)) {
- $resolved = $this->templateResolver?->resolve($value);
-
- // Unresolved pattern → skip
- if ($resolved === null || SchemaFieldHelpers::isPattern($resolved)) {
- return null;
- }
-
- return $resolved !== '' ? $resolved : null;
- }
-
- // Recurse into arrays
- if (is_array($value)) {
- $resolved = [];
- foreach ($value as $key => $subValue) {
- $sub = $this->resolveTemplates($subValue);
- if ($sub !== null) {
- $resolved[$key] = $sub;
- }
- }
- return !empty($resolved) ? $resolved : null;
- }
-
- return $value;
- }
-
- /**
- * Transform a field value using its registered transformer.
- *
- * This is the SINGLE transformation pass (fixes the old double-transform bug
- * where autoResolve ran first, then the transformer ran again).
- *
- * Override in subclasses to handle specific fields differently.
- */
- protected function transformField(string $fieldName, mixed $value, ?Meta $meta): mixed
- {
- // Already transformed (has @type) → return as-is
- if (is_array($value) && isset($value['@type'])) {
- return $value;
- }
-
- // Get transformer from field definition
- $fieldDef = $this->builder?->getFieldDefinition($fieldName);
-
- if ($fieldDef && !empty($fieldDef['transformer'])) {
- return $this->applyTransformer($value, $fieldDef['transformer'], $fieldName);
- }
-
- // Fall back to auto-resolve for fields without explicit transformers
- return SchemaFieldHelpers::autoResolve($fieldName, $value, $meta);
- }
-
- /**
- * Apply a named transformer from SchemaFieldHelpers.
- */
- protected function applyTransformer(mixed $value, string $transformer, string $fieldName): mixed
- {
- if (!method_exists(SchemaFieldHelpers::class, $transformer)) {
- return $value;
- }
-
- try {
- return SchemaFieldHelpers::$transformer($value);
- } catch (\Throwable $e) {
- error_log("Schema transformer error for {$fieldName}: {$e->getMessage()}");
- return $value;
- }
- }
-
- /**
- * Merge a resolved field into the schema array.
- *
- * Handles multi-property returns (e.g., location_complex → address + geo).
- */
- protected function mergeField(array $schema, string $fieldName, mixed $value): array
- {
- // Check for multi-property expansion
- if (is_array($value) && !isset($value['@type']) && !isset($value[0])) {
- if (!empty(array_intersect(array_keys($value), self::MULTI_PROPS))) {
- foreach ($value as $subKey => $subValue) {
- if (!$this->isEmpty($subValue)) {
- $schema[$subKey] = $subValue;
- }
- }
- return $schema;
- }
- }
-
- $schema[$fieldName] = $value;
- return $schema;
- }
-
- /**
- * Build the TemplateResolver for this definition's context.
- */
- protected function buildTemplateResolver(SchemaDefinition $definition): ?TemplateResolver
- {
- if ($definition->objectId && $definition->objectType) {
- return new TemplateResolver(
- $definition->objectId,
- $definition->objectType,
- $definition->contentType
- );
- }
-
- return TemplateResolver::forCurrentObject();
- }
-
- /**
- * Build a Meta instance for the definition's context.
- */
- protected function buildMeta(SchemaDefinition $definition): ?Meta
- {
- if (!$definition->objectId || !$definition->objectType) {
- return null;
- }
-
- return new Meta($definition->objectId, $definition->objectType);
- }
-
- protected function isEmpty(mixed $value): bool
- {
- return $value === null || $value === '' || $value === [];
- }
-}
diff --git a/inc/managers/SEO/schemas/resolvers/CollectionPageResolver.php b/inc/managers/SEO/schemas/resolvers/CollectionPageResolver.php
deleted file mode 100644
index 90fe65a..0000000
--- a/inc/managers/SEO/schemas/resolvers/CollectionPageResolver.php
+++ /dev/null
@@ -1,88 +0,0 @@
-<?php
-namespace JVBase\managers\SEO\schemas\resolvers;
-
-use JVBase\managers\SEO\schemas\SchemaDefinition;
-use JVBase\managers\SEO\SchemaReferenceBuilder;
-
-if (!defined('ABSPATH')) {
- exit;
-}
-
-/**
- * Resolver for archive/collection page schemas.
- *
- * Handles: CollectionPage, FAQPage, DefinedTermSet, ItemList
- *
- * Auto-enrichment:
- * - Builds `mainEntity` from archive posts or term's associated posts
- * - Adds `numberOfItems` for ItemList
- */
-class CollectionPageResolver extends BaseResolver
-{
- /** Schema types that should get mainEntity from their posts */
- private const ENTITY_TYPES = ['FAQPage', 'CollectionPage', 'ItemList', 'DefinedTermSet'];
-
- public function getAutoFields(SchemaDefinition $definition): array
- {
- $fields = [];
-
- if (!in_array($definition->schemaType, self::ENTITY_TYPES)) {
- return $fields;
- }
-
- $mainEntity = $this->buildMainEntity($definition);
-
- if (!empty($mainEntity)) {
- $fields['mainEntity'] = $mainEntity;
- }
-
- return $fields;
- }
-
- /**
- * Build mainEntity from the archive's posts.
- */
- private function buildMainEntity(SchemaDefinition $definition): ?array
- {
- // Term archive (e.g., /tattoo-style/american-traditional/)
- if ($definition->objectType === 'term' && $definition->objectId) {
- return $this->buildFromTerm($definition);
- }
-
- // Post type archive (e.g., /tattoos/)
- if ($definition->objectType === 'archive' && $definition->contentType) {
- return SchemaReferenceBuilder::buildFromArchive($definition->contentType);
- }
-
- return null;
- }
-
- /**
- * Build mainEntity from a taxonomy term's associated posts.
- */
- private function buildFromTerm(SchemaDefinition $definition): ?array
- {
- if (!defined('JVB_TAXONOMY') || !$definition->contentType) {
- return null;
- }
-
- $slug = jvbNoBase($definition->contentType);
- $taxConfig = JVB_TAXONOMY[$slug] ?? [];
-
- if (empty($taxConfig['for_content'])) {
- return null;
- }
-
- // Use the first associated post type
- $postType = $taxConfig['for_content'][0];
- $fullType = str_starts_with($postType, BASE) ? $postType : BASE . $postType;
-
- return SchemaReferenceBuilder::buildFromTerm(
- $definition->objectId,
- $fullType,
- 10,
- null,
- true
- );
- }
-}
diff --git a/inc/managers/SEO/schemas/resolvers/FAQPageResolver.php b/inc/managers/SEO/schemas/resolvers/FAQPageResolver.php
deleted file mode 100644
index e09e34d..0000000
--- a/inc/managers/SEO/schemas/resolvers/FAQPageResolver.php
+++ /dev/null
@@ -1,75 +0,0 @@
-<?php
-namespace JVBase\managers\SEO\schemas\resolvers;
-
-use JVBase\managers\SEO\schemas\SchemaDefinition;
-use JVBase\meta\Meta;
-
-if (!defined('ABSPATH')) {
- exit;
-}
-
-/**
- * Resolver for FAQPage schema.
- *
- * Handles two contexts:
- * - Single post: transforms question/answer into mainEntity Question structure
- * - Archive/term: delegates to CollectionPageResolver for mainEntity from posts
- */
-class FAQPageResolver extends BaseResolver
-{
- private CollectionPageResolver $collectionResolver;
-
- public function __construct()
- {
- $this->collectionResolver = new CollectionPageResolver();
- }
-
- public function resolve(SchemaDefinition $definition, ?Meta $meta = null): ?array
- {
- // Single FAQ post: restructure question/answer into mainEntity
- if ($definition->objectType === 'post') {
- $this->transformQuestionAnswer($definition);
- }
-
- return parent::resolve($definition, $meta);
- }
-
- public function getAutoFields(SchemaDefinition $definition): array
- {
- // Archive/term context: delegate to CollectionPageResolver
- if (in_array($definition->objectType, ['archive', 'term'])) {
- return $this->collectionResolver->getAutoFields($definition);
- }
-
- return [];
- }
-
- /**
- * Transform question/answer into proper mainEntity structure.
- *
- * Schema.org requires FAQPage Q&A nested as:
- * mainEntity: [{ @type: Question, name: ..., acceptedAnswer: { @type: Answer, text: ... } }]
- */
- private function transformQuestionAnswer(SchemaDefinition $definition): void
- {
- $question = $definition->config['question'] ?? null;
- $answer = $definition->config['answer'] ?? null;
-
- if (!$question && !$answer) {
- return;
- }
-
- unset($definition->config['question'], $definition->config['answer']);
-
- $questionEntity = ['@type' => 'Question', 'name' => $question ?? ''];
-
- if ($answer) {
- $questionEntity['acceptedAnswer'] = [
- '@type' => 'Answer',
- 'text' => $answer,
- ];
- }
-
- $definition->config['mainEntity'] = [$questionEntity];
- }
-}
diff --git a/inc/managers/SEO/schemas/resolvers/LocalBusinessResolver.php b/inc/managers/SEO/schemas/resolvers/LocalBusinessResolver.php
deleted file mode 100644
index 6cc7045..0000000
--- a/inc/managers/SEO/schemas/resolvers/LocalBusinessResolver.php
+++ /dev/null
@@ -1,88 +0,0 @@
-<?php
-namespace JVBase\managers\SEO\schemas\resolvers;
-
-use JVBase\managers\SEO\schemas\SchemaDefinition;
-use JVBase\managers\SEO\SchemaReferenceBuilder;
-use JVBase\meta\Meta;
-
-if (!defined('ABSPATH')) {
- exit;
-}
-
-/**
- * Resolver for LocalBusiness and its children (TattooParlor, FoodEstablishment, etc.)
- *
- * Auto-enrichment:
- * - Adds `employee` from associated content types (artists for a shop)
- * - Adds `makesOffer` from linked post types (services, styles)
- * - Resolves location from term meta if objectType is 'term'
- */
-class LocalBusinessResolver extends BaseResolver
-{
- public function getAutoFields(SchemaDefinition $definition): array
- {
- $fields = [];
-
- if (!$definition->objectId || !$definition->contentType) {
- return $fields;
- }
-
- $taxConfig = $this->getTaxonomyConfig($definition->contentType);
-
- if (empty($taxConfig)) {
- return $fields;
- }
-
- // Auto-include employees from associated content types
- if (!empty($taxConfig['for_content'])) {
- $employees = $this->buildEmployeeRefs($definition, $taxConfig['for_content']);
- if (!empty($employees)) {
- $fields['employee'] = $employees;
- }
- }
-
- return $fields;
- }
-
- /**
- * Build Person references for employees from associated post types.
- *
- * For a tattoo shop term, this finds all artists (posts) tagged with this shop.
- */
- private function buildEmployeeRefs(SchemaDefinition $definition, array $postTypes): array
- {
- $allRefs = [];
-
- foreach ($postTypes as $postType) {
- $fullType = str_starts_with($postType, BASE) ? $postType : BASE . $postType;
-
- $refs = SchemaReferenceBuilder::buildFromTerm(
- $definition->objectId,
- $fullType,
- 10,
- null,
- true
- );
-
- if (!empty($refs)) {
- $allRefs = array_merge($allRefs, $refs);
- }
- }
-
- return $allRefs;
- }
-
- /**
- * Get taxonomy config from JVB_TAXONOMY constant.
- */
- private function getTaxonomyConfig(string $contentType): array
- {
- if (!defined('JVB_TAXONOMY')) {
- return [];
- }
-
- $slug = jvbNoBase($contentType);
-
- return JVB_TAXONOMY[$slug] ?? [];
- }
-}
diff --git a/inc/managers/SEO/schemas/resolvers/PersonResolver.php b/inc/managers/SEO/schemas/resolvers/PersonResolver.php
deleted file mode 100644
index efce13f..0000000
--- a/inc/managers/SEO/schemas/resolvers/PersonResolver.php
+++ /dev/null
@@ -1,127 +0,0 @@
-<?php
-namespace JVBase\managers\SEO\schemas\resolvers;
-
-use JVBase\managers\SEO\schemas\SchemaDefinition;
-use JVBase\managers\SEO\SchemaReferenceBuilder;
-use JVBase\meta\Meta;
-use JVBase\registrar\Registrar;
-
-if (!defined('ABSPATH')) {
- exit;
-}
-
-/**
- * Resolver for Person schema (artists, staff, authors).
- *
- * Auto-enrichment:
- * - Adds `worksFor` from shop/organization association
- * - Adds `makesOffer` / sample `workExample` from their content
- * - Derives `knowsAbout` from their content's taxonomy terms
- */
-class PersonResolver extends BaseResolver
-{
- public function getAutoFields(SchemaDefinition $definition): array
- {
- $fields = [];
-
- if (!$definition->objectId) {
- return $fields;
- }
-
- // For user-type Person schemas (author pages)
- if ($definition->objectType === 'user') {
- $worksFor = $this->buildWorksFor($definition->objectId);
- if (!empty($worksFor)) {
- $fields['worksFor'] = $worksFor;
- }
-
- $examples = $this->buildWorkExamples($definition->objectId);
- if (!empty($examples)) {
- $fields['workExample'] = $examples;
- }
- }
-
- return $fields;
- }
-
- /**
- * Find Organization/LocalBusiness the person works for.
- *
- * Checks taxonomy terms assigned to the user (e.g., shop terms).
- */
- private function buildWorksFor(int $userId): ?array
- {
- $contentTypes = Registrar::getFeatured('is_content', 'term');
- if (empty($contentTypes)) {
- return null;
- }
-
- foreach ($contentTypes as $content) {
- $fullTax = jvbCheckBase($content);
- $terms = wp_get_object_terms($userId, $fullTax);
-
- if (is_wp_error($terms) || empty($terms)) {
- continue;
- }
-
- // Return first associated organization
- $term = $terms[0];
-
- return SchemaReferenceBuilder::build(
- 'term',
- $term->term_id
- );
- }
-
- return null;
- }
-
- /**
- * Build work examples from the person's authored content.
- */
- private function buildWorkExamples(int $userId, int $limit = 5): array
- {
- $role = jvbUserRole($userId);
- $registrar = Registrar::getInstance($role);
-
- if (!$registrar){
- return [];
- }
- $types = $registrar->getCreatable();
- if (empty($types)){
- return [];
- }
-
- $examples = [];
-
- foreach ($types as $slug) {
- $type = jvbCheckBase($slug);
-
- $posts = get_posts([
- 'post_type' => $type,
- 'author' => $userId,
- 'posts_per_page' => $limit,
- 'post_status' => 'publish',
- 'fields' => 'ids',
- ]);
-
- if (empty($posts)) {
- continue;
- }
-
- $refs = SchemaReferenceBuilder::buildMultiple('post', $posts, null, true);
-
- if (!empty($refs)) {
- $examples = array_merge($examples, $refs);
- }
-
- // Cap total examples
- if (count($examples) >= $limit) {
- $examples = array_slice($examples, 0, $limit);
- break;
- }
- }
-
- return $examples;
- }
-}
diff --git a/inc/managers/SEO/schemas/resolvers/VisualArtworkResolver.php b/inc/managers/SEO/schemas/resolvers/VisualArtworkResolver.php
deleted file mode 100644
index f3272a3..0000000
--- a/inc/managers/SEO/schemas/resolvers/VisualArtworkResolver.php
+++ /dev/null
@@ -1,134 +0,0 @@
-<?php
-namespace JVBase\managers\SEO\schemas\resolvers;
-
-use JVBase\managers\SEO\schemas\SchemaDefinition;
-use JVBase\managers\SEO\SchemaFieldHelpers;
-use JVBase\managers\SEO\SchemaReferenceBuilder;
-use JVBase\meta\Meta;
-use JVBase\registrar\Registrar;
-
-if (!defined('ABSPATH')) {
- exit;
-}
-
-/**
- * Resolver for VisualArtwork and its children (Tattoo, etc.)
- *
- * Auto-enrichment:
- * - Derives `artform` from taxonomy terms (tattoo-style → "American Traditional")
- * - Derives `artMedium` from taxonomy terms (tattoo-colour → "Black and Grey")
- * - Adds `creator` as Person reference from post author
- * - Adds `keywords` from associated taxonomy terms
- */
-class VisualArtworkResolver extends BaseResolver
-{
- public function getAutoFields(SchemaDefinition $definition): array
- {
- $fields = [];
-
- if (!$definition->objectId || $definition->objectType !== 'post') {
- return $fields;
- }
-
- $registrar = Registrar::getInstance($definition->contentType);
- if (!$registrar){
- return $fields;
- }
-
-
- // Derive artform from style taxonomy terms
- $artform = $this->deriveFromTaxonomy($definition->objectId, $contentConfig, 'style');
- if (!empty($artform)) {
- $fields['artform'] = count($artform) === 1 ? $artform[0] : $artform;
- }
-
- // Derive artMedium from medium/colour taxonomy terms
- $medium = $this->deriveFromTaxonomy($definition->objectId, $contentConfig, 'colour');
- if (!empty($medium)) {
- $fields['artMedium'] = count($medium) === 1 ? $medium[0] : $medium;
- }
-
- // Add creator from post author
- $creator = $this->buildCreatorRef($definition->objectId);
- if (!empty($creator)) {
- $fields['creator'] = $creator;
- }
-
- // Add keywords from all associated taxonomy terms
- $keywords = $this->buildKeywords($definition->objectId, $contentConfig);
- if (!empty($keywords)) {
- $fields['keywords'] = $keywords;
- }
-
- return $fields;
- }
-
- /**
- * Derive values from taxonomy terms associated with this post.
- *
- * Looks for taxonomies whose slug contains $hint (e.g., 'style', 'colour').
- */
- private function deriveFromTaxonomy(int $postId, array $contentConfig, string $hint): array
- {
- $values = [];
- $taxonomies = $contentConfig['taxonomies'] ?? [];
-
- foreach ($taxonomies as $taxSlug) {
- $slug = is_array($taxSlug) ? ($taxSlug['taxonomy'] ?? '') : $taxSlug;
-
- if (!str_contains($slug, $hint)) {
- continue;
- }
-
- $fullTax = str_starts_with($slug, BASE) ? $slug : BASE . $slug;
- $terms = wp_get_post_terms($postId, $fullTax, ['fields' => 'names']);
-
- if (!is_wp_error($terms) && !empty($terms)) {
- $values = array_merge($values, $terms);
- }
- }
-
- return array_unique($values);
- }
-
- /**
- * Build Person reference from the post author.
- */
- private function buildCreatorRef(int $postId): ?array
- {
- $post = get_post($postId);
-
- if (!$post || !$post->post_author) {
- return null;
- }
-
- return SchemaReferenceBuilder::build(
- 'user',
- $post->post_author,
- 'Person'
- );
- }
-
- /**
- * Collect all taxonomy term names as keywords.
- */
- private function buildKeywords(int $postId, array $contentConfig): array
- {
- $keywords = [];
- $taxonomies = $contentConfig['taxonomies'] ?? [];
-
- foreach ($taxonomies as $taxSlug) {
- $slug = is_array($taxSlug) ? ($taxSlug['taxonomy'] ?? '') : $taxSlug;
- $fullTax = str_starts_with($slug, BASE) ? $slug : BASE . $slug;
-
- $terms = wp_get_post_terms($postId, $fullTax, ['fields' => 'names']);
-
- if (!is_wp_error($terms)) {
- $keywords = array_merge($keywords, $terms);
- }
- }
-
- return array_unique($keywords);
- }
-
-}
diff --git a/inc/managers/VerifyEntryManager.php b/inc/managers/VerifyEntryManager.php
index afbee5d..69bfb01 100644
--- a/inc/managers/VerifyEntryManager.php
+++ b/inc/managers/VerifyEntryManager.php
@@ -77,7 +77,7 @@
return $this->response(false, 'Term does not exist');
}
- $profile = get_user_meta($userID, BASE.'link', true);
+ $profile = get_user_meta($userID, BASE.'profile_link', true);
if (empty($profile)) {
return $this->response(false, 'No Profile found');
}
diff --git a/inc/managers/_setup.php b/inc/managers/_setup.php
index d6fb3da..96ff954 100644
--- a/inc/managers/_setup.php
+++ b/inc/managers/_setup.php
@@ -1,5 +1,6 @@
<?php
+use JVBase\managers\ApprovalManager;
use JVBase\managers\Cache;
use JVBase\managers\IconsManager;
use JVBase\registrar\Registrar;
@@ -48,16 +49,20 @@
require(JVB_DIR . '/inc/managers/UserTermsManager.php');
}
- if (Site::has('notifications')) {
- require(JVB_DIR . '/inc/managers/Notifications/Content.php');
- require(JVB_DIR . '/inc/managers/Notifications/EmailDigests.php');
- require(JVB_DIR . '/inc/managers/Notifications/Notifications.php');
- require(JVB_DIR . '/inc/managers/Notifications/Preferences.php');
- require(JVB_DIR . '/inc/managers/NotificationManager.php');
+ if (!empty(Registrar::getFeatured('approve_new'))) {
+ require(JVB_DIR . '/inc/managers/ApprovalManager.php');
}
+
$membership = Site::membership();
if ($membership) {
+ if ($membership->has('notifications')) {
+ require(JVB_DIR . '/inc/managers/Notifications/Content.php');
+ require(JVB_DIR . '/inc/managers/Notifications/EmailDigests.php');
+ require(JVB_DIR . '/inc/managers/Notifications/Notifications.php');
+ require(JVB_DIR . '/inc/managers/Notifications/Preferences.php');
+ require(JVB_DIR . '/inc/managers/NotificationManager.php');
+ }
if ($membership->has('forum') && !empty(Registrar::getFeatured('is_content', 'term'))) {
require(JVB_DIR . '/inc/managers/NewsRelationships.php');
}
@@ -77,6 +82,18 @@
if (Site::has('referrals')) {
require(JVB_DIR . '/inc/managers/ReferralManager.php');
}
+
+ if (!empty(Registrar::getFeatured('karma'))) {
+ require(JVB_DIR . '/inc/managers/KarmaManager.php');
+ }
+ if (Site::has('favourites')) {
+ require(JVB_DIR . '/inc/managers/FavouritesManager.php');
+ }
+}
+
+add_action('init', 'jvb_load_karma', 1);
+function jvb_load_karma():void
+{
}
require(JVB_DIR . '/inc/managers/ErrorHandler.php');
require(JVB_DIR . '/inc/managers/queue/_setup.php');
diff --git a/inc/meta/MetaFormOld.php b/inc/meta/MetaFormOld.php
deleted file mode 100644
index ddfd94f..0000000
--- a/inc/meta/MetaFormOld.php
+++ /dev/null
@@ -1,1781 +0,0 @@
-<?php
-namespace JVBase\meta;
-
-use JVBase\forms\TaxonomySelector;
-use JVBase\forms\PostSelector;
-use DateTime;
-
-if (!defined('ABSPATH')) {
- exit;
-}
-
-/**
- * Renders the form fields for managing the meta
- */
-class MetaFormOld
-{
- protected int $max_file_size = 5242880;
- protected ?MetaTypeManager $type_manager = null;
-
- /* ========== MAIN RENDER METHOD ========== */
- public function return(string $name, mixed $value, array $config, bool $showHidden = false)
- {
- return $this->render($name, $value, $config, $showHidden, true);
- }
- public function render(string $name, mixed $value, array $config, bool $showHidden = false, bool $return = false): mixed
- {
- $out = '';
- if (jvbCheck('hidden', $config) && !$showHidden) {
- return $out;
- }
-
- if (!array_key_exists('type', $config)) {
- return $out;
- }
- if (!$value) {
- $value = $this->getDefaultValue($config['type']);
- }
-
- // Handle hidden display type
- if (array_key_exists('display', $config) && $config['display'] === 'hidden') {
- $out = '<input type="hidden" name="' . $name . '" value="' . $value . '" />';
- if (!$return) {
- echo $out;
- }
- return $out;
- }
-
- ob_start();
-
- // Try custom function overrides first
- $type = array_map('ucfirst', explode('_', $config['type']));
- $type = implode('', $type);
- $method = 'render' . $type . 'Field';
-
- $nameTemp = implode('', array_map('ucfirst', explode('_', $name)));
- $nameMethod = 'render' . $nameTemp . 'Field';
-
- if (function_exists($nameMethod)) {
- call_user_func($nameMethod, $value, $config);
- } elseif (function_exists($method)) {
- call_user_func($method, $value, $config);
- } elseif (method_exists($this, $method)) {
- $this->$method($name, $value, $config);
- }
-
- $out = ob_get_clean();
-
- do_action('jvbRenderFormField', $name, $config, $value);
- $out = apply_filters('jvbFilterRenderFormField', $out, $name, $config, $value);
-
- if (!$return) {
- echo $out;
- }
- return $out;
- }
-
- public function getDefaultValue(string $type):mixed {
- if (!$this->type_manager) {
- $this->type_manager = new MetaTypeManager();
- }
- return match ($this->type_manager->getMetaType($type)) {
- 'object', 'array' => [],
- 'boolean' => false,
- 'integer' => 0,
- default => '',
- };
- }
-
- /* ========== HELPER METHODS ========== */
-
- /**
- * Prepare common field data
- */
- protected function prepareFieldData(string $name, mixed $value, array $field): array
- {
- return [
- 'name' => array_key_exists('group', $field) ? $field['group'] . '::' . $name : $name,
- 'value' => isset($field['value']) ? $field['value'] : $value,
- 'id' => (array_key_exists('base', $field) ? esc_attr($field['base']) : '') . esc_attr($name),
- ];
- }
-
- /**
- * Build common HTML attributes for inputs
- */
- protected function buildInputAttributes(string $name, array $field): string
- {
- $attrs = [];
-
- // Conditional rendering
- if (array_key_exists('condition', $field)) {
- $attrs['conditional'] = $this->handleConditionalField($field);
- }
-
- // Accessibility
- if (!empty($field['description'])) {
- $attrs['aria-describedby'] = $name . '-help';
- }
-
- // Common attributes
- $common = ['placeholder', 'autocomplete', 'pattern', 'minlength', 'maxlength', 'min', 'max', 'step'];
- foreach ($common as $attr) {
- if (array_key_exists($attr, $field)) {
- $attrs[$attr] = $field[$attr];
- }
- }
-
- // Required
- if (!empty($field['required'])) {
- $attrs['required'] = true;
- }
-
- // Build attribute string
- $attrString = '';
- foreach ($attrs as $key => $val) {
- if ($key === 'conditional') {
- $attrString .= ' ' . $val; // Already formatted
- } elseif ($val === true) {
- $attrString .= ' ' . $key;
- } else {
- $attrString .= ' ' . $key . '="' . esc_attr($val) . '"';
- }
- }
-
- return $attrString;
- }
-
- /**
- * Build validation data attributes
- */
- protected function buildValidationAttributes(array $field): string
- {
- $attrs = [];
-
- if (!empty($field['pattern'])) {
- $attrs['data-pattern'] = $field['pattern'];
- }
-
- if (!empty($field['validate'])) {
- $attrs['data-validate'] = $field['validate'];
- }
-
- if (isset($field['min'])) {
- $attrs['data-min'] = $field['min'];
- }
-
- if (isset($field['max'])) {
- $attrs['data-max'] = $field['max'];
- }
-
- if (isset($field['minlength'])) {
- $attrs['data-minlength'] = $field['minlength'];
- }
-
- if (isset($field['maxlength'])) {
- $attrs['data-maxlength'] = $field['maxlength'];
- }
-
- if (!empty($field['validation_message'])) {
- $attrs['data-validation-message'] = $field['validation_message'];
- }
-
- $attrs['data-type'] = $field['type'];
-
- $attrString = '';
- foreach ($attrs as $key => $val) {
- $attrString .= ' ' . $key . '="' . esc_attr($val) . '"';
- }
-
- return $attrString;
- }
-
- /* ========== GENERIC FIELD WRAPPER ========== */
-
- /**
- * Render a standard input field with validation wrapper
- */
- protected function renderStandardInput(string $name, mixed $value, array $field, string $inputType = 'text'): void
- {
- $data = $this->prepareFieldData($name, $value, $field);
- $inputAttrs = $this->buildInputAttributes($name, $field);
- $validationAttrs = $this->buildValidationAttributes($field);
- $conditional = array_key_exists('condition', $field) ? $this->handleConditionalField($field) : '';
-
- $pattern = array_key_exists('pattern', $field) ? $field['pattern'] : '';
- $customData = '';
- if (array_key_exists('data', $field) && !empty($field['data'])) {
- foreach ($field['data'] as $key => $v) {
- $customData .= ($v === '') ? ' data-' . $key : ' data-' . $key . '="' . $v . '"';
- }
- }
- ?>
- <div class="field <?= esc_attr($field['type']) ?> <?= esc_attr($name) ?>"
- <?= $conditional ?>
- data-field="<?= esc_attr($name) ?>"
- data-field-type="<?=esc_attr($field['type'])?>"
- <?= $validationAttrs ?>>
-
- <?php $this->renderLabel($name, $field); ?>
-
- <div class="field-input-wrapper">
- <input
- type="<?= esc_attr($inputType) ?>"
- id="<?= esc_attr($data['id']) ?>"
- name="<?= esc_attr($data['name']) ?>"
- value="<?= esc_attr($data['value']) ?>"
- <?= $inputAttrs ?>
- <?= $customData?>
- <?= $pattern?>
- >
- <span class="validation-icon success" hidden aria-hidden="true">
- <?= jvbIcon('check-circle') ?>
- </span>
- <span class="validation-icon error" hidden aria-hidden="true">
- <?= jvbIcon('x-circle') ?>
- </span>
- </div>
-
- <span class="validation-message" hidden role="alert"></span>
-
- <?php $this->renderHintAndDescription($field, $name); ?>
- </div>
- <?php
- }
-
- /**
- * Render field label with optional character count
- */
- protected function renderLabel(string $name, array $field): void
- {
- ?>
- <label for="<?= esc_attr($name) ?>">
- <?= esc_html($field['label']) ?>
- <?php if (!empty($field['required'])) : ?>
- <span class="required" aria-label="required">*</span>
- <?php endif; ?>
- <?php if (!empty($field['limit'])) : ?>
- <span class="char-count" data-limit="<?= esc_attr($field['limit']) ?>">
- <span class="current">0</span>/<?= esc_attr($field['limit']) ?>
- </span>
- <?php endif; ?>
- </label>
- <?php
- }
-
- /**
- * Render hint and description
- */
- protected function renderHintAndDescription(array $field, string $name): void
- {
- if (!empty($field['hint'])) {
- $this->renderHint($field['hint']);
- }
-
- if (!empty($field['description'])) {
- $this->renderDescription($field['description'], $name);
- }
- }
-
- protected function renderHint(string $hint): void
- {
- ?>
- <span class="hint"><?= esc_html($hint) ?></span>
- <?php
- }
-
- protected function renderDescription(string $description, string $name): void
- {
- ?>
- <p class="description" id="<?= esc_attr($name) ?>-help">
- <?= wp_kses_post($description) ?>
- </p>
- <?php
- }
-
- /* ========== SIMPLE INPUT FIELD TYPES ========== */
-
- public function renderTextField(string $name, mixed $value, array $field): void
- {
- $this->renderStandardInput($name, $value, $field, $field['subtype'] ?? 'text');
- }
-
- public function renderEmailField(string $name, mixed $value, array $field): void
- {
- $field['validate'] = 'email'; // Auto-add email validation
- $this->renderStandardInput($name, $value, $field, 'email');
- }
-
- private function renderUrlField(string $name, mixed $value, array $field): void
- {
- $field['validate'] = 'url'; // Auto-add URL validation
- $this->renderStandardInput($name, $value, $field, 'url');
- }
-
- private function renderTelField(string $name, mixed $value, array $field): void
- {
- $field['validate'] = 'phone'; // Auto-add phone validation
- $this->renderStandardInput($name, $value, $field, 'tel');
- }
-
- private function renderDateField(string $name, mixed $value, array $field): void
- {
- $format = !empty($field['format']) ? $field['format'] : 'Y-m-d';
-
- // Format the date if we have a value
- if (!empty($value)) {
- $date = DateTime::createFromFormat($format, $value);
- if ($date) {
- $value = $date->format('Y-m-d'); // HTML date input requires Y-m-d format
- }
- }
-
- $this->renderStandardInput($name, $value, $field, 'date');
- }
-
- private function renderTimeField(string $name, mixed $value, array $field): void
- {
- $this->renderStandardInput($name, $value, $field, 'time');
- }
-
- private function renderDatetimeField(string $name, mixed $value, array $field): void
- {
- $this->renderStandardInput($name, $value, $field, 'datetime-local');
- }
-
- /* ========== TEXTAREA FIELD ========== */
-
- public function renderTextareaField(string $name, mixed $value, array $field): void
- {
- $data = $this->prepareFieldData($name, $value, $field);
- $inputAttrs = $this->buildInputAttributes($name, $field);
- $validationAttrs = $this->buildValidationAttributes($field);
- $conditional = array_key_exists('condition', $field) ? $this->handleConditionalField($field) : '';
-
- $rows = isset($field['rows']) ? (int)$field['rows'] : 4;
- $quill = (array_key_exists('quill', $field) && $field['quill'] == true) ? ' data-editor="true"' : '';
-
- if ($quill !== '') {
- $allowImages = array_key_exists('allowImage', $field);
- $quill .= ($allowImages) ? ' data-allowimage="true"' : ' data-allowimage="false"';
- }
-
- // Handle array values
- if (is_array($value)) {
- $value = implode(', ', $value);
- }
-
- ?>
- <div class="field <?= esc_attr($field['type']) ?> <?= esc_attr($name) ?>"
- <?= $conditional ?>
- data-field="<?= esc_attr($name) ?>"
- data-field-type="<?=esc_attr($field['type'])?>"
- <?= $validationAttrs ?>>
-
- <?php $this->renderLabel($name, $field); ?>
-
- <div class="field-input-wrapper">
- <textarea
- id="<?= esc_attr($data['id']) ?>"
- name="<?= esc_attr($data['name']) ?>"
- rows="<?= esc_attr($rows) ?>"
- <?= $quill ?>
- <?= $inputAttrs ?>
- ><?= esc_textarea($data['value']) ?></textarea>
- <span class="validation-icon success" hidden aria-hidden="true">
- <?= jvbIcon('check-circle') ?>
- </span>
- <span class="validation-icon error" hidden aria-hidden="true">
- <?= jvbIcon('x-circle') ?>
- </span>
- </div>
-
- <span class="validation-message" hidden role="alert"></span>
-
- <?php $this->renderHintAndDescription($field, $name); ?>
- </div>
- <?php
- }
-
- /* ========== NUMBER FIELD ========== */
-
- private function renderNumberField(string $name, mixed $value, array $field): void
- {
- $data = $this->prepareFieldData($name, $value, $field);
- $conditional = array_key_exists('condition', $field) ? $this->handleConditionalField($field) : '';
- $validationAttrs = $this->buildValidationAttributes($field);
- $describedBy = (!empty($field['description'])) ? ' aria-describedby="' . $name . '-help"' : '';
-
- $min = isset($field['min']) ? (float)$field['min'] : 0;
- $max = isset($field['max']) ? (float)$field['max'] : 100;
- $step = isset($field['step']) ? (float)$field['step'] : 1;
-
- // Handle custom data attributes
- $customData = '';
- if (array_key_exists('data', $field) && !empty($field['data'])) {
- foreach ($field['data'] as $key => $v) {
- $customData .= ($v === '') ? ' data-' . $key : ' data-' . $key . '="' . $v . '"';
- }
- }
-
- if (empty($value)) {
- $value = $field['default'] ?? 0;
- }
-
- $autocomplete = (array_key_exists('autocomplete', $field)) ? ' autocomplete="' . $field['autocomplete'] . '"' : '';
-
- ?>
- <div class="field <?= esc_attr($field['type']) ?> <?= esc_attr($name) ?> row"
- <?= $conditional ?>
- data-field="<?= esc_attr($name) ?>"
- data-field-type="<?=esc_attr($field['type'])?>"
- <?= $validationAttrs ?>>
-
- <?php $this->renderLabel($name, $field); ?>
-
- <div class="quantity" <?= $customData ?>>
- <button type="button"
- class="decrease"
- title="<?= array_key_exists('remove', $field) ? $field['remove'] : 'Decrease amount' ?>"
- aria-label="Decrease <?= esc_attr($field['label']) ?>">
- <?= jvbIcon('minus-square') ?>
- </button>
-
- <input type="number"
- id="<?= esc_attr($data['id']) ?>"
- name="<?= esc_attr($data['name']) ?>"
- value="<?= esc_attr($value) ?>"
- min="<?= esc_attr($min) ?>"
- max="<?= esc_attr($max) ?>"
- step="<?= esc_attr($step) ?>"
- class="quantity-input"
- <?= $describedBy ?>
- <?= $autocomplete ?>
- <?= !empty($field['required']) ? 'required' : '' ?>>
-
- <button type="button"
- class="increase"
- title="<?= array_key_exists('add', $field) ? $field['add'] : 'Increase amount' ?>"
- aria-label="Increase <?= esc_attr($field['label']) ?>">
- <?= jvbIcon('plus-square') ?>
- </button>
- </div>
-
- <?php $this->renderHintAndDescription($field, $name); ?>
- </div>
- <?php
- }
-
- /* ========== SELECT, RADIO, CHECKBOX FIELDS ========== */
-
- private function renderSelectField(string $name, mixed $value, array $field): void
- {
- $data = $this->prepareFieldData($name, $value, $field);
- $inputAttrs = $this->buildInputAttributes($name, $field);
- $validationAttrs = $this->buildValidationAttributes($field);
- $conditional = array_key_exists('condition', $field) ? $this->handleConditionalField($field) : '';
-
- ?>
- <div class="field <?= esc_attr($field['type']) ?> <?= esc_attr($name) ?>"
- <?= $conditional ?>
- data-field="<?= esc_attr($name) ?>"
- data-field-type="<?=esc_attr($field['type'])?>"
- <?= $validationAttrs ?>>
-
- <?php $this->renderLabel($name, $field); ?>
-
- <div class="field-input-wrapper">
- <select
- id="<?= esc_attr($data['id']) ?>"
- name="<?= esc_attr($data['name']) ?>"
- <?= $inputAttrs ?>>
- <?php foreach ($field['options'] as $key => $label) : ?>
- <option value="<?= esc_attr($key) ?>" <?php selected($value, $key); ?>>
- <?= esc_html($label) ?>
- </option>
- <?php endforeach; ?>
- </select>
- <span class="validation-icon success" hidden aria-hidden="true">
- <?= jvbIcon('check-circle') ?>
- </span>
- <span class="validation-icon error" hidden aria-hidden="true">
- <?= jvbIcon('x-circle') ?>
- </span>
- </div>
-
- <span class="validation-message" hidden role="alert"></span>
-
- <?php $this->renderHintAndDescription($field, $name); ?>
- </div>
- <?php
- }
-
- private function renderRadioField(string $name, mixed $value, array $field): void
- {
- $data = $this->prepareFieldData($name, $value, $field);
- $validationAttrs = $this->buildValidationAttributes($field);
- $conditional = array_key_exists('condition', $field) ? $this->handleConditionalField($field) : '';
-
- ?>
- <div class="field <?= esc_attr($field['type']) ?> <?= esc_attr($name) ?>"
- <?= $conditional ?>
- data-field="<?= esc_attr($name) ?>"
- data-field-type="<?=esc_attr($field['type'])?>"
- <?= $validationAttrs ?>>
-
- <fieldset>
- <legend><?= esc_html($field['label']) ?>
- <?php if (!empty($field['required'])) : ?>
- <span class="required" aria-label="required">*</span>
- <?php endif; ?>
- </legend>
-
- <?php foreach ($field['options'] as $key => $label) : ?>
- <input
- type="radio"
- id="<?= esc_attr($data['name']) ?>-<?= esc_attr($key)?>"
- name="<?= esc_attr($data['name']) ?>"
- value="<?= esc_attr($key) ?>"
- <?php checked($value, $key); ?>
- <?= !empty($field['required']) ? 'required' : '' ?>
- >
- <label class="radio-option" for="<?= esc_attr($data['name']) ?>-<?= esc_attr($key)?>">
- <span><?= $label ?></span>
- </label>
- <?php endforeach; ?>
- </fieldset>
-
- <span class="validation-message" hidden role="alert"></span>
-
- <?php $this->renderHintAndDescription($field, $name); ?>
- </div>
- <?php
- }
-
- private function renderCheckboxField(string $name, mixed $value, array $field): void
- {
- $data = $this->prepareFieldData($name, $value, $field);
- $validationAttrs = $this->buildValidationAttributes($field);
- $conditional = array_key_exists('condition', $field) ? $this->handleConditionalField($field) : '';
-
- if (!is_array($value)) {
- $value = !empty($value) ? [$value] : [];
- }
-
- ?>
- <div class="field <?= esc_attr($field['type']) ?> <?= esc_attr($name) ?>"
- <?= $conditional ?>
- data-field="<?= esc_attr($name) ?>"
- data-field-type="<?=esc_attr($field['type'])?>"
- <?= $validationAttrs ?>>
-
- <fieldset>
- <legend><?= esc_html($field['label']) ?>
- <?php if (!empty($field['required'])) : ?>
- <span class="required" aria-label="required">*</span>
- <?php endif; ?>
- </legend>
-
- <?php foreach ($field['options'] as $key => $label) : ?>
- <input
- type="checkbox"
- id="<?= esc_attr($data['name']) ?>-<?= esc_attr($key)?>"
- name="<?= esc_attr($data['name']) ?>[]"
- value="<?= esc_attr($key) ?>"
- <?php checked(in_array($key, $value)); ?>
- >
- <label class="checkbox-option" for="<?= esc_attr($data['name']) ?>-<?= esc_attr($key)?>">
- <span><?= esc_html($label) ?></span>
- </label>
- <?php endforeach; ?>
- </fieldset>
-
- <span class="validation-message" hidden role="alert"></span>
-
- <?php $this->renderHintAndDescription($field, $name); ?>
- </div>
- <?php
- }
-
- private function renderTrueFalseField(string $name, mixed $value, array $field): void
- {
- $data = $this->prepareFieldData($name, $value, $field);
- $validationAttrs = $this->buildValidationAttributes($field);
- $conditional = array_key_exists('condition', $field) ? $this->handleConditionalField($field) : '';
- $describedBy = (!empty($field['description'])) ? ' aria-describedby="' . $name . '-help"' : '';
-
- ?>
- <div class="field true-false <?= esc_attr($name) ?> row btw"
- <?= $conditional ?>
- data-field="<?= esc_attr($name) ?>"
- data-field-type="<?=esc_attr($field['type'])?>"
- <?= $validationAttrs ?>>
-
- <label class="toggle-switch row" <?= $describedBy ?>>
- <input
- type="checkbox"
- name="<?= esc_attr($data['name']) ?>"
- value="1"
- <?= ($value) ? ' checked' : '' ?>
- <?= !empty($field['required']) ? 'required' : '' ?>
- >
- <div class="slider"></div>
- <span class="toggle-label">
- <?php if (!empty($field['required'])) : ?>
- <span class="required" aria-label="required">*</span>
- <?php endif; ?>
-
- <?= esc_html($field['label']) ?></span>
- </label>
- <span class="validation-message" hidden role="alert"></span>
- <?php $this->renderHintAndDescription($field, $name); ?>
- </div>
- <?php
- }
-
-
-
- /* ========== REPEATER FIELD ========== */
-
- private function renderRepeaterField(string $name, mixed $value, array $field):void
- {
- $values = is_array($value) ? $value : array();
-
- $conditional = $this->handleConditionalField($field);
- $row_label = isset($field['add_label']) ? $field['add_label'] : '';
- $rowTitle = (array_key_exists('new_row', $field)) ? $field['new_row'] : 'New Item';
- if (array_key_exists('group', $field)) {
- $name = $field['group'].'::'.$name;
- }
- $describedBy = (!empty($field['description'])) ? ' aria-describedby="'.$name.'-help"' : '';
- ?>
- <div class="field repeater <?=$name?>"
- data-field="<?= esc_attr($name); ?>"
- data-field-type="<?=esc_attr($field['type'])?>"
- <?= $describedBy ?>
- <?= $row_label ? 'data-label="' . esc_attr($row_label) . '"' : ''; ?>
- <?=$conditional?>>
- <?php
- if (!array_key_exists('label', $field)) {
- error_log('No label for: '.print_r($name, true));
- }
- ?>
- <h3><?= esc_html($field['label']); ?></h3>
-
-
- <div class="repeater-items">
- <?php
- if (!empty($values)) {
- foreach ($values as $index => $row) {
- $this->renderRepeaterRow($field['fields'], $row, $index, $name, $rowTitle);
- }
- }
- ?>
- </div>
-
- <template class="<?=uniqid('repeaterRow')?>">
- <?php $this->renderRepeaterRow($field['fields'], array(), '', '', $rowTitle); ?>
- </template>
-
- <button type="button" class="add-repeater-row">
- <?= jvbIcon('plus', ['title'=> 'Add']); ?> <?= (array_key_exists('add_label', $field)) ? $field['add_label'] : 'Add Item'; ?>
- </button>
- <?php if (array_key_exists('hint', $field)) { $this->renderHint($field['hint']); } ?>
- <?php if (array_key_exists('description', $field)) { $this->renderDescription($field['description'], $name); } ?>
- </div>
- <?php
- }
-
- private function renderRepeaterRow(array $fields, array $values, int|string $index, string $base_name, string $rowTitle = 'New Item'):void
- {
- $display_number = (is_string($index)) ? $index : ($index + 1);
- ?>
- <div class="repeater-row" data-index="<?= esc_attr($index); ?>">
- <details <?= (is_string($index)) ? 'open' : ''; ?>>
- <summary class="repeater-row-header row btw">
- <span class="drag-handle"><?= jvbIcon('dots-six-vertical'); ?></span>
- <span class="row-number">#<?= esc_html($display_number); ?></span>
- <span class="row-title"><?= esc_html($this->getRowTitle($fields, $values, $rowTitle)); ?></span>
- <button type="button" class="remove-row" title="Remove">
- <?= jvbIcon('trash', ['title'=>'Remove']); ?>
- </button>
- </summary>
- <div class="repeater-row-content">
- <?php
- foreach ($fields as $slug => $field) :
- if ($base_name === '') {
- $field_name = $slug;
- } else {
- $field_name = sprintf('%s:%s:%s', $base_name, $index, $slug);
- }
- $field_value = isset($values[$slug]) ? $values[$slug] : '';
- $name = $field_name;
- $this->render($name, $field_value, $field);
- endforeach;
- ?>
- </div>
- </details>
- </div>
- <?php
- }
-
- private function getRowTitle(array $fields, array $values, string $rowTitle): string
- {
- // Try to find the first text field or textarea value to use as title
- foreach ($fields as $slug => $field) {
- if (in_array($field['type'], ['text', 'textarea']) &&
- isset($values[$slug]) &&
- !empty($values[$slug])) {
- return $values[$slug];
- }
- }
- return $rowTitle;
- }
-
- /* ========== GROUP FIELD ========== */
-
- protected function renderGroupField(string $name, mixed $value, array $field): void
- {
- if (!array_key_exists('fields', $field) || empty($field['fields'])) {
- error_log('No fields to render');
- return;
- }
-
-
- $values = is_array($value) ? $value : [];
- $original = $name;
-
- if (array_key_exists('group', $field)) {
- $name = $field['group'] . '::' . $name;
- }
-
- $hidden = (array_key_exists('mode', $field) && $field['mode'] === 'hidden');
-
- if ($hidden) {
- // Simplified render for hidden groups
- $this->renderGroupFields($name, $values, $field);
- return;
- }
-
- // Standard fieldset render
- $conditional = $this->handleConditionalField($field);
- $validationAttrs = $this->buildValidationAttributes($field);
- $describedBy = (!empty($field['description'])) ? ' aria-describedby="' . $name . '-help"' : '';
- $fieldset = (array_key_exists('wrap', $field) && $field['wrap'] === 'details') ? 'details' : 'fieldset';
- $legend = (array_key_exists('wrap', $field) && $field['wrap'] === 'details') ? 'summary' : 'legend';
- ?>
- <<?= $fieldset?> class="field group <?= esc_attr($name) ?>"
- <?= $conditional ?>
- data-field="<?= esc_attr($name) ?>"
- data-field-type="<?=esc_attr($field['type'])?>"
- <?= $validationAttrs ?>
- <?= $describedBy ?>>
- <<?=$legend?>><?= esc_html($field['label']) ?></<?=$legend?>>
-
- <?php $this->renderHintAndDescription($field, $name); ?>
-
- <div class="group-fields <?= esc_attr($original) ?>">
- <?php $this->renderGroupFields($name, $values, $field); ?>
- </div>
-
- <span class="validation-message" hidden role="alert"></span>
- </<?= $fieldset?>>
- <?php
- }
-
- /**
- * Render individual fields within a group
- * Reusable for both standard and hidden group modes
- */
- private function renderGroupFields(string $groupName, array $values, array $field): void
- {
- foreach ($field['fields'] as $field_name => $config) {
- // Set the group context for proper field naming
- if (!array_key_exists('wrap', $field) || $field['wrap'] !== 'details') {
- $config['group'] = $groupName;
- }
-
- // Get the value for this specific field
- $field_value = $values[$field_name] ?? '';
-
- // Handle conditional fields within the group
- if (isset($config['condition'])) {
- $condition_field = $config['condition']['field'];
- if (!str_contains($condition_field, '::')) {
- $config['condition']['field'] = $groupName . '::' . $condition_field;
- }
- }
-
- $this->render($field_name, $field_value, $config);
- }
- }
-
- /* ========== UPLOAD FIELD ========== */
- private function renderGalleryField(string $name, mixed $value, array $field):void
- {
- $field['multiple'] = true;
- $this->renderUploadField($name, $value, $field);
- }
- private function renderUploadField(string $name, mixed $value, array $field): void
- {
- $defaultConfig = [
- //File Type
- 'subtype' => 'image', // 'image', 'video', 'document', 'any'
- 'accepted_types' => null, // null = use subtype defaults, or array of specific MIME types
- //Upload Behaviour
- 'multiple' => false, // Single or multiple uploads
- 'limit' => 0, // Max number of uploads (0 = unlimited)
- 'mode' => 'direct', // 'direct' or 'selection'
- //Destination
- 'destination' => 'meta', // 'meta', 'post', 'post_group'
- //Processing Options
- 'max_size' => null, // Override default size limits
- 'convert' => 'webp', // Image conversion format
- 'quality' => 90, // Conversion quality
- 'create_thumbnails' => true,
- ];
- $config = array_merge($defaultConfig, $field);
-
- // Validate destination config
- if (in_array($config['destination'], ['post', 'post_group']) && empty($config['content'])) {
- error_log("Upload field '{$name}' has destination '{$config['destination']}' but no content defined");
- return;
- }
-
- // Get accepted types
- $acceptedTypes = $this->getAllowedTypes($config);
-
- // Build accept attribute for input
- $acceptExtensions = $this->getMimeExtensions($acceptedTypes);
- $acceptAttr = implode(',', $acceptedTypes);
-
- // Determine field attributes
- $subtype = $config['subtype'] ?? 'image';
- $multiple = $config['multiple'] ?? false;
- $limit = $config['limit'] ?? 0;
- $mode = $config['mode'] ?? 'direct';
- $destination = $config['destination'];
-
- // Get existing attachments
- $attachmentIds = $this->parseAttachmentIds($value);
-
- // Determine field type for UI
- $fieldType = $multiple ? 'gallery' : 'single';
-
- // Build data attributes
- $dataAttrs = [
- 'data-field' => $name,
- 'data-upload-field' => '',
- 'data-mode' => $mode,
- 'data-type' => $fieldType,
- 'data-subtype' => $subtype,
- 'data-destination' => $destination,
- ];
- if (!empty($field['content'])) {
- $dataAttrs['data-content'] = $field['content'];
- }
- if ($limit > 0) {
- $dataAttrs['data-limit'] = $limit;
- }
-
- // Build data attributes
- $conditional = $this->handleConditionalField($field);
- $describedBy = !empty($field['description']) ? ' aria-describedby="' . esc_attr($name) . '-help"' : '';
-
- if (!empty($field['group'])) {
- $name = $field['group'] . '::' . $name;
- }
-
- // Convert data attributes to string
- $dataAttrString = '';
- foreach ($dataAttrs as $attr => $val) {
- $dataAttrString .= ' ' . $attr . ($val !== '' ? '="' . esc_attr($val) . '"' : '');
- }
- ?>
- <div class="field upload <?= esc_attr($name) ?>"
- data-field="<?=esc_attr($name)?>"
- data-field-type="upload"
- <?= $dataAttrString ?>
- <?= $conditional ?>>
-
- <div class="file-upload-container">
- <div class="file-upload-wrapper">
- <input type="file"
- name="<?= !empty($field['base']) ? esc_attr($field['base']) : '' ?><?= esc_attr($name) ?>_temp"
- id="<?= !empty($field['base']) ? esc_attr($field['base']) : '' ?><?= esc_attr($name) ?>_temp"
- accept="<?= esc_attr($acceptAttr) ?>"
- data-max-size="<?= esc_attr($this->getMaxFileSize($subtype)) ?>"
- <?= $multiple ? 'multiple' : '' ?>
- <?= !empty($field['required']) ? 'required' : '' ?>>
-
- <h2><?= esc_html($field['label']) ?></h2>
-
- <?php if (!empty($field['description'])) : ?>
- <p><?= esc_html($field['description']) ?></p>
- <?php endif; ?>
-
- <p class="file-upload-text">
- <strong>Click to upload</strong> or drag and drop<br>
- <?= esc_html($this->getAcceptedTypesLabel($subtype, $acceptExtensions)) ?>
- (max. <?= esc_html($this->formatFileSize($this->getMaxFileSize($subtype))) ?>)
- </p>
-
- <?php if ($destination === 'post_group') {
- $plural = (array_key_exists($field['content'], JVB_CONTENT)) ? JVB_CONTENT[$field['content']]['plural'] : (array_key_exists($field['content'], JVB_TAXONOMY) ? JVB_TAXONOMY[$field['content']]['plural'] : str_replace('_', ' ',$field['content']).'s');
- $singular = (array_key_exists($field['content'], JVB_CONTENT)) ? JVB_CONTENT[$field['content']]['singular'] : (array_key_exists($field['content'], JVB_TAXONOMY) ? JVB_TAXONOMY[$field['content']]['singular'] : str_replace('_', ' ',$field['content']));
- ?>
- <p class="hint">You can group images to create separate <?= $plural ?>.</p>
- <p class="hint">If a <?=$singular?> has multiple images, you can select the <?= jvbIcon('star')?> to set an image as the main one.</p>
- <?php }
- if (!empty($field['upload_description'])) : ?>
- <p><?= esc_html($field['upload_description']); ?></p>
- <?php endif; ?>
- <div class="file-error"></div>
- </div>
- <?php jvbRenderProgressBar(); ?>
- </div>
-
-
- <?php if ($destination === 'post_group') : ?>
- <div class="group-display flex col" hidden>
- <div class="preview-wrap flex col">
- <div class="preview-actions">
- <div class="selection-controls">
- <div class="selected">
- <div class="field">
- <input type="checkbox" id="select-all-uploads" data-select-all data-selects="item-grid" name="select-all-uploads">
- <label for="select-all-uploads">
- Select All
- </label>
- </div>
- <div class="info" hidden>
-
- </div>
- </div>
-
- <div class="selection-actions row btw" hidden>
- <button type="button" data-action="add-to-group">
- <?= jvbIcon('plus-square') ?>
- Group
- </button>
- <button type="button" data-action="delete-upload">
- <?= jvbIcon('trash') ?>
- Delete
- </button>
- </div>
- </div>
-
- <button type="button" data-action="upload" class="submit-uploads">
- <?= jvbIcon('cloud-arrow-up') ?> Upload <?= esc_html($plural ?? 'Content'); ?>
- </button>
- </div>
- <?php endif; ?>
-
- <?php jvbRenderProgressBar('<span class="text">Processing files...</span>
- <span class="count">0/0</span>'); ?>
- <div class="item-grid preview">
- <?php
- // Render existing attachments
- foreach ($attachmentIds as $attachmentId) {
- echo $this->renderExistingAttachment($attachmentId, $subtype);
- }
- ?>
- </div>
-
- <?php if ($destination === 'post_group') : ?>
- <p class="hint"><?= jvbIcon('arrow-elbow-left-up') ?> These will become individual <?= $plural ?> <?= jvbIcon('arrow-elbow-right-up')?></p>
- </div>
- <div class="sidebar flex col">
- <div class="header">
- <h4>New <?= $plural?></h4>
- <p class="hint">Drag or select multiple images into groups to create separate <?= $plural ?>.</p>
- </div>
- <div class="item-grid groups">
- <div class="empty-group">
- <p>Drag here to create a new <?= $singular ?>!</p>
- </div>
- </div>
- <p class="hint"><?= jvbIcon('arrow-elbow-left-up') ?> Each group will become its own <?= $singular ?> <?= jvbIcon('arrow-elbow-right-up')?></p>
- </div>
- </div>
- <?php endif; ?>
-
- <?php if ($destination === 'meta') : ?>
- <input type="hidden"
- name="<?= array_key_exists('base', $field) ? esc_attr($field['base']) : ''?><?= esc_attr($name); ?>"
- value="<?= esc_attr($value); ?>"
- <?= !empty($field['required']) ? 'required' : ''; ?>>
- <?php endif; ?>
- </div>
- <?php
- }
-
- private function renderExistingAttachment(int $attachmentId, string $subtype): string
- {
- ob_start();
-
- switch ($subtype) {
- case 'image':
- $this->renderImagePreview($attachmentId);
- break;
- case 'video':
- $this->renderVideoPreview($attachmentId);
- break;
- case 'document':
- case 'file':
- $this->renderFilePreview($attachmentId);
- break;
- default:
- $this->renderImagePreview($attachmentId);
- break;
- }
-
- return ob_get_clean();
- }
-
- /**
- * Get max file size for subtype
- */
- private function getMaxFileSize(string $subtype): int
- {
- $sizes = [
- 'image' => 5242880, // 5MB
- 'video' => 104857600, // 100MB
- 'document' => 10485760 // 10MB
- ];
-
- return $sizes[$subtype] ?? $sizes['image'];
- }
-
- /**
- * Format file size for display
- */
- private function formatFileSize(int $bytes): string
- {
- if ($bytes >= 1073741824) {
- return number_format($bytes / 1073741824, 1) . 'GB';
- }
- if ($bytes >= 1048576) {
- return number_format($bytes / 1048576, 1) . 'MB';
- }
- if ($bytes >= 1024) {
- return number_format($bytes / 1024, 1) . 'KB';
- }
- return $bytes . 'B';
- }
-
- /**
- * Get accepted types label
- */
- private function getAcceptedTypesLabel(string $subtype, array $extensions): string
- {
- $labels = [
- 'image' => 'JPG, PNG, GIF, or WEBP',
- 'video' => 'MP4, WEBM, or MOV',
- 'document' => 'PDF, DOC, XLS, or TXT',
- 'any' => 'Images, Videos, or Documents'
- ];
-
- return $labels[$subtype] ?? strtoupper(implode(', ', array_map(function($ext) {
- return ltrim($ext, '.');
- }, array_slice($extensions, 0, 3))));
- }
-
- /**
- * Render upload preview items
- */
- private function renderUploadPreviews(array $attachmentIds, array $config): void
- {
- if (empty($attachmentIds)) {
- return;
- }
-
- foreach ($attachmentIds as $id) {
- switch ($config['subtype']) {
- case 'image':
- $this->renderImagePreview($id, $config);
- break;
- case 'video':
- $this->renderVideoPreview($id, $config);
- break;
- case 'file':
- $this->renderFilePreview($id, $config);
- break;
- }
- }
- }
-
- public function renderImagePreview(?int $id = null, array $config = []):void
- {
- $attachment = ($id) ? wp_get_attachment_image($id, 'thumbnail', false) : false;
- $caption = ($id) ? wp_get_attachment_caption($id) : '';
- $alt = ($id) ? get_post_meta($id, '_wp_attachment_image_alt',true) : '';
- $title = ($id) ? get_the_title($id) : '';
- $addID = ($id) ? '-'.$id : '';
- $dataID = ($id) ? ['id' => $id] : '';
- ?>
- <div class="item upload"<?= ($id) ? ' data-id="'.$id.'"' : '' ?>>
- <div class="preview">
- <?php jvbRenderProgressBar('',true) ?>
- <input type="checkbox" class="upload-select" name="select-item" id="select-item<?=$addID?>">
- <label for="select-item<?=$addID?>" aria-label="Select image">
- <?= ($attachment) ?: '<img>
- <video></video>
- <span></span>' ?>
- </label>
- <div class="item-actions row btw">
- <div class="radio-button">
- <input type="radio" class="featured btn" name="featured" id="featured" hidden>
- <label for="featured">
- <?=jvbIcon('star')?>
- <?=jvbIcon('star', ['style' => 'fill'])?>
- <span class="screen-reader-text">Set as featured image</span>
- </label>
- </div>
-
- <button type="button" data-action="delete-upload" title="Remove from Group">
- <?=jvbIcon('trash')?>
- </button>
- </div>
- </div>
- <details>
- <summary class="row btw"><?=jvbIcon('pencil-simple')?><span>Edit Info</span></summary>
-
- <?php
-
- $fields = [
- 'image_data' => [
- 'type' => 'group',
- 'wrap' => 'details',
- 'label' => 'Image Fields',
- 'fields' => [
- 'image-title'.$addID => [
- 'type' => 'text',
- 'label' => 'Image Title',
- 'value' => $title,
- 'data' => $dataID
- ],
- 'image-alt-text'.$addID => [
- 'type' => 'text',
- 'label' => 'Alt Text',
- 'value' => $alt,
- 'hint' => 'Alt text helps the visually impaired, as well as some benefits for SEO.',
- 'data' => $dataID
- ],
- 'image-caption'.$addID => [
- 'type' => 'textarea',
- 'value' => $caption,
- 'label' => 'Image Caption',
- 'data' => $dataID
- ]
- ]
- ]
- ];
- $fields = array_key_exists('fields', $config) ? array_merge($fields, $config['fields']) : $fields;
- $meta = new MetaManager($id);
- foreach ($fields as $field => $config) {
- $meta->render('form', $field, $config);
- }
- ?>
- </details>
- </div>
- <?php
- }
- public function renderVideoPreview(?int $id = null, array $config = []):void
- {
- $attachment = ($id) ? wp_get_attachment_image($id, 'thumbnail', true) : false;
- $caption = ($id) ? wp_get_attachment_caption($id) : '';
- $description = ($id) ? get_the_content($id) : '';
- $title = ($id) ? get_the_title($id) : '';
- $addID = ($id) ? '-'.$id : '';
- $dataID = ($id) ? ['id' => $id] : '';
- ?>
- <div class="item upload"<?= ($id) ? ' data-id="'.$id.'"' : '' ?>>
- <div class="preview">
- <?php jvbRenderProgressBar('',true) ?>
- <input type="checkbox" class="upload-select" name="select-item" id="select-item<?=$addID?>">
- <label for="select-item<?=$addID?>" aria-label="Select image">
- <?= ($attachment) ?: '<img>
- <video></video>
- <span></span>'; ?>
- </label>
- <div class="item-actions row btw">
- <div class="radio-button">
- <input type="radio" class="featured btn" name="featured" id="featured" hidden>
- <label for="featured">
- <?=jvbIcon('star')?>
- <?=jvbIcon('star', ['style' => 'fill'])?>
- <span class="screen-reader-text">Set as featured image</span>
- </label>
- </div>
-
- <button type="button" data-action="delete-upload" title="Remove from Group">
- <?=jvbIcon('trash')?>
- </button>
- </div>
- </div>
- <details>';
- <summary class="row btw"><?=jvbIcon('pencil-simple')?><span>Edit Info</span></summary>
-
- <?php
- $fields = array_key_exists('fields', $config) ? $config['fields'] : [];
- $fields = array_merge([
- 'upload_data' => [
- 'type' => 'group',
- 'wrap' => 'details',
- 'label' => 'Video Info',
- 'hint' => 'These will be automatically generated if left blank.',
- 'fields' => [
- 'title' => [
- 'type' => 'text',
- 'label' => 'Video Title',
- 'value' => $title,
- 'data' => $dataID
- ],
- 'caption' => [
- 'type' => 'textarea',
- 'value' => $caption,
- 'label' => 'Video Caption',
- 'data' => $dataID
- ],
- 'description' => [
- 'type' => 'textarea',
- 'value' => $description,
- 'label' => 'Video Description',
- 'data' => $dataID
- ]
- ]
- ]
- ], $fields);
- $this->render('upload_data', null, $fields);
- ?>
- </details>
- </div>
- <?php
- }
- public function renderFilePreview(?int $id = null, array $config = []):void
- {
-
- $attachment = ($id) ? wp_get_attachment_image($id, 'thumbnail', true) : false;
- $caption = ($id) ? wp_get_attachment_caption($id) : '';
- $description = ($id) ? get_the_content($id) : '';
- $title = ($id) ? get_the_title($id) : '';
- $addID = ($id) ? '-'.$id : '';
- $dataID = ($id) ? ['id' => $id] : '';
- ?>
- <div class="item upload"<?= ($id) ? ' data-id="'.$id.'"' : '' ?>>
- <div class="preview">
- <?php jvbRenderProgressBar('',true) ?>
- <input type="checkbox" class="upload-select" name="select-item" id="select-item<?=$addID?>">
- <label for="select-item<?=$addID?>" aria-label="Select image">
- <?= ($attachment) ?: '<img>
- <video></video>
- <span></span>'; ?>
- </label>
- <div class="item-actions row btw">
- <div class="radio-button">
- <input type="radio" class="featured btn" name="featured" id="featured" hidden>
- <label for="featured">
- <?=jvbIcon('star')?>
- <?=jvbIcon('star', ['style' => 'fill'])?>
- <span class="screen-reader-text">Set as featured image</span>
- </label>
- </div>
-
- <button type="button" data-action="delete-upload" title="Remove from Group">
- <?=jvbIcon('trash')?>
- </button>
- </div>
- </div>
- <details>';
- <summary class="row btw"><?=jvbIcon('pencil-simple')?><span>Edit Info</span></summary>
-
- <?php
- $fields = array_key_exists('fields', $config) ? $config['fields'] : [];
- $fields = array_merge([
- 'upload_data' => [
- 'type' => 'group',
- 'wrap' => 'details',
- 'label' => 'File Info',
- 'hint' => 'These will be automatically generated if left blank.',
- 'fields' => [
- 'title' => [
- 'type' => 'text',
- 'label' => 'File Title',
- 'value' => $title,
- 'data' => $dataID
- ],
- 'caption' => [
- 'type' => 'textarea',
- 'value' => $caption,
- 'label' => 'File Caption',
- 'data' => $dataID
- ],
- 'description' => [
- 'type' => 'textarea',
- 'value' => $description,
- 'label' => 'File Description',
- 'data' => $dataID
- ]
- ]
- ]
- ], $fields);
- $this->render('upload_data', null, $fields);
- ?>
- </details>
- </div>
- <?php
- }
-
- /**
- * Get upload instruction text based on config
- */
- private function getUploadInstructions(array $config): string
- {
- $extensions = $this->getMimeExtensions($this->getAllowedTypes($config));
- $extList = implode(', ', array_map('strtoupper', $extensions));
- $maxSize = $config['max_size'] ?? $this->max_file_size;
- $maxSizeMB = round($maxSize / 1048576, 1);
-
- return "{$extList} (max. {$maxSizeMB}MB)";
- }
-
- /* ========== TAXONOMY/USER SELECTOR FIELDS ========== */
-
- private function renderTaxonomyField(string $name, string $value, array $field): void
- {
- if (array_key_exists('group', $field)) {
- $name = $field['group'] . '::' . $name;
- }
-
- $this->renderSelectorField($name, $value, $field, 'taxonomy');
- }
-
- private function renderUserField(string $name, string $value, array $field): void
- {
- if (array_key_exists('group', $field)) {
- $name = $field['group'] . '::' . $name;
- }
-
- $this->renderSelectorField($name, $value, $field, 'post');
- }
-
- /**
- * Generic selector field renderer
- * Handles both taxonomy and post selectors with consistent structure
- */
- public function renderSelectorField(string $name, mixed $value, array $field, string $type): void
- {
- $conditional = $this->handleConditionalField($field);
- $validationAttrs = $this->buildValidationAttributes($field);
- $describedBy = (!empty($field['description'])) ? ' aria-describedby="' . $name . '-help"' : '';
-
- // Parse selected values
- $value = (is_array($value)) ? array_filter(array_map('absint', $value)): $value;
- $selected = ($value === '') ? [] : (is_array($value) ? $value : explode(',', $value));
-
- // Generate unique container ID
- $containerId = $name . '-' . $type . '-selector';
-
- // Create selector instance with proper parameters
- if ($type === 'taxonomy') {
- $taxonomy = $field['taxonomy'];
- $icon = JVB_TAXONOMY[$taxonomy]['icon']??'';
-
- // Map field config to selector config
- $selectorConfig = [
- 'max' => $field['max'] ?? 0, // 0 = unlimited
- 'search' => $field['search'] ?? true,
- 'label' => $field['label'] ?? '',
- 'createNew' => $field['createNew'] ?? false,
- 'required' => $field['required'] ?? false,
- 'base' => $field['base'] ?? '',
- 'update' => $field['update'] ?? true,
- 'name' => $name,
- 'autocomplete' => $field['autocomplete'] ?? false,
- ];
- if ($icon !== '') {
- $selectorConfig['icon'] = $icon;
- }
-
- $selector = new TaxonomySelector($containerId, $taxonomy, $selectorConfig);
- $icon = $taxonomy;
- } else {
- $postType = $field['post_type'];
-
- // Map field config to selector config
- $selectorConfig = [
- 'max' => $field['max'] ?? 0,
- 'search' => $field['search'] ?? true,
- 'label' => $field['label'] ?? '',
- 'required' => $field['required'] ?? false,
- 'base' => $field['base'] ?? '',
- 'update' => $field['update'] ?? true,
- 'shop_id' => $field['shop_id'] ?? null,
- 'autocomplete'=> $field['autocomplete'] ?? true,
- ];
-
- $selector = new PostSelector($containerId, $postType, $selectorConfig);
- $icon = $postType;
- }
-
- ?>
- <div class="field selector <?= esc_attr($type) ?> <?= esc_attr($name) ?>"
- <?= $conditional ?>
- data-field="<?= esc_attr($name) ?>"
- data-field-type="selector"
- data-type="<?=esc_attr($field['type'])?>"
- <?= $validationAttrs ?>
- <?= $describedBy ?>>
-
- <?= $selector->render($selected) ?>
-
- <!-- Hidden input for form submission -->
- <input type="hidden"
- class="<?= esc_attr($type) ?>-selector-input"
- name="<?= array_key_exists('base', $field) ? esc_attr($field['base']) : '' ?><?= esc_attr($name) ?>"
- data-<?= esc_attr($type) ?>="<?= esc_attr($field[$type === 'taxonomy' ? 'taxonomy' : 'post_type']) ?>"
- value="<?= esc_attr(is_array($selected) ? implode(',', $selected) : $value) ?>"
- <?= !empty($field['required']) ? 'required' : '' ?>>
-
- <?php $this->renderHintAndDescription($field, $name); ?>
-
- <span class="validation-message" hidden role="alert"></span>
- </div>
- <?php
- }
-
- /* ========== LOCATION FIELD ========== */
-
- protected function renderLocationField(string $name, mixed $value, array $field): void
- {
- $googleMaps = JVB()->connect('maps');
- if (!$googleMaps->isSetUp()) {
- echo '<div class="notice notice-warning"><p>Google Maps not configured. Please configure in Integrations settings.</p></div>';
- return;
- }
-
- // Extract stored values
- if (is_string($value)) {
- $value = maybe_unserialize($value);
- }
- $stored_data = is_array($value) ? $value : [];
-
- $address = $stored_data['address'] ?? '';
- $lat = $stored_data['lat'] ?? '';
- $lng = $stored_data['lng'] ?? '';
-
- // Generate unique field ID
- $field_id = esc_attr($name);
- $map_id = $field_id . '_map';
-
- // Handle grouped fields
- if (array_key_exists('group', $field)) {
- $name = $field['group'] . '::' . $name;
- }
- $describedBy = (!empty($field['description'])) ? ' aria-describedby="'.$name.'-help"' : '';
-
- // Prepare configuration for JavaScript initialization
- $js_config = [
- 'fieldId' => $field_id,
- 'initialCoords' => (!empty($lat) && !empty($lng)) ? [
- 'lat' => (float)$lat,
- 'lng' => (float)$lng
- ] : null
- ];
-
- // IMPORTANT: Properly escape the JSON for use in HTML attribute
- $json_config = htmlspecialchars(json_encode($js_config), ENT_QUOTES, 'UTF-8');
- ?>
-
- <div class="field location <?= esc_attr($field_id) ?>"
- data-field="<?= esc_attr($field_id) ?>"
- data-field-type="<?=esc_attr($field['type'])?>"
- data-location-field-init="<?= $json_config ?>"<?=$describedBy?>>
-
- <?php
- if (!empty($stored_data['street'])) {
- echo '<p><b>Current location:</b> '.esc_html($stored_data['street']).'</p>';
- echo '<p class="hint"><b>Search below to change:</b></p>';
- }
- ?>
- <?php if (array_key_exists('hint', $field)) { $this->renderHint($field['hint']); } ?>
- <?php if (array_key_exists('description', $field)) { $this->renderDescription($field['description'], $name); } ?>
-
- <div class="location-search-wrapper">
- <div class="autocomplete-wrapper"></div>
-
- <!-- Map container -->
- <div class="location-preview">
- <div id="<?= esc_attr($map_id); ?>"
- class="location-map">
- </div>
-
- <?php if (!empty($stored_data)):
- jvbLocationLinks($stored_data);
- endif; ?>
- </div>
-
- <!-- Hidden inputs for data storage -->
- <input type="hidden"
- name="<?= array_key_exists('base', $field) ? esc_attr($field['base']) : ''?><?= esc_attr($name); ?>[address]"
- value="<?= esc_attr($address); ?>"
- data-location-field="address">
-
- <input type="hidden"
- name="<?= array_key_exists('base', $field) ? esc_attr($field['base']) : ''?><?= esc_attr($name); ?>[lat]"
- value="<?= esc_attr($lat); ?>"
- data-location-field="lat">
-
- <input type="hidden"
- name="<?= array_key_exists('base', $field) ? esc_attr($field['base']) : ''?><?= esc_attr($name); ?>[lng]"
- value="<?= esc_attr($lng); ?>"
- data-location-field="lng">
-
- <?php
- // Component fields
- $components = ['street', 'city', 'province', 'postal_code', 'country'];
- foreach ($components as $component):
- ?>
- <input type="hidden"
- name="<?= array_key_exists('base', $field) ? esc_attr($field['base']) : ''?><?= esc_attr($name); ?>[<?= $component; ?>]"
- value="<?= esc_attr($stored_data[$component] ?? ''); ?>"
- data-location-field="<?= esc_attr($component); ?>">
- <?php endforeach; ?>
-
- </div>
- </div>
- <?php
- }
-
- /* ========== HTML FIELD ========== */
-
- protected function renderHtmlField(string $name, mixed $value, array $field): void
- {
- $method_name = $field['content'];
- $content = '';
-
- if (method_exists($this, $method_name)) {
- $content = $this->$method_name();
- }
-
- if ($content === '') {
- return;
- }
-
- echo sprintf(
- '<div class="html-field-container" data-field-type="html" data-field="%s">%s</div>',
- esc_attr($name),
- $content
- );
- }
-
- /* ========== UTILITY METHODS ========== */
-
- private function handleConditionalField(array $field):string
- {
- if (empty($field['condition'])) {
- return '';
- }
-
- $condition = $field['condition'];
- return sprintf(
- 'data-depends-on="%s" data-depends-value="%s" data-depends-operator="%s"',
- esc_attr($field['condition']['field']),
- esc_attr($field['condition']['value']),
- esc_attr($field['condition']['operator'] ?? '==')
- );
- }
-
- protected function getAllowedTypes(array $config): array
- {
- if (!empty($config['accepted_types'])) {
- return $config['accepted_types'];
- }
-
- // Default types based on subtype
- $defaults = [
- 'image' => ['image/*'],
- 'video' => ['video/*'],
- 'document' => ['application/pdf', 'application/msword', 'application/vnd.ms-excel', 'text/plain', '.odt','application/vnd.openxmlformats-officedocument.wordprocessingml.document'],
- ];
- $defaults['any'] = array_merge($defaults['image'], $defaults['video'], $defaults['document']);
-
- return $defaults[$config['subtype']] ?? $defaults['image'];
- }
-
- protected function getMimeExtensions(array $mimeTypes): array
- {
- $extensions = [];
- foreach ($mimeTypes as $mime) {
- if (str_contains($mime, '*')) {
- continue; // Skip wildcards
- }
- $ext = str_replace(['image/', 'video/', 'application/'], '', $mime);
- $extensions[] = '.' . $ext;
- }
- return $extensions;
- }
-
- protected function parseAttachmentIds(mixed $value): array
- {
- if (empty($value)) {
- return [];
- }
-
- if (is_array($value)) {
- return array_filter($value, 'is_numeric');
- }
-
- if (is_string($value)) {
- return array_filter(explode(',', $value), 'is_numeric');
- }
-
- return is_numeric($value) ? [$value] : [];
- }
- /**
- * Render tag list field - inline tag input interface
- */
- protected function renderTagListField(string $name, mixed $value, array $field): void
- {
- $values = is_array($value) ? $value : [];
- $conditional = $this->handleConditionalField($field);
- $validationAttrs = $this->buildValidationAttributes($field);
-
- if (array_key_exists('group', $field)) {
- $name = $field['group'] . '::' . $name;
- }
-
- $describedBy = (!empty($field['description'])) ? ' aria-describedby="' . $name . '-help"' : '';
-
- // Tag display format - defaults to first field value
- $tagFormat = $field['tag_format'] ?? 'first_field';
- ?>
- <div class="field tag-list <?= esc_attr($name) ?>"
- data-field="<?= esc_attr($name) ?>"
- data-field-type="<?=esc_attr($field['type'])?>"
- data-tag-format="<?= esc_attr($tagFormat) ?>"
- <?= $describedBy ?>
- <?= $conditional ?>
- <?= $validationAttrs ?>>
-
- <?php if (!empty($field['label'])): ?>
- <h3><?= esc_html($field['label']) ?></h3>
- <?php endif; ?>
-
- <!-- Inline input row -->
- <div class="tag-input-row">
- <?php foreach ($field['fields'] as $subfield_name => $subfield_config): ?>
- <?php
- $subfield_config['label'] = $subfield_config['label'] ?? ucfirst($subfield_name);
- $input_name = 'new_' . $subfield_name;
-
- // Store required state but don't render it on the input
- // This prevents form submission validation but allows JS validation
-
- if (array_key_exists('required', $subfield_config)) {
- $subfield_config['data']['required'] = true;
- unset($subfield_config['required']); // Remove required for HTML rendering
- }
- $subfield_config['data']['ignore'] = true;
-
- $this->render($input_name, '', $subfield_config, false, false);
- ?>
- <?php endforeach; ?>
-
- <button type="button" class="button add-tag-item">
- <?= jvbIcon('plus') ?> <?= $field['add_label'] ?? 'Add' ?>
- </button>
- </div>
-
- <!-- Tags display -->
- <div class="tag-items">
- <?php foreach ($values as $index => $item_data): ?>
- <?php $this->renderTagItem($field['fields'], $item_data, $index, $name, $tagFormat); ?>
- <?php endforeach; ?>
- </div>
-
- <!-- Template for new tags -->
- <template class="<?=uniqid('tagListItem')?>">
- <?php $this->renderTagItem($field['fields'], [], '', $name, $tagFormat); ?>
- </template>
-
- <?php if (!empty($field['hint'])): ?>
- <?php $this->renderHint($field['hint']); ?>
- <?php endif; ?>
-
- <?php if (!empty($field['description'])): ?>
- <?php $this->renderDescription($field['description'], $name); ?>
- <?php endif; ?>
- </div>
- <?php
- }
-
- /**
- * Render individual tag item
- */
- protected function renderTagItem(array $fields, array $data, int|string $index, string $base_name, string $format): void
- {
- $tag_text = $this->getTagDisplayText($fields, $data, $format);
- ?>
- <div class="tag-item" data-index="<?= esc_attr($index) ?>">
- <span class="tag-label"><?= esc_html($tag_text) ?></span>
-
- <!-- Hidden inputs for data -->
- <?php foreach ($fields as $field_name => $field_config): ?>
- <?php
- $value = $data[$field_name] ?? '';
- $full_name = is_string($index) ? $field_name : "{$base_name}:{$index}:{$field_name}";
- ?>
- <input type="hidden"
- name="<?= esc_attr($full_name) ?>"
- value="<?= esc_attr($value) ?>"
- data-field="<?= esc_attr($field_name) ?>"
- data-field-type="<?=esc_attr($field_config['type'])?>" />
- <?php endforeach; ?>
-
- <button type="button" class="remove-tag" aria-label="Remove">
- <?= jvbIcon('x') ?>
- </button>
- </div>
- <?php
- }
-
- /**
- * Get tag display text based on format
- */
- protected function getTagDisplayText(array $fields, array $data, string $format): string
- {
- if (empty($data)) {
- return 'New Item';
- }
-
- switch ($format) {
- case 'first_field':
- // Use the first field's value
- $first_key = array_key_first($fields);
- return $data[$first_key] ?? 'New Item';
-
- case 'all_fields':
- // Show all field values separated by commas
- $values = array_filter(array_values($data));
- return implode(', ', $values) ?: 'New Item';
-
- case 'custom':
- // Custom format - would need callback
- return 'New Item';
-
- default:
- // Format is a template string like "{name} ({email})"
- if (strpos($format, '{') !== false) {
- $text = $format;
- foreach ($data as $key => $value) {
- $text = str_replace('{' . $key . '}', $value, $text);
- }
- return $text;
- }
- // Use specific field name
- return $data[$format] ?? 'New Item';
- }
- }
-}
diff --git a/inc/meta/MetaManager.php b/inc/meta/MetaManager.php
deleted file mode 100644
index 7dcc0af..0000000
--- a/inc/meta/MetaManager.php
+++ /dev/null
@@ -1,1429 +0,0 @@
-<?php
-namespace JVBase\meta;
-
-use Exception;
-use JVBase\registrar\Registrar;
-
-if (!defined('ABSPATH')) {
- exit; // Exit if accessed directly
-}
-
-/**
- * Core meta management class
- */
-
-/**
- * @deprecated Use Meta() now
- */
-class MetaManager
-{
- public MetaTypeManager $type_manager;
- public Validator $validator;
- public Sanitizer $sanitizer;
- public Render $renderer;
- protected int|null $object_id;
- public object|null $data;
- protected array $fields =[];
- protected string $field;
- protected mixed $value;
- protected string|null $object_type;
- protected int $max_file_size = 5242880;
- protected ?string $content = null;
- protected bool $isTimeline = false;
-
- protected ?string $baseKey = null;
- protected \wpdb $wpdb;
-
- protected array $wpDefaults = [
- 'post' => [
- 'post_title',
- 'post_excerpt',
- 'post_content',
- 'post_date',
- 'post_status',
- 'post_modified',
- 'post_thumbnail',
- 'menu_order'
- ],
- 'user' => [
- 'first_name',
- 'last_name',
- 'display_name',
- 'description',
- 'user_email',
- ],
- 'term' => [
- 'term_name',
- 'description'
- ]
- ];
-
- public function __construct(int|string|null $ID = null, ?string $type = null, ?string $content = null)
- {
- global $wpdb;
- $this->wpdb = $wpdb;
- $this->object_id = is_int($ID) ? $ID : null;
- $this->object_type = $type;
- if ($ID) {
- switch ($type) {
- case 'post':
- $this->data = get_post((string)$ID);
- $this->content = jvbNoBase($this->data->post_type);
- $registrar = Registrar::getInstance($this->content);
- $this->isTimeline = $registrar && $registrar->hasFeature('is_timeline');
- break;
- case 'term':
- $this->data = get_term($ID);
- $this->content = jvbNoBase($this->data->taxonomy);
- break;
- case 'user':
- case 'integrations':
- $this->data = get_user($ID);
- $this->content = jvbUserRole($ID);
- break;
- case 'options':
- $this->baseKey = $ID;
- $this->data = null;
- break;
- default:
- $this->data = null;
- break;
- }
- }
-
- $this->type_manager = new MetaTypeManager();
- $this->validator = new Validator();
- $this->sanitizer = new Sanitizer();
- $this->renderer = new Render();
- }
-
- /**
- * @param string $field_type
- *
- * @return string
- */
- public function getMetaType(string $field_type): string
- {
- return $this->type_manager->getMetaType($field_type);
- }
-
- /**
- * @param array $field
- *
- * @return string
- */
- public function getSanitizeCallback(array $field): string
- {
- return $this->sanitizer->getCallback($field);
- }
-
- /**
- * @param string $name
- *
- * @return mixed
- */
- public function getValue(string $name): mixed
- {
- //Get standard post fields first
- if (array_key_exists($this->object_type, $this->wpDefaults)) {
- $defaults = $this->wpDefaults[$this->object_type];
- if (in_array($name, $defaults)) {
- if (in_array($name, ['featured_image', 'post_thumbnail'])) {
- return get_post_thumbnail_id($this->object_id);
- }
- return match ($this->object_type) {
- 'term' => $this->getTermField($name),
- 'post' => $this->getPostField($name),
- 'user' => $this->getUserField($name),
- default => ''
- };
- }
- }
-
-
- $meta_key = BASE . $name;
- switch ($this->object_type) {
- case 'post':
- return get_post_meta($this->object_id, $meta_key, true);
- case 'term':
- return get_term_meta($this->object_id, $meta_key, true);
- case 'user':
- case 'integrations':
- return get_user_meta($this->object_id, $meta_key, true);
- case 'options':
- $key = $this->baseKey
- ? BASE . $this->baseKey . '_' . $name
- : BASE . $name;
- return get_option($key);
- default:
- return '';
- }
- }
-
- protected function getTermField(string $name): mixed
- {
- // WordPress handles entity decoding and filters
- return match ($name) {
- 'term_name' => get_term_field('name', $this->object_id),
- 'description' => get_term_field('description', $this->object_id),
- default => ''
- };
- }
-
- protected function getPostField(string $name): mixed
- {
- return match ($name) {
- 'post_title' => get_the_title($this->object_id),
- 'post_excerpt' => get_the_excerpt($this->object_id),
- 'post_content' => get_post_field('post_content', $this->object_id),
- default => $this->data->$name ?? ''
- };
- }
-
- protected function getUserField(string $name): mixed
- {
- return match ($name) {
- 'display_name' => get_the_author_meta('display_name', $this->object_id),
- 'user_email' => get_the_author_meta('user_email', $this->object_id),
- 'first_name' => get_the_author_meta('first_name', $this->object_id),
- 'last_name' => get_the_author_meta('last_name', $this->object_id),
- default => $this->data->$name ?? ''
- };
- }
-
- /**
- * @param string $name
- *
- * @return bool
- */
- public function deleteValue(string $name): bool
- {
-
- try {
- $meta_key = BASE . "{$name}";
- $result = false;
-
- switch ($this->object_type) {
- case 'post':
- $config = $this->getFieldConfig($name);
- if ($config['type'] === 'taxonomy' && !array_key_exists('taxonomy_type', $config)) {
- $result = wp_set_post_terms($this->object_id, '', $config['taxonomy']);
- } else {
- $result = delete_post_meta((int)$this->object_id, $meta_key);
- }
-
- break;
- case 'term':
- $result = delete_term_meta($this->object_id, $meta_key);
- break;
- case 'user':
- case 'integrations':
- $result = delete_user_meta($this->object_id, $meta_key);
- break;
- }
-
- if ($result === false) {
- throw new Exception("Failed to delete meta value for {$this->field}");
- }
-
- return true;
-
- } catch (Exception $e) {
- $this->handleError(
- $e->getMessage(),
- [
- 'object_id' => $this->object_id,
- 'field' => $name,
- 'object_type' => $this->object_type,
- ]
- );
- return false;
- }
- }
-
- /**
- * @param array $fields
- *
- * @return array
- */
- public function batchDelete(array $fields): array
- {
- $results = [];
- foreach ($fields as $field) {
- $results[$field] = $this->deleteValue($field);
- }
-
- return $results;
- }
-
- /**
- * @param string $name
- * @param mixed $value
- *
- * @return bool
- */
- public function updateValue(string $name, mixed $value, bool $updatePost = true): bool
- {
- try {
- // Get field definition
- $fields = $this->getFields();
- $field_config = $fields[$name] ?? null;
-
- if (!$field_config) {
- throw new Exception("Field configuration not found for {$name}");
- }
-
- $field_config['name'] = $name;
- // Validate value
- if (!$this->validator->validate($value, $field_config)) {
- throw new Exception("Validation failed for {$name}");
- }
-
- // Sanitize value
- $sanitized = $this->sanitizer->sanitize($value, $field_config);
- if ($this->checkOverrides($name, $sanitized, $field_config)) {
- return true;
- }
-
- if (array_key_exists($this->object_type, $this->wpDefaults)) {
- $check = $this->wpDefaults[$this->object_type];
- if (in_array($name, $check)) {
- $ID = true;
- if (in_array($name, ['featured_image', 'post_thumbnail'])) {
- $old = get_post_thumbnail_id($this->object_id);
- if ($old !== $sanitized) {
- $ID = set_post_thumbnail($this->object_id, $sanitized);
- }
- return $ID !== false;
- }
- $old = $this->data->$name;
- if ($old !== $sanitized) {
- switch ($this->object_type) {
- case 'post':
-
- $ID = jvb_update_post([
- 'ID' => $this->object_id,
- $name => $sanitized
- ]);
- break;
- case 'term':
- $data = [$name => $sanitized];
- if ($name === 'term_name') {
- $data['slug'] = sanitize_title($sanitized);
- }
- $ID = wp_update_term(
- $this->data->term_id,
- $this->data->taxonomy,
- $data
- );
- break;
- case 'user':
- $ID = wp_update_user([
- 'ID' => $this->object_id,
- $name => $sanitized
- ]);
- if ($name === 'display_name') {
- $link = get_user_meta($this->object_id, BASE.'link', true);
- if ($link !== '') {
- jvb_update_post([
- 'ID' => $link,
- 'post_title' => $sanitized
- ]);
- }
- }
-
- break;
- }
- }
- return $ID !== false;
- }
- }
-
-
- if ($field_config['type'] == 'taxonomy' && (!array_key_exists('taxonomy_type', $field_config))) {
- if (empty(trim($sanitized))) {
- // Clear all terms when value is empty
- wp_set_object_terms($this->object_id, [], jvbCheckBase($field_config['taxonomy']), false);
- } else {
- $term_ids = array_map('intval', array_filter(explode(',', $sanitized)));
- wp_set_object_terms($this->object_id, $term_ids, jvbCheckBase($field_config['taxonomy']), false);
- }
- }
- if ($field_config['type'] === 'location' && empty($sanitized)) {
- $this->addMeta('has_map', false);
- }
- // Store value
- $meta_key = BASE . $name;
- $result = false;
-
- switch ($this->object_type) {
- case 'post':
- $result = update_post_meta($this->object_id, $meta_key, $sanitized);
- break;
- case 'term':
- $result = update_term_meta($this->object_id, $meta_key, $sanitized);
- break;
- case 'user':
- case 'integrations':
- $result = update_user_meta($this->object_id, $meta_key, $sanitized);
- break;
- case 'options':
- $key = $this->baseKey
- ? BASE . $this->baseKey . '_' . $name
- : BASE . $name;
- return update_option($key, $sanitized);
- }
-
- if ($result === false) {
- throw new Exception("Failed to update meta value for {$name}");
- }
-
- if ($updatePost && $this->object_type === 'post') {
- //Flush the cache for this post.
- jvb_update_post([
- 'ID' => $this->object_id,
- ]);
- }
- return true;
-
- } catch (Exception $e) {
- JVB()->error()->log(
- 'meta_manager',
- $e->getMessage(),
- [
- 'object_id' => $this->object_id,
- 'field' => $name,
- 'object_type' => $this->object_type
- ],
- 'error'
- );
- return false;
- }
- }
- /*********************
- REPEATER HELPERS
- * mainly for when we need to update a processed image to a repeater row field
- *********************/
- /**
- * Update a specific field within a repeater row
- *
- * @param string $field_string The field string in format "repeater_name:row_index:field_name"
- * @param mixed $value The value to set for the field
- * @return bool Success status
- */
- public function updateRepeaterRowField(string $field_string, mixed $value): bool
- {
- // Parse the field string
- $parsed = $this->parseRepeaterFieldString($field_string);
-
- if (!$parsed) {
- error_log('[MetaManager] Invalid repeater field string: ' . $field_string);
- return false;
- }
-
- $repeater_name = $parsed['repeater'];
- $row_index = $parsed['row_index'];
- $field_name = $parsed['field'];
-
- // Get current repeater data
- $repeater_data = $this->getValue($repeater_name);
-
- // Initialize as array if empty or not an array
- if (!is_array($repeater_data)) {
- $repeater_data = [];
- }
-
- // Ensure row exists
- if (!isset($repeater_data[$row_index])) {
- $repeater_data[$row_index] = [];
- }
-
- // Update the specific field in the row
- $repeater_data[$row_index][$field_name] = $value;
-
- // Save the updated repeater data
- $success = $this->updateValue($repeater_name, $repeater_data);
-
- if ($success) {
- error_log(sprintf(
- '[MetaManager] Updated repeater field: %s[%d][%s] = %s',
- $repeater_name,
- $row_index,
- $field_name,
- is_scalar($value) ? $value : json_encode($value)
- ));
- }
-
- return $success;
- }
-
- /**
- * Parse a repeater field string
- *
- * @param string $field_string Format: "repeater_name:row_index:field_name" or "repeater_name:row_index:field_name:sub_field"
- * @return array|false Parsed components or false if invalid
- */
- public function parseRepeaterFieldString(string $field_string): array|false
- {
- $parts = explode(':', $field_string);
-
- if (count($parts) < 3) {
- return false;
- }
-
- // Handle nested repeaters (4+ parts)
- if (count($parts) === 3) {
- return [
- 'repeater' => $parts[0],
- 'row_index' => (int)$parts[1],
- 'field' => $parts[2],
- 'nested' => false
- ];
- } elseif (count($parts) === 4) {
- // Nested repeater or sub-field
- return [
- 'repeater' => $parts[0],
- 'row_index' => (int)$parts[1],
- 'field' => $parts[2],
- 'sub_field' => $parts[3],
- 'nested' => true
- ];
- }
-
- return false;
- }
-
-
-
- protected function checkOverrides(string $name, mixed $sanitized, array $config): bool
- {
- do_action('jvb_meta_update', $name, $sanitized, $this->object_type);
-
- //check for overrides by field name or type
- $type = $config['type'] ?? false;
- $overrides = [
- 'update_' . $name,
- 'update_' . $type
- ];
- foreach ($overrides as $override) {
- $override = BASE . $override;
- if (function_exists($override)) {
- $override($this->object_id, $sanitized);
- return true;
- }
- $override = 'jvb_' . $override;
- if (function_exists($override)) {
- $override($this->object_id, $sanitized);
- return true;
- }
- }
- return false;
- }
-
- protected function getFields(): array
- {
- if (!empty($this->fields)) {
- return $this->fields;
- }
- $type = false;
- switch ($this->object_type) {
- case 'post':
- $type = get_post_type((int)$this->object_id);
- break;
- case 'term':
- $type = get_term((int)$this->object_id)->taxonomy;
- break;
- case 'user':
- $type = jvbUserRole((int)$this->object_id);
- break;
- case 'options':
- return Registrar::getFieldsFor('options');
- }
- if (!$type) {
- return [];
- }
-
- $this->fields = Registrar::getFieldsFor($type);
- return $this->fields;
- }
-
- protected function getObjectType(): string|false
- {
- switch ($this->object_type) {
- case 'post':
- $type = get_post_type((int)$this->object_id);
- break;
- case 'term':
- $type = get_term((int)$this->object_id)->taxonomy;
- break;
- case 'user':
- $type = jvbUserRole((int)$this->object_id);
- break;
- case 'options':
- $type = 'options';
- break;
- default:
- return false;
- }
- return $type;
- }
-
- protected function getSections():array
- {
- $type = false;
- switch ($this->object_type) {
- case 'post':
- $type = get_post_type((int)$this->object_id);
- break;
- case 'term':
- $type = get_term((int)$this->object_id)->taxonomy;
- break;
- case 'user':
- $type = jvbUserRole((int)$this->object_id);
- break;
- case 'options':
- $type = 'options';
- break;
- }
- if (!$type) {
- return [];
- }
- return Registrar::getInstance($type)->getSections()??[];
- }
-
-
- /**
- * @param string $message
- * @param array $context
- * @param string $level
- *
- * @return void
- */
- protected function handleError(string $message, array $context = [], string $level = E_USER_WARNING):void
- {
- $class = get_class($this);
- $formatted = sprintf('[%s] %s', $class, $message);
-
- // Log to ErrorHandler if available
- JVB()->error()->log(
- 'meta_manager',
- $message,
- $context,
- 'error'
- );
-
- if (defined('WP_DEBUG') && WP_DEBUG) {
- trigger_error($formatted, $level);
- }
- }
-
- public function setFieldConfig(array $fields):void
- {
- $this->fields = $fields;
- }
-
- protected function getFieldConfig(string $name):array|false
- {
- $fields = $this->getFields();
-
-
- if (array_key_exists($name, $fields)) {
- return $fields[$name];
- }
- // For nested fields
- $result = null;
- $found = false;
-
- array_walk_recursive($fields, function ($value, $k) use ($name, &$result, &$found) {
- if (!$found && $k === $name) {
- $result = $value;
- $found = true;
- }
- });
-
- return $found ? $result : false;
- }
-
- public function render(string $type, string $name, array|null $config = null, bool $showHidden = false, $return = false, bool $hideEmpty = true):mixed
- {
- if (!apply_filters('jvbShouldRenderMeta', true, $name, $type, $this->getObjectType())) {
- return false;
- }
- if (!$config) {
- $config = $this->getFieldConfig($name);
- if (!$config) {
- return false;
- }
- }
-
- if (jvbCheck('hidden', $config) && !$showHidden) {
- return false;
- }
-
- if ($this->object_type === 'form') {
- $value = $this->getDefaultValue($config['type']);
- } else {
- try {
- $value =$this->getValue($name);
- } catch (Exception $e) {
- $value = $this->getDefaultValue($name);
- }
- }
-
- if ($config['type'] === 'location'){
- $this->addMeta('has_map', true);
- }
-
- //test for form or frontend
- $out = '';
- switch ($type) {
- case 'form':
- $out = Form::render($name, $value, $config);
- $out = apply_filters('jvbRenderFormMeta', $out, $name, $config, $value, $this->getObjectType());
- break;
- case 'render':
- $out = $this->renderer->render($name, $value, $config);
- if (empty($out) && !$hideEmpty) {
- $out = $this->getEmptyTemplate($config['type'], $name);
- }
- $out = apply_filters('jvbRenderFrontendMeta', $out, $name, $config, $value, $this->getObjectType());
- }
-
-
- if (!$return) {
- echo $out;
- }
- return $out;
-
- }
-
- public function renderForm(string $endpoint, array $options = [], array $fields = [], false|array $sections = [], bool $return = false):mixed
- {
- $ID = (array_key_exists('form-id', $options)) ? $options['form-id'] : $endpoint;
- ob_start();
- $classes = (array_key_exists('classes', $options)) ? ' class="'.implode($options['classes']).'"' : '';
- echo '<form id ="'.$endpoint.'"'.$classes.' data-save="'.$endpoint.'" data-form-id="'.$ID.'">';
- echo (array_key_exists('heading', $options)) ? '<h2>'.$options['heading'].'</h2>' : '';
- if (array_key_exists('description', $options)) {
- if (is_array($options['description'])) {
- foreach ($options['description'] as $d) {
- echo '<p>'.$d.'</p>';
- }
- } else {
- echo '<p>'.$options['description'].'</p>';
- }
-
- }
- if (empty($fields)) {
- $fields = ($this->content) ? Registrar::getFieldsFor($this->content) : $this->getFields();
- }
-
- if ($sections !== false && empty($sections)) {
-
- $sections = ($this->content) ? Registrar::getInstance($this->content)->getSections() : $this->getSections();
- }
-
- if (!empty($sections)){
- $tabs = [];
- foreach ($sections as $config) {
- $tabs[$config['slug']] = $config;
- }
- } else {
- $tabs = false;
- }
-
-
-
- $first = ['post_thumbnail', 'post_title', 'price'];
- foreach ($first as $f) {
- if (array_key_exists($f, $fields)) {
- if ($tabs) {
- $tabs['basic']['content'] .= $this->render('form', $f, $fields[$f], false, true);
- } else {
- $this->render('form', $f, $fields[$f]);
- }
-
- unset($fields[$f]);
- }
- }
- foreach ($fields as $n => $config) {
- if ($tabs) {
- $section = (array_key_exists('section', $config)) ? $config['section'] : 'basic';
- $tabs[$section]['content'] .= $this->render('form', $n, $config, false, true);
- } else {
- $this->render('form', $n, $config);
- }
-
- }
-
-
- if ($tabs) {
- jvbRenderTabs($tabs);
- }
-
-
- echo (jvbCheck('submit', $options)) ? '<button type="submit">'.jvbIcon('floppy-disk').'Save</button>' : '';
- echo '</form>';
-
- $out = ob_get_clean();
- if (!$return) {
- echo $out;
- }
- return $out;
-
- }
-
-
- function getEmptyTemplate($type, $name):string
- {
- $template = '<template class="'.$type.'Template">';
- $out = '';
- switch ($type) {
- case 'text':
- case 'textarea':
- case 'number':
- $out = '<p class="'.$name.'"></p>';
- break;
- case 'url':
- case 'email':
- $out = '<a class="'.$name.'">'.jvbIcon('link').'</a>';
- break;
- case 'set':
- case 'checkbox':
- case 'radio':
- case 'taxonomy':
- case 'user':
- $out = '<h4 class="'.$name.' inline"><ul><li></li></ul>';
- break;
- case 'image':
- case 'gallery':
- $out = '<div class="'.$name.' images"><img/></div>';
- break;
- case 'repeater':
- //Repeater should loop through each of its fields
- break;
- case 'date':
- $out = '<p class="'.$name.'">'.jvbIcon('calendar').'<span></span></p>';
- break;
- case 'time':
- $out = '<p class="'.$name.'">'.jvbIcon('clock').'<time></time></p>';
- break;
- case 'true_false':
- $out = '<p class="'.$name.'"></p>';
- break;
- default:
- return '';
- }
-
- return apply_filters('jvbMetaTypeTemplate', $out, $type);
- }
-
- public function getDefaultValue(string $type):mixed {
- return match ($this->type_manager->getMetaType($type)) {
- 'object', 'array' => [],
- 'boolean' => false,
- 'integer' => 0,
- default => '',
- };
- }
-
- /*******************************************************************
- *
- * BULK SUPPORT
- *
- ******************************************************************/
- public function getAll(array $fields = []) :array
- {
- $fields = (empty($fields) || $fields[0] === 'all') ? array_keys($this->getFields()) : $fields;
- if (empty($fields) || !$this->object_id || !$this->object_type) {
- return [];
- }
-
- $check = array_key_exists($this->object_type, $this->wpDefaults) ? $this->wpDefaults[$this->object_type] : [];
-
- $setFields = array_intersect($check, $fields);
- foreach ($setFields as $f) {
- unset($fields[array_search($f, $fields)]);
- }
-
-
-
- // Prepare meta keys with BASE prefix
- $meta_keys = array_map(function($field) {
- return BASE . $field;
- }, $fields);
- if (!empty($fields)) {
- // Build placeholders for IN clause
- $placeholders = implode(',', array_fill(0, count($meta_keys), '%s'));
-
- // Determine table based on object type
- switch ($this->object_type) {
- case 'post':
- $table = $this->wpdb->postmeta;
- $id_column = 'post_id';
- break;
- case 'term':
- $table = $this->wpdb->termmeta;
- $id_column = 'term_id';
- break;
- case 'user':
- $table = $this->wpdb->usermeta;
- $id_column = 'user_id';
- break;
- default:
- return [];
- }
-
- // Prepare and execute query
- $query = $this->wpdb->prepare(
- "SELECT meta_key, meta_value
- FROM {$table}
- WHERE {$id_column} = %d
- AND meta_key IN ({$placeholders})",
- array_merge([$this->object_id], $meta_keys)
- );
-
- $results = $this->wpdb->get_results($query, ARRAY_A);
-
- // Format results, removing BASE prefix from keys
- $values = [];
- foreach ($results as $row) {
- $key = str_replace(BASE, '', $row['meta_key']);
- $values[$key] = maybe_unserialize($row['meta_value']);
- }
-
- // Include any requested fields that don't have values as empty
- foreach ($fields as $field) {
- if (!isset($values[$field])) {
- $values[$field] = '';
- }
- }
- }
-
-
- if (!empty($setFields)) {
- foreach ($setFields as $field) {
- if ($field === 'post_thumbnail') {
- $values[$field] = get_post_thumbnail_id($this->object_id);
- } else {
- $values[$field] = $this->data->$field;
- }
- }
- }
-
- return $values;
- }
-
- protected function addMeta($field, $value): bool
- {
- switch ($this->object_type) {
- case 'post':
- return update_post_meta($this->object_id, BASE.$field, $value);
- case 'term':
- return update_term_meta($this->object_id, BASE.$field, $value);
- case 'user':
- case 'integrations':
- return update_user_meta($this->object_id, BASE.$field, $value);
- case 'option':
- return update_option(BASE.$field, $value);
- }
- return false;
- }
-
- public function setAll(array $fields, bool $updatePost = true):bool
- {
- if (empty($fields) || !$this->object_type) {
- return false;
- }
-
- if ($this->object_type !== 'options' && !$this->object_id) {
- return false;
- }
-
-
- // Determine table based on object type
- $check = array_key_exists($this->object_type, $this->wpDefaults) ? $this->wpDefaults[$this->object_type] : [];
- switch ($this->object_type) {
- case 'post':
- $table = $this->wpdb->postmeta;
- $id_column = 'post_id';
- break;
- case 'term':
- $table = $this->wpdb->termmeta;
- $id_column = 'term_id';
- break;
- case 'user':
- case 'integrations':
- $table = $this->wpdb->usermeta;
- $id_column = 'user_id';
- break;
- case 'options':
- try {
- $results = [];
- foreach ($fields as $field => $value) {
- // Get field configuration for sanitization
- $field_config = $this->getFieldConfig($field);
-
- // Sanitize value
- $sanitized = $this->sanitizer->sanitize($value, $field_config);
-
- if ($this->checkOverrides($field, $sanitized, $field_config)) {
- continue;
- }
- $results[] = update_option(BASE.$field, $sanitized);
- }
- return true;
- } catch (Exception $e) {
- return false;
- }
- default:
- return false;
- }
-
- $setFields = array_intersect($check, array_keys($fields));
- $temp = [];
- foreach ($setFields as $f) {
- $temp[$f] = $fields[$f];
- unset($fields[$f]);
- }
- $setFields = $temp;
-
- $success = true;
- $this->wpdb->query('START TRANSACTION');
-
- try {
- if (!empty($fields)) {
- foreach ($fields as $field => $value) {
- // Get field configuration for sanitization
- $field_config = $this->getFieldConfig($field);
-
- // Sanitize value
- $sanitized = $this->sanitizer->sanitize($value, $field_config);
- if ($this->checkOverrides($field, $sanitized, $field_config)) {
- continue;
- }
-
-
- if ($field_config['type'] == 'taxonomy' && (!array_key_exists('taxonomy_type', $field_config))) {
- if (empty(trim($sanitized))) {
- // Clear all terms when value is empty
- wp_set_object_terms($this->object_id, [], jvbCheckBase($field_config['taxonomy']), false);
- } else {
- $term_ids = array_map('intval', array_filter(explode(',', $sanitized)));
- wp_set_object_terms($this->object_id, $term_ids, jvbCheckBase($field_config['taxonomy']), false);
- }
- }
-
- if ($field_config['type'] === 'location' && empty($sanitized)) {
- $this->addMeta('has_map', false);
- }
-
- $meta_key = BASE . $field;
-
- // Check if meta exists
- $exists = $this->wpdb->get_var($this->wpdb->prepare(
- "SELECT COUNT(*) FROM {$table}
- WHERE {$id_column} = %d AND meta_key = %s",
- $this->object_id, $meta_key
- ));
-
- if ($exists) {
- // Update existing
- $result = $this->wpdb->update(
- $table,
- ['meta_value' => maybe_serialize($sanitized)],
- [
- $id_column => $this->object_id,
- 'meta_key' => $meta_key
- ],
- ['%s'],
- ['%d', '%s']
- );
- } else {
- // Insert new
- $result = $this->wpdb->insert(
- $table,
- [
- $id_column => $this->object_id,
- 'meta_key' => $meta_key,
- 'meta_value' => maybe_serialize($sanitized)
- ],
- ['%d', '%s', '%s']
- );
- }
-
- if ($result === false) {
- $success = false;
- break;
- }
- }
-
- if ($success) {
- $this->wpdb->query('COMMIT');
-
- // Clear cache for this object
- $this->clearMetaCache();
- } else {
- $this->wpdb->query('ROLLBACK');
- }
- }
-
- if (!empty($setFields)) {
- foreach ($setFields as $field => $value) {
- $field_config = $this->getFieldConfig($field);
- if ($field_config) {
- $setFields[$field] = $this->sanitizer->sanitize($value, $field_config);
- }
-
- if ($field === 'post_date') {
- $datetime = strtotime($setFields[$field]);
- if ($datetime !== false) {
- $setFields[$field] = date('Y-m-d H:i:s', $datetime);
- } else {
- $setFields[$field] = date('Y-m-d H:i:s', time());
- }
-
- $setFields['post_date_gmt'] = get_gmt_from_date($setFields[$field]);
- $setFields['edit_date'] = true;
- }
- }
-
- switch ($this->object_type) {
- case 'post':
- if (array_key_exists('post_thumbnail', $setFields)) {
- set_post_thumbnail($this->object_id, $setFields['post_thumbnail']);
- unset($setFields['post_thumbnail']);
- }
-
- if (!empty($setFields)) {
- $result = jvb_update_post(array_merge(['ID' => $this->object_id], $setFields));
- }
- break;
- case 'user':
- case 'integrations':
- wp_update_user(array_merge(['ID' => $this->object_id], $setFields));
- break;
- case 'term':
- wp_update_term($this->object_id, $this->data->taxonomy, $setFields);
- break;
- }
- } elseif ($updatePost && $this->object_type === 'post' && !empty($this->object_id)) {
- //Update the 'post modified' date with meta updates, for filtering
- jvb_update_post(['ID' => $this->object_id]);
- }
-
- } catch (Exception $e) {
- $this->wpdb->query('ROLLBACK');
- JVB()->error()->log(
- 'meta_manager',
- 'Batch update failed: ' . $e->getMessage(),
- [
- 'object_id' => $this->object_id,
- 'object_type' => $this->object_type,
- 'fields' => array_keys($fields)
- ],
- 'error'
- );
- return false;
- }
-
- return $success;
- }
-
- /**
- * Get multiple field values for multiple objects
- *
- * @param array $object_ids Array of object IDs
- * @param array $fields Array of field names (without BASE prefix)
- * @param string $object_type Type of objects (post, term, user)
- * @return array Multi-dimensional array [object_id][field] => value
- */
- public static function getBulkValues(array $object_ids, array $fields, string $object_type): array
- {
- if (empty($object_ids) || empty($fields)) {
- return [];
- }
-
- global $wpdb;
-
- // Prepare meta keys with BASE prefix
- $meta_keys = array_map(function($field) {
- return BASE . $field;
- }, $fields);
-
- // Build placeholders
- $id_placeholders = implode(',', array_fill(0, count($object_ids), '%d'));
- $key_placeholders = implode(',', array_fill(0, count($meta_keys), '%s'));
-
- // Determine table based on object type
- switch ($object_type) {
- case 'post':
- $table = $wpdb->postmeta;
- $id_column = 'post_id';
- break;
- case 'term':
- $table = $wpdb->termmeta;
- $id_column = 'term_id';
- break;
- case 'user':
- case 'integrations':
- $table = $wpdb->usermeta;
- $id_column = 'user_id';
- break;
- default:
- return [];
- }
-
- // Prepare and execute query
- $query = $wpdb->prepare(
- "SELECT {$id_column} as object_id, meta_key, meta_value
- FROM {$table}
- WHERE {$id_column} IN ({$id_placeholders})
- AND meta_key IN ({$key_placeholders})
- ORDER BY {$id_column}, meta_key",
- array_merge($object_ids, $meta_keys)
- );
-
- $results = $wpdb->get_results($query, ARRAY_A);
-
- // Format results
- $values = [];
- foreach ($object_ids as $id) {
- $values[$id] = [];
- foreach ($fields as $field) {
- $values[$id][$field] = '';
- }
- }
-
- foreach ($results as $row) {
- $object_id = (int)$row['object_id'];
- $key = str_replace(BASE, '', $row['meta_key']);
- $values[$object_id][$key] = maybe_unserialize($row['meta_value']);
- }
-
- return $values;
- }
-
- /**
- * Set multiple field values for multiple objects
- *
- * @param array $data Multi-dimensional array [object_id][field] => value
- * @param string $object_type Type of objects (post, term, user)
- * @return array Array of results [object_id] => bool success
- */
- public static function setBulkValues(array $data, string $object_type): array
- {
- if (empty($data)) {
- return [];
- }
-
- global $wpdb;
-
- // Determine table based on object type
- switch ($object_type) {
- case 'post':
- $table = $wpdb->postmeta;
- $id_column = 'post_id';
- break;
- case 'term':
- $table = $wpdb->termmeta;
- $id_column = 'term_id';
- break;
- case 'user':
- case 'integrations':
- $table = $wpdb->usermeta;
- $id_column = 'user_id';
- break;
- default:
- return [];
- }
-
- $results = [];
- $wpdb->query('START TRANSACTION');
-
- try {
- // Collect all meta keys to check existence in one query
- $all_checks = [];
- foreach ($data as $object_id => $fields) {
- foreach ($fields as $field => $value) {
- $all_checks[] = [
- 'object_id' => $object_id,
- 'meta_key' => BASE . $field
- ];
- }
- }
-
- // Build query to check existing meta
- if (!empty($all_checks)) {
- $check_values = [];
- foreach ($all_checks as $check) {
- $check_values[] = $wpdb->prepare("(%d, %s)",
- $check['object_id'],
- $check['meta_key']
- );
- }
-
- $existing_query = "SELECT {$id_column} as object_id, meta_key
- FROM {$table}
- WHERE ({$id_column}, meta_key) IN (" .
- implode(',', $check_values) . ")";
-
- $existing = $wpdb->get_results($existing_query, ARRAY_A);
-
- // Create lookup for existing meta
- $exists_lookup = [];
- foreach ($existing as $row) {
- $exists_lookup[$row['object_id'] . '_' . $row['meta_key']] = true;
- }
- }
-
- $object_ids = [];
- // Process each object
- foreach ($data as $object_id => $fields) {
- $object_ids[] = $object_id;
- $object_success = true;
-
- // Create temporary MetaManager instance for sanitization
- $temp_meta = new self($object_id, $object_type);
-
- foreach ($fields as $field => $value) {
- // Get field configuration
- $field_config = $temp_meta->getFieldConfig($field);
-
- // Sanitize value
- $sanitized = $temp_meta->sanitizer->sanitize($value, $field_config);
- $temp = new self(null, $object_type);
- if ($temp->checkOverrides($field, $sanitized, $field_config)) {
- $results[$object_id] = true;
- continue;
- }
-
- $meta_key = BASE . $field;
- $lookup_key = $object_id . '_' . $meta_key;
-
- if (isset($exists_lookup[$lookup_key])) {
- // Update existing
- $result = $wpdb->update(
- $table,
- ['meta_value' => maybe_serialize($sanitized)],
- [
- $id_column => $object_id,
- 'meta_key' => $meta_key
- ],
- ['%s'],
- ['%d', '%s']
- );
- } else {
- // Insert new
- $result = $wpdb->insert(
- $table,
- [
- $id_column => $object_id,
- 'meta_key' => $meta_key,
- 'meta_value' => maybe_serialize($sanitized)
- ],
- ['%d', '%s', '%s']
- );
- }
-
- if ($result === false) {
- $object_success = false;
- }
- }
-
- $results[$object_id] = $object_success;
- }
-
- // Check if all succeeded
- $all_success = !in_array(false, $results, true);
-
- if ($all_success) {
- $wpdb->query('COMMIT');
-
- // Clear cache for all affected objects
- self::clearBulkMetaCache($object_ids, $object_type);
- } else {
- $wpdb->query('ROLLBACK');
- }
-
- } catch (Exception $e) {
- $wpdb->query('ROLLBACK');
- JVB()->error()->log(
- 'meta_manager',
- 'Bulk update failed: ' . $e->getMessage(),
- ['object_type' => $object_type],
- 'error'
- );
-
- // Mark all as failed
- foreach (array_keys($data) as $object_id) {
- $results[$object_id] = false;
- }
- }
-
- return $results;
- }
-
- /**
- * Clear meta cache for current object
- */
- protected function clearMetaCache(): void
- {
- switch ($this->object_type) {
- case 'post':
- clean_post_cache($this->object_id);
- break;
- case 'term':
- clean_term_cache($this->object_id);
- break;
- case 'user':
- case 'integrations':
- clean_user_cache($this->object_id);
- break;
- }
- }
-
- /**
- * Clear meta cache for multiple objects
- */
- protected static function clearBulkMetaCache(array $object_ids, string $object_type): void
- {
- foreach ($object_ids as $id) {
- switch ($object_type) {
- case 'post':
- clean_post_cache($id);
- break;
- case 'term':
- clean_term_cache($id);
- break;
- case 'user':
- case 'integrations':
- clean_user_cache($id);
- break;
- }
- }
- }
-
-
-
- private function getOrCreateTerm(string $termName, string $taxonomy):?int
- {
- $taxonomy = jvbCheckBase($taxonomy);
- $term = get_term_by('name', $termName, $taxonomy);
-
- if (!$term) {
- $result = wp_insert_term($termName, $taxonomy);
- if (is_wp_error($result)) {
- return null;
- }
- $termID = $result['term_id'];
- } else {
- $termID = $term->term_id;
- }
-
- if ($termID) {
- return $termID;
- }
- return null;
- }
-}
diff --git a/inc/meta/MetaOld.php b/inc/meta/MetaOld.php
deleted file mode 100644
index 876af90..0000000
--- a/inc/meta/MetaOld.php
+++ /dev/null
@@ -1,701 +0,0 @@
-<?php
-namespace JVBase\meta;
-
-use JVBase\registrar\Registrar;
-
-if (!defined('ABSPATH')) {
- exit;
-}
-
-/**
- * Main facade for meta operations
- * Fluent API for getting/setting meta values with validation & sanitization
- *
- * Usage:
- * $meta = Meta::forPost($id);
- * $meta->price = 150;
- * $meta->save();
- *
- * Meta::forPost($id)->set('price', 150)->set('style', 'traditional')->save();
- */
-class MetaOld
-{
- protected Item $item;
- protected Storage $storage;
- protected Validator $validator;
- protected Sanitizer $sanitizer;
- protected MetaTypeManager $typeManager;
-
- protected bool $autoValidate = true;
- protected bool $autoSanitize = true;
-
- /** @var array<string, callable[]> */
- protected array $onChangeCallbacks = [];
-
- /** @var array<string, callable> */
- protected array $computed = [];
-
- // ─────────────────────────────────────────────────────────────
- // Factory Methods
- // ─────────────────────────────────────────────────────────────
-
- /**
- * Create Meta instance for a post
- */
- public static function forPost(int $id): self
- {
- return new self($id, 'post');
- }
-
- /**
- * Create Meta instance for a term
- */
- public static function forTerm(int $id): self
- {
- return new self($id, 'term');
- }
-
- /**
- * Create Meta instance for a user
- */
- public static function forUser(int $id): self
- {
- return new self($id, 'user');
- }
-
- /**
- * Create Meta instance for options
- */
- public static function forOptions(?string $baseKey = null): self
- {
- $instance = new self($baseKey, 'options');
- $instance->item->baseKey = $baseKey;
- return $instance;
- }
-
- /**
- * Bulk load multiple posts with optional field preloading
- * @return array<int, Meta>
- */
- public static function bulkForPosts(array $ids, array $preloadFields = []): array
- {
- return self::bulkFor($ids, 'post', $preloadFields);
- }
-
- /**
- * Bulk load multiple terms with optional field preloading
- * @return array<int, Meta>
- */
- public static function bulkForTerms(array $ids, array $preloadFields = []): array
- {
- return self::bulkFor($ids, 'term', $preloadFields);
- }
-
- /**
- * Bulk load multiple users with optional field preloading
- * @return array<int, Meta>
- */
- public static function bulkForUsers(array $ids, array $preloadFields = []): array
- {
- return self::bulkFor($ids, 'user', $preloadFields);
- }
-
- /**
- * Generic bulk loader
- * @return array<int, Meta>
- */
- protected static function bulkFor(array $ids, string $type, array $preloadFields = []): array
- {
- if (empty($ids)) {
- return [];
- }
-
- $metas = [];
-
- // Create instances
- foreach ($ids as $id) {
- $metas[$id] = new self($id, $type);
- }
-
- // Preload fields if specified
- if (!empty($preloadFields)) {
- self::bulkPreload($metas, $type, $preloadFields);
- }
-
- return $metas;
- }
-
- /**
- * Bulk preload fields for multiple Meta instances
- * @param Meta[] $metas
- */
- protected static function bulkPreload(array $metas, string $objectType, array $fields): void
- {
- if (empty($metas) || empty($fields)) {
- return;
- }
-
- $ids = array_keys($metas);
- $values = Storage::getBulkValues($ids, $objectType, $fields);
-
- // Distribute results to Meta instances
- foreach ($values as $id => $fieldValues) {
- if (!isset($metas[$id])) {
- continue;
- }
-
- $meta = $metas[$id];
- foreach ($fieldValues as $name => $value) {
- $config = $meta->config($name) ?? ['type' => 'text'];
- $field = new Field($name, $value, $config);
- $meta->item()->setField($field);
- }
- }
- }
-
- /**
- * Save multiple Meta instances efficiently
- * @param Meta[] $metas
- * @return array<int, bool>
- */
- public static function saveBulk(array $metas, bool $updateTimestamp = true): array
- {
- // Validate all first
- $invalid = [];
- foreach ($metas as $id => $meta) {
- if (!$meta->isValid()) {
- $invalid[$id] = $meta->getErrors();
- }
- }
-
- if (!empty($invalid)) {
- JVB()->error()->log('meta', 'Bulk save has validation errors', [
- 'invalid_items' => $invalid
- ], 'warning');
- }
-
- // Filter to only valid metas
- $validMetas = array_filter($metas, fn($m) => $m->isValid());
-
- // Check overrides before bulk save
- foreach ($validMetas as $meta) {
- foreach ($meta->item()->getDirtyFields() as $field) {
- if ($meta->checkOverrides($field)) {
- $field->markClean();
- }
- }
- }
-
- $results = Storage::saveBulk($validMetas, $updateTimestamp);
-
- // Mark invalid ones as failed
- foreach ($invalid as $id => $errors) {
- $results[$id] = false;
- }
-
- return $results;
- }
-
- // ─────────────────────────────────────────────────────────────
- // Constructor
- // ─────────────────────────────────────────────────────────────
-
- public function __construct(int|string|null $id, string $type)
- {
- $this->storage = new Storage();
- $this->validator = new Validator();
- $this->sanitizer = new Sanitizer();
- $this->typeManager = new MetaTypeManager();
-
- $this->item = $this->buildItem($id, $type);
- }
-
- protected function buildItem(int|string|null $id, string $type): Item
- {
- $contentType = null;
- $wpObject = null;
-
- if ($id && $type !== 'options') {
- [$wpObject, $contentType] = match ($type) {
- 'post' => [get_post($id), jvbNoBase(get_post_type($id))],
- 'term' => [get_term($id), jvbNoBase(get_term($id)->taxonomy)],
- 'user', 'integrations' => [get_user_by('id', $id), jvbUserRole($id)],
- default => [null, null]
- };
- }
-
- $item = new Item($id, $type, $contentType);
- $item->wpObject = $wpObject;
- $item->fieldConfigs = $this->loadFieldConfigs($contentType, $type);
-
- // Mark WP defaults in configs
- $defaults = Item::WP_DEFAULTS[$type] ?? [];
- foreach ($defaults as $name) {
- if (!isset($item->fieldConfigs[$name])) {
- $item->fieldConfigs[$name] = ['type' => 'text', '_wp_default' => true];
- } else {
- $item->fieldConfigs[$name]['_wp_default'] = true;
- }
- }
-
- return $item;
- }
-
- protected function loadFieldConfigs(?string $contentType, string $objectType): array
- {
- if (!$contentType && $objectType !== 'options') {
- return [];
- }
-
- return Registrar::getFieldsFor($contentType??'options');
- }
-
- // ─────────────────────────────────────────────────────────────
- // Magic Methods for Fluent Access
- // ─────────────────────────────────────────────────────────────
-
- public function __get(string $name): mixed
- {
- return $this->get($name);
- }
-
- public function __set(string $name, mixed $value): void
- {
- $this->set($name, $value);
- }
-
- public function __isset(string $name): bool
- {
- return $this->item->hasField($name) || isset($this->computed[$name]);
- }
-
- // ─────────────────────────────────────────────────────────────
- // Core API
- // ─────────────────────────────────────────────────────────────
-
- /**
- * Get a field value
- */
- public function get(string $name): mixed
- {
- // Handle repeater subfield path
- if (str_contains($name, ':')) {
- return $this->getByPath($name);
- }
-
- // Check computed fields first
- if (isset($this->computed[$name])) {
- return ($this->computed[$name])($this);
- }
-
- // Return from loaded field if exists
- if ($field = $this->item->getField($name)) {
- return $field->get();
- }
-
- // Load from storage
- $value = $this->storage->get($this->item, $name);
- $config = $this->item->getFieldConfig($name) ?? ['type' => 'text'];
-
- $field = new Field($name, $value, $config);
- $this->item->setField($field);
-
- return $value;
- }
-
- /**
- * Set a field value (validates & sanitizes by default)
- */
- public function set(string $name, mixed $value): self
- {
- // Handle repeater subfield path (e.g., "services:2:image")
- if (str_contains($name, ':')) {
- return $this->setByPath($name, $value);
- }
-
- $config = $this->item->getFieldConfig($name);
-
- if (!$config) {
- // Allow setting unknown fields with minimal config
- $config = ['type' => 'text', 'name' => $name];
- }
-
- // Validate
- if ($this->autoValidate && !$this->validator->validate($value, $config)) {
- $field = $this->item->getField($name) ?? new Field($name, $value, $config);
- $field->addError("Validation failed for {$name}");
- $this->item->setField($field);
- return $this;
- }
-
- // Sanitize
- if ($this->autoSanitize) {
- $value = $this->sanitizer->sanitize($value, $config);
- }
-
- // Get or create field
- $field = $this->item->getField($name);
- $oldValue = null;
-
- if ($field) {
- error_log('Stored field found');
- $oldValue = $field->value;
- $field->set($value);
- } else {
- error_log('No stored field found. Creating a new one');
- // Load original to track dirty state
- $original = $this->storage->get($this->item, $name);
- $oldValue = $original;
- $field = new Field($name, $original, $config);
- $field->set($value);
- $this->item->setField($field);
- }
-
- // Fire change callbacks
- if (isset($this->onChangeCallbacks[$name]) && $oldValue !== $value) {
- foreach ($this->onChangeCallbacks[$name] as $callback) {
- $callback($value, $oldValue, $this);
- }
- }
-
- return $this;
- }
-
- /**
- * Get multiple fields
- */
- public function getAll(array $fields = []): array
- {
- if (empty($fields) || $fields === ['all']) {
- $fields = array_keys($this->item->fieldConfigs);
- }
-
- // Load all from storage
- $values = $this->storage->getAll($this->item, $fields);
-
- // Create Field instances
- foreach ($values as $name => $value) {
- if (!$this->item->getField($name)) {
- $config = $this->item->getFieldConfig($name) ?? ['type' => 'text'];
- $this->item->setField(new Field($name, $value, $config));
- }
- }
-
- return $values;
- }
-
- /**
- * Set multiple fields
- */
- public function setAll(array $data): self
- {
- error_log('Setting all Meta');
- foreach ($data as $name => $value) {
- error_log('Setting '.$name.' with value: '.print_r($value, true));
- $this->set($name, $value);
- }
- return $this;
- }
-
- /**
- * Save all dirty fields to database
- */
- public function save(bool $updateTimestamp = true): bool
- {
- if (!$this->item->isValid()) {
- JVB()->error()->log('meta', 'Cannot save: validation errors exist', [
- 'fields' => array_keys($this->item->getInvalidFields())
- ], 'warning');
- return false;
- }
-
- // Check for field overrides before saving
- foreach ($this->item->getDirtyFields() as $field) {
- if ($this->checkOverrides($field)) {
- $field->markClean();
- }
- }
-
- return $this->storage->save($this->item, $updateTimestamp);
- }
-
- /**
- * Delete a field value
- */
- public function delete(string $name): bool
- {
- $result = $this->storage->delete($this->item, $name);
-
- if ($result && $field = $this->item->getField($name)) {
- $field->set($this->getDefaultValue($name));
- $field->markClean();
- }
-
- return $result;
- }
-
- /**
- * Delete multiple field values
- */
- public function deleteAll(array $names): array
- {
- $results = [];
- foreach ($names as $name) {
- $results[$name] = $this->delete($name);
- }
- return $results;
- }
-
- // ─────────────────────────────────────────────────────────────
- // Repeater Access
- // ─────────────────────────────────────────────────────────────
-
- /**
- * Get repeater accessor for fluent repeater operations
- */
- public function repeater(string $name): Repeater
- {
- return new Repeater($this, $name);
- }
-
- protected function setByPath(string $path, mixed $value): self
- {
- error_log('Setting by path: '.$path.', with value: '.print_r($value, true));
- $parts = explode(':', $path, 3);
- if (count($parts) !== 3) {
- return $this;
- }
-
- [$repeaterName, $rowIndex, $subField] = $parts;
- $this->repeater($repeaterName)->setField((int) $rowIndex, $subField, $value);
-
- return $this;
- }
-
- protected function getByPath(string $path): mixed
- {
- $parts = explode(':', $path, 3);
- if (count($parts) !== 3) {
- return null;
- }
-
- [$repeaterName, $rowIndex, $subField] = $parts;
- return $this->repeater($repeaterName)->field((int) $rowIndex, $subField);
- }
-
- // ─────────────────────────────────────────────────────────────
- // Utility Methods
- // ─────────────────────────────────────────────────────────────
-
- /**
- * Get all dirty (changed) field values
- */
- public function getDirty(): array
- {
- return array_map(
- fn(Field $f) => $f->value,
- $this->item->getDirtyFields()
- );
- }
-
- /**
- * Check if any fields have changed
- */
- public function isDirty(): bool
- {
- return $this->item->hasDirtyFields();
- }
-
- /**
- * Discard all unsaved changes
- */
- public function reset(): self
- {
- $this->item->resetAll();
- return $this;
- }
-
- /**
- * Get validation errors
- */
- public function getErrors(): array
- {
- $errors = [];
- foreach ($this->item->getInvalidFields() as $name => $field) {
- $errors[$name] = $field->errors;
- }
- return $errors;
- }
-
- /**
- * Check if valid (no validation errors)
- */
- public function isValid(): bool
- {
- return $this->item->isValid();
- }
-
- /**
- * Disable auto-validation for bulk operations
- */
- public function withoutValidation(): self
- {
- $this->autoValidate = false;
- return $this;
- }
-
- /**
- * Disable auto-sanitization
- */
- public function withoutSanitization(): self
- {
- $this->autoSanitize = false;
- return $this;
- }
-
- /**
- * Re-enable validation and sanitization
- */
- public function withDefaults(): self
- {
- $this->autoValidate = true;
- $this->autoSanitize = true;
- return $this;
- }
-
- /**
- * Get the underlying Item
- */
- public function item(): Item
- {
- return $this->item;
- }
-
- /**
- * Get field configuration
- */
- public function config(string $name): ?array
- {
- return $this->item->getFieldConfig($name);
- }
-
- /**
- * Get all field configurations
- */
- public function configs(): array
- {
- return $this->item->fieldConfigs;
- }
-
- /**
- * Get item ID
- */
- public function id(): int|string|null
- {
- return $this->item->id;
- }
-
- /**
- * Get object type (post, term, user, options)
- */
- public function objectType(): string
- {
- return $this->item->objectType;
- }
-
- /**
- * Get content type (tattoo, artist, etc)
- */
- public function contentType(): ?string
- {
- return $this->item->contentType;
- }
-
- /**
- * Eager load all fields
- */
- public function eager(): self
- {
- $this->getAll();
- return $this;
- }
-
- /**
- * Convert loaded fields to array
- */
- public function toArray(): array
- {
- return $this->item->toArray();
- }
-
- // ─────────────────────────────────────────────────────────────
- // Event Callbacks
- // ─────────────────────────────────────────────────────────────
-
- /**
- * Register callback for field changes
- */
- public function onChange(string $field, callable $callback): self
- {
- $this->onChangeCallbacks[$field][] = $callback;
- return $this;
- }
-
- /**
- * Register computed/virtual field
- */
- public function computed(string $name, callable $getter): self
- {
- $this->computed[$name] = $getter;
- return $this;
- }
-
- // ─────────────────────────────────────────────────────────────
- // Protected Helpers
- // ─────────────────────────────────────────────────────────────
-
- /**
- * Check for field update overrides
- */
- public function checkOverrides(Field $field): bool
- {
- $name = $field->name;
- $type = $field->type();
- $value = $field->value;
-
- do_action('jvb_meta_update', $name, $value, $this->item->objectType);
-
- $overrides = [
- BASE . 'update_' . $name,
- BASE . 'update_' . $type,
- 'jvb_update_' . $name,
- 'jvb_update_' . $type,
- ];
-
- foreach ($overrides as $override) {
- if (function_exists($override)) {
- $override($this->item->id, $value);
- return true;
- }
- }
-
- return false;
- }
-
- /**
- * Get default value for a field type
- */
- protected function getDefaultValue(string $name): mixed
- {
- $config = $this->item->getFieldConfig($name);
- $type = $config['type'] ?? 'text';
-
- return match ($this->typeManager->getMetaType($type)) {
- 'object', 'array' => [],
- 'boolean' => false,
- 'integer' => 0,
- default => '',
- };
- }
-
-}
diff --git a/inc/meta/_setup.php b/inc/meta/_setup.php
index 57f7ca2..d7bb0c6 100644
--- a/inc/meta/_setup.php
+++ b/inc/meta/_setup.php
@@ -14,5 +14,3 @@
require(JVB_DIR . '/inc/meta/Registry.php');
require(JVB_DIR . '/inc/meta/Sanitizer.php');
-//OLD SYSTEM
-// require(JVB_DIR . '/inc/meta/MetaManager.php');
diff --git a/inc/registrar/Fields.php b/inc/registrar/Fields.php
index e1e4928..ada4615 100644
--- a/inc/registrar/Fields.php
+++ b/inc/registrar/Fields.php
@@ -178,32 +178,29 @@
public function addCommon(string $name):self
{
- match ($name) {
- 'wiki' => $this->addWikiField(),
- 'links' => $this->addLinksField(),
- 'contact' => $this->addContactField(),
- 'reviews', 'review' => $this->addReviewField(),
- 'alternate_name' => $this->addAlternateName(),
- 'keywords' => $this->addKeywords(),
- default => error_log('[Field]addCommon: No configuration found for '.$name.'.')
- };
+ $method = 'add'.implode('',array_map('ucfirst',explode('_', $name))).'Field';
+ if (method_exists($this, $method)) {
+ $this->$method();
+ } else {
+ error_log('[Field]addCommon: No configuration found for '.$name.'.');
+ }
return $this;
}
- protected function addWikiField():void
+ protected function addWikiField(?string $label = null):void
{
$this->addField(
'wiki',
[
'type' => 'url',
- 'label' => 'Wikipedia Page',
+ 'label' => $label ?: 'Wikipedia Page',
'description' => 'For the schema',
'quickEdit' => true,
]
);
}
- protected function addLinksField():void
+ protected function addLinksField(?string $label = null):void
{
$this->addField(
'links',
@@ -211,7 +208,7 @@
'type' => 'repeater',
'quickEdit' => true,
'add_label' => 'title',
- 'label' => 'Online Links',
+ 'label' => $label ?:'Online Links',
'description' => 'These are listed publicly on the website',
'fields' => [
'url' => [
@@ -226,6 +223,7 @@
'type' => 'text',
'label' => 'Tracker',
'description' => 'If you are set up to track link referrals, add what comes after the ? here.',
+ 'default' => 'ref=edmonton_ink'
],
],
'section' => 'contact'
@@ -267,14 +265,14 @@
);
}
- protected function addReviewField():void
+ protected function addReviewField(?string $label = null):void
{
$this->addField(
'reviews',
[
'type' => 'repeater',
'add_label' => 'name',
- 'label' => 'Reviews',
+ 'label' => $label ?: 'Reviews',
'fields' => [
'name' => [
'type' => 'text',
@@ -317,7 +315,7 @@
);
}
- protected function addAlternateName():void
+ protected function addAlternateNameField():void
{
$this->addField(
'alternate_name',
@@ -334,7 +332,7 @@
]
);
}
- protected function addKeywords():void
+ protected function addKeywordsField():void
{
$this->addField(
'keywords',
@@ -353,4 +351,75 @@
]
);
}
+
+ protected function addOutsidePhotoField():void
+ {
+ $this->addField(
+ 'outside_photo',
+ [
+ 'type' => 'image',
+ 'limit' => 1,
+ 'label' => __('Outside Photo', 'jvb')
+ ]
+ );
+ }
+
+ protected function addSloganField():void
+ {
+ $this->addField(
+ 'slogan',
+ [
+ 'type' => 'text',
+ 'label' => __('Tagline or Slogan', 'jvb')
+ ]
+ );
+ }
+
+ protected function addPaymentField():void
+ {
+ $this->addField(
+ 'payment_accepted',
+ [
+ 'type' => 'set',
+ 'label' => __('Payment Accepted', 'jvb'),
+ 'options' => [
+ 'Cash' => 'Cash',
+ 'Credit Card' => 'Credit Card',
+ 'Debit' => 'Debit',
+ 'Google Pay' => 'Google Pay',
+ 'Apple Pay' => 'Apple Pay',
+ 'PayPal' => 'PayPal',
+ 'Interac' => 'Interac',
+ 'AMEX' => 'AMEX',
+ ],
+ ]
+ );
+ }
+
+ protected function addAmenitiesField():void
+ {
+ $this->addField(
+ 'amenities',
+ [
+ 'type' => 'set',
+ 'label' => __('Amenities', 'jvb'),
+ 'options' => [
+ 'Wheelchair Accessible' => 'Wheelchair Accessible',
+ 'Free Parking' => 'Free Parking',
+ 'Private Rooms' => 'Private Rooms',
+ 'Air Conditioning' => 'Air Conditioning',
+ 'WiFi' => 'WiFi',
+ 'Gender Neutral Restroom' => 'Gender Neutral Restroom',
+ 'LGBTQ+ Friendly' => 'LGBTQ+ Friendly',
+ 'Sterilization Room' => 'Sterilization Room',
+ 'Refreshments Available' => 'Refreshments Available',
+ 'Street Level Access' => 'Street Level Access',
+ 'Single Use Needles' => 'Single Use Needles',
+ 'Consultation Room' => 'Consultation Room',
+ 'Aftercare Products Available' => 'Aftercare Products Available',
+ 'Walk-Ins Welcome' => 'Walk-Ins Welcome',
+ ]
+ ]
+ );
+ }
}
diff --git a/inc/registrar/Posts.php b/inc/registrar/Posts.php
index ac1d5e1..7a5bf4f 100644
--- a/inc/registrar/Posts.php
+++ b/inc/registrar/Posts.php
@@ -454,4 +454,5 @@
}
return $url;
}
+
}
diff --git a/inc/registrar/Registrar.php b/inc/registrar/Registrar.php
index 686836e..83c36bd 100644
--- a/inc/registrar/Registrar.php
+++ b/inc/registrar/Registrar.php
@@ -32,6 +32,7 @@
protected string $type;
protected string $singular;
protected string $plural;
+ protected string $profile;
protected string $description ='';
protected Fields $fields;
protected array $sections = [];
@@ -187,6 +188,16 @@
* @var array slugs of other user roles this role can manage
*/
protected array $manage_others = [];
+ /**
+ * @var string The slug of the taxonomy that defines different access points
+ * Example, for edmonton.ink, we have artist_type, and $this->>can_create would be:
+ * [
+ * 'piercer' => ['piercings', 'artwork', 'events'],
+ * 'tattoo_artist'=> ['tattoos', 'artwork', 'events'],
+ * 'artist' => ['artwork']
+ * ]
+ */
+ protected string $user_subtype;
/** Configs **/
protected Breadcrumbs $breadcrumbs;
@@ -219,7 +230,7 @@
// $this->initClasses();
$this->setFields();
- add_action('init', [$this, 'register'], 0);
+ add_action('init', [$this, 'register'], 2);
add_filter('jvbDashboardPage', [$this, 'renderDashPage'], 10, 3);
}
@@ -691,7 +702,7 @@
}
if ($this->karma) {
- $this->karmaManager = KarmaManager::for($this->slug);
+ $this->karmaManager = KarmaManager::for($this->slug, $this->type);
}
}
public static function getInstance(string $slug):Registrar|false
@@ -919,7 +930,38 @@
* FLAGGED FEATURES
*****************************************************************/
+ public function profile(?string $slug = null, ?string $singular = null, ?string $plural = null):self
+ {
+ if (!$slug) {
+ $slug = $this->slug.'_profile';
+ }
+ if (!$singular) {
+ $singular = $this->singular;
+ }
+ if (!$plural) {
+ $plural = $this->plural;
+ }
+ $this->profile_link = true;
+ $this->profile = $slug;
+ return Registrar::forPost($slug, $singular, $plural);
+ }
+ public function getProfile():self|false
+ {
+ if (!$this->profile_link) {
+ return false;
+ }
+ return self::getInstance($this->profile);
+ }
+ public function setUserSubtype(string $type):self
+ {
+ $this->user_subtype = sanitize_text_field($type);
+ return $this;
+ }
+ public function getUserSubtype():string|false
+ {
+ return $this->user_subtype?:false;
+ }
}
diff --git a/inc/registrar/_setup.php b/inc/registrar/_setup.php
index 0e4293a..46c8362 100644
--- a/inc/registrar/_setup.php
+++ b/inc/registrar/_setup.php
@@ -5,7 +5,9 @@
require_once(JVB_DIR . '/inc/registrar/config/Directory.php');
require_once(JVB_DIR . '/inc/registrar/config/Feed.php');
require_once(JVB_DIR . '/inc/registrar/config/SEO.php');
+require_once(JVB_DIR . '/inc/registrar/config/Section.php');
require_once(JVB_DIR . '/inc/registrar/config/Integration.php');
+require_once(JVB_DIR . '/inc/registrar/config/Register.php');
require_once(JVB_DIR . '/inc/registrar/config/seo/_setup.php');
require_once(JVB_DIR . '/inc/registrar/fields/Field.php');
diff --git a/inc/registrar/config/Register.php b/inc/registrar/config/Register.php
new file mode 100644
index 0000000..a74ca26
--- /dev/null
+++ b/inc/registrar/config/Register.php
@@ -0,0 +1,76 @@
+<?php
+namespace JVBase\registrar\config;
+
+
+if (!defined('ABSPATH')) {
+ exit;
+}
+
+final class Register extends Config {
+ public string $title;
+ public string $description;
+ public array $fields = [
+ 'username' => [
+ 'type' => 'email',
+ 'label' => 'Your Email',
+ 'required' => true,
+ ],
+ 'password' => [
+ 'type' => 'text',
+ 'subtype' => 'password',
+ 'label' => 'Your Password',
+ ],
+ 'password_check' => [
+ 'type' => 'text',
+ 'subtype' => 'password',
+ 'label' => 'Verify Password',
+ ],
+ ];
+
+ public function __construct() {
+ }
+
+ public function setTitle(string $title): self {
+ $this->title = $title;
+ return $this;
+ }
+ public function getTitle():string
+ {
+ return $this->title;
+ }
+
+ public function setDescription(string|array $desc):self
+ {
+ if (is_array($desc)) {
+ $desc = implode('', array_map(function ($p) { return '<p>'.$p.'</p>';}, $desc));
+ } else if (!str_contains('<p>', $desc)) {
+ $desc = '<p>'.$desc.'</p>';
+ }
+ $this->description = $desc;
+ return $this;
+ }
+ public function getDescription():string|array
+ {
+ return $this->description;
+ }
+
+ public function setFields(array $fields):self
+ {
+ $this->fields = array_merge($this->fields, $fields);
+ return $this;
+ }
+
+ public function getFields():array
+ {
+ return $this->fields;
+ }
+
+ function getConfig(): array
+ {
+ return [
+ 'title' => $this->title ?? false,
+ 'description' => $this->description??false,
+ 'fields' => $this->fields
+ ];
+ }
+}
diff --git a/inc/registrar/config/Section.php b/inc/registrar/config/Section.php
index 15e2def..d5d6c51 100644
--- a/inc/registrar/config/Section.php
+++ b/inc/registrar/config/Section.php
@@ -13,10 +13,12 @@
protected string $description = '';
protected string $icon = '';
protected array $fields = [];
+ protected Registrar $registrar;
- public function __construct(string $title) {
+ public function __construct(string $title, Registrar $registrar) {
$this->title = $title;
$this->slug = sanitize_title($title);
+ $this->registrar = $registrar;
}
public function setTitle(string $title): self {
@@ -46,7 +48,7 @@
protected function checkFields(string|array $fields):string|array
{
- $allFields = Registrar::getInstance($this->slug)->getFields();
+ $allFields = $this->registrar->getFields();
if (is_array($fields)){
foreach ($fields as $index =>$fieldName){
if (!array_key_exists($fieldName, $allFields)){
diff --git a/inc/registrar/config/seo/Schema.php b/inc/registrar/config/seo/Schema.php
index 6feef79..0214fa5 100644
--- a/inc/registrar/config/seo/Schema.php
+++ b/inc/registrar/config/seo/Schema.php
@@ -182,6 +182,8 @@
$class = JVB()->schemaHelper()::classFromConfig($config, $meta);
$class->setAuthor(JVB()->seo()->getCreator(true));
+
+ $class = apply_filters('jvb_single_'.$this->slug.'_schema_output', $class, $ID);
return $class->outputSchema();
}
);
diff --git a/inc/registrar/fields/Field.php b/inc/registrar/fields/Field.php
index 7b902cb..6367202 100644
--- a/inc/registrar/fields/Field.php
+++ b/inc/registrar/fields/Field.php
@@ -20,6 +20,7 @@
protected bool $quill; // whether to use quill
protected int $maxLength; // of characters
protected string $subtype;
+ protected array $condition;
protected array $allowedSubtype = ['text', 'url','number','tel','email','number'];
/**
* @var ?bool For timeline post types. Indicates whether all posts get this field, or just the parent
@@ -55,7 +56,7 @@
$method = 'set'.implode('',array_map('ucfirst',explode('_', $key)));;
$class->$method($value);
} else {
- error_log('Instance: '.print_r($class, true));
+// error_log('Instance: '.print_r($class, true));
error_log('[JVBase\registrar\Field] Invalid key for '.$name.': '.$key);
}
}
@@ -78,7 +79,7 @@
return $this->hint;
}
- protected function setType(string $type):void{
+ public function setType(string $type):void{
$allowed = array_keys(MetaTypeManager::getTypes());
if (!in_array($type, $allowed)) {
error_log('[JVBase\registrar\Field] Invalid type attempted '.$type);
@@ -87,24 +88,24 @@
$this->type = $type;
}
- protected function setLabel(string $label):void{
+ public function setLabel(string $label):void{
$this->label = $label;
}
- protected function setRequired(bool $required):void{
+ public function setRequired(bool $required):void{
$this->required = $required;
}
- protected function setHidden(bool $hidden):void{
+ public function setHidden(bool $hidden):void{
$this->hidden = $hidden;
}
- protected function setQuickEdit(bool $quickEdit):void{
+ public function setQuickEdit(bool $quickEdit):void{
$this->quickEdit = $quickEdit;
}
- protected function setDefault(mixed $default):void
+ public function setDefault(mixed $default):void
{
$this->default = $default;
}
- protected function setQuill(bool $quill):void
+ public function setQuill(bool $quill):void
{
$this->quill = $quill;
}
@@ -126,7 +127,7 @@
return $this->section??null;
}
- protected function setMaxLength(int $maxLength):void
+ public function setMaxLength(int $maxLength):void
{
$this->maxLength = $maxLength;
}
@@ -163,4 +164,21 @@
{
return $this->subtype;
}
+
+ public function setCondition(array $condition):void
+ {
+ $required = ['field', 'operator', 'value'];
+ foreach ($required as $field) {
+ if (!array_key_exists($field, $condition)) {
+ error_log('[Field]::setCondition Required condition '.$field.' not found');
+ return;
+ }
+ }
+
+ $this->condition = $condition;
+ }
+ public function getCondition(array $condition):array
+ {
+ return $this->condition;
+ }
}
diff --git a/inc/registrar/fields/RepeaterField.php b/inc/registrar/fields/RepeaterField.php
index 601634a..5168712 100644
--- a/inc/registrar/fields/RepeaterField.php
+++ b/inc/registrar/fields/RepeaterField.php
@@ -11,11 +11,11 @@
protected string $add_label = 'Add Row';
protected string $row_label = 'New Item';
- public function setAdd_label(string $label):void
+ public function setAddLabel(string $label):void
{
$this->add_label = $label;
}
- public function getAdd_label():string
+ public function getAddLabel():string
{
return $this->add_label;
}
@@ -33,7 +33,7 @@
}
return true;
}
- public function setRow_label(string $label):void
+ public function setRowLabel(string $label):void
{
if (str_contains($label, '{{')) {
if (!$this->checkFieldVariables($label)) {
@@ -43,7 +43,7 @@
$this->row_label = $label;
}
- public function getRow_label():string
+ public function getRowLabel():string
{
return $this->row_label;
}
diff --git a/inc/registrar/helpers/MakeCalendarType.php b/inc/registrar/helpers/MakeCalendarType.php
index 5ca3bf7..9ad4d76 100644
--- a/inc/registrar/helpers/MakeCalendarType.php
+++ b/inc/registrar/helpers/MakeCalendarType.php
@@ -115,13 +115,11 @@
'max_participants' => [
'type' => 'number',
'label' => __('Maximum Participants', 'jvb'),
- 'bulkEdit'=> true,
],
'is_free' => [
'type' => 'true_false',
'label' => 'Free Event?',
'default' => 1,
- 'bulkEdit'=> true,
],
'cost' => [
'type' => 'number',
@@ -132,7 +130,6 @@
'operator' => '!=',
'value' => 1
],
- 'bulkEdit'=> true,
],
'ticket_url' => [
'type' => 'url',
@@ -151,7 +148,6 @@
'type' => 'true_false',
'label' => 'Drop-ins Welcome?',
'default' => true,
- 'bulkEdit'=> true,
],
'recurrence' => [
'type' => 'group',
diff --git a/inc/registrar/helpers/MakeTrackChanges.php b/inc/registrar/helpers/MakeTrackChanges.php
index 3237e52..6e4d57a 100644
--- a/inc/registrar/helpers/MakeTrackChanges.php
+++ b/inc/registrar/helpers/MakeTrackChanges.php
@@ -37,7 +37,7 @@
$table->setKeys([
['key' => 'PRIMARY', 'value' => '(`id`)'],
- ['key' => 'UNIQUE', 'value' => '(`profile_id`, `term_id`, `start_date`)'],
+ ['key' => 'UNIQUE', 'value' => 'profile_term_date (`profile_id`, `term_id`, `start_date`)'],
'content_role (`term_id`, `role`)',
'user_id (`user_id`)',
'profile_id (`profile_id`)',
@@ -62,7 +62,7 @@
return;
}
- $user = get_post_meta($object_id, BASE.'link', true);
+ $user = get_post_meta($object_id, BASE.'profile_link', true);
if (empty($author)) {
$user = get_post($object_id)->post_author??false;
if (!$user) {
diff --git a/inc/registrar/helpers/MakeVerification.php b/inc/registrar/helpers/MakeVerification.php
index 631df95..858ab05 100644
--- a/inc/registrar/helpers/MakeVerification.php
+++ b/inc/registrar/helpers/MakeVerification.php
@@ -5,7 +5,6 @@
exit;
}
-use JVBase\registrar\Registrar;
use JVBase\managers\CustomTable;
class MakeVerification {
protected CustomTable $table;
@@ -13,5 +12,4 @@
{
// $this->defineTables();
}
-
}
diff --git a/inc/registry/CheckCustomTables.php b/inc/registry/CheckCustomTables.php
deleted file mode 100644
index b04af0b..0000000
--- a/inc/registry/CheckCustomTables.php
+++ /dev/null
@@ -1,1786 +0,0 @@
-<?php
-namespace JVBase\registry;
-
-if (!defined('ABSPATH')) {
- exit;
-}
-
-use Exception;
-use JVBase\registrar\Registrar;
-
-class CheckCustomTables
-{
- protected $wpdb;
- protected string $base;
- protected string $prefix;
- protected string $prefixed;
- protected array $JVB_SITE;
- protected array $JVB_MEMBERSHIP;
- protected array $JVB_CONTENT;
- protected array $JVB_TAXONOMY;
- protected array $JVB_USER;
-
- protected string $userTable;
- protected string $userIDType;
- protected string $termIDType;
- protected string $postIDType;
-
- public function __construct()
- {
- global $wpdb;
- $this->wpdb = $wpdb;
- $this->prefix = $wpdb->prefix;
- $this->base = BASE;
- $this->prefixed = $wpdb->prefix.BASE;
-
- //Fetch the constants manually, in case they're not defined yet?
- $this->JVB_SITE = apply_filters('jvb_site', []);
- $this->JVB_MEMBERSHIP = apply_filters('jvb_membership', []);
- $this->JVB_CONTENT = apply_filters('jvb_content', []);
- $this->JVB_TAXONOMY = apply_filters('jvb_taxonomy', []);
- $this->JVB_USER = apply_filters('jvb_user', []);
-
- $this->userTable = (is_multisite()) ? $this->getMultisiteUsersTable() : $this->wpdb->users;
-
- $this->userIDType = $this->getColumnType($this->userTable, 'ID');
- $this->termIDType = $this->getColumnType($this->wpdb->terms, 'term_id');
- $this->postIDType = $this->getColumnType($this->wpdb->posts, 'ID');
- }
-
- protected function getMultisiteUsersTable():string
- {
- $siteUsersTable = $this->wpdb->prefix . 'users';
- $siteExists = $this->wpdb->get_var(
- $this->wpdb->prepare("SHOW TABLES LIKE %s", $siteUsersTable)
- );
- if ($siteExists) {
- return $siteUsersTable;
- }
- //fallback to main one
- return $this->wpdb->users;
- }
-
- /**
- * Get the exact column type from a WordPress core table
- * This ensures foreign keys match the parent table exactly
- */
- protected function getColumnType(string $table, string $column): string
- {
- // First verify the table exists
- $tableExists = $this->wpdb->get_var(
- $this->wpdb->prepare("SHOW TABLES LIKE %s", $table)
- );
-
- if (!$tableExists) {
- error_log("JVB ERROR: Table {$table} does not exist!");
- return 'bigint(20)'; // Fallback
- }
-
- $result = $this->wpdb->get_row(
- $this->wpdb->prepare(
- "SELECT COLUMN_TYPE
- FROM INFORMATION_SCHEMA.COLUMNS
- WHERE TABLE_SCHEMA = DATABASE()
- AND TABLE_NAME = %s
- AND COLUMN_NAME = %s",
- $table,
- $column
- )
- );
-
- if ($result && isset($result->COLUMN_TYPE)) {
- error_log("JVB: Found Column Type for {$table}.{$column}: " . $result->COLUMN_TYPE);
- return $result->COLUMN_TYPE;
- }
-
- // Fallback to signed bigint if we can't determine
- error_log("JVB WARNING: Could not determine column type for {$table}.{$column}, using bigint(20) as fallback");
- return 'bigint(20)';
- }
-
- public function maybeCreateTables()
- {
- try {
- error_log('JVB: Starting table creation process');
- error_log('JVB: Memory usage at start: ' . memory_get_usage(true) / 1024 / 1024 . ' MB');
-
- $tables = $calendar = $integrations = $karma = $stats = $verifyEntry = $approval = $trackChanges = [];
- $invitable = [
- 'roles' => [],
- 'terms' => []
- ];
-
-
- // Basic tables (these worked fine)
- try {
- if (jvbCheck('has_membership', $this->JVB_SITE) && jvbCheck('member_content', $this->JVB_MEMBERSHIP)) {
- $tables = array_merge($tables, $this->notificationTables());
-// if ($this->JVB_SITE['umami']) {
-// $tables = array_merge($tables, $this->umamiTracking());
-// }
- }
- if (array_key_exists('can_invite', $this->JVB_MEMBERSHIP) &&
- is_array($this->JVB_MEMBERSHIP['can_invite'])) {
- $invitable['roles'] = $this->JVB_MEMBERSHIP['can_invite'];
- }
-
-// if (jvbCheck('social', $this->JVB_SITE) || jvbCheck('gmb', $this->JVB_SITE) || jvbCheck('square', $this->JVB_SITE) || jvbCheck('helcim', $this->JVB_SITE)) {
-// $tables = array_merge($tables, $this->userIntegrationsTable());
-// }
- } catch (Exception $e) {
- error_log("JVB: Error in notification section: " . $e->getMessage());
- }
-
-// try {
-// if (array_key_exists('dashboard', $this->JVB_SITE) && $this->JVB_SITE['dashboard']) {
-// $tables = array_merge($tables, $this->queueTables(), $this->errorLogTables());
-// }
-// } catch (Exception $e) {
-// error_log("JVB: Error in dashboard section: " . $e->getMessage());
-// }
-
- try {
- if (array_key_exists('referrals', $this->JVB_SITE) && $this->JVB_SITE['referrals']) {
- $tables = array_merge($tables, $this->referralTables());
- }
- } catch (Exception $e) {
- error_log("JVB: Error in referrals section: " . $e->getMessage());
- }
- // RE-ENABLE favourites tables
- try {
- if (array_key_exists('favourites', $this->JVB_SITE)) {
- error_log('JVB: Creating favourites tables...');
- $favouriteTables = $this->favouriteTables();
- error_log('JVB: Favourites tables created: ' . count($favouriteTables));
- $tables = array_merge($tables, $favouriteTables);
- error_log('JVB: Memory after favourites: ' . memory_get_usage(true) / 1024 / 1024 . ' MB');
- }
- } catch (Exception $e) {
- error_log("JVB: Error creating favourite tables: " . $e->getMessage());
- }
-
- // RE-ENABLE feed block tables
- try {
- if (jvbCheck('dashboard', $this->JVB_SITE) || jvbCheck('use_feed_block', $this->JVB_SITE)) {
- error_log('JVB: Creating taxonomy relationship tables...');
- $taxonomyTables = $this->taxonomyRelationshipsTables();
- error_log('JVB: Taxonomy tables created: ' . count($taxonomyTables));
- $tables = array_merge($tables, $taxonomyTables);
- error_log('JVB: Memory after taxonomy relationships: ' . memory_get_usage(true) / 1024 / 1024 . ' MB');
- }
- } catch (Exception $e) {
- error_log("JVB: Error creating taxonomy relationship tables: " . $e->getMessage());
- }
-
- // RE-ENABLE news relationships
- try {
- if (jvbCheck('has_membership', $this->JVB_SITE) && jvbCheck('forum', $this->JVB_MEMBERSHIP)) {
- error_log('JVB: Creating news relationship tables...');
- $newsTables = $this->newsRelationshipsTable();
- error_log('JVB: News tables created: ' . count($newsTables));
- $tables = array_merge($tables, $newsTables);
- error_log('JVB: Memory after news relationships: ' . memory_get_usage(true) / 1024 / 1024 . ' MB');
- }
- } catch (Exception $e) {
- error_log("JVB: Error creating news relationship tables: " . $e->getMessage());
- }
-
- $responseTable = false;
-
- // Process content, taxonomy, and user types
- foreach ($this->JVB_CONTENT as $type => $config) {
- if (array_key_exists('is_calendar', $config) && $config['is_calendar']) {
- $calendar[$type] = $config;
- }
- }
-
- foreach ($this->JVB_TAXONOMY as $type => $config) {
- // RE-ENABLE content type creation with error handling
- try {
- if (array_key_exists('is_content', $config) && $config['is_content']) {
- error_log("JVB: Creating content type table for: {$type}");
- error_log('JVB: Memory before content type ' . $type . ': ' . memory_get_usage(true) / 1024 / 1024 . ' MB');
-
- $this->checkIfContentType($type, $config);
-
- error_log('JVB: Memory after content type ' . $type . ': ' . memory_get_usage(true) / 1024 / 1024 . ' MB');
- }
- } catch (Exception $e) {
- error_log("JVB: Error creating content type for {$type}: " . $e->getMessage());
- }
-
- if (array_key_exists('track_changes', $config) && $config['track_changes']) {
- $trackChanges[$type] = $config;
- }
- if (array_key_exists('invitable', $config) && $config['invitable']) {
- $invitable['terms'][] = $type;
- }
- if (array_key_exists('verify_entry', $config) && $config['verify_entry']) {
- $verifyEntry[$type] = $config;
- }
- if (array_key_exists('approve_new', $config) && $config['approve_new']) {
- $approval['term'][] = $type;
- }
- }
-
- foreach ($this->JVB_USER as $type => $config) {
- if (array_key_exists('keep_stats', $config) && $config['keep_stats']) {
- $stats[$type] = $config;
- }
- if (array_key_exists('approve_new', $config) && $config['approve_new']) {
- $approval[$type] = $config;
- }
- }
-
- foreach (array_merge($this->JVB_CONTENT, $this->JVB_TAXONOMY, $this->JVB_USER) as $type => $config) {
- if (array_key_exists('responses', $config) && $config['responses'] === true) {
- $responseTable = true;
- }
- if (array_key_exists('karma', $config) && $config['karma']) {
- $karma[$type] = $config;
- }
- }
-
- // RE-ENABLE response tables
- try {
- if ($responseTable) {
- error_log('JVB: Creating response tables...');
- $responseTables = $this->responseTable();
- error_log('JVB: Response tables created: ' . count($responseTables));
- $tables = array_merge($tables, $responseTables);
- error_log('JVB: Memory after responses: ' . memory_get_usage(true) / 1024 / 1024 . ' MB');
- }
- } catch (Exception $e) {
- error_log("JVB: Error creating response tables: " . $e->getMessage());
- }
-
- // RE-ENABLE karma tables
- try {
- if (!empty($karma)) {
- error_log('JVB: Creating karma tables for: ' . implode(', ', array_keys($karma)));
- $karmaTables = $this->karmaTables($karma);
- error_log('JVB: Karma tables created: ' . count($karmaTables));
- $tables = array_merge($tables, $karmaTables);
- error_log('JVB: Memory after karma: ' . memory_get_usage(true) / 1024 / 1024 . ' MB');
- }
- } catch (Exception $e) {
- error_log("JVB: Error creating karma tables: " . $e->getMessage());
- }
-
- try {
- if (!empty($stats)) {
- error_log('JVB: Creating stats tables for: ' . implode(', ', array_keys($stats)));
- error_log('JVB: Memory before stats: ' . memory_get_usage(true) / 1024 / 1024 . ' MB');
-
- $statTables = $this->statTables($stats);
- error_log('JVB: Stats tables created: ' . count($statTables));
- $tables = array_merge($tables, $statTables);
-
- error_log('JVB: Memory after stats: ' . memory_get_usage(true) / 1024 / 1024 . ' MB');
- }
- } catch (Exception $e) {
- error_log("JVB: Error creating stats tables: " . $e->getMessage());
- error_log("JVB: Stats error trace: " . $e->getTraceAsString());
- }
-
- // RE-ENABLE calendar tables
- try {
- if (!empty($calendar)) {
- error_log('JVB: Creating calendar tables for: ' . implode(', ', array_keys($calendar)));
- $calendarTables = $this->calendarTables($calendar);
- error_log('JVB: Calendar tables created: ' . count($calendarTables));
- $tables = array_merge($tables, $calendarTables);
- error_log('JVB: Memory after calendar: ' . memory_get_usage(true) / 1024 / 1024 . ' MB');
- }
- } catch (Exception $e) {
- error_log("JVB: Error creating calendar tables: " . $e->getMessage());
- }
-
- // RE-ENABLE other table types
- try {
- if (!empty($invitable['roles']) || !empty($invitable['terms'])) {
- error_log('JVB: Creating invitation table...');
- $invitationTables = $this->invitationTables($invitable);
- error_log('JVB: Invitation table created: ' . count($invitationTables));
- $tables = array_merge($tables, $invitationTables);
- }
- } catch (Exception $e) {
- error_log("JVB: Error creating invitation table: " . $e->getMessage());
- }
-
- // Store config for later use
- update_option(BASE.'invitation_config', $invitable);
-
- try {
- if (!empty($approval)) {
- error_log('JVB: Creating approval tables...');
- $approvalTables = $this->approvalTables($approval);
- error_log('JVB: Approval tables created: ' . count($approvalTables));
- $tables = array_merge($tables, $approvalTables);
- error_log('JVB: Memory after approvals: ' . memory_get_usage(true) / 1024 / 1024 . ' MB');
- }
- } catch (Exception $e) {
- error_log("JVB: Error creating approval tables: " . $e->getMessage());
- }
-
- try {
- if (!empty($trackChanges)) {
- error_log('JVB: Creating track changes tables...');
- $trackTables = $this->trackChangesTables($trackChanges);
- error_log('JVB: Track changes tables created: ' . count($trackTables));
- $tables = array_merge($tables, $trackTables);
- error_log('JVB: Memory after track changes: ' . memory_get_usage(true) / 1024 / 1024 . ' MB');
- }
- } catch (Exception $e) {
- error_log("JVB: Error creating track changes tables: " . $e->getMessage());
- }
-
- try {
- if (!empty($verifyEntry)) {
- error_log('JVB: Creating entry request tables...');
- $entryTables = $this->requestEntryTables($verifyEntry);
- error_log('JVB: Entry request tables created: ' . count($entryTables));
- $tables = array_merge($tables, $entryTables);
- error_log('JVB: Memory after entry requests: ' . memory_get_usage(true) / 1024 / 1024 . ' MB');
- }
- } catch (Exception $e) {
- error_log("JVB: Error creating entry request tables: " . $e->getMessage());
- }
-
- error_log('JVB: Final table count: ' . count($tables));
- error_log('JVB: Memory before table creation: ' . memory_get_usage(true) / 1024 / 1024 . ' MB');
-
- if (!empty($tables)) {
- $this->createTables($tables);
- }
-
- update_option(BASE.'calendar_tables', $calendar);
- update_option(BASE.'karma_tables', $karma);
- update_option(BASE.'stats_tables', $stats);
- update_option(BASE.'invite_tables', $invitable);
- update_option(BASE.'verify_entry_tables', $verifyEntry);
- update_option(BASE.'approval_tables', $approval);
- update_option(BASE.'history_tables', $trackChanges);
-
- error_log('JVB: Memory at end: ' . memory_get_usage(true) / 1024 / 1024 . ' MB');
- error_log("JVB: Table creation process completed");
-
- } catch (Exception $e) {
- error_log("JVB: Critical error in table creation: " . $e->getMessage());
- error_log("JVB: Stack trace: " . $e->getTraceAsString());
- error_log('JVB: Memory at error: ' . memory_get_usage(true) / 1024 / 1024 . ' MB');
- }
- }
-
- public function createTables(array $tables)
- {
- require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
-
- // Match collation from existing WP tables for FK compatibility
- $usersStatus = $this->wpdb->get_row("SHOW TABLE STATUS LIKE '{$this->wpdb->users}'");
- $parentCollation = $usersStatus->Collation ?? 'utf8mb4_general_ci';
- $charset_collate = "DEFAULT CHARACTER SET utf8mb4 COLLATE {$parentCollation}";
-
- error_log("JVB: Using charset_collate: " . $charset_collate);
-
- $errors = [];
- $created = [];
-
- foreach ($tables as $name => $schema) {
- $table_name = $this->prefix . BASE . $name;
-
- // Skip if exists
- if ($this->wpdb->get_var("SHOW TABLES LIKE '{$table_name}'")) {
- $created[] = $table_name . ' (exists)';
- continue;
- }
-
- $full_schema = "CREATE TABLE IF NOT EXISTS {$table_name} {$schema} {$charset_collate}";
-
- $this->wpdb->flush();
-
- // Use direct query - dbDelta mangles FK constraints
- $hasForeignKey = stripos($schema, 'FOREIGN KEY') !== false;
-
- if ($hasForeignKey) {
- $result = $this->wpdb->query($full_schema);
- $success = ($result !== false && !$this->wpdb->last_error);
- } else {
- dbDelta($full_schema . ';');
- $success = !$this->wpdb->last_error;
- }
-
- if (!$success) {
- $error_msg = "SQL Error creating table {$table_name}: " . $this->wpdb->last_error;
- error_log($error_msg);
- error_log("Failed SQL Query: " . $full_schema);
- $errors[] = $error_msg;
- } elseif ($this->wpdb->get_var("SHOW TABLES LIKE '{$table_name}'")) {
- $created[] = $table_name;
- error_log("Successfully created table: {$table_name}");
- }
- }
-
- // Log summary
- if (!empty($created)) {
- error_log("JVB Tables Created Successfully: " . implode(', ', $created));
- }
-
- if (!empty($errors)) {
- error_log("JVB Table Creation Errors (" . count($errors) . " total):");
- foreach ($errors as $error) {
- error_log(" - " . $error);
- }
- update_option(BASE . 'table_creation_errors', $errors);
- } else {
- delete_option(BASE . 'table_creation_errors');
- }
- }
-
- /******************************************************
- * Table Definitions
- *****************************************************/
-// MOVED TO Queue.php
-// protected function queueTables():array
-// {
-//
-// return [
-// '_operation_queue' => "(
-// `id` VARCHAR(64) NOT NULL,
-// `type` varchar(50) NOT NULL,
-// `user_id` {$this->userIDType} NOT NULL,
-//
-// `request_data` JSON NOT NULL CHECK (JSON_VALID(request_data)),
-//
-// `total_items` int(11) NOT NULL DEFAULT 1,
-// `processed_items` int(11) DEFAULT 0,
-// `failed_items` JSON,
-//
-// `priority` ENUM('high', 'normal', 'low') DEFAULT 'normal',
-// `state` enum('pending', 'scheduled', 'processing', 'completed') DEFAULT 'pending',
-// `outcome` enum('pending', 'success', 'partial', 'merged', 'failed', 'failed_permanent') DEFAULT 'pending',
-//
-// `retries` int(11) DEFAULT 0,
-// `last_error_hash` CHAR(32) DEFAULT NULL,
-// `error_message` text,
-//
-// `scheduled_at` datetime DEFAULT NULL,
-// `started_at` datetime DEFAULT CURRENT_TIMESTAMP,
-// `completed_at` datetime DEFAULT NULL,
-//
-// `metadata` JSON DEFAULT NULL,
-// `result` JSON,
-// `dependencies` JSON,
-// `merged_into` VARCHAR(64) DEFAULT NULL,
-//
-// `user_dismissed` tinyint(1) DEFAULT 0,
-// `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP,
-// `updated_at` DATETIME DEFAULT CURRENT_TIMESTAMP,
-// PRIMARY KEY (`id`),
-// KEY `idx_run_queue` (state, priority, scheduled_at),
-// KEY `idx_user_ops` (user_id, state),
-// KEY `idx_user_type_pending` (user_id, type, state),
-// KEY `idx_completed_at` (completed_at),
-// KEY `idx_processing_stuck` (`state`, `started_at`)
-// )",
-//
-// 'stats__operation_queue' => "(
-// `id` bigint unsigned AUTO_INCREMENT,
-// `date` date NOT NULL,
-// `type` varchar(50) NOT NULL,
-//
-// `total_operations` int NOT NULL DEFAULT 0,
-// `successful_operations` int NOT NULL DEFAULT 0,
-// `partial_operations` int NOT NULL DEFAULT 0,
-// `failed_operations` int NOT NULL DEFAULT 0,
-// `failed_permanent_operations` int NOT NULL DEFAULT 0,
-//
-// `total_items_processed` int NOT NULL DEFAULT 0,
-//
-// `average_duration` float DEFAULT NULL,
-// `max_duration` int DEFAULT NULL,
-//
-// `peak_queue_size` int NOT NULL DEFAULT 0,
-//
-// `peak_memory_usage` int DEFAULT NULL,
-// `peak_cpu_usage` float DEFAULT NULL,
-//
-// `created_at` timestamp DEFAULT CURRENT_TIMESTAMP,
-// PRIMARY KEY (`id`),
-// UNIQUE KEY (date, type),
-// KEY `date_idx` (date),
-// KEY `type_idx` (type)
-// )"
-// ];
-// }
-
-//MOVED TO ErrorHandler.php
-// protected function errorLogTables():array
-// {
-// return [
-// 'error_log'=> "(
-// `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
-// `error_type` varchar(50) NOT NULL,
-// `component` varchar(100) NOT NULL,
-// `method` varchar(100) DEFAULT NULL,
-// `page_url` varchar(255) DEFAULT NULL,
-// `message` text NOT NULL,
-// `context` JSON,
-// `severity` varchar(20) NOT NULL,
-// `user_id` {$this->userIDType} DEFAULT NULL,
-// `user_was_logged_in` tinyint(1) NOT NULL,
-// `source` enum('frontend','backend') NOT NULL,
-// `created_at` timestamp DEFAULT CURRENT_TIMESTAMP,
-// PRIMARY KEY (`id`),
-// KEY `created_at` (`created_at`),
-// KEY `component_severity_date` (`component`, `severity`, `created_at`),
-// KEY `error_type_date` (`error_type`, `created_at`),
-// KEY `severity_date` (`severity`, `created_at`)
-// )"
-// ];
-// }
-
- protected function userIntegrationsTable():array
- {
-
- return [
- 'user_integration_logs'=> "(
- id bigint(20) unsigned NOT NULL AUTO_INCREMENT,
- `user_id` {$this->userIDType} NOT NULL,
- service varchar(50) NOT NULL,
- action varchar(50) NOT NULL,
- status enum('success','error','warning') DEFAULT 'success',
- message text DEFAULT NULL,
- metadata json DEFAULT NULL,
- created_at datetime DEFAULT CURRENT_TIMESTAMP,
- PRIMARY KEY (id),
- KEY user_service (user_id, service),
- KEY created_at (created_at),
- KEY status (status)
- )"
- ];
- }
-//MOVED TO NotificationManger.php
-// protected function notificationTables():array
-// {
-//
-// return [
-// // Main notifications table
-// 'notifications' => "(
-// `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
-// `owner_id` {$this->userIDType} NOT NULL,
-// `action_user_id` {$this->userIDType} NOT NULL,
-// `target_id` bigint(20) DEFAULT NULL,
-// `target_type` varchar(30) DEFAULT NULL,
-// `type` enum('new_favourite','new_artist','artist_approved','artist_invitation',
-// 'new_term','term_approved','term_rejected','list_shared',
-// 'system_message','shop_invitation') NOT NULL,
-// `status` enum('unread','read','actioned','dismissed') NOT NULL DEFAULT 'unread',
-// `priority` enum('low','normal','high') NOT NULL DEFAULT 'normal',
-// `message` varchar(255) DEFAULT NULL,
-// `context` JSON DEFAULT NULL,
-// `requires_action` tinyint(1) NOT NULL DEFAULT 0,
-// `action_taken` tinyint(1) NOT NULL DEFAULT 0,
-// `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
-// `read_at` datetime DEFAULT NULL,
-// `actioned_at` datetime DEFAULT NULL,
-// `emailed_at` datetime DEFAULT NULL,
-// `updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
-// PRIMARY KEY (`id`),
-// KEY `user_status` (`owner_id`, `status`),
-// KEY `target_lookup` (`target_id`, `target_type`),
-// KEY `unread_notifications` (`owner_id`, `status`, `created_at`),
-// KEY `requires_action` (`owner_id`, `requires_action`, `action_taken`),
-// KEY `acting_user_lookup` (`owner_id`, `action_user_id`, `type`, `status`, `created_at`),
-// CONSTRAINT `{$this->base}notify_owner` FOREIGN KEY (`owner_id`)
-// REFERENCES `{$this->userTable}` (`ID`) ON DELETE CASCADE,
-// CONSTRAINT `{$this->base}action_id` FOREIGN KEY (`action_user_id`)
-// REFERENCES `{$this->userTable}` (`ID`) ON DELETE CASCADE
-// )",
-//
-//
-// 'notifications_content' => "(
-// `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
-// `user_id` {$this->userIDType} NOT NULL,
-// `date` date NOT NULL,
-// `frequency` enum('daily','weekly','monthly') NOT NULL,
-// `tattoo_count` int unsigned NOT NULL DEFAULT 0,
-// `artwork_count` int unsigned NOT NULL DEFAULT 0,
-// `piercing_count` int unsigned NOT NULL DEFAULT 0,
-// `event_count` int unsigned NOT NULL DEFAULT 0,
-// `news_count` int unsigned NOT NULL DEFAULT 0,
-// `offer_count` int unsigned NOT NULL DEFAULT 0,
-// `total_items` int unsigned NOT NULL DEFAULT 0,
-// `has_profile_update` tinyint(1) NOT NULL DEFAULT 0,
-// `new_items` JSON DEFAULT NULL,
-// `updated_items` JSON DEFAULT NULL,
-// `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
-// `updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
-// PRIMARY KEY (`id`),
-// UNIQUE KEY `artist_date_frequency` (`user_id`, `date`, `frequency`),
-// KEY `recent_content` (`date`, `frequency`),
-// KEY `artist_frequency` (`user_id`, `frequency`),
-// CONSTRAINT `{$this->base}content_artist` FOREIGN KEY (`user_id`)
-// REFERENCES `{$this->userTable}` (`ID`) ON DELETE CASCADE
-// )",
-//
-// 'notifications_user_seen' => "(
-// `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
-// `user_id` {$this->userIDType} NOT NULL,
-// `content_notification_id` bigint(20) unsigned NOT NULL,
-// `status` enum('unread','read','dismissed') NOT NULL DEFAULT 'unread',
-// `read_at` datetime DEFAULT NULL,
-// `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
-// PRIMARY KEY (`id`),
-// UNIQUE KEY `user_content_notif` (`user_id`, `content_notification_id`),
-// KEY `user_status` (`user_id`, `status`),
-// CONSTRAINT `{$this->base}user_content_user` FOREIGN KEY (`user_id`)
-// REFERENCES `{$this->userTable}` (`ID`) ON DELETE CASCADE,
-// CONSTRAINT `{$this->base}user_content_notification` FOREIGN KEY (`content_notification_id`)
-// REFERENCES `{$this->prefixed}notifications_content` (`id`) ON DELETE CASCADE
-// )",
-//
-// // User notification preferences
-// 'notification_preferences' => "(
-// `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
-// `user_id` {$this->userIDType} NOT NULL,
-// `item_id` bigint(20) NOT NULL,
-// `notification_type` varchar(50) NOT NULL,
-// `frequency` enum('never','daily','weekly','monthly') DEFAULT 'never',
-// `last_sent` datetime DEFAULT NULL,
-// `created_at` datetime DEFAULT CURRENT_TIMESTAMP,
-// `updated_at` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
-// PRIMARY KEY (`id`),
-// UNIQUE KEY `user_type` (`user_id`, `item_id`),
-// KEY `user_frequency` (`user_id`, `frequency`),
-// KEY `frequency_lookup` (`frequency`, `last_sent`),
-// CONSTRAINT `{$this->base}notification_pref_user` FOREIGN KEY (`user_id`)
-// REFERENCES `{$this->userTable}` (`ID`) ON DELETE CASCADE
-// )",
-//
-// // Notification digest scheduling and tracking
-// 'notification_digests' => "(
-// `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
-// `user_id` {$this->userIDType} NOT NULL,
-// `frequency` enum('daily','weekly','monthly') NOT NULL,
-// `scheduled_at` datetime NOT NULL,
-// `sent_at` datetime DEFAULT NULL,
-// `status` enum('pending','processing','sent','failed') DEFAULT 'pending',
-// `notification_count` int unsigned DEFAULT 0,
-// `created_at` datetime DEFAULT CURRENT_TIMESTAMP,
-// PRIMARY KEY (`id`),
-// KEY `scheduled_digests` (`frequency`, `scheduled_at`, `status`),
-// KEY `user_digests` (`user_id`, `frequency`),
-// CONSTRAINT `{$this->base}digest_user` FOREIGN KEY (`user_id`)
-// REFERENCES `{$this->userTable}` (`ID`) ON DELETE CASCADE
-// )",
-//
-// // Analytics on notification interactions
-// 'stats__notifications' => "(
-// `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
-// `notification_id` bigint(20) unsigned NOT NULL,
-// `user_id` {$this->userIDType} NOT NULL,
-// `action` varchar(30) NOT NULL,
-// `action_source` enum('web','email','app') DEFAULT 'web',
-// `action_details` JSON DEFAULT NULL,
-// `created_at` datetime DEFAULT CURRENT_TIMESTAMP,
-// PRIMARY KEY (`id`),
-// KEY `notification_lookup` (`notification_id`),
-// KEY `user_actions` (`user_id`, `action`),
-// KEY `action_analysis` (`action`, `action_source`),
-// CONSTRAINT `{$this->base}metrics_user` FOREIGN KEY (`user_id`)
-// REFERENCES `{$this->userTable}` (`ID`) ON DELETE CASCADE,
-// CONSTRAINT `{$this->base}metrics_notification` FOREIGN KEY (`notification_id`)
-// REFERENCES `{$this->prefixed}notifications` (`id`) ON DELETE CASCADE
-// )"
-// ];
-// }
-
-//MOVED TO ApprovalManager.php
-// protected function approvalTables($types):array
-// {
-// $tables = [];
-// $save = [];
-//
-// foreach ($types as $type => $config) {
-// $save[$type] = ($type === 'term') ? $config : 'user';
-// $tables['approval_'.$type.'_requests'] = "(
-// `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
-// `user_id` {$this->userIDType} NOT NULL,
-// `status` enum('pending','approved','rejected','appealed','expired') DEFAULT 'pending',
-// `required_approvals` int unsigned DEFAULT 3,
-// `current_approvals` int unsigned DEFAULT 0,
-// `current_rejections` int unsigned DEFAULT 0,
-// `expires_at` datetime DEFAULT NULL,
-// `created_at` datetime DEFAULT CURRENT_TIMESTAMP,
-// `updated_at` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
-// `approved_by` json DEFAULT NULL,
-// `rejected_by` json DEFAULT NULL,
-// `created_item` json DEFAULT NULL,
-// PRIMARY KEY (`id`),
-// KEY `status` (`status`),
-// KEY `expiring_requests` (`status`, `expires_at`),
-// CONSTRAINT `{$this->base}{$type}_approval_requester` FOREIGN KEY (`user_id`)
-// REFERENCES `{$this->userTable}` (`ID`) ON DELETE CASCADE
-// )";
-// $tables['approval_'.$type.'_votes'] = "(
-// `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
-// `request_id` bigint(20) unsigned NOT NULL,
-// `user_id` {$this->userIDType} NOT NULL,
-// `vote` enum('approve','reject','dismissed') NOT NULL,
-// `notes` text DEFAULT NULL,
-// `created_at` datetime DEFAULT CURRENT_TIMESTAMP,
-// PRIMARY KEY (`id`),
-// UNIQUE KEY `unique_vote` (`request_id`, `user_id`),
-// KEY `user_votes` (`user_id`),
-// CONSTRAINT `{$this->base}{$type}_user_approval_request` FOREIGN KEY (`request_id`)
-// REFERENCES `{$this->prefixed}approval_{$type}_requests` (`id`) ON DELETE CASCADE,
-// CONSTRAINT `{$this->base}{$type}_user_approval_voter` FOREIGN KEY (`user_id`)
-// REFERENCES `{$this->userTable}` (`ID`) ON DELETE CASCADE
-// )";
-// }
-// if (!empty($save)) {
-// update_option(BASE.'approvals_types', $save);
-// }
-// return $tables;
-// }
-
-
-// protected function taxonomyRelationshipsTables():array
-// {
-// $tables = [
-// 'taxonomy_relationships' => "(
-// `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
-// `term_id` {$this->termIDType} NOT NULL,
-// `related_term_id` {$this->termIDType} NOT NULL,
-// `taxonomy` varchar(32) NOT NULL,
-// `related_taxonomy` varchar(32) NOT NULL,
-// `post_count` int(11) NOT NULL DEFAULT 0,
-// `is_direct` tinyint(1) NOT NULL DEFAULT 1,
-// `is_hierarchical` tinyint(1) NOT NULL DEFAULT 0,
-// `last_updated` timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
-// PRIMARY KEY (`id`),
-// KEY `term_id` (`term_id`),
-// KEY `related_term_id` (`related_term_id`),
-// KEY `taxonomy` (`taxonomy`),
-// KEY `related_taxonomy` (`related_taxonomy`),
-// UNIQUE KEY `term_relation` (`term_id`, `related_term_id`, `taxonomy`, `related_taxonomy`),
-// CONSTRAINT `{$this->base}tax_rel_term_id` FOREIGN KEY (`term_id`)
-// REFERENCES `{$this->wpdb->terms}` (`term_id`) ON DELETE CASCADE,
-// CONSTRAINT `{$this->base}tax_rel_related_id` FOREIGN KEY (`related_term_id`)
-// REFERENCES `{$this->wpdb->terms}` (`term_id`) ON DELETE CASCADE
-// )"
-// ];
-//
-//// if ((array_key_exists('dashboard', $this->JVB_SITE) && $this->JVB_SITE['dashboard'] === true) || array_key_exists('use_feed_block', $this->JVB_SITE) && $this->JVB_SITE['use_feed_block']) {
-// $tables['user_term_index'] = "(
-// `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
-// `user_id` {$this->userIDType} NOT NULL,
-// `term_id` {$this->termIDType} NOT NULL,
-// `taxonomy` varchar(32) NOT NULL,
-// `post_count` int(11) NOT NULL DEFAULT 1,
-// `is_parent` tinyint(1) NOT NULL DEFAULT 0,
-// `last_used` timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
-// PRIMARY KEY (`id`),
-// UNIQUE KEY `user_term` (`user_id`, `term_id`, `taxonomy`),
-// KEY `user_taxonomy` (`user_id`, `taxonomy`),
-// KEY `taxonomy` (`taxonomy`),
-// CONSTRAINT `{$this->base}user_term_user_fk` FOREIGN KEY (`user_id`)
-// REFERENCES `{$this->userTable}` (`ID`) ON DELETE CASCADE,
-// CONSTRAINT `{$this->base}user_term_term_fk` FOREIGN KEY (`term_id`)
-// REFERENCES `{$this->wpdb->terms}` (`term_id`) ON DELETE CASCADE
-// )";
-//// }
-//
-// return $tables;
-// }
-//MOVED TO FavouritesManager.php
-// protected function favouriteTables():array
-// {
-//
-// return [
-// 'favourites' => "(
-// `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
-// `user_id` {$this->userIDType} NOT NULL,
-// `type` varchar(50) NOT NULL,
-// `target_id` bigint(20) NOT NULL,
-// `notes` text DEFAULT NULL,
-// `date_added` datetime DEFAULT CURRENT_TIMESTAMP,
-// PRIMARY KEY (`id`),
-// UNIQUE KEY `unique_favourite` (`user_id`, `type`, `target_id`),
-// KEY `user_type` (`user_id`, `type`),
-// KEY `target_type` (`target_id`, `type`),
-// CONSTRAINT `{$this->base}favourites_user` FOREIGN KEY (`user_id`)
-// REFERENCES `{$this->userTable}` (`ID`) ON DELETE CASCADE
-// )",
-// 'favourites_lists' => "(
-// `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
-// `user_id` {$this->userIDType} NOT NULL,
-// `name` varchar(255) NOT NULL,
-// `description` text,
-// `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
-// `updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
-// PRIMARY KEY (`id`),
-// KEY `user_lists` (`user_id`),
-// CONSTRAINT `{$this->base}list_user` FOREIGN KEY (`user_id`)
-// REFERENCES `{$this->userTable}` (`ID`) ON DELETE CASCADE
-// )",
-// 'favourites_list_items' => "(
-// `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
-// `list_id` bigint(20) unsigned NOT NULL,
-// `item_type` varchar(50) NOT NULL,
-// `item_id` bigint(20) NOT NULL,
-// `favourite_id` bigint(20) unsigned DEFAULT NULL,
-// `added_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
-// PRIMARY KEY (`id`),
-// UNIQUE KEY `unique_list_item` (`list_id`, `item_type`, `item_id`),
-// KEY `list_items` (`list_id`),
-// KEY `favourite_id` (`favourite_id`),
-// CONSTRAINT `{$this->base}list_items` FOREIGN KEY (`list_id`)
-// REFERENCES `{$this->prefixed}favourites_lists` (`id`) ON DELETE CASCADE,
-// CONSTRAINT `{$this->base}list_favourite` FOREIGN KEY (`favourite_id`)
-// REFERENCES `{$this->prefixed}favourites` (`id`) ON DELETE SET NULL
-// )",
-// 'favourites_list_shares' => "(
-// `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
-// `list_id` bigint(20) unsigned NOT NULL,
-// `user_id` {$this->userIDType} NULL,
-// `email` varchar(255) NOT NULL,
-// `permission_type` enum('view', 'edit') NOT NULL DEFAULT 'view',
-// `status` enum('pending', 'accepted', 'rejected', 'revoked') NOT NULL DEFAULT 'pending',
-// `invitation_token` varchar(64) NULL,
-// `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
-// `updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
-// PRIMARY KEY (`id`),
-// UNIQUE KEY `unique_share_user` (`list_id`, `user_id`, `status`),
-// UNIQUE KEY `unique_share_email` (`list_id`, `email`, `status`),
-// KEY `list_shares` (`list_id`),
-// KEY `status_index` (`status`),
-// CONSTRAINT `{$this->base}share_list` FOREIGN KEY (`list_id`)
-// REFERENCES `{$this->prefixed}favourites_lists` (`id`) ON DELETE CASCADE,
-// CONSTRAINT `{$this->base}share_user` FOREIGN KEY (`user_id`)
-// REFERENCES `{$this->userTable}` (`ID`) ON DELETE CASCADE
-// )",
-// 'favourites_list_stats' => "(
-// `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
-// `item_type` varchar(50) NOT NULL,
-// `item_id` bigint(20) NOT NULL,
-// `list_count` int NOT NULL DEFAULT 0,
-// `last_added` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
-// PRIMARY KEY (`id`),
-// UNIQUE KEY `unique_item_stat` (`item_type`, `item_id`),
-// KEY `item_stats` (`item_type`, `item_id`)
-// )",
-// ];
-// }
-
-//MOVED TO ForumManager.php
-// protected function newsRelationshipsTable():array
-// {
-// return [
-// 'news_relationships' => "(
-// `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
-// `shop_id` {$this->termIDType} NOT NULL,
-// `user_id` {$this->userIDType} NOT NULL,
-// `artist_id` {$this->postIDType} NOT NULL,
-// `news_count` int(10) unsigned NOT NULL DEFAULT 0,
-// `last_post_date` datetime DEFAULT NULL,
-// `last_updated` timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
-// PRIMARY KEY (`id`),
-// UNIQUE KEY `shop_user` (`shop_id`, `user_id`),
-// KEY `shop_id` (`shop_id`),
-// KEY `user_id` (`user_id`),
-// KEY `artist_id` (`artist_id`),
-// CONSTRAINT `{$this->base}nr_shop_news_shop` FOREIGN KEY (`shop_id`)
-// REFERENCES `{$this->wpdb->terms}` (`term_id`) ON DELETE CASCADE,
-// CONSTRAINT `{$this->base}nr_shop_news_user` FOREIGN KEY (`user_id`)
-// REFERENCES `{$this->userTable}` (`ID`) ON DELETE CASCADE,
-// CONSTRAINT `{$this->base}nr_shop_news_artist` FOREIGN KEY (`artist_id`)
-// REFERENCES `{$this->wpdb->posts}` (`ID`) ON DELETE SET NULL
-// )"
-// ];
-// }
-
-//MOVED TO ResponseManager.php
-// protected function responseTable():array
-// {
-// return [
-// 'responses' => "(
-// `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
-// `item_id` {$this->postIDType} NOT NULL,
-// `content` text NOT NULL,
-// `user_id` {$this->userIDType} NOT NULL,
-// `parent_id` bigint(20) unsigned DEFAULT NULL,
-// `response` text NOT NULL,
-// `status` enum('published','hidden','flagged','deleted') DEFAULT 'published',
-// `is_user_deleted` tinyint(1) DEFAULT 0,
-// `upvotes` int NOT NULL DEFAULT 0,
-// `downvotes` int NOT NULL DEFAULT 0,
-// `karma` int NOT NULL DEFAULT 0,
-// `created_at` datetime DEFAULT CURRENT_TIMESTAMP,
-// `updated_at` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
-// PRIMARY KEY (`id`),
-// KEY `item_lookup` (`item_id`, `status`),
-// KEY `user_comments` (`user_id`),
-// KEY `parent_child` (`parent_id`),
-// KEY `karma_order` (`karma`),
-// CONSTRAINT `{$this->base}re_responses_news` FOREIGN KEY (`item_id`)
-// REFERENCES `{$this->wpdb->posts}` (`ID`) ON DELETE CASCADE,
-// CONSTRAINT `{$this->base}re_responses_parent` FOREIGN KEY (`parent_id`)
-// REFERENCES `{$this->prefixed}responses` (`id`) ON DELETE SET NULL
-// )",
-// 'karma_response' => "(
-// `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
-// `item_id` bigint(20) NOT NULL,
-// `user_id` {$this->userIDType} NOT NULL,
-// `vote` enum('up','down') NOT NULL,
-// `date` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
-// PRIMARY KEY (`id`),
-// UNIQUE KEY `user_post` (`user_id`,`item_id`),
-// KEY `item_id` (`item_id`),
-// KEY `user_id` (`user_id`),
-// CONSTRAINT `{$this->base}_response_item_id` FOREIGN KEY (`item_id`)
-// REFERENCES `{$this->prefixed}responses` (`id`) ON DELETE CASCADE,
-// CONSTRAINT `{$this->base}_response_user_id` FOREIGN KEY (`user_id`)
-// REFERENCES `{$this->userTable}` (`ID`) ON DELETE CASCADE
-// )"
-// ];
-// }
-
- //MOVED TO KarmaManager.php
-// protected function karmaTables(array $types):array
-// {
-// $tables = [];
-// foreach ($types as $type => $config) {
-// $t = false;
-// if (array_key_exists($type, $this->JVB_CONTENT)) {
-// $t = 'posts';
-// } elseif (array_key_exists($type, $this->JVB_TAXONOMY)) {
-// $t = 'terms';
-// } elseif (array_key_exists($type, $this->JVB_USER)) {
-// $t = 'users';
-// }
-//
-// if (!$t) {
-// continue;
-// }
-//
-// switch ($t) {
-// case 'posts':
-// $referenceType = $this->postIDType;
-// $reference_table = $this->wpdb->posts;
-// $reference_column = 'ID';
-// break;
-// case 'terms':
-// $referenceType = $this->termIDType;
-// $reference_table = $this->wpdb->terms;
-// $reference_column = 'term_id';
-// break;
-// case 'users':
-// $referenceType = $this->userIDType;
-// $reference_table = $this->userTable;
-// $reference_column = 'ID';
-// break;
-// }
-//
-// $tables['karma_'.$type] = "(
-// `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
-// `item_id` {$referenceType} NOT NULL,
-// `user_id` {$this->userIDType} NOT NULL,
-// `vote` enum('up','down') NOT NULL,
-// `date` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
-// PRIMARY KEY (`id`),
-// UNIQUE KEY `user_post` (`user_id`,`item_id`),
-// KEY `item_id` (`item_id`),
-// KEY `user_id` (`user_id`),
-// CONSTRAINT `{$this->base}kt_{$type}_item_id` FOREIGN KEY (`item_id`)
-// REFERENCES `{$reference_table}` (`{$reference_column}`) ON DELETE CASCADE,
-// CONSTRAINT `{$this->base}kt_{$type}_user_id` FOREIGN KEY (`user_id`)
-// REFERENCES `{$this->userTable}` (`ID`) ON DELETE CASCADE
-// )";
-//
-// }
-//
-// return $tables;
-// }
-
- protected function calendarTables(array $types):array
- {
- $tables = [];
- foreach ($types as $type => $config) {
- $tables['calendar_'.$type] = "(
- `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
- `post_id` {$this->postIDType} NOT NULL,
- `event_type` {$this->termIDType} unsigned,
-
- -- Basic event details
- `title` varchar(255) NOT NULL,
- `shop_id` {$this->termIDType} NOT NULL
- `user_id` {$this->userIDType} NOT NULL,
-
- -- Location handling
- `location_type` enum('shop', 'custom', 'online') DEFAULT 'shop',
- `address` text,
- `lat` decimal(10,8),
- `lng` decimal(11,8),
-
- -- Date and time handling
- `start_date` date NOT NULL,
- `end_date` date NOT NULL,
- `time_start` time,
- `time_end` time,
- `timezone` varchar(50) DEFAULT 'America/Edmonton',
-
- -- Recurrence
- `is_recurring` tinyint(1) DEFAULT 0,
- `recurrence_type` enum('daily','weekly','monthly','custom') DEFAULT NULL,
- `recurrence_interval` int unsigned DEFAULT NULL, -- every X days/weeks/months
- `recurrence_days` set('monday','tuesday','wednesday','thursday','friday','saturday','sunday'),
- `recurrence_ends` date,
- `recurrence_count` int unsigned, -- number of occurrences
- `parent_event_id` bigint(20) unsigned, -- for recurring event instances
-
- -- Event specifics
- `is_free` tinyint(1) DEFAULT 0,
- `cost` decimal(10,2),
- `currency` varchar(3) DEFAULT 'CAD',
- `rsvp_required` tinyint(1) DEFAULT 0,
- `rsvp_limit` int unsigned,
- `rsvp_deadline` datetime,
- `ticket_url` varchar(255),
-
- -- Event settings
- `all_day` tinyint(1) DEFAULT 0,
- `drop_in_allowed` tinyint(1) DEFAULT 0,
- `booking_url` varchar(255),
- `external_url` varchar(255),
-
- -- Tracking
- `view_count` int unsigned DEFAULT 0,
- `interest_count` int unsigned DEFAULT 0,
- `going_count` int unsigned DEFAULT 0,
- `created_at` timestamp DEFAULT CURRENT_TIMESTAMP,
- `updated_at` timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
-
- PRIMARY KEY (`id`),
- KEY `post_lookup` (`post_id`),
- KEY `date_range` (`start_date`, `end_date`),
- KEY `shop_events` (`shop_id`, `start_date`),
- KEY `artist_events` (`user_id`, `start_date`),
- KEY `event_cost` (`is_free`, `cost`),
- KEY `recurring_events` (`parent_event_id`),
- KEY `location` (`lat`, `lng`),
- KEY `rsvp_events` (`rsvp_required`, `rsvp_deadline`),
-
- CONSTRAINT `{$this->base}cal_{$type}_type` FOREIGN KEY (`event_type`)
- REFERENCES `{$this->wpdb->terms}` (`term_id`) ON DELETE CASCADE,
- CONSTRAINT `{$this->base}cal_{$type}_post` FOREIGN KEY (`post_id`)
- REFERENCES `{$this->wpdb->posts}` (`ID`) ON DELETE CASCADE,
- CONSTRAINT `{$this->base}cal_{$type}_shop` FOREIGN KEY (`shop_id`)
- REFERENCES `{$this->wpdb->terms}` (`term_id`) ON DELETE SET NULL,
- CONSTRAINT `{$this->base}cal_{$type}_user` FOREIGN KEY (`user_id`)
- REFERENCES `{$this->userTable}` (`ID`) ON DELETE SET NULL
- )";
-
- $tables['calendar_'.$type.'_participants'] = "(
- `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
- `event_id` bigint(20) unsigned NOT NULL,
- `user_id` {$this->userIDType} NOT NULL,
- `status` enum('interested','going') NOT NULL,
- `created_at` timestamp DEFAULT CURRENT_TIMESTAMP,
- PRIMARY KEY (`id`),
- UNIQUE KEY `event_user` (`event_id`, `user_id`),
- CONSTRAINT `{$this->base}cal_{$type}_participant_event` FOREIGN KEY (`event_id`)
- REFERENCES `{$this->prefixed}calendar_{$type}` (`id`) ON DELETE CASCADE,
- CONSTRAINT `{$this->base}cal_{$type}_participant_user` FOREIGN KEY (`user_id`)
- REFERENCES `{$this->userTable}` (`ID`) ON DELETE CASCADE
- )";
-
- $tables['calendar_'.$type.'_recurrence_exceptions'] = "(
- `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
- `event_id` bigint(20) unsigned NOT NULL,
- `exception_date` date NOT NULL,
- `is_cancelled` tinyint(1) DEFAULT 0,
- `alternate_start_time` time,
- `alternate_end_time` time,
- `notes` text,
- PRIMARY KEY (`id`),
- UNIQUE KEY `event_date` (`event_id`, `exception_date`)
- )";
- }
-
- return $tables;
- }
-
- protected function umamiTracking():array
- {
-
- return [
- 'umami_events' => "(
- `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
- `date` date NOT NULL,
- `timestamp` datetime NOT NULL,
- `event` varchar(50) NOT NULL,
- `event_type` varchar(50) NOT NULL,
- `user_id` {$this->userIDType} NOT NULL,
- `content_id` bigint(20) DEFAULT NULL,
- `content_type` varchar(50) DEFAULT NULL,
- `source_id` bigint(20) DEFAULT NULL,
- `source_type` varchar(50) DEFAULT NULL,
- `owner_id` {$this->userIDType} NOT NULL,
- `owner_type` varchar(50) DEFAULT NULL,
- `referrer` varchar(100) DEFAULT NULL,
- `metadata` JSON DEFAULT NULL,
-
- PRIMARY KEY (`id`),
- KEY `date_idx` (`date`),
- KEY `event_idx` (`event`, `event_type`),
- KEY `content_idx` (`content_type`, `content_id`),
- KEY `user_idx` (`user_id`),
- KEY `owner_idx` (`owner_id`),
- CONSTRAINT `{$this->base}umami_user_id_link` FOREIGN KEY (`user_id`)
- REFERENCES `{$this->userTable}` (`ID`) ON DELETE CASCADE,
- CONSTRAINT `{$this->base}umami_owner_id_link` FOREIGN KEY (`owner_id`)
- REFERENCES `{$this->userTable}` (`ID`) ON DELETE CASCADE
- )",
- 'stats_performance' => "(
- `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
- `date` date NOT NULL,
- `user_id` {$this->userIDType} NOT NULL,
- `profile_view_count` bigint(20) unsigned DEFAULT 0,
- `feed_view_count` bigint(20) unsigned DEFAULT 0,
- `top_content` json DEFAULT null,
- `favourite_count` bigint(20) unsigned DEFAULT 0,
- `top_favourites` json DEFAULT null,
- `upvote_count` bigint(20) unsigned DEFAULT 0,
- `downvote_count` bigint(20) unsigned DEFAULT 0,
- `karma` bigint(20) unsigned DEFAULT 0,
- `voted_content` json DEFAULT null,
- PRIMARY KEY (`id`),
- KEY `user_date_idx` (`user_id`, `date`),
- CONSTRAINT `{$this->base}performance_user_id_link` FOREIGN KEY (`user_id`)
- REFERENCES `{$this->userTable}` (`ID`) ON DELETE CASCADE
- )"
- ];
- }
-
- /*protected function invitationTables(array $config): array
- {
- if (empty($config['roles']) && empty($config['terms'])) {
- return [];
- }
-
- $definitions = "(
- `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
- `name` varchar(255) NOT NULL,
- `email` varchar(255) NOT NULL,
- `invitation_token` varchar(255) NOT NULL,
- `invited_role` varchar(50) NOT NULL COMMENT 'Role being invited to',
- `status` enum('pending','accepted','rejected','expired','revoked') DEFAULT 'pending',
- `inviters` JSON NOT NULL COMMENT 'Array of {user_id, invited_at}',
- `new_user_id` {$this->userIDType} DEFAULT NULL,
- `expires_at` datetime NOT NULL,
- `accepted_at` datetime DEFAULT NULL,
- `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
- `updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
- ";
-
- // Add term columns for all invitable taxonomies
- foreach ($config['terms'] ?? [] as $taxonomy) {
- $definitions .= "`to_{$taxonomy}` {$this->termIDType} DEFAULT NULL,";
- }
-
- $definitions .= "PRIMARY KEY (`id`),
- UNIQUE KEY `unique_email_role` (`email`, `invited_role`),
- KEY `token_lookup` (`invitation_token`),
- KEY `status_expiry` (`status`, `expires_at`),
- KEY `role_status` (`invited_role`, `status`),
- KEY `email_status` (`email`, `status`),
- ";
-
- // Add foreign key constraints for terms
- $constraints = [];
- foreach ($config['terms'] ?? [] as $taxonomy) {
- $constraints[] = "CONSTRAINT `{$this->base}invitations_{$taxonomy}_fk`
- FOREIGN KEY (`to_{$taxonomy}`)
- REFERENCES `{$this->wpdb->terms}` (`term_id`)
- ON DELETE SET NULL";
- }
-
- // Add user foreign key
- $constraints[] = "CONSTRAINT `{$this->base}invitations_user_fk`
- FOREIGN KEY (`new_user_id`)
- REFERENCES `{$this->userTable}` (`ID`)
- ON DELETE SET NULL";
-
- $definitions .= implode(',', $constraints);
- $definitions .= ")";
-
- return ['invitations' => $definitions];
- }*/
-
- //MOVED TO MakeTrackChanges.php
-// protected function trackChangesTables($types)
-// {
-// $tables = [];
-// foreach ($types as $type => $config) {
-// $contents = $config['for_content'];
-// foreach ($contents as $content) {
-// $tables['history_'.$content.'_'.$type] = "(
-// `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
-// `user_id` {$this->userIDType} NOT NULL,
-// `content_id` bigint(20) NOT NULL,
-// `term_id` {$this->termIDType} NOT NULL,
-// `role` varchar(50) DEFAULT 'artist',
-// `is_primary` tinyint(1) DEFAULT 0,
-// `start_date` date DEFAULT NULL,
-// `end_date` date DEFAULT NULL,
-// `created_at` timestamp DEFAULT CURRENT_TIMESTAMP,
-// PRIMARY KEY (`id`),
-// UNIQUE KEY `content_term` (`content_id`, `term_id`),
-// KEY content_role (`term_id`, `role`),
-// CONSTRAINT `{$this->base}{$content}_{$type}_history_user` FOREIGN KEY (`user_id`)
-// REFERENCES `{$this->userTable}` (`ID`) ON DELETE CASCADE,
-// CONSTRAINT `{$this->base}{$content}_{$type}_history_term` FOREIGN KEY (`term_id`)
-// REFERENCES `{$this->wpdb->terms}` (`term_id`) ON DELETE CASCADE
-// )";
-// }
-// }
-//
-// return $tables;
-// }
-
-//MOVED TO VerifyEntryManager.php
-// protected function requestEntryTables($types)
-// {
-// $tables = [];
-// foreach ($types as $type => $config) {
-// $contents = $config['for_content'];
-// foreach ($contents as $content) {
-// $tables[$content.'_'.$type.'_requests'] = "(
-// `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
-// `user_id` {$this->userIDType} NOT NULL,
-// `content_id` bigint(20) NOT NULL,
-// `term_id` {$this->termIDType} NOT NULL,
-// `managers` json DEFAULT NULL,
-// `status` ENUM('requested', 'rejected', 'accepted') DEFAULT 'requested',
-// `dismissed` smallint(1) unsigned DEFAULT NULL,
-// `created_date` timestamp DEFAULT CURRENT_TIMESTAMP,
-// `updated_date` timestamp DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
-// `notes` text DEFAULT NULL,
-// PRIMARY KEY (`id`),
-// UNIQUE KEY `{$this->base}content_term` (`content_id`, `term_id`),
-// CONSTRAINT `{$this->base}{$content}_{$type}_request_user` FOREIGN KEY (`user_id`)
-// REFERENCES `{$this->userTable}` (`ID`) ON DELETE CASCADE,
-// CONSTRAINT `{$this->base}{$content}_{$type}_request_term` FOREIGN KEY (`term_id`)
-// REFERENCES `{$this->wpdb->terms}` (`term_id`) ON DELETE CASCADE
-// )";
-// }
-// }
-//
-// return $tables;
-// }
-
-// MOVED TO ReferralManager.php
- /**
- * Create referral tracking tables
- *
- * Call this from the main table creation method in CheckCustomTables.php:
- * $tables = array_merge($tables, $this->referralTables());
- */
-// protected function referralTables(): array
-// {
-// // Create tables in dependency order
-// // First: referrals (depends only on wp_users)
-// $mainTable['referrals'] = "(
-// `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
-// `referrer_id` {$this->userIDType} NOT NULL,
-// `referee_id` {$this->userIDType} NOT NULL,
-// `referee_name` varchar(255) NOT NULL,
-// `referee_email` varchar(255) NOT NULL,
-// `referee_phone` varchar(50) DEFAULT NULL,
-// `referral_code` varchar(50) NOT NULL,
-// `status` enum('pending', 'consulted', 'treated', 'cancelled') DEFAULT 'pending',
-// `referred_at` datetime NOT NULL,
-// `consulted_at` datetime DEFAULT NULL,
-// `treated_at` datetime DEFAULT NULL,
-// `treatment_count` int DEFAULT 0,
-// `notes` text DEFAULT NULL,
-// PRIMARY KEY (`id`),
-// UNIQUE KEY `referee_unique` (`referee_id`, `referral_code`),
-// KEY `referrer_idx` (`referrer_id`),
-// KEY `status_idx` (`status`),
-// KEY `code_idx` (`referral_code`),
-// KEY `date_idx` (`referred_at`),
-// KEY `consult_idx` (`consulted_at`),
-// CONSTRAINT `{$this->base}referral_referrer_fk` FOREIGN KEY (`referrer_id`)
-// REFERENCES `{$this->userTable}` (`ID`) ON DELETE CASCADE,
-// CONSTRAINT `{$this->base}referral_referee_fk` FOREIGN KEY (`referee_id`)
-// REFERENCES `{$this->userTable}` (`ID`) ON DELETE CASCADE
-//)";
-//
-// // Create the main referrals table first
-// $this->createTables($mainTable);
-//
-// // Now create dependent tables
-// $dependentTables = [];
-//
-// // Second: jane_clients (depends only on wp_users)
-// $dependentTables['jane_clients'] = "(
-// `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
-// `patient_guid` varchar(50) NOT NULL,
-// `user_id` {$this->userIDType} NOT NULL,
-// `first_name` varchar(100) NOT NULL,
-// `last_name` varchar(100) NOT NULL,
-// `email` varchar(255) NOT NULL,
-// `imported_at` datetime DEFAULT CURRENT_TIMESTAMP,
-// `updated_at` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
-// PRIMARY KEY (`id`),
-// UNIQUE KEY `patient_guid_unique` (`patient_guid`),
-// KEY `user_idx` (`user_id`),
-// KEY `email_idx` (`email`),
-// CONSTRAINT `{$this->base}jane_client_user_fk` FOREIGN KEY (`user_id`)
-// REFERENCES `{$this->userTable}` (`ID`) ON DELETE CASCADE
-//)";
-//
-// // Third: referral_treatments (depends on referrals AND wp_users)
-// $dependentTables['referral_treatments'] = "(
-// `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
-// `referral_id` bigint(20) unsigned NOT NULL,
-// `user_id` {$this->userIDType} NOT NULL,
-// `treatment_type` varchar(100) NOT NULL COMMENT 'Tier 1-6, Brows, etc',
-// `treatment_date` datetime NOT NULL,
-// `invoice_number` varchar(50) DEFAULT NULL,
-// `amount` decimal(10,2) DEFAULT NULL,
-// `status` enum('completed', 'no_show', 'cancelled') DEFAULT 'completed',
-// `imported_at` datetime DEFAULT CURRENT_TIMESTAMP,
-// PRIMARY KEY (`id`),
-// KEY `referral_idx` (`referral_id`),
-// KEY `user_idx` (`user_id`),
-// KEY `date_idx` (`treatment_date`),
-// KEY `type_idx` (`treatment_type`),
-// CONSTRAINT `{$this->base}treatment_referral_fk` FOREIGN KEY (`referral_id`)
-// REFERENCES `{$this->prefixed}referrals` (`id`) ON DELETE CASCADE,
-// CONSTRAINT `{$this->base}treatment_user_fk` FOREIGN KEY (`user_id`)
-// REFERENCES `{$this->userTable}` (`ID`) ON DELETE CASCADE
-//)";
-//
-// // Fourth: referral_rewards (depends on referrals AND wp_users)
-// $dependentTables['referral_rewards'] = "(
-// `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
-// `referral_id` bigint(20) unsigned NOT NULL,
-// `user_id` {$this->userIDType} NOT NULL,
-// `reward_type` enum('referrer', 'referee') NOT NULL,
-// `amount` decimal(10,2) NOT NULL,
-// `reward_calculation` varchar(20) DEFAULT NULL COMMENT 'percentage or fixed',
-// `status` enum('available', 'redeemed', 'expired', 'cancelled') DEFAULT 'available',
-// `created_at` datetime NOT NULL,
-// `redeemed_at` datetime DEFAULT NULL,
-// `expires_at` datetime DEFAULT NULL,
-// `notes` text DEFAULT NULL,
-// PRIMARY KEY (`id`),
-// KEY `referral_idx` (`referral_id`),
-// KEY `user_idx` (`user_id`),
-// KEY `status_idx` (`status`),
-// KEY `type_idx` (`reward_type`),
-// CONSTRAINT `{$this->base}reward_referral_fk` FOREIGN KEY (`referral_id`)
-// REFERENCES `{$this->prefixed}referrals` (`id`) ON DELETE CASCADE,
-// CONSTRAINT `{$this->base}reward_user_fk` FOREIGN KEY (`user_id`)
-// REFERENCES `{$this->userTable}` (`ID`) ON DELETE CASCADE
-//)";
-//
-// return $dependentTables;
-// }
-
- /*******************************************************************************************
- * These methods help create a content-type taxonomy, like the tattoo shops in edmonton.ink
- * To set up, ensure that some fields in the registered taxonomy include 'content_table' => true
- ******************************************************************************************/
-
- /**
- * Generate SQL column definition based on field type and config
- */
- private function generateColumnDefinition(string $fieldName, array $fieldConfig):string|array
- {
- $type = $fieldConfig['type'];
- $nullable = ($fieldConfig['required'] ?? false) ? 'NOT NULL' : 'DEFAULT NULL';
-
- return match ($type) {
- 'text', 'textarea' => $this->getTextColumnDefinition($fieldConfig, $nullable),
- 'email' => "varchar(255) {$nullable}",
- 'tel', 'phone' => "varchar(50) {$nullable}",
- 'url' => "varchar(2083) {$nullable}",
- 'number' => $this->getNumberColumnDefinition($fieldConfig, $nullable),
- 'date' => "date {$nullable}",
- 'time' => "time {$nullable}",
- 'datetime' => "datetime {$nullable}",
- 'true_false' => "boolean DEFAULT FALSE",
- 'image', 'file' => "bigint(20) {$nullable}",
- 'taxonomy' => $this->getTaxonomyColumnDefinition($fieldConfig, $nullable),
- 'user' => "bigint(20) {$nullable}",
- 'location' => $this->getLocationColumnDefinition($fieldName, $nullable),
- 'select', 'radio' => $this->getSelectColumnDefinition($fieldConfig, $nullable),
- 'set', 'checkbox', 'repeater', 'gallery' => "json {$nullable}",
- default => "text {$nullable}"
- };
- }
-
- private function getTextColumnDefinition(array $fieldConfig, string $nullable): string
- {
- $limit = $fieldConfig['limit'] ?? null;
-
- if ($limit) {
- if ($limit <= 255) {
- return "varchar({$limit}) {$nullable}";
- }
- return "text {$nullable}";
- }
-
- // Default text field length
- return ($fieldConfig['type'] === 'textarea') ? "text {$nullable}" : "varchar(255) {$nullable}";
- }
-
- private function getNumberColumnDefinition(array $fieldConfig, string $nullable): string
- {
- $min = $fieldConfig['min'] ?? null;
- $max = $fieldConfig['max'] ?? null;
-
- // Determine appropriate numeric type based on constraints
- if ($min !== null && $min >= 0) {
- if ($max !== null && $max <= 65535) {
- return "smallint unsigned {$nullable}";
- }
- return "int unsigned {$nullable}";
- }
-
- if ($max !== null && $max <= 32767 && ($min === null || $min >= -32768)) {
- return "smallint {$nullable}";
- }
-
- return "int {$nullable}";
- }
-
- //TODO: Add option to store name instead of id
- private function getTaxonomyColumnDefinition(array $fieldConfig, string $nullable): string
- {
- $limit = $fieldConfig['limit'] ?? null;
-
- if ($limit === 1) {
- return "{$this->termIDType} {$nullable}";
- }
-
- // Multiple selections stored as JSON
- return "json {$nullable}";
- }
-
- private function getLocationColumnDefinition(string $fieldName, string $nullable):array
- {
- return [
- "{$fieldName}_address" => "text {$nullable}",
- "{$fieldName}_lat" => "decimal(10,8) {$nullable}",
- "{$fieldName}_lng" => "decimal(11,8) {$nullable}",
- "{$fieldName}_street" => "varchar(255) {$nullable}",
- "{$fieldName}_city" => "varchar(255) {$nullable}",
- "{$fieldName}_province" => "varchar(255) {$nullable}",
- "{$fieldName}_postal_code" => "varchar(20) {$nullable}",
- "{$fieldName}_country" => "varchar(255) {$nullable}"
- ];
- }
-
- private function getSelectColumnDefinition(array $fieldConfig, string $nullable): string
- {
- $options = $fieldConfig['options'] ?? [];
- $maxLength = max(array_map('strlen', array_keys($options)));
-
- return "varchar(" . min(255, max(50, $maxLength + 10)) . ") {$nullable}";
- }
-
- /**
- * Generate foreign key constraints for taxonomy and user fields
- */
- private function generateConstraints(string $base, array $contentFields, string $tableName): array
- {
- $constraints = [];
-
- foreach ($contentFields as $fieldName => $fieldConfig) {
- $type = $fieldConfig['type'];
- $constraintName = BASE."{$base}_{$fieldName}";
-
- if ($type === 'taxonomy') {
- $constraints[] = "CONSTRAINT `{$constraintName}` FOREIGN KEY (`{$fieldName}`)
- REFERENCES `{$this->wpdb->terms}` (`term_id`) ON DELETE SET NULL";
- } elseif ($type === 'user') {
- $constraints[] = "CONSTRAINT `{$constraintName}` FOREIGN KEY (`{$fieldName}`)
- REFERENCES `{$this->userTable}` (`ID`) ON DELETE SET NULL";
- } elseif ($type === 'image' || $type === 'file') {
- $constraints[] = "CONSTRAINT `{$constraintName}` FOREIGN KEY (`{$fieldName}`)
- REFERENCES `{$this->wpdb->posts}` (`ID`) ON DELETE SET NULL";
- }
- }
-
- return $constraints;
- }
-
- private function checkIfContentType(string $type, array $config): void
- {
- if (!array_key_exists('is_content', $config) || !$config['is_content']) {
- return;
- }
-
- try {
- $contentFields = Registrar::getFieldsFor($type);
-
- if (!$contentFields || empty($contentFields)) {
- return;
- }
-
-
- } catch (Exception $e) {
- error_log("JVB: Error getting content fields for {$type}: " . $e->getMessage());
- return;
- }
-
- try {
- $tableName = 'content_' . $type;
- $columns = [];
- // Always include primary key
- $columns[] = "`term_id` {$this->termIDType} NOT NULL";
- $columns[] = "`name` varchar(255) NOT NULL";
- $columns[] = "`slug` varchar(255) NOT NULL";
-
- // Check if fields exist and are array
- if (!isset($config['content_table']['fields']) || !is_array($config['content_table']['fields'])) {
- error_log("JVB: Invalid or missing fields structure for {$type}");
- return;
- }
-
- $fields = [];
- // Generate columns for content table fields
- foreach ($config['content_table']['fields'] as $fieldName) {
- try {
- $fieldConfig = $contentFields[$fieldName]??false;
- if (!is_array($fieldConfig)) {
- error_log("JVB: Invalid field config for {$fieldName}");
- continue;
- }
- $fields[$fieldName] = $fieldConfig;
-
- $columnDef = $this->generateColumnDefinition($fieldName, $fieldConfig);
-
- if (is_array($columnDef)) {
- // Handle location fields that create multiple columns
- foreach ($columnDef as $colName => $colDef) {
- $columns[] = "`{$colName}` {$colDef}";
- }
- } else {
- $columns[] = "`{$fieldName}` {$columnDef}";
- }
-
- } catch (Exception $e) {
- error_log("JVB: Error generating column definition for {$fieldName}: " . $e->getMessage());
- continue;
- }
- }
-
- // Add timestamp
- $columns[] = "`updated_at` timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP";
-
- // Generate constraints and indexes
- $base = BASE . 'content';
-
- $constraints = $this->generateConstraints($base, $fields, $tableName);
-
- $indexes = [];
-
- // Add any defined keys
- if (array_key_exists('keys', $config['content_table'])) {
- error_log("JVB: Processing keys for {$type}");
- foreach ($config['content_table']['keys'] as $key => $types) {
- $types = "`" . implode("`,`", $types) . "`";
- $indexes[] = "KEY `{$base}{$key}` ({$types})";
- error_log("JVB: Added key: {$key}");
- }
- }
-
- // Always add name index
- $indexes[] = "KEY `{$base}name_idx` (`name`)";
-
- // Combine everything
- $allDefinitions = array_merge(
- $columns,
- ["PRIMARY KEY (`term_id`)"],
- $indexes,
- $constraints,
- ["CONSTRAINT `{$base}_{$type}_term` FOREIGN KEY (`term_id`) REFERENCES `{$this->wpdb->terms}` (`term_id`) ON DELETE CASCADE"]
- );
- $sql = "(\n " . implode(",\n ", $allDefinitions) . "\n)";
- error_log("JVB: Creating content table for type: {$type}");
- $this->createTables([$tableName => $sql]);
-
- error_log('JVB: Memory after creating table: ' . memory_get_usage(true) / 1024 / 1024 . ' MB');
-
- } catch (Exception $e) {
- error_log("JVB: Failed to create content table for {$type}: " . $e->getMessage());
- }
-
- error_log("JVB: Finished checkIfContentType for: {$type}");
- }
-
- /***********************************************
- * The following methods are used to create the user stat tables
- **********************************************/
- protected function statTables(array $types): array
- {
- $tables = [];
-
- foreach ($types as $userType => $config) {
- // Get the post types this user can create
- $canCreate = $config['can_create'] ?? [];
-
- // Build dynamic columns based on what they can create
- $columns = $this->buildUserStatsColumns($userType, $canCreate, $config);
-
- $tables["stats_{$userType}"] = $this->generateUserStatsTable($userType, $columns);
- }
-
- return $tables;
- }
-
- private function buildUserStatsColumns(string $userType, array $canCreate, array $config): array
- {
- error_log("JVB: Building stats columns for user type: {$userType}");
- error_log('JVB: Memory at start of buildUserStatsColumns: ' . memory_get_usage(true) / 1024 / 1024 . ' MB');
-
- // Base columns that every user stats table should have
- $columns = [
- "`user_id` {$this->userIDType} NOT NULL",
- "`display_name` VARCHAR(255) NULL",
- "`email` VARCHAR(255) NULL",
- "`city` VARCHAR(100) NULL",
- "`last_login` TIMESTAMP",
- "`joined` TIMESTAMP DEFAULT CURRENT_TIMESTAMP",
- ];
-
- error_log('JVB: Base columns added: ' . count($columns));
-
- // Email notification columns
- if (array_key_exists('email_notifications', $this->JVB_SITE) && $this->JVB_SITE['email_notifications']) {
- $columns[] = "`general_updates` BOOLEAN DEFAULT FALSE";
- $columns[] = "`notification_preference` ENUM('never', 'daily', 'weekly', 'monthly') DEFAULT 'never'";
- error_log('JVB: Email notification columns added');
- }
-
- // Favourites column
- if (array_key_exists('favourites', $this->JVB_SITE) && $this->JVB_SITE['favourites']) {
- $columns[] = "`favourites_count` INT DEFAULT 0";
- error_log('JVB: Favourites column added');
- }
-
- if (isset($config['profile_type'])) {
- $profileType = $config['profile_type'];
- error_log("JVB: Processing profile type: {$profileType}");
-
-
- if (isset($this->JVB_CONTENT[$profileType]) &&
- isset($this->JVB_CONTENT[$profileType]['fields']) &&
- is_array($this->JVB_CONTENT[$profileType]['fields'])) {
-
- error_log('JVB: Profile fields found, processing...');
-
- try {
- // SAFE iteration through profile fields
- foreach ($this->JVB_CONTENT[$profileType]['fields'] as $fieldName => $fieldConfig) {
- // SAFE check for use_in_stats flag
- if (isset($fieldConfig['use_in_stats']) && $fieldConfig['use_in_stats'] === true) {
- error_log("JVB: Processing stats field: {$fieldName}");
-
- try {
- $columnDef = $this->generateColumnDefinition($fieldName, $fieldConfig);
- if (is_array($columnDef)) {
- // Handle location fields that create multiple columns
- foreach ($columnDef as $colName => $colDef) {
- $columns[] = "`{$colName}` {$colDef}";
- }
- } else {
- $columns[] = "`{$fieldName}` {$columnDef}";
- }
- error_log("JVB: Added stats column for field: {$fieldName}");
- } catch (Exception $e) {
- error_log("JVB: Error processing stats field {$fieldName}: " . $e->getMessage());
- continue;
- }
- }
- }
- } catch (Exception $e) {
- error_log("JVB: Error processing profile fields: " . $e->getMessage());
- }
- } else {
- error_log("JVB: No profile fields found for {$profileType}");
- }
- }
-
- error_log('JVB: Processing canCreate: ' . json_encode($canCreate));
-
- // SAFE processing of content types they can create
- if (!empty($canCreate) && is_array($canCreate)) {
- foreach ($canCreate as $contentType) {
- try {
- if (is_array($contentType)) {
- // Handle nested array structure like: ['tattoo-artist' => ['tattoo', 'artwork']]
- foreach ($contentType as $roleType => $contentTypes) {
- if (is_array($contentTypes)) {
- foreach ($contentTypes as $t) {
- if (is_string($t) && array_key_exists($t, $this->JVB_CONTENT)) {
- $columns[] = "`{$t}_count` INT DEFAULT 0";
- error_log("JVB: Added nested content type column: {$t}");
- }
- }
- }
- }
- } else {
- // Handle simple content type
- if (is_string($contentType) && array_key_exists($contentType, $this->JVB_CONTENT)) {
- $columns[] = "`{$contentType}_count` INT DEFAULT 0";
- error_log("JVB: Added simple content type column: {$contentType}");
- }
- }
- } catch (Exception $e) {
- error_log("JVB: Error processing content type in stats: " . $e->getMessage());
- continue;
- }
- }
- }
-
- $uniqueColumns = array_unique($columns);
- error_log('JVB: Final stats column count: ' . count($uniqueColumns));
- error_log('JVB: Memory at end of buildUserStatsColumns: ' . memory_get_usage(true) / 1024 / 1024 . ' MB');
-
- return $uniqueColumns;
- }
-
-
- /**
- * Generate the complete SQL for a user stats table
- */
- private function generateUserStatsTable(string $userType, array $columns): string
- {
- // Add indexes and constraints
- $indexes = [
- "PRIMARY KEY (`user_id`)",
- "KEY `display_name_idx` (`display_name`)",
- "KEY `email_idx` (`email`)",
- "KEY `last_login_idx` (`last_login`)",
- "KEY `notification_pref_idx` (`notification_preference`)"
- ];
-
- $constraints = [
- "CONSTRAINT `{$this->base}_{$userType}_stats_user` FOREIGN KEY (`user_id`)
- REFERENCES `{$this->userTable}` (`ID`) ON DELETE CASCADE"
- ];
-
- $allDefinitions = array_merge($columns, $indexes, $constraints);
-
- return "(\n " . implode(",\n ", $allDefinitions) . "\n)";
- }
-
-}
diff --git a/inc/registry/ContentRegistry.php b/inc/registry/ContentRegistry.php
deleted file mode 100644
index 3d02334..0000000
--- a/inc/registry/ContentRegistry.php
+++ /dev/null
@@ -1,163 +0,0 @@
-<?php
-namespace JVBase\registry;
-
-if (!defined('ABSPATH')) {
- exit;
-}
-
-use JVBase\managers\RoleManager;
-use JVBase\meta\Registry;
-use JVBase\rest\RegisterRoutes;
-
-class ContentRegistry
-{
- private FieldRegistry $fieldRegistry;
- private bool $initialized = false;
-
-
- public function __construct()
- {
- $this->fieldRegistry = FieldRegistry::getInstance();
-
- // Hook registration at different priorities for proper sequencing
- add_action('init', [$this, 'registerAll'], 5);
-
-// add_action('init', [$this, 'registerMetaFields'], 10);
-// add_action('rest_api_init', [$this, 'registerRestRoutes'], 10);
- }
-
- /**
- * Handle plugin activation
- */
- public function onActivation(): void
- {
- // Initialize field registry early
- $this->fieldRegistry->initializeFields();
-
- // Register post types and taxonomies immediately for activation
- $this->registerPostTypes();
- $this->registerTaxonomies();
- $this->registerUserRoles();
-
- // Flush rewrite rules after registration
- flush_rewrite_rules();
- }
-
- /**
- * Register all content types
- */
- public function registerAll(): void
- {
-// if ($this->initialized) {
-// return;
-// }
-
- $this->registerPostTypes();
- $this->registerTaxonomies();
-
-// $this->initialized = true;
- }
-
- /**
- * Register meta fields for all types
- */
- public function registerMetaFields(): void
- {
- if ($this->initialized) {
- return;
- }
- // Register post type fields
- foreach (JVB_CONTENT as $slug => $config) {
-
- if (!empty($config['fields'])) {
- $fields = $this->fieldRegistry->getFields($slug, 'post');
- $this->registerFieldsForType(BASE . $slug, $fields, 'post');
- }
- }
-
- // Register taxonomy fields
- foreach (JVB_TAXONOMY as $slug => $config) {
- if (!empty($config['fields'])) {
- $fields = $this->fieldRegistry->getFields($slug, 'term');
- $this->registerFieldsForType(BASE . $slug, $fields, 'term');
- }
- }
-
- // Register user fields
- foreach (JVB_USER as $slug => $config) {
- if (!empty($config['settings']) || !empty($config['admin'])) {
- $fields = $this->fieldRegistry->getFields($slug, 'user');
- $this->registerFieldsForType(BASE . $slug, $fields, 'user');
- }
- }
- $this->intialized = true;
- }
-
- /**
- * Register fields for a specific type
- */
- private function registerFieldsForType(string $type, array $fields, string $object_type): void
- {
- if (empty($fields)) {
- return;
- }
-
- $meta_registry = new Registry($fields, $type, $object_type);
- $meta_registry->registerMetaFields();
- }
-
- /**
- * Register post types
- */
- private function registerPostTypes(): void
- {
- foreach (JVB_CONTENT as $slug => $config) {
- $registrar = new PostTypeRegistrar($slug, $config);
- $registrar->register();
-
- // Set up calendar functionality if needed
- if ($config['is_calendar'] ?? false) {
- new MakeCalendarType($slug, $config['rewrite']['slug']??$slug);
- }
- }
- }
-
- /**
- * Register taxonomies
- */
- private function registerTaxonomies(): void
- {
- foreach (JVB_TAXONOMY as $slug => $config) {
- $registrar = new TaxonomyRegistrar($slug, $config);
- $registrar->register();
- }
- }
-
- /**
- * Register user roles
- */
- public function registerUserRoles(): void
- {
- $registrar = new RoleManager();
- error_log('Registering User Roles');
- $registrar->activate();
- }
-
- /**
- * Register options
- */
- private function registerOptions(): void
- {
- if (empty(JVB_OPTIONS)) {
- return;
- }
-
- $fields = $this->fieldRegistry->getFields('options', 'options');
-
- if (!empty($fields)) {
- new OptionsRegistry($fields);
- }
- }
-}
-
-new ContentRegistry();
diff --git a/inc/registry/FieldRegistry.php b/inc/registry/FieldRegistry.php
deleted file mode 100644
index 63f8eaf..0000000
--- a/inc/registry/FieldRegistry.php
+++ /dev/null
@@ -1,244 +0,0 @@
-<?php
-namespace JVBase\registry;
-
-if (!defined('ABSPATH')) {
- exit;
-}
-
-use JVBase\registry\providers\CalendarFieldProvider;
-use JVBase\registry\providers\CommonFieldProvider;
-use JVBase\registry\providers\FieldProviderInterface;
-use JVBase\base\Site;
-use JVBase\registry\providers\IntegrationFieldProvider;
-
-class FieldRegistry
-{
- private static ?self $instance = null;
- private array $fieldCache = [];
- private array $fieldProviders = [];
-
- /**
- * Get singleton instance
- */
- public static function getInstance(): self
- {
- if (self::$instance === null) {
- self::$instance = new self();
- }
- return self::$instance;
- }
-
- private function __construct()
- {
- $this->registerFieldProviders();
- }
-
- /**
- * Register all field providers
- */
- private function registerFieldProviders(): void
- {
- // Core field providers
- $this->addFieldProvider('common', new CommonFieldProvider());
- $this->addFieldProvider('calendar', new CalendarFieldProvider());
- $this->addFieldProvider('integration', new IntegrationFieldProvider());
-
- // Allow extensions to add providers
- do_action(BASE . 'register_field_providers', $this);
- }
-
- /**
- * Add a field provider
- */
- public function addFieldProvider(string $key, FieldProviderInterface $provider): void
- {
- $this->fieldProviders[$key] = $provider;
- }
-
- /**
- * Get fields for a specific type
- */
- public function getFields(string $type, ?string $object_type = null): array
- {
- $type = $this->normalizeType($type);
-
- if (!$this->isValidType($type)) {
- return [];
- }
-
- if (!$object_type) {
- $object_type = $this->getObjectType($type);
- }
-
- $cacheKey = "{$type}_{$object_type}";
- // Check cache first
- if (isset($this->fieldCache[$cacheKey]) && !JVB_TESTING) {
- return $this->fieldCache[$cacheKey];
- }
- $key = BASE.$cacheKey.'_fields';
- $fields = get_option($key, false);
- if ($fields) {
- return $fields;
- }
-
- // Build fields
- $fields = $this->buildFields($type, $object_type);
-
- // Cache the result
- $this->fieldCache[$cacheKey] = $fields;
- update_option($key, $fields);
-
- return $fields;
- }
-
- /**
- * Build fields for a type
- */
- private function buildFields(string $type, string $object_type): array
- {
- $config = $this->getConfig($type, $object_type);
-
- if (!$config) {
- return [];
- }
-
- $fields = $config['fields'] ?? [];
-
- // Process common fields
- if (array_key_exists('common', $fields) && !empty($fields['common'])) {
- $fields = $this->processCommonFields($fields, $fields['common']);
- unset($fields['common']);
- }
-
-
- // Apply integration fields
- $fields = $this->applyIntegrationFields($fields, $config, $type);
-
- // Apply filters for extensibility
- $fields = apply_filters(BASE . 'fields', $fields, $type, $object_type);
- return apply_filters(BASE . "{$type}_fields", $fields, $object_type);
- }
-
- /**
- * Process common fields
- */
- private function processCommonFields(array $fields, array $common): array
- {
- if (!isset($this->fieldProviders['common'])) {
- return $fields;
- }
-
- $provider = $this->fieldProviders['common'];
-
- foreach ($common as $field => $config) {
- if (!is_numeric($field)) {
- $commonFields = $provider->getFields($field, $config);
- } else {
- $commonFields = $provider->getFields($config);
- }
- $fields = array_merge($fields, $commonFields);
- }
-
- return $fields;
- }
-
- /**
- * Apply integration fields based on configuration
- */
- private function applyIntegrationFields(array $fields, array $config, string $type): array
- {
- if (array_key_exists('integrations', $config)) {
- if (isset($this->fieldProviders['integration'])) {
- $fields = array_merge($fields, $this->fieldProviders['integration']->getFields($config));
- }
- }
-
- // Calendar fields
- if (jvbCheck('is_calendar', $config)) {
- if (isset($this->fieldProviders['calendar'])) {
- $fields = array_merge($fields, $this->fieldProviders['calendar']->getFields());
- }
- }
-
- if (Site::hasIntegration('helcim') && jvbCheck('use_helcim', $config)) {
- $helcim = JVB()->connect('helcim');
- if ($helcim) {
- $contentType = $config['integrations']['helcim']['content_type'] ?? $helcim->getDefaultContentType();
- $fields = array_merge($fields, $helcim->getHelcimMeta($contentType));
- }
- }
-
- return $fields;
- }
-
- /**
- * Get configuration for a type
- */
- private function getConfig(string $type, string $object_type): ?array
- {
- switch ($object_type) {
- case 'post':
- return JVB_CONTENT[$type] ?? null;
- case 'term':
- return JVB_TAXONOMY[$type] ?? null;
- case 'user':
- return JVB_USER[$type] ?? null;
- case 'options':
- return JVB_OPTIONS;
- default:
- return null;
- }
- }
-
- /**
- * Initialize fields on plugin load
- */
- public function initializeFields(): void
- {
- // Pre-populate cache for all registered types
- foreach (JVB_CONTENT as $slug => $config) {
- $this->getFields($slug, 'post');
- }
-
- foreach (JVB_TAXONOMY as $slug => $config) {
- $this->getFields($slug, 'term');
- }
-
- foreach (JVB_USER as $slug => $config) {
- $this->getFields($slug, 'user');
- }
-
- if (!empty(JVB_OPTIONS)) {
- $this->getFields('options', 'options');
- }
- }
-
- private function normalizeType(string $type): string
- {
- return str_replace('-', '_', jvbNoBase($type));
- }
-
- private function isValidType(string $type): bool
- {
- return array_key_exists($type, JVB_CONTENT) ||
- array_key_exists($type, JVB_TAXONOMY) ||
- array_key_exists($type, JVB_USER) ||
- $type === 'options';
- }
-
- private function getObjectType(string $type): string
- {
- if (array_key_exists($type, JVB_CONTENT)) {
- return 'post';
- } elseif (array_key_exists($type, JVB_TAXONOMY)) {
- return 'term';
- } elseif (array_key_exists($type, JVB_USER)) {
- return 'user';
- } elseif ($type === 'options') {
- return 'options';
- }
-
- return '';
- }
-}
-
diff --git a/inc/registry/MakeCalendarType.php b/inc/registry/MakeCalendarType.php
deleted file mode 100644
index 5025e17..0000000
--- a/inc/registry/MakeCalendarType.php
+++ /dev/null
@@ -1,323 +0,0 @@
-<?php
-namespace JVBase\registry;
-
-if (!defined('ABSPATH')) {
- exit;
-}
-/**
- * Handles calendar functionality
- */
-class MakeCalendarType
-{
- protected string $postType;
- protected string $slug;
-
- public function __construct($postType, $slug)
- {
- $this->postType = jvbCheckBase($postType);
- $this->slug = $slug;
- add_filter('post_type_link', [$this, 'handleCalendarLinks'], 15, 2);
- add_filter('post_type_archive_link', [$this, 'handlePostTypeArchiveLinks'], 15, 2);
- add_filter('query_vars', [$this, 'addCalendarQueryVars']);
- add_action('init', [$this, 'addCalendarRewrites']);
- }
-
-
- public function handleCalendarLinks(string $url, \WP_Post $post): string
- {
- if ($post->post_type === $this->postType) {
- $meta = get_post_meta($post->ID);
-
- //if the year, month, date isn't set, attempt to recreate it from date start
- if (!array_key_exists(BASE . 'year', $meta) && array_key_exists(BASE . 'date_start', $meta)) {
- $date = explode('-', $meta[BASE . 'date_start'][0]);
- $meta[BASE . 'year'][0] = $date[0];
- $meta[BASE . 'month'][0] = $date[1];
- $meta[BASE . 'day'][0] = $date[2];
- update_post_meta($post->ID, BASE . 'year', $date[0]);
- update_post_meta($post->ID, BASE . 'month', $date[1]);
- update_post_meta($post->ID, BASE . 'day', $date[2]);
- }
- if (array_key_exists(BASE.'year', $meta)) {
- $url = str_replace("%eyear%", $meta[BASE.'year'][0], $url);
- }
- if (array_key_exists(BASE.'month', $meta)) {
- $url = str_replace("%emonth%", $meta[BASE.'month'][0], $url);
- }
- if (array_key_exists(BASE.'day', $meta)) {
- $url = str_replace("%eday%", $meta[BASE.'day'][0], $url);
- }
-
- if (str_contains($url, 'eday')) {
- $url = str_replace('/%eday%', '', $url);
- }
- if (str_contains($url, 'emonth')) {
- $url = str_replace('/%emonth%', '', $url);
- }
- if (str_contains($url, 'eyear')) {
- $url = str_replace('/%eyear%', '', $url);
- }
- }
- return $url;
- }
-
- public function handlePostTypeArchiveLinks(string $url, string $post_type):string
- {
- if ($post_type === $this->postType) {
- $url = get_home_url(null, '/' . $this->slug . '/');
- }
- return $url;
- }
-
- public function addCalendarQueryVars(array $vars): array
- {
- $vars[] = 'eyear';
- $vars[] = 'emonth';
- $vars[] = 'eday';
- return $vars;
- }
-
- public function addCalendarRewrites(): void
- {
- add_rewrite_tag('%eyear%', '([^&]+)');
- add_rewrite_tag('%emonth%', '([^&]+)');
- add_rewrite_tag('%eday%', '([^&]+)');
-
- }
-
- public static function getCalendarFields():array
- {
- return [
- 'location' => [
- 'type' => 'location',
- 'label' => 'Event Location',
- 'bulkEdit'=> true,
- ],
- 'location_notes' => [
- 'type' => 'textarea',
- 'quill' => true,
- 'label' => 'Location notes',
- 'bulkEdit'=> true,
- ],
- 'date_start' => [
- 'type' => 'date',
- 'label' => __('Date', 'jvb'),
- 'bulkEdit'=> true,
- ],
- 'time_start' => [
- 'type' => 'time',
- 'label' => __('Time Start', 'jvb'),
- 'bulkEdit'=> true,
- ],
- 'time_end' => [
- 'type' => 'time',
- 'label' => __('Time End', 'jvb'),
- 'bulkEdit'=> true,
- ],
- 'make_multiple' => [
- 'type' => 'true_false',
- 'label' => 'Make Multi-Day Event',
- 'default' => false,
- ],
- 'date_end' => [
- 'type' => 'date',
- 'label' => __('Date End', 'jvb'),
- 'condition' => [
- 'field' => 'make_multiple',
- 'operator' => '==',
- 'value' => 1
- ]
- ],
- 'past' => [
- 'type' => 'true_false',
- 'label' => __('Past Event', 'jvb'),
- 'hidden' => true,
- ],
- 'year' => [
- 'type' => 'number',
- 'label' => __('Year', 'jvb'),
- 'hidden' => true,
- ],
- 'month' => [
- 'type' => 'number',
- 'label' => __('Month', 'jvb'),
- 'hidden' => true,
- ],
- 'day' => [
- 'type' => 'number',
- 'label' => __('Day', 'jvb'),
- 'hidden' => true,
- ],
- 'schedule' => [
- 'type' => 'repeater',
- 'label' => 'Daily Schedule',
- 'description' => 'Set specific times for multi-day events',
- 'condition' => [
- 'field' => 'make_multiple',
- 'operator' => '==',
- 'value' => 1,
- ],
- 'fields' => [
- 'date' => [
- 'type' => 'date',
- 'label' => 'Date'
- ],
- 'time_start' => [
- 'type' => 'time',
- 'label' => 'Start Time'
- ],
- 'time_end' => [
- 'type' => 'time',
- 'label' => 'End Time'
- ],
- 'notes' => [
- 'type' => 'textarea',
- 'label' => 'Notes for this day'
- ]
- ]
- ],
- 'max_participants' => [
- 'type' => 'number',
- 'label' => __('Maximum Participants', 'jvb'),
- 'bulkEdit'=> true,
- ],
- 'is_free' => [
- 'type' => 'true_false',
- 'label' => 'Free Event?',
- 'default' => 1,
- 'bulkEdit'=> true,
- ],
- 'cost' => [
- 'type' => 'number',
- 'label' => 'Cost to Attend',
- 'description' => 'Leave blank if free',
- 'condition' => [
- 'field' => 'is_free',
- 'operator' => '!=',
- 'value' => 1
- ],
- 'bulkEdit'=> true,
- ],
- 'ticket_url' => [
- 'type' => 'url',
- 'label' => 'Link to Purchase Ticket',
- 'condition' => [
- 'field' => 'is_free',
- 'operator' => '!=',
- 'value' => 1
- ]
- ],
- 'external_url' => [
- 'type' => 'url',
- 'label' => 'Link to More Info'
- ],
- 'drop_in_allowed' => [
- 'type' => 'true_false',
- 'label' => 'Drop-ins Welcome?',
- 'default' => true,
- 'bulkEdit'=> true,
- ],
- 'recurrence' => [
- 'type' => 'group',
- 'label' => 'Event Recurrence',
- 'condition' => [
- 'field' => 'status',
- 'operator' => '==',
- 'value' => 'repeat',
- ],
- 'fields' => [
- 'recurrence_type' => [
- 'type' => 'select',
- 'label' => 'Repeats',
- 'options' => [
- 'daily' => 'Daily',
- 'weekly' => 'Weekly',
- 'monthly' => 'Monthly',
- 'custom' => 'Custom'
- ]
- ],
- 'recurrence_interval' => [
- 'type' => 'number',
- 'label' => 'Every',
- 'description' => 'Repeat every X days/weeks/months',
- 'default' => 1,
- ],
- 'recurrence_days' => [
- 'type' => 'set',
- 'label' => 'On These Days',
- 'options' => [
- 'monday' => 'Monday',
- 'tuesday' => 'Tuesday',
- 'wednesday' => 'Wednesday',
- 'thursday' => 'Thursday',
- 'friday' => 'Friday',
- 'saturday' => 'Saturday',
- 'sunday' => 'Sunday'
- ],
- 'condition' => [
- 'field' => 'recurrence_type',
- 'operator' => '==',
- 'value' => 'weekly'
- ]
- ],
- 'recurrence_ends' => [
- 'type' => 'group',
- 'label' => 'Recurrence Ends',
- 'fields' => [
- 'type' => [
- 'type' => 'select',
- 'label' => 'Recurrence Ends',
- 'options' => [
- 'never' => 'Never',
- 'after' => 'After X occurrences',
- 'on' => 'On date'
- ]
- ],
- 'count' => [
- 'type' => 'number',
- 'label' => 'Number of occurrences',
- 'condition' => [
- 'field' => 'type',
- 'operator' => '==',
- 'value' => 'after'
- ]
- ],
- 'date' => [
- 'type' => 'date',
- 'label' => 'End date',
- 'condition' => [
- 'field' => 'type',
- 'operator' => '==',
- 'value' => 'on'
- ]
- ]
- ],
- ],
-
- 'rsvp_required' => [
- 'type' => 'true_false',
- 'label' => 'RSVP Required?'
- ],
- 'rsvp_limit' => [
- 'type' => 'number',
- 'label' => 'RSVP Limit',
- 'condition' => [
- 'field' => 'rsvp_required',
- 'operator' => '==',
- 'value' => 1
- ]
- ],
- 'rsvp_deadline' => [
- 'type' => 'datetime',
- 'label' => 'RSVP Deadline',
- 'condition' => [
- 'field' => 'rsvp_required',
- 'operator' => '==',
- 'value' => 1
- ]
- ],
- ]
- ]
- ];
- }
-}
diff --git a/inc/registry/OptionsRegistry.php b/inc/registry/OptionsRegistry.php
deleted file mode 100644
index 391b842..0000000
--- a/inc/registry/OptionsRegistry.php
+++ /dev/null
@@ -1,105 +0,0 @@
-<?php
-namespace JVBase\registry;
-
-if (!defined('ABSPATH')) {
- exit;
-}
-
-use JVBase\meta\Form;
-use JVBase\meta\Meta;
-
-class OptionsRegistry
-{
- private array $fields;
-
- public function __construct(array $fields)
- {
- $this->fields = $fields;
- add_action('init', [$this, 'registerOptions'], 10);
- add_action('admin_init', [$this, 'registerSettings']);
- }
-
- /**
- * Register options
- */
- public function registerOptions(): void
- {
- $meta = Meta::forOptions('options');
- foreach ($this->fields as $field_name => $field) {
- if (in_array($field_name, ['common', 'fields'])) {
- continue;
- }
-
- // Register the option
- $option_name = BASE . $field_name;
-
-
- // Add default value if not exists
- if (get_option($option_name) === false) {
- add_option($option_name, $field['default'] ??'');
- }
-
-//
-// // Register for REST API
-// register_setting('jvb_options', $option_name, [
-// 'type' => $this->getFieldType($field['type']),
-// 'description' => $field['description'] ?? '',
-// 'sanitize_callback' => $meta->getSanitizeCallback($field),
-// 'show_in_rest' => $field['show_in_rest'] ?? true,
-// 'default' => $field['default'] ?? '',
-// ]);
- }
- }
-
- /**
- * Register settings for admin
- */
- public function registerSettings(): void
- {
- // Register settings page
- add_settings_section(
- 'jvb_options_section',
- __('Site Options', 'jvb'),
- null,
- 'jvb_options'
- );
-
- foreach ($this->fields as $field_name => $field) {
- if (in_array($field_name, ['common', 'fields'])) {
- continue;
- }
-
- add_settings_field(
- BASE . $field_name,
- $field['label'] ?? $field_name,
- [$this, 'renderField'],
- 'jvb_options',
- 'jvb_options_section',
- ['field' => $field, 'name' => $field_name]
- );
- }
- }
-
- /**
- * Render field in admin
- */
- public function renderField(array $args): void
- {
- $field = $args['field'];
- $name = $args['name'];
- $value = get_option(BASE . $name);
-
- echo Form::render($name, $value, $field);
- }
-
- private function getFieldType(string $type): string
- {
- return match ($type) {
- 'text', 'textarea', 'url', 'email' => 'string',
- 'number' => 'number',
- 'true_false', 'checkbox' => 'boolean',
- 'location', 'group', 'repeater' => 'array',
- default => 'string'
- };
- }
-}
diff --git a/inc/registry/PostTypeRegistrar.php b/inc/registry/PostTypeRegistrar.php
deleted file mode 100644
index d248ca4..0000000
--- a/inc/registry/PostTypeRegistrar.php
+++ /dev/null
@@ -1,251 +0,0 @@
-<?php
-namespace JVBase\registry;
-
-use JVBase\forms\TaxonomySelector;
-use JVBase\managers\CRUD;
-use JVBase\base\Site;
-
-use JVBase\meta\Registry;
-if (!defined('ABSPATH')) {
- exit;
-}
-class PostTypeRegistrar
-{
- private string $slug;
- private array $config;
- protected array $fields;
- private string $post_type;
- private FieldRegistry $fieldRegistry;
-
- public function __construct(string $slug, array $config)
- {
- $this->slug = $slug;
- $this->config = $config;
- $this->post_type = BASE . $slug;
- $this->fieldRegistry = FieldRegistry::getInstance();
- $this->fields = $this->fieldRegistry->getFields($slug, 'post');
-
- $this->registerHooks();
- }
-
- public function register(): void
- {
- $singular = $this->config['singular'] ?? ucfirst($this->slug);
- $plural = $this->config['plural'] ?? $singular . 's';
- $loweredPlural = strtolower($plural);
- $capsMap = $this->config['capability_type']??[];
- if (empty($capsMap)){
- $capsMap = [
- $this->slug,
- str_replace('-', '_',sanitize_title($loweredPlural))
- ];
- }
- $args = [
- 'labels' => $this->buildLabels($singular, $plural),
- 'public' => $this->config['public'] ?? true,
- 'publicly_queryable' => $this->config['publicly_queryable'] ?? $this->config['public'] ?? true,
- 'show_ui' => $this->config['show_ui'] ?? true,
-// 'show_in_menu' => false,
- 'show_in_menu' => $this->config['show_in_menu'] ?? true,
- 'query_var' => $this->config['query_var'] ?? true,
- 'rewrite' => $this->config['rewrite'] ?? ['slug' => $this->slug, 'with_front' => false],
- 'capability_type' => $capsMap,
- 'capabilities' => [
- 'edit_post' => "edit_{$this->slug}",
- 'read_post' => "read_{$this->slug}",
- 'delete_post' => "delete_{$this->slug}",
- 'edit_posts' => "edit_{$capsMap[1]}",
- 'edit_others_posts' => "edit_others_{$capsMap[1]}",
- 'publish_posts' => "publish_{$capsMap[1]}",
- 'read_private_posts' => "read_private_{$capsMap[1]}",
- 'create_posts' => "edit_{$capsMap[1]}",
- ],
- 'has_archive' => $this->config['has_archive'] ?? true,
- 'hierarchical' => $this->config['hierarchical'] ?? false,
- 'menu_position' => $this->config['menu_position'] ?? null,
- 'supports' => $this->config['supports'] ?? ['title', 'author', 'thumbnail', 'editor', 'revisions', 'custom-fields', 'excerpt', 'content'],
- 'show_in_rest' => $this->config['show_in_rest'] ?? true,
- ];
-
- if ($this->config['is_calendar']??false) {
- $args['rewrite']['slug'] = $args['rewrite']['slug']??$this->slug.'/%eyear%/%emonth%/%eday%';
- }
- if ($this->config['rewrite_taxonomy']??false && array_key_exists($this->config['rewrite_taxonomy'], JVB_TAXONOMY)) {
- $args['rewrite']['slug'] = "{$this->slug}/%{$this->config['rewrite_taxonomy']}%";
- }
- if ($this->config['icon']??false) {
- $args['menu_icon'] = jvbCSSIcon($this->config['icon']);
- }
- if ($this->config['is_timeline']??false) {
-
- }
- register_post_type($this->post_type, $args);
-
- if (!empty($this->fields)) {
- $meta_registry = new Registry($this->fields, $this->slug, 'post');
- $meta_registry->registerMetaFields();
- }
- }
-
- private function buildLabels(string $singular, string $plural): array
- {
- return [
- 'name' => $plural,
- 'singular_name' => $singular,
- 'menu_name' => $plural,
- 'name_admin_bar' => $singular,
- 'add_new' => "Add New",
- 'add_new_item' => "Add New {$singular}",
- 'new_item' => "New {$singular}",
- 'edit_item' => "Edit {$singular}",
- 'view_item' => "View {$singular}",
- 'all_items' => "All {$plural}",
- 'search_items' => "Search {$plural}",
- 'parent_item_colon' => "Parent {$plural}:",
- 'not_found' => "No {$plural} found.",
- 'not_found_in_trash' => "No {$plural} found in Trash.",
- ];
- }
-
- public function registerHooks() {
- if ($this->config['hide_single'] ?? false) {
- add_filter('is_post_type_viewable', [$this, 'hideFromPublic']);
- if (jvbCheck('redirectToAuthor',$this->config)) {
- add_filter('post_type_link', [$this, 'redirectSingleToAuthor'], 15, 2);
- } else {
- add_filter('post_type_link', [$this, 'redirectSingleToArchive'], 15, 2);
- }
- }
-
- add_filter('jvbDashboardPage', [$this, 'renderDashPage'], 10, 3);
-
- if ($this->config['hide_children'] ?? false) {
- add_action('template_redirect', [$this, 'redirectChildToParent']);
- }
-
- if (array_key_exists('rewrite_taxonomy', $this->config) && array_key_exists($this->config['rewrite_taxonomy'], JVB_TAXONOMY)) {
- add_action('init', [$this, 'addRewriteRules'], 20);
- add_action('post_type_link', [$this, 'rewriteTaxonomySingle'], 15, 2);
- add_filter('post_type_archive_link', [$this, 'rewriteTaxonomyArchive'], 15, 2);
- }
- }
-
- public function hideFromPublic(bool $is_viewable): bool
- {
- if (!is_admin() && is_singular($this->post_type)) {
- return false;
- }
- return $is_viewable;
- }
-
- public function redirectSingleToAuthor(string $url, \WP_Post $post): string
- {
- if ($post->post_type !== $this->post_type) {
- return $url;
- }
-
- // Redirect to author page or archive
- $user_link = get_user_meta($post->post_author, BASE . 'link', true);
- if ($user_link) {
- $query_var = str_replace(BASE, '', $post->post_type);
- return add_query_arg($query_var, $post->ID, get_permalink($user_link));
- }
-
- return get_post_type_archive_link($post->post_type);
- }
- public function redirectSingleToArchive(string $url, \WP_Post $post): string
- {
- if ($post->post_type !== $this->post_type) {
- return $url;
- }
-
- return get_post_type_archive_link($post->post_type);
- }
- public function addRewriteRules(): void
- {
- $type = $this->config['rewrite_taxonomy'];
- $taxonomy = jvbCheckBase($type);
-
- // Rule 1: Post type archive - /faq/
- add_rewrite_rule(
- "{$this->slug}/?$",
- "index.php?post_type={$this->post_type}",
- 'top'
- );
-
- // Rule 2: Single posts with taxonomy - /faq/section/post/
- add_rewrite_rule(
- "{$this->slug}/([^/]+)/([^/]+)/?$",
- "index.php?post_type={$this->post_type}&name=\$matches[2]&{$taxonomy}=\$matches[1]",
- 'top'
- );
-
- // Rule 3: Un-sectioned posts - /faq/post/
- // Use 'bottom' priority so taxonomy rules match first
- add_rewrite_rule(
- "{$this->slug}/([^/]+)/?$",
- "index.php?post_type={$this->post_type}&name=\$matches[1]",
- 'bottom'
- );
- }
- public function rewriteTaxonomySingle(string $url, \WP_Post $post): string
- {
- if ($post->post_type === $this->post_type) {
- $type = $this->config['rewrite_taxonomy'];
- $taxonomy = jvbCheckBase($type);
- $terms = wp_get_post_terms($post->ID, $taxonomy);
- if (!empty($terms) && !is_wp_error($terms)) {
- $path = TaxonomySelector::getTermPath($terms[0], true);
- $path = implode('/', array_map(function($term) {
- return sanitize_title($term);
- }, $path));
- return str_replace("%{$type}%", $path, $url);
- }
- return str_replace("/%{$type}%", '', $url);
- }
- return $url;
- }
-
- public function rewriteTaxonomyArchive(string $url, string $post_type):string
- {
- if ($post_type === $this->post_type) {
- $url = get_home_url(null, "/{$this->slug}/");
- }
- return $url;
- }
-
- /**
- * Redirect child timeline posts to their parent post
- */
- public function redirectChildToParent(): void
- {
- if (!is_singular($this->post_type)) {
- return;
- }
-
- global $post;
-
- // If this post has a parent, redirect to parent
- if ($post->post_parent) {
- $parent_url = get_permalink($post->post_parent);
-
- // Add anchor or query param to indicate which child was accessed
- $redirect_url = add_query_arg('update', $post->ID, $parent_url);
-
- wp_redirect($redirect_url, 301);
- exit;
- }
- }
-
- public function renderDashPage(string $content, string $page, string $slug):string
- {
- if ($slug === $this->slug) {
- ob_start();
- $crud = new CRUD($slug);
- $crud->render();
- return ob_get_clean();
- }
-
- return $content;
- }
-}
diff --git a/inc/registry/TaxonomyRegistrar.php b/inc/registry/TaxonomyRegistrar.php
deleted file mode 100644
index 21f4450..0000000
--- a/inc/registry/TaxonomyRegistrar.php
+++ /dev/null
@@ -1,349 +0,0 @@
-<?php
-namespace JVBase\registry;
-
-use JVBase\managers\CRUD;
-use JVBase\meta\Meta;
-use JVBase\meta\Registry;
-if (!defined('ABSPATH')) {
- exit;
-}
-class TaxonomyRegistrar
-{
- private string $slug;
- private array $config;
- private array $fields;
- private string $taxonomy;
- private FieldRegistry $fieldRegistry;
-
- public function __construct(string $slug, array $config)
- {
- $this->slug = $slug;
- $this->config = $config;
- $this->taxonomy = BASE . $slug;
-
- $this->fieldRegistry = FieldRegistry::getInstance();
- $this->fields = $this->fieldRegistry->getFields($slug, 'term');
-
- // Set up custom table hooks if this is a content taxonomy
- if ($this->config['is_content'] ?? false) {
- $this->setupContentTaxonomyHooks();
- }
- add_filter('jvbDashboardPage', [$this, 'renderDashPage'], 10, 3);
- }
-
- public function register(): void
- {
- $singular = $this->config['singular'] ?? ucfirst($this->slug);
- $plural = $this->config['plural'] ?? $singular . 's';
-
- $args = [
- 'labels' => $this->buildLabels($singular, $plural),
- 'hierarchical' => $this->config['hierarchical'] ?? true,
- 'public' => $this->config['public'] ?? true,
- 'show_ui' => $this->config['show_ui'] ?? true,
- 'show_admin_column' => $this->config['show_admin_column'] ?? true,
- 'show_in_rest' => $this->config['show_in_rest'] ?? true,
- 'rewrite' => $this->config['rewrite'] ?? [
- 'slug' => $this->slug,
- 'with_front' => false
- ]
- ];
-
- $post_types = array_map(fn($type) => BASE . $type, $this->config['for_content'] ?? []);
- register_taxonomy($this->taxonomy, $post_types, $args);
-
- $this->maybeAddRewriteRule($args['rewrite']);
- if (!empty($this->fields)) {
- $meta_registry = new Registry($this->fields, $this->slug, 'term');
- $meta_registry->registerMetaFields();
- }
- }
-
- /**
- * Add custom rewrite rule for hierarchical taxonomy slugs (e.g., post-type/by/taxonomy-slug)
- */
- protected function maybeAddRewriteRule(array $rewrite_config): void
- {
- $slug = $rewrite_config['slug'] ?? $this->slug;
-
- // Only add custom rule if slug contains slashes (hierarchical path)
- if (!str_contains($slug, '/')) {
- return;
- }
-
- add_rewrite_rule(
- "^{$slug}/([^/]+)/?$",
- 'index.php?' . $this->taxonomy . '=$matches[1]',
- 'top'
- );
- }
-
- private function buildLabels(string $singular, string $plural): array
- {
- return [
- 'name' => $plural,
- 'singular_name' => $singular,
- 'search_items' => "Search {$plural}",
- 'all_items' => "All {$plural}",
- 'edit_item' => "Edit {$singular}",
- 'update_item' => "Update {$singular}",
- 'add_new_item' => "Add New {$singular}",
- 'new_item_name' => "New {$singular} Name",
- 'menu_name' => $singular
- ];
- }
-
- /**
- * Set up hooks for content taxonomies to maintain custom table data
- */
- protected function setupContentTaxonomyHooks(): void
- {
- // Hook into term creation/updates
- add_action('created_term', [$this, 'handleTermSave'], 10, 3);
- add_action('edited_term', [$this, 'handleTermSave'], 10, 3);
-
- // Hook into term meta changes
- add_action('added_term_meta', [$this, 'handleTermMetaChange'], 10, 4);
- add_action('updated_term_meta', [$this, 'handleTermMetaChange'], 10, 4);
- add_action('deleted_term_meta', [$this, 'handleTermMetaChange'], 10, 4);
- add_action('add_term_relationship', [$this, 'addUserToContentType'], 10, 3);
- add_action('delete_term_relationships', [$this, 'removeUserFromContentType'], 10, 3);
- }
-
- public function addUserToContentType($postID, $termIDs, $taxonomy):void
- {
- if ($taxonomy !== $this->taxonomy) {
- return;
- }
-
- if (empty(jvbGetUserContentTypes($postID))) {
- return;
- }
-
- $userID = get_post_meta($postID, BASE . 'link', true);
- if (!is_numeric($userID)) {
- return;
- }
-
- foreach ($termIDs as $termID) {
- $users = get_term_meta($termID, BASE.'users', true);
- $users = ($users === '') ? [] : explode(',', $users);
- $users[] = $userID;
- update_term_meta($termID, BASE.'users', implode(',', $users));
- }
- }
-
-
- public function removeUserFromContentType($postID, $termIDs, $taxonomy):void
- {
- if ($taxonomy !== $this->taxonomy) {
- return;
- }
-
- if (empty(jvbGetUserContentTypes($postID))) {
- return;
- }
-
- $userID = get_post_meta($postID, BASE . 'link', true);
- if (!is_numeric($userID)) {
- return;
- }
-
- foreach ($termIDs as $termID) {
- $users = get_term_meta($termID, BASE.'users', true);
- $users = ($users === '') ? [] : explode(',', $users);
- unset($users[array_search($userID, $users)]);
- update_term_meta($termID, BASE.'users', implode(',', $users));
- }
- }
-
- /**
- * Handle term save (creation and updates)
- * @param int $term_id The term ID
- * @param int $taxonomy_id The taxonomy term ID
- * @param string $taxonomy The taxonomy name
- */
- public function handleTermSave(int $term_id, int $taxonomy_id, string $taxonomy): void
- {
- if ($taxonomy !== $this->taxonomy) {
- return;
- }
-
- $this->syncTermToCustomTable($term_id);
- }
-
- /**
- * Handle term meta changes
- * @param int $meta_id The meta ID
- * @param int $term_id The term ID
- * @param string $meta_key The meta key
- * @param mixed $meta_value The meta value
- */
- public function handleTermMetaChange(int $meta_id, int $term_id, string $meta_key, $meta_value): void
- {
- // Only handle meta for our taxonomy
- $term = get_term($term_id);
- if (!$term || is_wp_error($term) || $term->taxonomy !== $this->taxonomy) {
- return;
- }
-
- $this->syncTermToCustomTable($term_id);
- }
-
- /**
- * Sync a single term to the custom table
- * @param int $term_id The term ID to sync
- */
- public function syncTermToCustomTable(int $term_id): void
- {
- global $wpdb;
-
- $table = $wpdb->prefix . BASE . 'content_' . $this->slug;
- $term = get_term($term_id, $this->taxonomy);
-
- if (!$term || is_wp_error($term)) {
- return;
- }
-
- // Get custom table fields
- $custom_fields = $this->getCustomTableFields();
- if (empty($custom_fields)) {
- return;
- }
-
- // Prepare data for insertion/update
- $data = [
- 'term_id' => $term_id,
- 'name' => html_entity_decode($term->name),
- 'slug' => $term->slug,
- 'updated_at' => current_time('mysql')
- ];
-
- // Get meta manager for this term
- $meta = Meta::forTerm($term_id);
- $values = $meta->getAll(array_keys($custom_fields));
-
- // Process each custom field
- foreach ($custom_fields as $field_name => $field_config) {
- $value = $values[$field_name];
- // Handle different field types
- $data = $this->processFieldForCustomTable($data, $field_name, $value, $field_config);
- }
-
- foreach ($data as $k => $v) {
- switch ($v) {
- case 0:
- case '':
- case false:
- $data[$k] = null;
- break;
- }
- }
-
- // Check if record exists
- $exists = $wpdb->get_var($wpdb->prepare(
- "SELECT COUNT(*) FROM {$table} WHERE term_id = %d",
- $term_id
- ));
-
- if ($exists) {
- // Update existing record
- $wpdb->update($table, $data, ['term_id' => $term_id]);
- } else {
- // Insert new record
- $wpdb->insert($table, $data);
- }
- }
-
- /**
- * Process a field value for storage in custom table
- * @param array $data Current data array
- * @param string $field_name Field name
- * @param mixed $value Field value
- * @param array $field_config Field configuration
- * @return array Updated data array
- */
- protected function processFieldForCustomTable(array $data, string $field_name, $value, array $field_config): array
- {
- $field_type = $field_config['type'] ?? 'text';
-
- switch ($field_type) {
- case 'location':
- // Handle location fields - they create multiple columns
- if (is_array($value)) {
- $data["{$field_name}_address"] = $value['address'] ?? '';
- $data["{$field_name}_lat"] = (float)($value['lat'] ?? 0);
- $data["{$field_name}_lng"] = (float)($value['lng'] ?? 0);
- $data["{$field_name}_street"] = $value['street'] ?? '';
- $data["{$field_name}_city"] = $value['city'] ?? '';
- $data["{$field_name}_province"] = $value['province'] ?? '';
- $data["{$field_name}_postal_code"] = $value['postal_code'] ?? '';
- $data["{$field_name}_country"] = $value['country'] ?? '';
- }
- break;
-
- case 'taxonomy':
- // Handle taxonomy references
- $limit = $field_config['limit'] ?? null;
- if ($limit === 1) {
- // Single selection - store as integer
- $data[$field_name] = is_array($value) ? (int)($value[0] ?? 0) : (int)$value;
- } else {
- // Multiple selections - store as JSON
- $data[$field_name] = is_array($value) ? json_encode(array_map('intval', $value)) : $value;
- }
- break;
-
- case 'user':
- // Handle user references
- $limit = $field_config['limit'] ?? null;
- if ($limit === 1) {
- $data[$field_name] = is_array($value) ? (int)($value[0] ?? 0) : (int)$value;
- } else {
- $data[$field_name] = is_array($value) ? json_encode(array_map('intval', $value)) : (int)$value;
- }
- break;
-
- case 'repeater':
- case 'gallery':
- case 'set':
- case 'checkbox':
- // Store complex data as JSON
- $data[$field_name] = is_array($value) ? json_encode($value) : $value;
- break;
-
- case 'image':
- case 'file':
- // Store attachment ID
- $data[$field_name] = (int)$value;
- break;
-
- case 'number':
- $data[$field_name] = (int)$value;
- break;
-
- case 'true_false':
- $data[$field_name] = (bool)$value;
- break;
-
- default:
- // Store as string for text, textarea, email, url, etc.
- $data[$field_name] = (string)$value;
- break;
- }
-
- return $data;
- }
-
- public function renderDashPage(string $content, string $page, string $slug):string
- {
- if ($slug === $this->slug) {
- ob_start();
- $crud = new CRUD($slug);
- $crud->render();
- return ob_get_clean();
- }
-
- return $content;
- }
-}
diff --git a/inc/registry/UserRoleRegistrar.php b/inc/registry/UserRoleRegistrar.php
deleted file mode 100644
index 3e180d8..0000000
--- a/inc/registry/UserRoleRegistrar.php
+++ /dev/null
@@ -1,34 +0,0 @@
-<?php
-namespace JVBase\registry;
-use JVBase\meta\Registry;
-
-if (!defined('ABSPATH')) {
- exit;
-}
-/**
- * Handles user role registration
- */
-class UserRoleRegistrar
-{
- private string $slug;
- private array $fields;
- private FieldRegistry $fieldRegistry;
-
- public function __construct(string $slug, array $config)
- {
- $this->slug = $slug;
- $this->fieldRegistry = FieldRegistry::getInstance();
- $this->fields = $this->fieldRegistry->getFields($slug, 'user');
- if (!empty($this->fields)) {
- add_action('init', [$this, 'registerFields']);
- }
- }
-
- public function registerFields():void
- {
- if (!empty($this->fields)) {
- $meta_registry = new Registry($this->fields, $this->slug, 'term');
- $meta_registry->registerMetaFields();
- }
- }
-}
diff --git a/inc/registry/_setup.php b/inc/registry/_setup.php
deleted file mode 100644
index e9248ef..0000000
--- a/inc/registry/_setup.php
+++ /dev/null
@@ -1,17 +0,0 @@
-<?php
-
-require(JVB_DIR . '/inc/registrar/_setup.php');
-//require(JVB_DIR . '/inc/registry/providers/FieldProviderInterface.php');
-//require(JVB_DIR . '/inc/registry/providers/CommonFieldProvider.php');
-//require(JVB_DIR . '/inc/registry/providers/CalendarFieldProvider.php');
-//require(JVB_DIR . '/inc/registry/providers/IntegrationFieldProvider.php');
-//require(JVB_DIR . '/inc/registry/FieldRegistry.php');
-//
-//require(JVB_DIR . '/inc/registry/ContentRegistry.php');
-////The following sets everything up from /base/_setup.php
-//require(JVB_DIR . '/inc/registry/PostTypeRegistrar.php');
-//require(JVB_DIR . '/inc/registry/TaxonomyRegistrar.php');
-//require(JVB_DIR . '/inc/registry/MakeCalendarType.php');
-//require(JVB_DIR . '/inc/registry/UserRoleRegistrar.php');
-//require(JVB_DIR . '/inc/registry/OptionsRegistry.php');
-//require(JVB_DIR . '/inc/registry/CheckCustomTables.php');
diff --git a/inc/registry/index.php b/inc/registry/index.php
deleted file mode 100644
index 6220032..0000000
--- a/inc/registry/index.php
+++ /dev/null
@@ -1,2 +0,0 @@
-<?php
-// Silence is golden.
diff --git a/inc/registry/providers/CalendarFieldProvider.php b/inc/registry/providers/CalendarFieldProvider.php
deleted file mode 100644
index a9e54fe..0000000
--- a/inc/registry/providers/CalendarFieldProvider.php
+++ /dev/null
@@ -1,109 +0,0 @@
-<?php
-namespace JVBase\registry\providers;
-
-if (!defined('ABSPATH')) {
- exit;
-}
-
-class CalendarFieldProvider implements FieldProviderInterface
-{
- public function getFields(...$args): array
- {
- return [
- 'event_date' => [
- 'type' => 'date',
- 'label' => 'Event Date',
- 'required' => true,
- 'quickEdit' => true,
- 'section' => 'event-details'
- ],
- 'event_time' => [
- 'type' => 'time',
- 'label' => 'Event Time',
- 'quickEdit' => true,
- 'section' => 'event-details'
- ],
- 'event_end_date' => [
- 'type' => 'date',
- 'label' => 'End Date',
- 'description' => 'For multi-day events',
- 'section' => 'event-details'
- ],
- 'event_end_time' => [
- 'type' => 'time',
- 'label' => 'End Time',
- 'section' => 'event-details'
- ],
- 'all_day' => [
- 'type' => 'true_false',
- 'label' => 'All Day Event',
- 'quickEdit' => true,
- 'section' => 'event-details'
- ],
- 'recurring' => [
- 'type' => 'select',
- 'label' => 'Recurring',
- 'section' => 'event-details',
- 'options' => [
- 'none' => 'Does not repeat',
- 'daily' => 'Daily',
- 'weekly' => 'Weekly',
- 'monthly' => 'Monthly',
- 'yearly' => 'Yearly',
- 'custom' => 'Custom',
- ]
- ],
- 'recurring_until' => [
- 'type' => 'date',
- 'label' => 'Repeat Until',
- 'description' => 'End date for recurring events',
- 'section' => 'event-details',
- 'conditional' => [
- 'field' => 'recurring',
- 'value' => ['daily', 'weekly', 'monthly', 'yearly', 'custom'],
- 'operator' => 'IN'
- ]
- ],
- 'event_location' => [
- 'type' => 'location',
- 'label' => 'Event Location',
- 'section' => 'event-details'
- ],
- 'event_organizer' => [
- 'type' => 'text',
- 'label' => 'Organizer',
- 'section' => 'event-details'
- ],
- 'event_url' => [
- 'type' => 'url',
- 'label' => 'Event Website',
- 'description' => 'External event page or ticketing link',
- 'section' => 'event-details'
- ],
- 'ticket_price' => [
- 'type' => 'number',
- 'label' => 'Ticket Price',
- 'step' => 0.01,
- 'description' => 'Leave blank for free events',
- 'section' => 'event-details'
- ],
- 'capacity' => [
- 'type' => 'number',
- 'label' => 'Capacity',
- 'description' => 'Maximum number of attendees',
- 'section' => 'event-details'
- ],
- 'rsvp_required' => [
- 'type' => 'true_false',
- 'label' => 'RSVP Required',
- 'section' => 'event-details'
- ],
- 'calendar_color' => [
- 'type' => 'color',
- 'label' => 'Calendar Color',
- 'default' => '#0073aa',
- 'section' => 'display'
- ],
- ];
- }
-}
diff --git a/inc/registry/providers/CommonFieldProvider.php b/inc/registry/providers/CommonFieldProvider.php
deleted file mode 100644
index 71c7875..0000000
--- a/inc/registry/providers/CommonFieldProvider.php
+++ /dev/null
@@ -1,591 +0,0 @@
-<?php
-namespace JVBase\registry\providers;
-
-if (!defined('ABSPATH')) {
- exit;
-}
-
-/**
- * Common field provider
- */
-class CommonFieldProvider implements FieldProviderInterface
-{
- public function getFields(...$args): array
- {
- $meta = $args[0] ?? '';
- $section = $args[1] ?? '';
-
- return match ($meta) {
- 'wiki' => [
- 'wiki' => [
- 'type' => 'url',
- 'label' => __('Wikipedia Page', 'jvb'),
- 'description' => __('For the schema', 'jvb'),
- 'quickEdit' => true,
- ]
- ],
- 'links' => [
- 'links' => [
- 'type' => 'repeater',
- 'quickEdit' => true,
- 'row_label' => 'title',
- 'label' => __('Online Links', 'jvb'),
- 'description' => __('These are listed publicly on the website', 'jvb'),
- 'fields' => [
- 'url' => [
- 'type' => 'url',
- 'label' => __('URL', 'jvb'),
- ],
- 'title' => [
- 'type' => 'text',
- 'label' => __('Label', 'jvb'),
- ],
- 'tracker' => [
- 'type' => 'text',
- 'label' => __('Tracker', 'jvb'),
- 'description' => __('If you are set up to track link referrals, add what comes after the ? here.'),
- ],
- ],
- 'section' => 'contact'
- ]
- ],
- 'contact' => [
- 'admin_contact' => [
- 'type' => 'set',
- 'label' => 'Admin Contact',
- 'quickEdit' => true,
- 'options' => [
- 'text' => 'Text',
- 'call' => 'Call',
- 'email' => 'Email',
- 'insta' => 'Instagram',
- ],
- 'section' => 'contact'
- ],
- 'public_contact' => [
- 'type' => 'set',
- 'label' => 'Public Contact',
- 'quickEdit' => true,
- 'options' => [
- 'text' => 'Text',
- 'call' => 'Call',
- 'email' => 'Email',
- 'insta' => 'Instagram',
- ],
- 'section' => 'contact'
- ]
- ],
- 'SEO' => array_merge(
- self::getFields('alternate_name', $section),
- self::getFields('specialties', $section),
- self::getFields('rate', $section),
- self::getFields('awards', $section),
- self::getFields('ratings', $section),
- self::getFields('reviews', $section),
- self::getFields('services', $section),
- self::getFields('languages', $section),
- self::getFields('credentials', $section),
- self::getFields('keywords', $section)
- ),
- 'SEOBusiness' => array_merge(
- self::getFields('alternate_name', $section),
- self::getFields('hours', $section),
- self::getFields('specialties', $section),
- self::getFields('rate', $section),
- self::getFields('awards', $section),
- self::getFields('ratings', $section),
- self::getFields('reviews', $section),
- self::getFields('services', $section),
- self::getFields('languages', $section),
- self::getFields('keywords', $section),
- self::getFields('outside_photo', $section),
- self::getFields('slogan', $section),
- self::getFields('payment', $section),
- self::getFields('amenities', $section),
- self::getFields('permanently_close', $section),
- ),
- 'outside_photo' => [
- 'outside_photo' => [
- 'type' => 'image',
- 'label' => __('Outside Photo', 'jvb'),
- 'limit' => 1,
- 'section' => 'seo'
- ]
- ],
- 'slogan' => [
- 'slogan' => [
- 'type' => 'text',
- 'label' => __('Tagline or Slogan', 'jvb'),
- 'section' => 'seo',
- 'quickEdit' => true,
- ]
- ],
- 'payment' => [
- 'payment' => [
- 'type' => 'set',
- 'label' => __('Payments Accepted', 'jvb'),
- 'options' => [
- 'Cash' => 'Cash',
- 'Credit Card' => 'Credit Card',
- 'Debit' => 'Debit',
- 'Google Pay' => 'Google Pay',
- 'Apple Pay' => 'Apple Pay',
- 'PayPal' => 'PayPal',
- 'Interac' => 'Interac',
- 'AMEX' => 'AMEX',
- ],
- 'section' => 'seo',
- 'bulkEdit'=> true,
- ]
- ],
- 'amenities' => [
- 'amenities' => [
- 'type' => 'set',
- 'label' => __('Amenities', 'jvb'),
- 'options' => [
- 'Wheelchair Accessible' => 'Wheelchair Accessible',
- 'Free Parking' => 'Free Parking',
- 'Private Rooms' => 'Private Rooms',
- 'Air Conditioning' => 'Air Conditioning',
- 'WiFi' => 'WiFi',
- 'Gender Neutral Restroom' => 'Gender Neutral Restroom',
- 'LGBTQ+ Friendly' => 'LGBTQ+ Friendly',
- 'Sterilization Room' => 'Sterilization Room',
- 'Refreshments Available' => 'Refreshments Available',
- 'Street Level Access' => 'Street Level Access',
- 'Single Use Needles' => 'Single Use Needles',
- 'Consultation Room' => 'Consultation Room',
- 'Aftercare Products Available' => 'Aftercare Products Available',
- 'Walk-Ins Welcome' => 'Walk-Ins Welcome',
- ],
- 'section' => 'seo',
- 'bulkEdit'=> true,
- ]
- ],
- 'credentials' => [
- 'credentials' => [
- 'type' => 'set',
- 'label' => __('Credentials', 'jvb'),
- 'options' => [
- 'WHMIS 2015' => 'WHMIS 2015',
- 'Tattoo and Piercing Safety Standards' => 'Tattoo and Piercing Safety Standards',
- 'Bloodborne Pathogens and Infection Control' => 'Bloodborne Pathogens and Infection Control',
- 'First Aid Training' => 'First Aid Training',
- ],
- 'section' => 'seo',
- 'bulkEdit'=> true,
- ]
- ],
- 'permanently_close' => [
- 'permanently_close' => [
- 'type' => 'true_false',
- 'label' => __('Permanently Close', 'jvb'),
- 'description' => '*IMPORTANT* This signals to search engines that this business is no longer in business. Use only if your shop is closing!',
- 'section' => 'seo',
- 'bulkEdit'=> true,
- ],
- 'dissolution_date' => [
- 'type' => 'date',
- 'label' => __('Dissolution Date', 'jvb'),
- 'section' => 'seo',
- 'bulkEdit'=> true,
- ]
- ],
- 'alternate_name' => [
- 'alternate_name' => [
- 'type' => 'repeater',
- 'label' => __('Alternate Name', 'jvb'),
- 'fields' => [
- 'name' => [
- 'type' => 'text',
- 'label' => __('Name', 'jvb'),
- ]
- ],
- 'section' => 'seo'
- ]
- ],
- 'hours' => [
- 'hours' => [
- 'type' => 'group',
- 'mode' => 'hidden',
- 'quickEdit' => 'true',
- 'label' => __('Hours', 'jvb'),
- 'new_row' => 'New hours',
- 'add_label' => 'Add hours',
- 'fields' => [
- 'monday' => [
- 'type' => 'group',
- 'mode' => 'hidden',
- 'label' => __('Monday', 'jvb'),
- 'fields' => [
- 'open' => [
- 'type' => 'true_false',
- 'label' => 'Monday'
- ],
- 'time_opens' => [
- 'type' => 'time',
- 'label' => __('Opens', 'jvb'),
- 'condition' => [
- 'field' => 'open',
- 'value' => '1',
- ]
- ],
- 'time_closes' => [
- 'type' => 'time',
- 'label' => __('Closes', 'jvb'),
- 'condition' => [
- 'field' => 'open',
- 'value' => '1',
- ]
- ]
- ]
- ],
- 'tuesday' => [
- 'type' => 'group',
- 'mode' => 'hidden',
- 'label' => __('Tuesday', 'jvb'),
- 'fields' => [
- 'open' => [
- 'type' => 'true_false',
- 'label' => 'Tuesday'
- ],
- 'time_opens' => [
- 'type' => 'time',
- 'label' => __('Opens', 'jvb'),
- 'condition' => [
- 'field' => 'open',
- 'value' => '1',
- ]
- ],
- 'time_closes' => [
- 'type' => 'time',
- 'label' => __('Closes', 'jvb'),
- 'condition' => [
- 'field' => 'open',
- 'value' => '1',
- ]
- ]
- ]
- ],
- 'wednesday' => [
- 'type' => 'group',
- 'mode' => 'hidden',
- 'label' => __('Wednesday', 'jvb'),
- 'fields' => [
- 'open' => [
- 'type' => 'true_false',
- 'label' => 'Wednesday'
- ],
- 'time_opens' => [
- 'type' => 'time',
- 'label' => __('Opens', 'jvb'),
- 'condition' => [
- 'field' => 'open',
- 'value' => '1',
- ]
- ],
- 'time_closes' => [
- 'type' => 'time',
- 'label' => __('Closes', 'jvb'),
- 'condition' => [
- 'field' => 'open',
- 'value' => '1',
- ]
- ]
- ]
- ],
- 'thursday' => [
- 'type' => 'group',
- 'mode' => 'hidden',
- 'label' => __('Thursday', 'jvb'),
- 'fields' => [
- 'open' => [
- 'type' => 'true_false',
- 'label' => 'Thursday'
- ],
- 'time_opens' => [
- 'type' => 'time',
- 'label' => __('Opens', 'jvb'),
- 'condition' => [
- 'field' => 'open',
- 'value' => '1',
- ]
- ],
- 'time_closes' => [
- 'type' => 'time',
- 'label' => __('Closes', 'jvb'),
- 'condition' => [
- 'field' => 'open',
- 'value' => '1',
- ]
- ]
- ]
- ],
- 'friday' => [
- 'type' => 'group',
- 'mode' => 'hidden',
- 'label' => __('Friday', 'jvb'),
- 'fields' => [
- 'open' => [
- 'type' => 'true_false',
- 'label' => 'Friday'
- ],
- 'time_opens' => [
- 'type' => 'time',
- 'label' => __('Opens', 'jvb'),
- 'condition' => [
- 'field' => 'open',
- 'value' => '1',
- ]
- ],
- 'time_closes' => [
- 'type' => 'time',
- 'label' => __('Closes', 'jvb'),
- 'condition' => [
- 'field' => 'open',
- 'value' => '1',
- ]
- ]
- ]
- ],
- 'saturday' => [
- 'type' => 'group',
- 'mode' => 'hidden',
- 'label' => __('Saturday', 'jvb'),
- 'fields' => [
- 'open' => [
- 'type' => 'true_false',
- 'label' => 'Saturday'
- ],
- 'time_opens' => [
- 'type' => 'time',
- 'label' => __('Opens', 'jvb'),
- 'condition' => [
- 'field' => 'open',
- 'value' => '1',
- ]
- ],
- 'time_closes' => [
- 'type' => 'time',
- 'label' => __('Closes', 'jvb'),
- 'condition' => [
- 'field' => 'open',
- 'value' => '1',
- ]
- ]
- ]
- ],
- 'sunday' => [
- 'type' => 'group',
- 'mode' => 'hidden',
- 'label' => __('Sunday', 'jvb'),
- 'fields' => [
- 'open' => [
- 'type' => 'true_false',
- 'label' => 'Sunday'
- ],
- 'time_opens' => [
- 'type' => 'time',
- 'label' => __('Opens', 'jvb'),
- 'condition' => [
- 'field' => 'open',
- 'value' => '1',
- ]
- ],
- 'time_closes' => [
- 'type' => 'time',
- 'label' => __('Closes', 'jvb'),
- 'condition' => [
- 'field' => 'open',
- 'value' => '1',
- ]
- ]
- ]
- ],
- ],
- 'section' => 'seo'
- ],
- 'by_appointment' => [
- 'type' => 'true_false',
- 'label' => __('By Appointment Only', 'jvb'),
- 'section' => 'seo'
- ],
- 'walkins' => [
- 'type' => 'true_false',
- 'label' => __('Walk Ins Welcome', 'jvb'),
- 'section' => 'seo'
- ]
- ],
- 'specialties' => [
- 'specialties' => [
- 'type' => 'repeater',
- 'row_label' => 'specialty',
- 'label' => __('Specialties', 'jvb'),
- 'fields' => [
- 'specialty' => [
- 'type' => 'text',
- 'label' => __('Specialty', 'jvb'),
- ],
- 'description' => [
- 'type' => 'textarea',
- 'quill' => false,
- 'label' => __('Description', 'jvb'),
- ],
- ],
- 'section' => 'seo'
- ]
- ],
- 'rate' => [
- 'rate' => [
- 'type' => 'number',
- 'label' => 'Hourly rate',
- 'section' => 'seo',
- 'quickEdit' => true,
- 'bulkEdit'=> true,
- ]
- ],
- 'awards' => [
- 'awards' => [
- 'type' => 'repeater',
- 'row_label' => 'name',
- 'label' => __('Awards', 'jvb'),
- 'fields' => [
- 'name' => [
- 'type' => 'text',
- 'label' => __('Award Name', 'jvb'),
- ],
- 'presenter' => [
- 'type' => 'text',
- 'label' => __('Presenter', 'jvb'),
- ],
- 'year' => [
- 'type' => 'number',
- 'label' => __('Year', 'jvb'),
- ],
- ],
- 'section' => 'seo'
- ]
- ],
- 'ratings' => [
- 'average_rating' => [
- 'type' => 'select',
- 'label' => __('Average Rating', 'jvb'),
- 'options' => [
- 'none' => 'Not Given',
- '0.5' => '0.5',
- '1' => '1',
- '1.5' => '1.5',
- '2' => '2',
- '2.5' => '2.5',
- '3' => '3',
- '3.5' => '3.5',
- '4' => '4',
- '4.5' => '4.5',
- '5' => '5',
- ],
- 'default' => 'none',
- 'section' => 'seo'
- ],
- 'total_ratings' => [
- 'type' => 'number',
- 'label' => __('Total Ratings', 'jvb'),
- 'section' => 'seo'
- ]
- ],
- 'reviews' => [
- 'reviews' => [
- 'type' => 'repeater',
- 'row_label' => 'name',
- 'label' => __('Reviews', 'jvb'),
- 'fields' => [
- 'name' => [
- 'type' => 'text',
- 'label' => __('Reviewer Name', 'jvb'),
- ],
- 'review' => [
- 'type' => 'textarea',
- 'quill' => false,
- 'label' => __('Review', 'jvb')
- ],
- 'rating' => [
- 'type' => 'select',
- 'label' => __('Rating', 'jvb'),
- 'options' => [
- 'none' => 'Not Given',
- '0.5' => '0.5',
- '1' => '1',
- '1.5' => '1.5',
- '2' => '2',
- '2.5' => '2.5',
- '3' => '3',
- '3.5' => '3.5',
- '4' => '4',
- '4.5' => '4.5',
- '5' => '5',
- ],
- 'default' => 'none'
- ],
- 'date' => [
- 'type' => 'date',
- 'label' => __('Date of Review', 'jvb')
- ],
- 'url' => [
- 'type' => 'url',
- 'label' => __('Link to Review (optional)', 'jvb'),
- ],
- ],
- 'section' => 'seo'
- ]
- ],
- 'services' => [
- 'services' => [
- 'type' => 'repeater',
- 'label' => __('Services', 'jvb'),
- 'fields' => [
- 'name' => [
- 'type' => 'text',
- 'label' => 'Service name',
- ],
- 'description' => [
- 'type' => 'textarea',
- 'quill' => false,
- 'label' => 'Description',
- ]
- ],
- 'section' => 'seo'
- ]
- ],
- 'languages' => [
- 'languages' => [
- 'type' => 'repeater',
- 'label' => __('Language(s) Spoken', 'jvb'),
- 'fields' => [
- 'language' => [
- 'type' => 'text',
- 'label' => 'Language',
- ],
- ],
- 'default' => [ 'English' ],
- 'section' => 'seo',
- 'quickEdit' => true,
- ]
- ],
- 'keywords' => [
- 'keywords' => [
- 'type' => 'repeater',
- 'label' => __('Keywords', 'jvb'),
- 'fields' => [
- 'keyword' => [
- 'type' => 'text',
- 'label' => 'Keyword',
- ],
- ],
- 'default' => $labels ?? [ 'Edmonton tattoos', 'Edmonton tattoo artist', 'Edmonton tattooist' ],
- 'section' => 'seo',
- 'quickEdit' => true,
- ]
- ],
- default => []
- };
- }
-}
diff --git a/inc/registry/providers/FieldProviderInterface.php b/inc/registry/providers/FieldProviderInterface.php
deleted file mode 100644
index 69d7426..0000000
--- a/inc/registry/providers/FieldProviderInterface.php
+++ /dev/null
@@ -1,14 +0,0 @@
-<?php
-namespace JVBase\registry\providers;
-
-if (!defined('ABSPATH')) {
- exit;
-}
-
-/**
- * Interface for field providers
- */
-interface FieldProviderInterface
-{
- public function getFields(...$args): array;
-}
diff --git a/inc/registry/providers/IntegrationFieldProvider.php b/inc/registry/providers/IntegrationFieldProvider.php
deleted file mode 100644
index 818a50b..0000000
--- a/inc/registry/providers/IntegrationFieldProvider.php
+++ /dev/null
@@ -1,127 +0,0 @@
-<?php
-namespace JVBase\registry\providers;
-
-use JVBase\base\Site;
-
-if (!defined('ABSPATH')) {
- exit;
-}
-
-/**
- * @deprecated See JVBase\registrar\helpers\AddIntegrationFields.php
- */
-class IntegrationFieldProvider implements FieldProviderInterface
-{
- protected array $allowed = [];
- public function __construct() {
- $allowed = [];
- if (Site::hasIntegration('gmb')) {
- $allowed['gmb'] = 'Google My Business';
- }
- if (Site::hasIntegration('facebook')) {
- $allowed['facebook'] = 'Facebook';
- }
- if (Site::hasIntegration('square')) {
- $allowed['square'] = 'Square';
- }
- if (Site::hasIntegration('instagram')) {
- $allowed['instagram'] = 'Instagram';
- }
- if (Site::hasIntegration('bluesky')) {
- $allowed['bluesky'] = 'BlueSky';
- }
- if (Site::hasIntegration('helcim')) {
- $allowed['helcim'] = 'Helcim';
- }
- $this->allowed = $allowed;
- }
- public function getFields(...$args): array
- {
- $args = $args[0];
- if (!array_key_exists('integrations', $args)) {
- return [];
- }
- $fields = [];
- $settings = $args['integrations'];
- foreach ($settings as $slug => $setting) {
- if (!array_key_exists($slug, $this->allowed)){
- continue;
- }
- $fields = array_merge($fields, $this->getIntegrationFields($slug, $args));
- }
- return $fields;
- }
-
- public function getIntegrationFields(string $integration, $config):array
- {
- $fields = [];
- $fields['share_to_' . $integration] = [
- 'type' => 'true_false',
- 'label' => 'Share to ' . $this->allowed[$integration],
- 'section' => 'sync',
- 'bulkEdit' => true,
- ];
- $setting = $config['integrations'][$integration];
- if (jvbCheck('update', $setting)) {
- $fields['_keep_synced_'.$integration] = [
- 'type' => 'true_false',
- 'label' => 'Keep Synced with '. $this->allowed[$integration],
- 'section' => 'sync',
- 'condition' => [
- 'field' => 'share_to_'.$integration,
- 'value' => 1,
- 'operator'=> '==',
- ],
- 'bulkEdit' => true,
- ];
- }
-
- $fields['schedule_'.$integration] = [
- 'type' => 'datetime',
- 'label' => 'Schedule for later?',
- 'condition' => [
- 'field' => 'share_to_'.$integration,
- 'operator' => '==',
- 'value' => 1
- ]
- ];
- $fields["_{$integration}_item_id"] = [
- 'type' => 'text',
- 'label' => $this->allowed[$integration].' ID',
- 'section' => 'sync',
- 'hidden' => true,
- ];
- $fields["_{$integration}_shared_at"] = [
- 'type' => 'datetime',
- 'label' => $this->allowed[$integration].' Shared at:',
- 'section' => 'sync',
- 'hidden' => true,
- ];
- $fields["_{$integration}_last_sync"] = [
- 'type' => 'datetime',
- 'label' => $this->allowed[$integration].' Last Sync',
- 'section' => 'sync',
- 'hidden' => true
- ];
- $fields["_{$integration}_sync_status"] = [
- 'type' => 'select',
- 'label' => 'Sync Status',
- 'options' => [
- 'synced' => 'Synced',
- 'pending' => 'Pending',
- 'failed' => 'Failed',
- 'unpublished' => 'Unpublished',
- 'scheduled' => 'Scheduled'
- ],
- 'section' => 'sync',
- 'hidden' => true,
- ];
-
- $integration = JVB()->connect($integration);
- if ($integration && $integration->hasContent()) {
- $type = (array_key_exists('content_type', $setting)) ? $setting['content_type'] : $integration->getDefaultContentType();
- $fields = array_merge($fields,$integration->getContentTypes($type));
- }
- return $fields;
- }
-}
diff --git a/inc/registry/providers/index.php b/inc/registry/providers/index.php
deleted file mode 100644
index 6220032..0000000
--- a/inc/registry/providers/index.php
+++ /dev/null
@@ -1,2 +0,0 @@
-<?php
-// Silence is golden.
diff --git a/inc/rest/RegisterRoutes.php b/inc/rest/RegisterRoutes.php
index c0104f4..2754beb 100644
--- a/inc/rest/RegisterRoutes.php
+++ b/inc/rest/RegisterRoutes.php
@@ -301,7 +301,7 @@
}
//get the user's profile id
- $profileID = get_user_meta($userID, BASE.'link', true);
+ $profileID = get_user_meta($userID, BASE.'profile_link', true);
if (!$profileID) {
return false;
}
diff --git a/inc/rest/RestRouteManager.php b/inc/rest/RestRouteManager.php
index 1c8875c..ff72f13 100644
--- a/inc/rest/RestRouteManager.php
+++ b/inc/rest/RestRouteManager.php
@@ -158,11 +158,7 @@
protected function checkContent(string $content, bool $bool = false):string|bool
{
- $result = JVB_CONTENT[$content]??JVB_TAXONOMY[$content]??JVB_USER[$content]??'';
- if ($bool) {
- return $result !== '';
- }
- return $result;
+ return (bool)Registrar::getInstance($content);
}
diff --git a/inc/rest/routes/ApprovalRoutes.php b/inc/rest/routes/ApprovalRoutes.php
index fe5db06..a051459 100644
--- a/inc/rest/routes/ApprovalRoutes.php
+++ b/inc/rest/routes/ApprovalRoutes.php
@@ -33,18 +33,13 @@
parent::__construct();
$this->initTypes();
-
- if ($this->hasMemberApproval) {
- add_action('user_register', [$this, 'handleNewUserRegistration'], 10, 2);
- }
-
- add_action('jvb_cleanup_expired_approvals', [$this, 'cleanupExpiredApprovals']);
}
protected function initTypes():void
{
$this->userTypes = [];
$this->termTypes = [];
+ $this->allTypes = [];
if ($this->hasMemberApproval) {
$this->userTypes = Registrar::getFeatured('approve_new', 'user');
$this->allTypes = $this->userTypes;
@@ -79,27 +74,6 @@
->register();
}
- /**
- * Handler for user registration
- *
- * @param int $user_id New user ID
- * @param object $user the new user object
- *
- * @return void
- */
- public function handleNewUserRegistration(int $user_id, object $user): void
- {
- $intersect = array_intersect(
- array_map(fn($role) => BASE.$role, $this->userTypes),
- (array) $user->roles
- );
-
- if (!empty($intersect)) {
- $user->add_cap('skip_moderation', false);
- $this->createArtistApprovalRequest($user_id);
- }
- }
-
/**
* @param WP_REST_Request $request
@@ -131,255 +105,25 @@
*/
protected function handleVote(string $type, string $vote, int $request_id, int $user_id, string $notes = ''): bool
{
- if (!in_array($vote, ['approve', 'reject'])) {
+ if (!in_array($vote, ['approve', 'reject', 'dismiss'])) {
return false;
}
-
- $requestTable = $this->getTableName($type, 'requests');
- $voteTable = $this->getTableName($type, 'votes');
-
- $requests = CustomTable::for($requestTable);
- $votes = CustomTable::for($voteTable);
-
- try {
- return $requests->transaction(function($requests) use ($votes, $request_id, $user_id, $vote, $notes, $type) {
- // Get the approval request
- $request = $requests->where(['id' => $request_id])->first();
-
- if (!$request || $request->status !== 'pending') {
- throw new Exception("Invalid approval request");
- }
-
- // Check if user already voted
- $existingVote = $votes->where([
- 'request_id' => $request_id,
- 'user_id' => $user_id
- ])->first();
-
- if ($existingVote) {
- if ($existingVote->vote !== $vote) {
- // Update vote
- $votes->where(['id' => $existingVote->id])
- ->updateResults(['vote' => $vote]);
- return true;
- }
- throw new Exception("User has already voted on this request");
- }
-
- // Insert new vote
- $votes->create([
- 'request_id' => $request_id,
- 'user_id' => $user_id,
- 'vote' => $vote,
- 'notes' => $notes,
- ]);
-
- // Update request based on vote type
- $user = get_userdata($user_id);
-
- if ($vote === 'approve') {
- $this->handleApproval($requests, $request, $request_id, $user, $type);
- } else {
- $this->handleRejection($requests, $request, $request_id, $user, $type);
- }
-
- return true;
- });
- } catch (Exception $e) {
- $this->logError('handleVote', [
- 'error' => $e->getMessage(),
- 'user_id' => $user_id,
- 'request_id' => $request_id,
- 'vote' => $vote
- ]);
- return false;
- }
+ $result = JVB()->approvals()->markApproval($request_id, $user_id, $type, $vote, $notes);
+ return $result['success'];
}
- /**
- * Handle approval vote logic
- */
- protected function handleApproval(CustomTable $table, object $request, int $request_id, $user, string $type): void
- {
- $approvers = json_decode($request->approved_by, true) ?: [];
- $approvers[$user->ID] = [
- 'name' => $user->display_name,
- 'voted' => current_time('mysql')
- ];
- $table->where(['id' => $request_id])->updateResults([
- 'current_approvals' => $request->current_approvals + 1,
- 'approved_by' => json_encode($approvers),
- 'expires_at' => $this->rebuildExpiryDate()
- ]);
-
- // Check if threshold met
- if ($request->current_approvals + 1 >= $request->required_approvals) {
- match ($type) {
- 'term' => $this->makeTermLive($request),
- default => $this->completeVerification($request_id, $type),
- };
- }
- }
-
- /**
- * Handle rejection vote logic
- */
- protected function handleRejection(CustomTable $table, object $request, int $request_id, $user, string $type): void
- {
- $rejecters = json_decode($request->rejected_by, true) ?: [];
- $rejecters[$user->ID] = [
- 'name' => $user->display_name,
- 'voted' => current_time('mysql')
- ];
-
- $table->where(['id' => $request_id])->updateResults([
- 'current_rejections' => $request->current_rejections + 1,
- 'rejected_by' => json_encode($rejecters),
- 'expires_at' => $this->rebuildExpiryDate()
- ]);
-
- // Check if threshold met
- if ($request->current_rejections + 1 >= $request->required_approvals) {
- match ($type) {
- 'term' => $this->makeTermUnalive($request),
- default => $this->denyVerification($request_id, $type),
- };
- }
- }
protected function rebuildExpiryDate()
{
return date('Y-m-d H:i:s', strtotime("+{$this->expiryDays} days", time()));
}
- /**
- * @param string $type user/artist or term
- * @param array $request
- *
- * @return bool|int
- */
- protected function createApprovalRequest(string $type, array $request): int
- {
- $tableName = $this->getTableName($type, 'requests');
- $id = CustomTable::for($tableName)->create($request);
-
- if (!$id) {
- throw new Exception('Failed to create approval request');
- }
-
- return $id;
- }
/*************
* Artist Approvals
************/
/**
- * Create artist approval request
- *
- * @param int $user_id User ID to be approved
- *
- * @return int|false Request ID or false on failure
- */
- /**
- * Create artist approval request - REFACTORED
- */
- public function createArtistApprovalRequest(int $user_id): int|false
- {
- $userRole = jvbUserRole($user_id);
- $tableName = $this->getTableName($userRole, 'requests');
- $table = CustomTable::for($tableName);
-
- try {
- return $table->transaction(function($table) use ($user_id) {
- // Check for existing request
- $existing = $table->where(['user_id' => $user_id])->first();
-
- if ($existing) {
- return $existing->id;
- }
-
- $user_data = get_userdata($user_id);
-
- return $table->create([
- 'user_id' => $user_id,
- 'status' => 'pending',
- 'expires_at' => date('Y-m-d H:i:s', strtotime('+30 days')),
- 'current_approvals' => 0,
- 'current_rejections' => 0,
- 'required_approvals' => 3, // From config
- 'approved_by' => json_encode([]),
- 'rejected_by' => json_encode([]),
- ]);
- });
- } catch (Exception $e) {
- $this->logError('createArtistApprovalRequest', [
- 'error' => $e->getMessage(),
- 'user_id' => $user_id
- ]);
- return false;
- }
- }
-
- /**
- * Mark an artist as verified
- *
- * @param int $user_id The user to verify
- * @param int $verified_by ID of user who verified them (optional)
- *
- * @return bool Success status
- */
- public function verifyArtist(int $user_id, int $verified_by = 0):bool
- {
- $user = get_userdata($user_id);
-
- // Check if user has the artist role
- if (!array_intersect(array_map(function ($role) { return BASE.$role; }, $this->userTypes), $user->roles)) {
- return false;
- }
-
- // Add the capability
- $user->add_cap('skip_moderation', true);
-
- // Store verification metadata
- update_user_meta($user_id, BASE . 'verification_date', current_time('mysql'));
- if ($verified_by) {
- update_user_meta($user_id, BASE . 'verified_by', $verified_by);
- }
-
- return true;
- }
-
- /**
- * Mark an artist as verified
- *
- * @param int $user_id The user to verify
- * @param int $verified_by ID of user who verified them (optional)
- *
- * @return bool Success status
- */
- public function unverifyArtist(int $user_id, int $verified_by = 0):bool
- {
- $user = get_userdata($user_id);
-
- // Check if user has the artist role
- if (!array_intersect(array_map(function ($role) { return BASE.$role; }, $this->userTypes), $user->roles)) {
- return false;
- }
-
- // Add the capability
- $user->add_cap('skip_moderation', false);
-
- // Store verification metadata
- update_user_meta($user_id, BASE . 'unverification_date', current_time('mysql'));
- if ($verified_by) {
- update_user_meta($user_id, BASE . 'unverified_by', $verified_by);
- }
-
- return true;
- }
-
- /**
* Record an approval vote for an artist
*
* @param int $user_id User casting the approval vote
@@ -394,57 +138,6 @@
return $this->handleVote(jvbUserRole($user_id), $vote, $request_id, $user_id, $notes);
}
- /**
- * Complete verification - REFACTORED
- */
- protected function completeVerification(int $request_id, string $type = 'artist'): void
- {
- $tableName = $this->getTableName($type, 'requests');
- $table = CustomTable::for($tableName);
-
- $table->where(['id' => $request_id])->updateResults([
- 'status' => 'approved',
- 'approved_at' => current_time('mysql')
- ]);
-
- $request = $table->where(['id' => $request_id])->first();
-
- if ($request && $request->user_id) {
- $user = new \WP_User($request->user_id);
- $user->add_cap('skip_moderation', true);
-
- JVB()->notification()->addNotification(
- $request->user_id,
- 'approval_granted',
- ['message' => 'Your account has been verified!']
- );
- }
-
- $this->cache->flush();
- }
-
- protected function denyVerification(int $request_id, string $type = 'artist'): void
- {
- $tableName = $this->getTableName($type, 'requests');
- $table = CustomTable::for($tableName);
-
- $table->where(['id' => $request_id])->updateResults([
- 'status' => 'rejected',
- 'rejected_at' => current_time('mysql')
- ]);
-
- $request = $table->where(['id' => $request_id])->first();
-
- if ($request && $request->user_id) {
- JVB()->notification()->addNotification(
- $request->user_id,
- 'approval_denied',
- ['message' => 'Your verification request was not approved.']
- );
- }
-
- $this->cache->flush();
- }
/**
* Get verification details for a request
@@ -456,25 +149,16 @@
*/
public function getVerificationDetails(int $requestID, string $type): array|false
{
- $requestTable = CustomTable::for($this->getTableName($type, 'requests'));
- $voteTable = CustomTable::for($this->getTableName($type, 'votes'));
-
- $request = $requestTable->where(['id' => $requestID])->first(ARRAY_A);
-
+ $request = JVB()->approvals()->getRequest($requestID, $type);
if (!$request) {
return false;
}
-
- // Get the votes for this request
- $votes = $voteTable
- ->where(['request_id' => $request['id']])
- ->orderBy('created_at', 'ASC')
- ->getResults(ARRAY_A);
+ $votes = JVB()->approvals()->getVotes($requestID, $type);
// Join with user data for display names
foreach ($votes as &$vote) {
$user = get_userdata($vote['user_id']);
- $vote['approver_name'] = $user ? $user->display_name : 'Unknown';
+ $vote['approver_name'] = $user ? jvbGetUsername($vote['user_id']) : 'Someone';
}
return [
@@ -484,139 +168,7 @@
];
}
- /*************
- * Term Approvals
- ************/
- public function voteForTerm(int $user_id, int $request_id, string $vote, string $notes = ''):bool
- {
- return $this->handleVote('term', $vote, $user_id, $request_id, $notes);
- }
- /**
- * Publish an approved term
- *
- * @param object $request Approval request object
- *
- * @return boolean Success or failure
- */
- protected function makeTermLive(object $request): bool
- {
- try {
- $taxonomy = $request->taxonomy;
- $term_name = $request->name;
- $parent = $request->parent;
-
- $result = wp_insert_term($term_name, $taxonomy, [
- 'parent' => $parent
- ]);
-
- if (is_wp_error($result)) {
- throw new Exception($result->get_error_message());
- }
-
- $term_id = $result['term_id'];
-
- // Update request status
- CustomTable::for($this->getTableName('term', 'requests'))
- ->where(['id' => $request->id])
- ->updateResults([
- 'status' => 'approved',
- 'created_term' => $term_id
- ]);
-
- $userIDs = [];
- $approvedBy = [];
- $approvers = json_decode($request->approved_by, true) ?: [];
- $requesters = json_decode($request->requested_by, true) ?: [];
- $rejectors = json_decode($request->rejected_by, true) ?: [];
-
- foreach (array_merge($requesters, $approvers, $rejectors) as $user_id => $info) {
- $userIDs[] = $user_id;
- }
- foreach ($approvers as $user_id => $info) {
- $approvedBy[] = $info['name'];
- }
-
- $approvedBy = jvbCommaList($approvedBy);
-
- JVB()->notification()->addNotification(
- $userIDs,
- 'term_approved',
- [
- 'term_id' => $term_id,
- 'term_name' => $term_name,
- 'taxonomy' => $taxonomy,
- 'approved_by' => $approvedBy
- ]
- );
-
- return true;
- } catch (Exception $e) {
- $this->logError('makeTermLive', [
- 'error' => $e->getMessage(),
- 'request_id' => $request->id,
- 'term_name' => $term_name ?? '',
- 'taxonomy' => $taxonomy ?? ''
- ]);
-
- return false;
- }
- }
- /**
- * Reject a proposed term
- *
- * @param object $request request object
- *
- * @return boolean Success or failure
- */
- protected function makeTermUnalive(object $request): bool
- {
- try {
- // Update request status
- CustomTable::for($this->getTableName('term', 'requests'))
- ->where(['id' => $request->id])
- ->updateResults([
- 'status' => 'rejected'
- ]);
-
- $userIDs = [];
- $rejectedBy = [];
-
- $approvers = json_decode($request->approved_by, true) ?: [];
- $requesters = json_decode($request->requested_by, true) ?: [];
- $rejectors = json_decode($request->rejected_by, true) ?: [];
-
- foreach (array_merge($requesters, $approvers, $rejectors) as $user_id => $info) {
- $userIDs[] = $user_id;
- }
- foreach ($rejectors as $user_id => $info) {
- $rejectedBy[] = $info['name'];
- }
-
- $rejectedBy = jvbCommaList($rejectedBy);
-
- JVB()->notification()->addNotification(
- $userIDs,
- 'term_rejected',
- [
- 'term_name' => $request->name,
- 'taxonomy' => $request->taxonomy,
- 'rejected_by' => $rejectedBy
- ]
- );
-
- return true;
- } catch (Exception $e) {
- $this->logError('makeTermUnalive', [
- 'error' => $e->getMessage(),
- 'request_id' => $request->id,
- 'term_name' => $request->name ?? '',
- 'taxonomy' => $request->taxonomy ?? ''
- ]);
-
- return false;
- }
- }
/**
* Create a new term approval request
@@ -636,80 +188,14 @@
int $parent = 0,
int $required_approvals = 3
): int|false {
- $table = CustomTable::for($this->getTableName('term', 'requests'));
- try {
- return $table->transaction(function($table) use ($user_id, $taxonomy, $name, $parent, $required_approvals) {
- // Check for existing request
- $existing = $table->where([
- 'name' => $name,
- 'taxonomy' => $taxonomy,
- 'parent' => $parent,
- 'status' => 'pending'
- ])->first();
-
- if ($existing) {
- $requestedBy = json_decode($existing->requested_by, true) ?: [];
-
- if (isset($requestedBy[$user_id])) {
- return (int)$existing->id;
- }
-
- $requestedBy[$user_id] = get_userdata($user_id)->display_name;
-
- $table->where(['id' => $existing->id])->updateResults([
- 'requested_by' => json_encode($requestedBy)
- ]);
-
- return (int)$existing->id;
- }
-
- // Create new request
- return $this->createApprovalRequest('term', [
- 'taxonomy' => $taxonomy,
- 'name' => $name,
- 'parent' => $parent ?: null,
- 'status' => 'pending',
- 'required_approvals' => $required_approvals,
- 'current_approvals' => 0,
- 'current_rejections' => 0,
- 'requested_by' => json_encode([$user_id => get_userdata($user_id)->display_name]),
- 'expires_at' => date('Y-m-d H:i:s', strtotime('+30 days')),
- ]);
- });
- } catch (Exception $e) {
- $this->logError('createTermApprovalRequest', [
- 'error' => $e->getMessage(),
- 'user_id' => $user_id,
- 'taxonomy' => $taxonomy,
- 'name' => $name
- ]);
-
- return false;
- }
- }
- /**
- * Clean up expired approval requests and notify admin
- *
- * @return void
- */
- public function cleanupExpiredApprovals(): void
- {
- $now = current_time('mysql');
-
- foreach ($this->allTypes as $type) {
- $tableName = $this->getTableName($type, 'requests');
-
- CustomTable::for($tableName)->query(
- "UPDATE {table}
- SET status = 'expired'
- WHERE status = 'pending'
- AND expires_at < %s",
- [$now]
- );
- }
-
- $this->cache->flush();
+ $result = JVB()->approvals()->createApproval(
+ $user_id,
+ $taxonomy,
+ $name,
+ $parent
+ );
+ return $result['success'];
}
protected function getTableName(string $type, string $suffix): string
@@ -751,6 +237,7 @@
private function getUserApprovals(string $status = 'pending'): array
{
+
$table = CustomTable::for($this->getTableName('artist', 'requests'));
$query = $table;
diff --git a/inc/rest/routes/FeedRoutes.php b/inc/rest/routes/FeedRoutes.php
index 5bc384c..4efc099 100644
--- a/inc/rest/routes/FeedRoutes.php
+++ b/inc/rest/routes/FeedRoutes.php
@@ -338,7 +338,7 @@
protected function getAuthorData(WP_Post $post)
{
$author = $post->post_author;
- $userLink = get_user_meta($author, BASE.'link', true);
+ $userLink = get_user_meta($author, BASE.'profile_link', true);
return $this->cache->remember(
$userLink,
function () use ($userLink, $author) {
diff --git a/inc/rest/routes/LoginRoutes.php b/inc/rest/routes/LoginRoutes.php
index 6f78184..0ef1550 100644
--- a/inc/rest/routes/LoginRoutes.php
+++ b/inc/rest/routes/LoginRoutes.php
@@ -631,17 +631,17 @@
}
// Check if role is valid and can register
- $role_config = JVB_USER[$user_select] ?? null;
+ $registrar = Registrar::getInstance($user_select);
- if (!$role_config) {
+ if (!$registrar) {
return new WP_Error('invalid_role', 'Invalid role selected.');
}
- if (!($role_config['can_register'] ?? false)) {
+ if (!($registrar->hasFeature('can_register') ?? false)) {
return new WP_Error('role_not_allowed', 'This role cannot be selected during registration.');
}
- return BASE . $user_select;
+ return $registrar->getBased();
}
/**
diff --git a/inc/rest/routes/NotificationsRoutes.php b/inc/rest/routes/NotificationsRoutes.php
index 1b65a1f..e1ea571 100644
--- a/inc/rest/routes/NotificationsRoutes.php
+++ b/inc/rest/routes/NotificationsRoutes.php
@@ -134,7 +134,7 @@
public function init(): void
{
$this->manager = JVB()->notification();
- $this->notification_types = $this->manager->getNotificationTypes();
+ $this->notification_types = $this->manager->getNotificationTypes(true);
}
/**
diff --git a/inc/rest/routes/ReferralRoutes.php b/inc/rest/routes/ReferralRoutes.php
index bd8ab1d..2ef284a 100644
--- a/inc/rest/routes/ReferralRoutes.php
+++ b/inc/rest/routes/ReferralRoutes.php
@@ -1,6 +1,7 @@
<?php
namespace JVBase\rest\routes;
+use JVBase\base\Site;
use JVBase\importers\JaneAppClientImporter;
use JVBase\importers\JaneAppSalesImporter;
use JVBase\managers\CustomTable;
@@ -611,7 +612,7 @@
// Import using JaneAppClientImporter
$importer = new JaneAppClientImporter();
- $default_role = get_option(BASE . 'referral_role', JVB_USER);
+ $default_role = get_option(BASE . 'referral_role', Site::getDefaultReferralRole());
$options = [
'update_existing' => true,
diff --git a/inc/rest/routes/TermRoutes.php b/inc/rest/routes/TermRoutes.php
index ac27d9b..8954448 100644
--- a/inc/rest/routes/TermRoutes.php
+++ b/inc/rest/routes/TermRoutes.php
@@ -236,7 +236,7 @@
if ($request->get_param('main_context') && in_array(jvbCheckBase(json_decode($request->get_param('main_context'), true)['context']), jvbUserTypes())) {
$main_context = json_decode($request->get_param('main_context'), true);
- $userID = get_post_meta($main_context['id'], BASE.'link', true);
+ $userID = get_post_meta($main_context['id'], BASE.'profile_link', true);
$manager = new UserTermsManager();
$related = $manager->fetchUserTerms($userID, $taxonomy);
diff --git a/inc/rest/routes/UploadRoutes.php b/inc/rest/routes/UploadRoutes.php
index a31212e..5222e4d 100644
--- a/inc/rest/routes/UploadRoutes.php
+++ b/inc/rest/routes/UploadRoutes.php
@@ -180,7 +180,7 @@
!array_key_exists('post_id', $data) &&
!array_key_exists('term_id', $data) &&
!array_key_exists('item_id', $data)) {
- $args['post_id'] = (int)get_user_meta((int) $value, BASE.'link', true);
+ $args['post_id'] = (int)get_user_meta((int) $value, BASE.'profile_link', true);
}
}
break;
@@ -639,7 +639,7 @@
} elseif (array_key_exists('term_id', $data)) {
$meta = Meta::forTerm($data['term_id']);
} else {
- $link = (int)get_user_meta($data['user'], BASE.'link');
+ $link = (int)get_user_meta($data['user'], BASE.'profile_link');
$meta = Meta::forPost($link);
}
diff --git a/inc/ui/CRUDSkeleton.php b/inc/ui/CRUDSkeleton.php
index 4e6d8ba..c62f3a4 100644
--- a/inc/ui/CRUDSkeleton.php
+++ b/inc/ui/CRUDSkeleton.php
@@ -1,6 +1,7 @@
<?php
namespace JVBase\ui;
+use JVBase\base\Site;
use JVBase\managers\UserTermsManager;
use JVBase\meta\Form;
use JVBase\registrar\Registrar;
@@ -234,7 +235,7 @@
protected function taxConfig(string $taxonomy, string $label = ''):array
{
- $isVerified = jvbUserIsVerified();
+ $isVerified = $this->userIsVerified();
$label = ($label === '') ? Registrar::getInstance($taxonomy)->getPlural() : $label;
return [
'type' => 'taxonomy',
@@ -246,6 +247,13 @@
];
}
+ protected function userIsVerified():bool
+ {
+ $membership = Site::membership();
+
+ return !($membership && $membership->has('member_verified')) || current_user_can('skip_moderation');
+ }
+
public function addSearch():self
{
$this->hasSearch = true;
diff --git a/inc/utility/Checker.php b/inc/utility/Checker.php
deleted file mode 100644
index 2cb420f..0000000
--- a/inc/utility/Checker.php
+++ /dev/null
@@ -1,305 +0,0 @@
-<?php
-namespace JVBase\utility;
-
-if (!defined('ABSPATH')) {
- exit;
-}
-/**
- * @deprecated Use Registrar.php directly
- * Centralized registry for all content types, taxonomies, and user roles
- * Provides a single source of truth and caching layer
- */
-class Checker
-{
- private static ?Checker $instance = null;
- private array $cache = [];
- private array $relationships = [];
-
- // Cache keys for different registries
- const CACHE_CONTENT = 'content_types';
- const CACHE_TAXONOMIES = 'taxonomies';
- const CACHE_USER_ROLES = 'user_roles';
- const CACHE_RELATIONSHIPS = 'relationships';
-
- private function __construct()
- {
- $this->initialize();
- }
-
- public static function getInstance(): self
- {
- if (self::$instance === null) {
- self::$instance = new self();
- }
- return self::$instance;
- }
-
- /**
- * Initialize all registries and build relationships
- */
- private function initialize(): void
- {
- // Build initial caches
- $this->buildRelationships();
-
- // Set up WordPress hooks for cache invalidation
- add_action('init', [$this, 'validateRegistrations'], 1);
- add_action('registered_post_type', [$this, 'invalidateContentCache']);
- add_action('registered_taxonomy', [$this, 'invalidateTaxonomyCache']);
- }
-
- /**
- * Get all content types with optional filtering
- */
- public function getContentTypes(array $filters = []): array
- {
- $content = $this->cache[self::CACHE_CONTENT] ?? [];
-
- if (empty($filters)) {
- return $content;
- }
-
- return $this->applyFilters($content, $filters);
- }
-
- /**
- * Get all taxonomies with optional filtering
- */
- public function getTaxonomies(array $filters = []): array
- {
- $taxonomies = $this->cache[self::CACHE_TAXONOMIES] ?? [];
-
- if (empty($filters)) {
- return $taxonomies;
- }
-
- return $this->applyFilters($taxonomies, $filters);
- }
-
- /**
- * Get user roles with specific capabilities
- */
- public function getUserRoles(array $filters = []): array
- {
- $roles = $this->cache[self::CACHE_USER_ROLES] ?? [];
-
- if (empty($filters)) {
- return $roles;
- }
-
- return $this->applyFilters($roles, $filters);
- }
-
- /**
- * Get taxonomies for a specific content type
- */
- public function getTaxonomiesForContent(string $contentType): array
- {
- $contentType = jvbNoBase($contentType);
- return $this->relationships['content_taxonomies'][$contentType] ?? [];
- }
-
- /**
- * Get content types for a specific taxonomy
- */
- public function getContentForTaxonomy(string $taxonomy): array
- {
- $taxonomy = jvbNoBase($taxonomy);
- return $this->relationships['taxonomy_content'][$taxonomy] ?? [];
- }
-
- /**
- * Get content types a user role can create
- */
- public function getCreatableContent(string $role): array
- {
- $role = jvbNoBase($role);
- return $this->relationships['role_content'][$role] ?? [];
- }
-
- /**
- * Check if a type has a specific feature
- */
- public function hasFeature(string $type, string $feature, string $registry = 'content'): bool
- {
- $type = jvbNoBase($type);
-
- $data = match ($registry) {
- 'content' => $this->cache[self::CACHE_CONTENT][$type] ?? [],
- 'taxonomy' => $this->cache[self::CACHE_TAXONOMIES][$type] ?? [],
- 'user' => $this->cache[self::CACHE_USER_ROLES][$type] ?? [],
- default => []
- };
-
- return isset($data[$feature]) && $data[$feature] === true;
- }
-
- /**
- * Get all types with a specific feature
- */
- public function getTypesWithFeature(string $feature, string $registry = 'content'): array
- {
- $filters = [$feature => true];
-
- return match ($registry) {
- 'content' => $this->getContentTypes($filters),
- 'taxonomy' => $this->getTaxonomies($filters),
- 'user' => $this->getUserRoles($filters),
- default => []
- };
- }
-
-
- /**
- * Build relationships between types
- */
- private function buildRelationships(): void
- {
- // Content -> Taxonomies
- foreach ($this->cache[self::CACHE_CONTENT] as $contentSlug => $content) {
- $this->relationships['content_taxonomies'][$contentSlug] = [];
- }
-
- // Taxonomy -> Content
- foreach ($this->cache[self::CACHE_TAXONOMIES] as $taxSlug => $taxonomy) {
- $this->relationships['taxonomy_content'][$taxSlug] = $taxonomy['for_content'] ?? [];
-
- // Build reverse relationship
- foreach ($taxonomy['for_content'] ?? [] as $contentType) {
- $this->relationships['content_taxonomies'][$contentType][] = $taxSlug;
- }
- }
-
- // User Role -> Content
- foreach ($this->cache[self::CACHE_USER_ROLES] as $roleSlug => $role) {
- $this->relationships['role_content'][$roleSlug] = $role['_creatable_content'];
- }
-
- $this->cache[self::CACHE_RELATIONSHIPS] = $this->relationships;
- }
-
- /**
- * Apply filters to a registry array
- */
- private function applyFilters(array $data, array $filters): array
- {
- return array_filter($data, function ($item) use ($filters) {
- foreach ($filters as $key => $value) {
- if (!isset($item[$key]) || $item[$key] !== $value) {
- return false;
- }
- }
- return true;
- });
- }
-
- /**
- * Extract creatable content from user role config
- */
- private function extractCreatableContent(array $config): array
- {
- $content = [];
-
- foreach ($config['can_create'] ?? [] as $item) {
- if (is_array($item)) {
- foreach ($item as $type => $contents) {
- $content = array_merge($content, $contents);
- }
- } else {
- $content[] = $item;
- }
- }
-
- return array_unique($content);
- }
-
- /**
- * Check if content type supports dashboard
- */
- private function computesDashboardSupport(array $config): bool
- {
- return !empty($config['fields']) ||
- !empty($config['sections']) ||
- ($config['show_dashboard'] ?? false);
- }
-
- /**
- * Check if content type is a user profile type
- */
- private function computesUserType(array $config): bool
- {
- foreach ($this->cache[self::CACHE_USER_ROLES] ?? [] as $role) {
- if (($role['profile'] ?? '') === $config['_slug']) {
- return true;
- }
- }
- return false;
- }
-
- /**
- * Validate all registrations are properly set up
- */
- public function validateRegistrations(): void
- {
- $errors = [];
-
- // Validate taxonomy relationships
- foreach ($this->getTaxonomies() as $taxSlug => $taxonomy) {
- foreach ($taxonomy['for_content'] ?? [] as $contentType) {
- if (!isset($this->cache[self::CACHE_CONTENT][$contentType])) {
- $errors[] = "Taxonomy '{$taxSlug}' references non-existent content type '{$contentType}'";
- }
- }
- }
-
- // Validate user role content permissions
- foreach ($this->getUserRoles() as $roleSlug => $role) {
- foreach ($role['_creatable_content'] as $contentType) {
- if (!isset($this->cache[self::CACHE_CONTENT][$contentType]) &&
- !isset($this->cache[self::CACHE_TAXONOMIES][$contentType])) {
- $errors[] = "Role '{$roleSlug}' references non-existent type '{$contentType}'";
- }
- }
- }
-
- if (!empty($errors) && WP_DEBUG) {
- foreach ($errors as $error) {
- error_log("[Checker Validation] {$error}");
- }
- }
- }
-
- /**
- * Invalidate content cache
- */
- public function invalidateContentCache(): void
- {
- unset($this->cache[self::CACHE_CONTENT]);
- $this->buildContentCache();
- $this->buildRelationships();
- }
-
- /**
- * Invalidate taxonomy cache
- */
- public function invalidateTaxonomyCache(): void
- {
- unset($this->cache[self::CACHE_TAXONOMIES]);
- $this->buildTaxonomyCache();
- $this->buildRelationships();
- }
-
- /**
- * Get registry statistics for debugging
- */
- public function getStats(): array
- {
- return [
- 'content_types' => count($this->cache[self::CACHE_CONTENT] ?? []),
- 'taxonomies' => count($this->cache[self::CACHE_TAXONOMIES] ?? []),
- 'user_roles' => count($this->cache[self::CACHE_USER_ROLES] ?? []),
- 'relationships' => count($this->relationships),
- 'cache_size' => strlen(serialize($this->cache))
- ];
- }
-}
diff --git a/inc/utility/Features.php b/inc/utility/Features.php
deleted file mode 100644
index 422bad3..0000000
--- a/inc/utility/Features.php
+++ /dev/null
@@ -1,833 +0,0 @@
-<?php
-namespace JVBase\utility;
-
-if (!defined('ABSPATH')) {
- exit;
-}
-/**
- * FeatureFlags - Advanced feature detection and management
- *
- * Replaces repetitive jvbCheck() calls with a more elegant API
- * Supports caching, bulk checks, and feature dependencies
- */
-class Features
-{
- private array $config;
- private string $type;
- private string $slug;
- private array $cache = [];
- private static array $globalCache = [];
-
- // Common feature groups for quick reference
- const CONTENT_FEATURES = [
- 'hide_single', 'show_feed', 'show_directory', 'karma',
- 'favouritable', 'responses', 'is_calendar', 'single_image',
- 'redirectToAuthor', 'syncWithSquare', 'approve_new', 'is_gallery'
- ];
-
- const TAXONOMY_FEATURES = [
- 'show_feed', 'show_directory', 'is_content', 'is_ownable',
- 'karma', 'verify_entry', 'approve_new', 'track_changes',
- 'invitable', 'associate_user_content', 'is_favouritable'
- ];
-
- const USER_FEATURES = [
- 'has_dashboard', 'can_register', 'invitable', 'approve_new',
- 'keep_stats', 'can_favourite', 'member_verified'
- ];
-
- const SITE_FEATURES = [
- 'dashboard', 'favourites', 'enthusiast', 'forum', 'notifications',
- 'has_support', 'has_membership', 'use_feed_block', 'square',
- 'gmb', 'umami', 'cloudflare', 'facebook', 'instagram', 'bluesky',
- 'social', 'limit_hours'
- ];
-
- /**
- * Constructor for type-specific feature flags
- */
- public function __construct(array $config = [], string $type = '', string $slug = '')
- {
- $this->config = $config;
- $this->type = $type;
- $this->slug = $slug;
- }
-
- /**
- * Create from a specific content type
- */
- public static function forContent(string $slug): self
- {
- $slug = jvbNoBase($slug);
- if (!isset(JVB_CONTENT[$slug])) {
- return new self([], 'content', $slug);
- }
- return new self(JVB_CONTENT[$slug], 'content', $slug);
- }
-
- public static function hasIntegration(string $integration, string $type = 'site', ?string $subType = null):bool
- {
- $allowedTypes = ['site', 'content', 'taxonomy', 'user'];
- if (!in_array($type, $allowedTypes)) {
- return false;
- }
- if (in_array($type, ['content', 'taxonomy', 'user']) && !$subType) {
- return false;
- }
- switch ($type) {
- case 'site':
- $feature = (array_key_exists('integrations', JVB_SITE)) ? new self(JVB_SITE['integrations'], 'integrations', 'site-integrations') : new self([], 'integrations', 'site-integrations');
- break;
- case 'content':
- $feature = (!isset(JVB_CONTENT[$subType])|| !array_key_exists('integrations', JVB_CONTENT[$subType])) ? new self([], 'integrations', 'content-integrations') : new self(JVB_CONTENT[$subType]['integrations'], 'integrations', 'content-integrations');
- break;
- case 'taxonomy':
- $feature = (!isset(JVB_TAXONOMY[$subType])|| !array_key_exists('integrations', JVB_TAXONOMY[$subType])) ? new self([], 'integrations', 'taxonomy-integrations') : new self(JVB_TAXONOMY[$subType]['integrations'], 'integrations', 'taxonomy-integrations');
- break;
- case 'user':
- $feature = (!isset(JVB_USER[$subType])|| !array_key_exists('integrations', JVB_USER[$subType])) ? new self([], 'integrations', 'user-integrations') : new self(JVB_USER[$subType]['integrations'], 'integrations', 'user-integrations');
- break;
- default:
- return false;
- }
- return $feature->has($integration);
- }
-
- public static function hasAnyIntegration(string $type = 'site', ?string $subType = null):bool
- {
- $allowedTypes = ['site', 'content', 'taxonomy', 'user'];
- if (!in_array($type, $allowedTypes)) {
- return false;
- }
- if (in_array($type, ['content', 'taxonomy', 'user']) && !$subType) {
- return false;
- }
- switch ($type) {
- case 'site':
- return (array_key_exists('integrations', JVB_SITE) && !empty(JVB_SITE['integrations']));
- case 'content':
- return (array_key_exists($subType, JVB_CONTENT) && array_key_exists('integrations', JVB_CONTENT[$subType]) && !empty(JVB_CONTENT[$subType]['integrations']));
- case 'taxonomy':
- return (array_key_exists($subType, JVB_TAXONOMY) && array_key_exists('integrations', JVB_TAXONOMY[$subType]) && !empty(JVB_TAXONOMY[$subType]['integrations']));
- case 'user':
- return (array_key_exists($subType, JVB_USER) && array_key_exists('integrations', JVB_USER[$subType]) && !empty(JVB_USER[$subType]['integrations']));
- default:
- return false;
- }
- }
- /**
- * Create from a specific taxonomy
- */
- public static function forTaxonomy(string $slug): self
- {
- $slug = jvbNoBase($slug);
- if (!isset(JVB_TAXONOMY[$slug])) {
- return new self([], 'taxonomy', $slug);
- }
- return new self(JVB_TAXONOMY[$slug], 'taxonomy', $slug);
- }
-
- /**
- * Create from a specific user role
- */
- public static function forUser(string $slug): self
- {
- $slug = jvbNoBase($slug);
- if (!isset(JVB_USER[$slug])) {
- return new self([], 'user', $slug);
- }
- return new self(JVB_USER[$slug], 'user', $slug);
- }
-
- /**
- * Create for site-wide features
- */
- public static function forSite(): self
- {
- return new self(JVB_SITE ?? [], 'site', 'site');
- }
-
- /**
- * Create for membership features
- */
- public static function forMembership(): self
- {
- return new self(JVB_MEMBERSHIP ?? [], 'membership', 'membership');
- }
-
- /**
- * Check if a single feature is enabled
- */
- public function has(string $feature): bool
- {
- // Check cache first
- $cacheKey = $this->getCacheKey($feature);
- if (isset($this->cache[$cacheKey])) {
- return $this->cache[$cacheKey];
- }
-
- // Perform the check
- $result = isset($this->config[$feature]) && $this->config[$feature] === true;
-
- // Cache the result
- $this->cache[$cacheKey] = $result;
-
- return $result;
- }
-
- /**
- * Check if ALL specified features are enabled
- */
- public function hasAll(array $features): bool
- {
- foreach ($features as $feature) {
- if (!$this->has($feature)) {
- return false;
- }
- }
- return true;
- }
-
- /**
- * Check if ANY of the specified features are enabled
- */
- public function hasAny(array $features): bool
- {
- foreach ($features as $feature) {
- if ($this->has($feature)) {
- return true;
- }
- }
- return false;
- }
-
- /**
- * Check if NONE of the specified features are enabled
- */
- public function hasNone(array $features): bool
- {
- return !$this->hasAny($features);
- }
-
- /**
- * Get all enabled features
- */
- public function getEnabled(): array
- {
- $enabled = [];
-
- // Determine which features to check based on type
- $featuresToCheck = $this->getFeatureList();
-
- foreach ($featuresToCheck as $feature) {
- if ($this->has($feature)) {
- $enabled[] = $feature;
- }
- }
-
- return $enabled;
- }
-
- /**
- * Get all disabled features
- */
- public function getDisabled(): array
- {
- $disabled = [];
- $featuresToCheck = $this->getFeatureList();
-
- foreach ($featuresToCheck as $feature) {
- if (!$this->has($feature)) {
- $disabled[] = $feature;
- }
- }
-
- return $disabled;
- }
-
- /**
- * Check feature with a default value if not set
- */
- public function get(string $feature, bool $default = false): bool
- {
- if (!isset($this->config[$feature])) {
- return $default;
- }
- return $this->has($feature);
- }
-
- /**
- * Check if a feature is explicitly set (regardless of value)
- */
- public function isSet(string $feature): bool
- {
- return isset($this->config[$feature]);
- }
-
- /**
- * Get the raw value of a feature (not just boolean)
- */
- public function getValue(string $feature, $default = null)
- {
- return $this->config[$feature] ?? $default;
- }
-
- /**
- * Check features with dependencies
- */
- public function hasWithDependencies(string $feature): bool
- {
- if (!$this->has($feature)) {
- return false;
- }
-
- // Check dependencies based on feature
- $dependencies = $this->getFeatureDependencies($feature);
-
- return $this->hasAll($dependencies);
- }
-
- /**
- * Global feature checks across all types
- */
- public static function anyContentHas(string $feature): bool
- {
- $cacheKey = "content_any_{$feature}";
-
- if (isset(self::$globalCache[$cacheKey])) {
- return self::$globalCache[$cacheKey];
- }
- foreach (JVB_CONTENT as $slug => $config) {
- $flags = new self($config, 'content', $slug);
- if ($flags->has($feature)) {
- self::$globalCache[$cacheKey] = true;
- return true;
- }
- }
-
- self::$globalCache[$cacheKey] = false;
- return false;
- }
-
- /**
- * Check if any taxonomy has a feature
- */
- public static function anyTaxonomyHas(string $feature): bool
- {
- $cacheKey = "taxonomy_any_{$feature}";
-
- if (isset(self::$globalCache[$cacheKey])) {
- return self::$globalCache[$cacheKey];
- }
-
- foreach (JVB_TAXONOMY as $slug => $config) {
- $flags = new self($config, 'taxonomy', $slug);
- if ($flags->has($feature)) {
- self::$globalCache[$cacheKey] = true;
- return true;
- }
- }
-
- self::$globalCache[$cacheKey] = false;
- return false;
- }
-
- /**
- * Check if any user role has a feature
- */
- public static function anyUserHas(string $feature): bool
- {
- $cacheKey = "user_any_{$feature}";
-
- if (isset(self::$globalCache[$cacheKey])) {
- return self::$globalCache[$cacheKey];
- }
-
- foreach (JVB_USER as $slug => $config) {
- $flags = new self($config, 'user', $slug);
- if ($flags->has($feature)) {
- self::$globalCache[$cacheKey] = true;
- return true;
- }
- }
-
- self::$globalCache[$cacheKey] = false;
- return false;
- }
-
- /**
- * Get all types with a specific feature
- */
- public static function getTypesWithFeature(string $feature, string $type = 'content'): array
- {
- $types = [];
-
- $source = match ($type) {
- 'content' => JVB_CONTENT,
- 'taxonomy' => JVB_TAXONOMY,
- 'user' => JVB_USER,
- default => []
- };
-
- foreach ($source as $slug => $config) {
- $flags = new self($config, $type, $slug);
- if ($flags->has($feature)) {
- $types[] = $slug;
- }
- }
-
- return $types;
- }
-
- /**
- * Count types with a feature
- */
- public static function countWithFeature(string $feature, string $type = 'content'): int
- {
- return count(self::getTypesWithFeature($feature, $type));
- }
-
- /**
- * Check complex feature combinations
- */
- public function meetsRequirements(array $requirements): bool
- {
- foreach ($requirements as $requirement => $expected) {
- if (is_array($expected)) {
- // Handle OR conditions
- if (!$this->hasAny($expected)) {
- return false;
- }
- } elseif (is_bool($expected)) {
- // Handle boolean requirements
- if ($this->has($requirement) !== $expected) {
- return false;
- }
- } elseif (is_callable($expected)) {
- // Handle custom validation
- if (!$expected($this->getValue($requirement))) {
- return false;
- }
- }
- }
-
- return true;
- }
-
- /**
- * Get feature statistics
- */
- public function getStats(): array
- {
- $all = $this->getFeatureList();
- $enabled = $this->getEnabled();
-
- return [
- 'total' => count($all),
- 'enabled' => count($enabled),
- 'disabled' => count($all) - count($enabled),
- 'percentage' => count($all) > 0 ? round((count($enabled) / count($all)) * 100, 2) : 0
- ];
- }
-
- /**
- * Export configuration for debugging
- */
- public function export(): array
- {
- return [
- 'type' => $this->type,
- 'slug' => $this->slug,
- 'features' => $this->getEnabled(),
- 'config' => $this->config
- ];
- }
-
- /**
- * Check if configuration supports a specific workflow
- */
- public function supportsWorkflow(string $workflow): bool
- {
- $workflows = [
- 'moderation' => ['approve_new', 'member_verified'],
- 'social' => ['karma', 'responses', 'favouritable'],
- 'calendar' => ['is_calendar'],
- 'directory' => ['show_directory'],
- 'ownership' => ['is_ownable', 'is_owned_by'],
- 'dashboard' => ['has_dashboard'],
- 'public_profile' => ['has_dashboard', 'profile'],
- 'content_creation' => ['can_create'],
- 'invitation' => ['invitable', 'can_invite'],
- 'feed' => ['show_feed', 'use_feed_block'],
- 'ecommerce' => ['square', 'syncWithSquare'],
- 'analytics' => ['keep_stats', 'umami'],
- 'forum' => ['forum', 'responses']
- ];
-
- if (!isset($workflows[$workflow])) {
- return false;
- }
-
- return $this->hasAny($workflows[$workflow]);
- }
-
- /**
- * Get feature dependencies
- */
- private function getFeatureDependencies(string $feature): array
- {
- $dependencies = [
- 'responses' => ['forum'],
- 'karma' => ['member_verified'],
- 'invitable' => ['can_invite'],
- 'keep_stats' => ['has_dashboard'],
- 'syncWithSquare' => ['square']
- ];
-
- return $dependencies[$feature] ?? [];
- }
-
- /**
- * Get list of features based on type
- */
- private function getFeatureList(): array
- {
- return match ($this->type) {
- 'content' => self::CONTENT_FEATURES,
- 'taxonomy' => self::TAXONOMY_FEATURES,
- 'user' => self::USER_FEATURES,
- 'site' => self::SITE_FEATURES,
- 'membership' => array_keys($this->config),
- default => array_keys($this->config)
- };
- }
-
- /*****************************************************************
- * Dashboard Utilitiies
- *****************************************************************/
- /**
- * Get content types that a user role can create
- * Extracts and flattens from 'can_create' config
- *
- * @return array Array of content type slugs
- *
- * Usage:
- * Features::forUser('artist')->getCreatableContent()
- * // Returns: ['tattoo', 'piercing', 'artwork']
- */
- public function getCreatableContent(): array
- {
- if ($this->type !== 'user') {
- return [];
- }
-
- $canCreate = $this->getValue('can_create', []);
-
- if (empty($canCreate)) {
- return [];
- }
-
- $content = [];
-
- foreach ($canCreate as $item) {
- if (is_array($item)) {
- // Handle nested arrays like ['shop' => ['tattoo', 'piercing']]
- foreach ($item as $type => $contents) {
- $content = array_merge($content, $contents);
- }
- } else {
- // Handle simple strings
- $content[] = $item;
- }
- }
-
- return array_unique($content);
- }
-
- /**
- * Get all dashboard pages for a user role
- * Includes profile, creatable content, and settings
- *
- * @return array Array of page slugs
- *
- * Usage:
- * Features::forUser('artist')->getDashboardPages()
- * // Returns: ['artist-profile', 'tattoo', 'piercing', 'settings']
- */
- public function getDashboardPages(): array
- {
- if ($this->type !== 'user') {
- return [];
- }
-
- $pages = [];
-
- // Add profile page if configured
- $profile = $this->getValue('profile');
- if ($profile) {
- $pages[] = $profile;
- }
-
- // Add creatable content types
- $pages = array_merge($pages, $this->getCreatableContent());
-
- // Add settings if user has dashboard
- if ($this->has('has_dashboard')) {
- $pages[] = 'settings';
- }
-
- return array_unique($pages);
- }
-
- /**
- * Check if user role can create a specific content type
- *
- * @param string $contentType
- * @return bool
- *
- * Usage:
- * Features::forUser('artist')->canCreate('tattoo') // true/false
- */
- public function canCreate(string $contentType): bool
- {
- return in_array($contentType, $this->getCreatableContent());
- }
-
- /**
- * Get the profile type for a user role
- *
- * @return string|null Profile slug or null if none
- *
- * Usage:
- * Features::forUser('artist')->getProfile() // 'artist-profile'
- */
- public function getProfile(): ?string
- {
- if ($this->type !== 'user') {
- return null;
- }
-
- return $this->getValue('profile');
- }
-
- /**
- * Check if user role has a profile page
- *
- * @return bool
- *
- * Usage:
- * Features::forUser('artist')->hasProfile() // true/false
- */
- public function hasProfile(): bool
- {
- return $this->getProfile() !== null;
- }
-
- /**
- * Get content types grouped by parent type (if nested)
- *
- * @return array Associative array with parent types as keys
- *
- * Usage:
- * Features::forUser('artist')->getGroupedContent()
- * // Returns: ['shop' => ['tattoo', 'piercing'], 'standalone' => ['artwork']]
- */
- public function getGroupedContent(): array
- {
- if ($this->type !== 'user') {
- return [];
- }
-
- $canCreate = $this->getValue('can_create', []);
-
- if (empty($canCreate)) {
- return [];
- }
-
- $grouped = [];
-
- foreach ($canCreate as $item) {
- if (is_array($item)) {
- // Handle nested arrays like ['shop' => ['tattoo', 'piercing']]
- foreach ($item as $parent => $contents) {
- if (!isset($grouped[$parent])) {
- $grouped[$parent] = [];
- }
- $grouped[$parent] = array_merge($grouped[$parent], $contents);
- }
- } else {
- // Handle simple strings - add to 'standalone'
- if (!isset($grouped['standalone'])) {
- $grouped['standalone'] = [];
- }
- $grouped['standalone'][] = $item;
- }
- }
-
- return $grouped;
- }
-
- /**
- * Static method to get all content types across all user roles
- *
- * @return array Array of unique content type slugs
- *
- * Usage:
- * Features::getAllUserContent()
- * // Returns: ['tattoo', 'piercing', 'artwork', 'event', ...]
- */
- public static function getAllUserContent(): array
- {
- $allContent = [];
-
- foreach (JVB_USER as $slug => $config) {
- $features = self::forUser($slug);
- $allContent = array_merge($allContent, $features->getCreatableContent());
- }
-
- return array_unique($allContent);
- }
-
- /**
- * Static method to get all user roles that can create specific content
- *
- * @param string $contentType
- * @return array Array of role slugs
- *
- * Usage:
- * Features::getRolesForContent('tattoo')
- * // Returns: ['artist', 'shop']
- */
- public static function getRolesForContent(string $contentType): array
- {
- $roles = [];
-
- foreach (JVB_USER as $slug => $config) {
- $features = self::forUser($slug);
- if ($features->canCreate($contentType)) {
- $roles[] = $slug;
- }
- }
-
- return $roles;
- }
-
- /**
- * Get all dashboard pages across all user roles
- *
- * @return array Array of unique page slugs
- *
- * Usage:
- * Features::getAllDashboardPages()
- * // Returns: ['artist-profile', 'shop-profile', 'tattoo', 'piercing', ...]
- */
- public static function getAllDashboardPages(): array
- {
- $allPages = [];
-
- foreach (JVB_USER as $slug => $config) {
- $features = self::forUser($slug);
- $allPages = array_merge($allPages, $features->getDashboardPages());
- }
-
- return array_unique($allPages);
- }
-
- public static function getType(string $slug):?string
- {
- if (array_key_exists($slug, JVB_CONTENT)) {
- return 'content';
- }
- if (array_key_exists($slug, JVB_USER)) {
- return 'user';
- }
- if (array_key_exists($slug, JVB_TAXONOMY)) {
- return 'taxonomy';
- }
- if (array_key_exists($slug, JVB_OPTIONS)) {
- return 'option';
- }
- return null;
- }
-
- public static function getConfig(string $slug, ?string $type = null): array
- {
- $slug = jvbNoBase($slug);
- $all = ['post', 'content', 'taxonomy', 'user'];
- $types = (!$type || !in_array($type, $all)) ? $all : [$type];
-
- foreach($types as $type) {
- switch($type) {
- case 'post':
- case 'content':
- if (array_key_exists($slug, JVB_CONTENT)) {
- return JVB_CONTENT[$slug];
- }
- break;
- case 'taxonomy':
- if (array_key_exists($slug, JVB_TAXONOMY)) {
- return JVB_TAXONOMY[$slug];
- }
- break;
- case 'user':
- if (array_key_exists($slug, JVB_USER)) {
- return JVB_USER[$slug];
- }
- break;
- default:
- return [];
- }
- }
- error_log('No config found for: '.$slug);
- return [];
- }
- /**
- * Generate cache key
- */
- private function getCacheKey(string $feature): string
- {
- return "{$this->type}_{$this->slug}_{$feature}";
- }
-
- /**
- * Clear cache
- */
- public function clearCache(): void
- {
- $this->cache = [];
- }
-
- /**
- * Clear global cache
- */
- public static function clearGlobalCache(): void
- {
- self::$globalCache = [];
- }
-
- /**
- * Magic method for property-style access
- */
- public function __get(string $name): bool
- {
- return $this->has($name);
- }
-
- /**
- * Magic method for method-style checks
- */
- public function __call(string $name, array $arguments): bool
- {
- // Support is*, has*, can* method calls
- if (preg_match('/^(is|has|can)(.+)$/', $name, $matches)) {
- $feature = lcfirst($matches[2]);
-
- // Convert camelCase to snake_case
- $feature = strtolower(preg_replace('/([A-Z])/', '_$1', $feature));
-
- return $this->has($feature);
- }
-
- throw new \BadMethodCallException("Method {$name} does not exist");
- }
-}
diff --git a/inc/utility/Validator.php b/inc/utility/Validator.php
deleted file mode 100644
index ef8201e..0000000
--- a/inc/utility/Validator.php
+++ /dev/null
@@ -1,745 +0,0 @@
-<?php
-namespace JVBase\utility;
-
-use JVBase\registrar\Registrar;
-
-if (!defined('ABSPATH')) {
- exit;
-}
-/**
- * Validates configuration arrays for content types, taxonomies, and user roles
- * Catches errors early in the registration process
- */
-class Validator
-{
- private array $errors = [];
- private array $warnings = [];
- protected array $validSchemaTypes = [
- 'content' => [
- 'Article', 'NewsArticle', 'BlogPosting', 'VisualArtwork',
- 'Product', 'Service', 'Event', 'Person', 'CreativeWork',
- 'MedicalProcedure', 'HowTo', 'Recipe', 'Review',
- ],
- 'taxonomy' => [
- 'CollectionPage', 'DefinedTerm', 'ItemList',
- ],
- 'user' => [
- 'Person',
- ],
- ];
-
- protected array $validModifiers = [
- 'first', 'last', 'join', 'truncate', 'strip', 'lower', 'upper',
- 'title', 'count', 'get', 'default', 'date', 'image_url', 'excerpt', 'plural'
- ];
-
- public function validateAll():array
- {
- $success = [];
- $success['content'] = $this->validateContentConfig(JVB_CONTENT);
- $success['terms'] = $this->validateTaxonomyConfig(JVB_TAXONOMY);
- $success['user'] = $this->validateUserConfig(JVB_USER);
- $success['crossReference'] = $this->validateCrossReferences(JVB_CONTENT, JVB_TAXONOMY, JVB_USER);
- $success['seo'] = $this->validateSEOConfig();
- $success['schema'] = $this->validateSchemaConfig(JVB_SCHEMA ?? []);
- return $success;
- }
- /**
- * Validate JVB_CONTENT configuration
- */
- public function validateContentConfig(array $config): bool
- {
- $this->errors = [];
- $this->warnings = [];
-
- foreach ($config as $slug => $settings) {
- $this->validateSlug($slug, 'content');
- $this->validateContentSettings($slug, $settings);
- }
-
- if (!empty($this->errors)) {
- error_log('Validation result: '.print_r($this->errors, true));
- }
- if (!empty($this->warnings)) {
- error_log('Warnings: '.print_r($this->warnings, true));
- }
-
- return empty($this->errors);
- }
-
- /**
- * Validate JVB_TAXONOMY configuration
- */
- public function validateTaxonomyConfig(array $config): bool
- {
- $this->errors = [];
- $this->warnings = [];
-
- foreach ($config as $slug => $settings) {
- $this->validateSlug($slug, 'taxonomy');
- $this->validateTaxonomySettings($slug, $settings);
- }
-
- if (!empty($this->errors)) {
- error_log('Validation result: '.print_r($this->errors, true));
- }
- if (!empty($this->warnings)) {
- error_log('Warnings: '.print_r($this->warnings, true));
- }
- return empty($this->errors);
- }
-
- /**
- * Validate JVB_USER configuration
- */
- public function validateUserConfig(array $config): bool
- {
- $this->errors = [];
- $this->warnings = [];
-
- foreach ($config as $slug => $settings) {
- $this->validateSlug($slug, 'user_role');
- $this->validateUserSettings($slug, $settings);
- }
-
- if (!empty($this->errors)) {
- error_log('Validation result: '.print_r($this->errors, true));
- }
- if (!empty($this->warnings)) {
- error_log('Warnings: '.print_r($this->warnings, true));
- }
- return empty($this->errors);
- }
-
- /**
- * Validate cross-references between configs
- */
- public function validateCrossReferences(array $content, array $taxonomy, array $user): bool
- {
- $this->errors = [];
- $this->warnings = [];
-
- // Check taxonomy -> content references
- foreach ($taxonomy as $taxSlug => $taxConfig) {
- foreach ($taxConfig['for_content'] ?? [] as $contentType) {
- if (!isset($content[$contentType])) {
- $this->addError(
- "taxonomy.{$taxSlug}.for_content",
- "References non-existent content type '{$contentType}'"
- );
- }
- }
-
- // Check is_owned_by references
- foreach ($taxConfig['is_owned_by'] ?? [] as $role) {
- if (!isset($user[$role])) {
- $this->addError(
- "taxonomy.{$taxSlug}.is_owned_by",
- "References non-existent user role '{$role}'"
- );
- }
- }
- }
-
- // Check user -> content references
- foreach ($user as $userSlug => $userConfig) {
- // Check profile reference
- if (isset($userConfig['profile']) && !isset($content[$userConfig['profile']])) {
- $this->addError(
- "user.{$userSlug}.profile",
- "References non-existent content type '{$userConfig['profile']}'"
- );
- }
-
- // Check can_create references
- $this->validateCreatableContent($userSlug, $userConfig['can_create'] ?? [], $content, $taxonomy);
- }
-
- // Check field section references
- foreach ($content as $contentSlug => $contentConfig) {
- $this->validateFieldSections($contentSlug, $contentConfig, 'content');
- }
-
- if (!empty($this->errors)) {
- error_log('Validation result: '.print_r($this->errors, true));
- }
- if (!empty($this->warnings)) {
- error_log('Warnings: '.print_r($this->warnings, true));
- }
-
- return empty($this->errors);
- }
-
- /**
- * Validate slug format
- */
- private function validateSlug(string $slug, string $type): void
- {
- // Check for valid characters
- if (!preg_match('/^[a-z0-9_-]+$/', $slug)) {
- $this->addError(
- "{$type}.{$slug}",
- "Slug must contain only lowercase letters, numbers, hyphens, and underscores"
- );
- }
-
- // Check length
- if (strlen($slug) > 20) {
- $this->addWarning(
- "{$type}.{$slug}",
- "Slug is longer than 20 characters, which may cause issues"
- );
- }
-
- // Check for reserved WordPress terms
- $reserved = ['post', 'page', 'attachment', 'revision', 'nav_menu_item', 'author', 'category', 'tag'];
- if (in_array($slug, $reserved)) {
- $this->addError(
- "{$type}.{$slug}",
- "Slug '{$slug}' is a reserved WordPress term"
- );
- }
- }
-
- /**
- * Validate content type settings
- */
- private function validateContentSettings(string $slug, array $settings): void
- {
- // Required fields
- if (empty($settings['singular'])) {
- $this->addError("content.{$slug}", "Missing required 'singular' label");
- }
-
- if (empty($settings['plural'])) {
- $this->addError("content.{$slug}", "Missing required 'plural' label");
- }
-
- // Validate boolean flags
- $booleanFields = [
- 'hide_single', 'show_feed', 'show_directory', 'karma',
- 'favouritable', 'responses', 'is_calendar', 'single_image'
- ];
-
- foreach ($booleanFields as $field) {
- if (isset($settings[$field]) && !is_bool($settings[$field])) {
- $this->addError(
- "content.{$slug}.{$field}",
- "Field '{$field}' must be a boolean value"
- );
- }
- }
-
- // Validate fields configuration
- if (isset($settings['fields'])) {
- $this->validateFieldsConfig($slug, $settings['fields'], 'content');
- }
-
- // Validate sections if fields exist
- if (!empty($settings['fields']) && !empty($settings['sections'])) {
- $this->validateSectionsConfig($slug, $settings['sections']);
- }
-
- // Check for conflicting settings
- if (($settings['hide_single'] ?? false) && ($settings['show_directory'] ?? false)) {
- $this->addWarning(
- "content.{$slug}",
- "Content type has both 'hide_single' and 'show_directory' enabled"
- );
- }
- }
-
- /**
- * Validate taxonomy settings
- */
- private function validateTaxonomySettings(string $slug, array $settings): void
- {
- // Required fields
- if (empty($settings['singular'])) {
- $this->addError("taxonomy.{$slug}", "Missing required 'singular' label");
- }
-
- if (empty($settings['plural'])) {
- $this->addError("taxonomy.{$slug}", "Missing required 'plural' label");
- }
-
- // Validate for_content
- if (empty($settings['for_content']) || !is_array($settings['for_content'])) {
- $this->addError(
- "taxonomy.{$slug}",
- "Missing or invalid 'for_content' array"
- );
- }
-
- // Validate content taxonomy specific settings
- if ($settings['is_content'] ?? false) {
- if (empty($settings['content_table'])) {
- $this->addWarning(
- "taxonomy.{$slug}",
- "Content taxonomy missing 'content_table' configuration"
- );
- }
- }
-
- // Validate ownership settings
- if ($settings['is_ownable'] ?? false) {
- if (empty($settings['is_owned_by'])) {
- $this->addError(
- "taxonomy.{$slug}",
- "Ownable taxonomy missing 'is_owned_by' configuration"
- );
- }
- }
- }
-
- /**
- * Validate user role settings
- */
- private function validateUserSettings(string $slug, array $settings): void
- {
- // Validate dashboard access
- if ($settings['has_dashboard'] ?? false) {
- if (empty($settings['can_create']) && empty($settings['profile'])) {
- $this->addWarning(
- "user.{$slug}",
- "User has dashboard access but no content creation or profile"
- );
- }
- }
-
- // Validate registration fields
- if ($settings['can_register'] ?? false) {
- if (empty($settings['register_fields'])) {
- $this->addWarning(
- "user.{$slug}",
- "User can register but has no registration fields defined"
- );
- }
- }
-
- // Validate profile consistency
- if (!empty($settings['profile']) && empty($settings['has_dashboard'])) {
- $this->addWarning(
- "user.{$slug}",
- "User has profile type but no dashboard access"
- );
- }
- }
-
- /**
- * Validate fields configuration
- */
- private function validateFieldsConfig(string $slug, array $fields, string $type): void
- {
- foreach ($fields as $fieldName => $fieldConfig) {
- // Check for required field properties
- if (empty($fieldConfig['type'])) {
- $this->addError(
- "{$type}.{$slug}.fields.{$fieldName}",
- "Field missing required 'type' property"
- );
- }
-
- // Validate field type
- $validTypes = [
- 'text', 'textarea', 'number', 'email', 'url', 'select',
- 'radio', 'checkbox', 'true_false', 'date', 'time',
- 'datetime', 'color', 'upload', 'image', 'file', 'gallery',
- 'repeater', 'location', 'user', 'taxonomy', 'set'
- ];
-
- if (isset($fieldConfig['type']) && !in_array($fieldConfig['type'], $validTypes)) {
- $this->addError(
- "{$type}.{$slug}.fields.{$fieldName}",
- "Invalid field type '{$fieldConfig['type']}'"
- );
- }
-
- // Validate field-specific configurations
- $this->validateFieldTypeConfig($fieldName, $fieldConfig, "{$type}.{$slug}");
- }
- }
-
- /**
- * Validate field type specific configuration
- */
- private function validateFieldTypeConfig(string $fieldName, array $config, string $path): void
- {
- switch ($config['type'] ?? '') {
- case 'select':
- case 'radio':
- case 'checkbox':
- if (empty($config['options'])) {
- $this->addError(
- "{$path}.fields.{$fieldName}",
- "Field type '{$config['type']}' requires 'options' array"
- );
- }
- break;
-
- case 'taxonomy':
- if (empty($config['taxonomy'])) {
- $this->addError(
- "{$path}.fields.{$fieldName}",
- "Taxonomy field requires 'taxonomy' property"
- );
- }
- break;
-
- case 'repeater':
- if (empty($config['fields'])) {
- $this->addError(
- "{$path}.fields.{$fieldName}",
- "Repeater field requires 'fields' definition array"
- );
- }
- break;
-
- case 'number':
- if (isset($config['min']) && isset($config['max']) && $config['min'] > $config['max']) {
- $this->addError(
- "{$path}.fields.{$fieldName}",
- "Number field 'min' value cannot be greater than 'max'"
- );
- }
- break;
- }
- }
-
- /**
- * Validate sections configuration
- */
- private function validateSectionsConfig(string $slug, array $sections): void
- {
- foreach ($sections as $sectionSlug => $sectionConfig) {
- if (empty($sectionConfig['label'])) {
- $this->addError(
- "content.{$slug}.sections.{$sectionSlug}",
- "Section missing required 'label'"
- );
- }
- }
- }
-
- /**
- * Validate field sections match defined sections
- */
- private function validateFieldSections(string $slug, array $config, string $type): void
- {
- if (empty($config['fields']) || empty($config['sections'])) {
- return;
- }
-
- $definedSections = array_keys($config['sections']);
-
- foreach ($config['fields'] as $fieldName => $fieldConfig) {
- if (isset($fieldConfig['section']) && !in_array($fieldConfig['section'], $definedSections)) {
- $this->addError(
- "{$type}.{$slug}.fields.{$fieldName}",
- "Field references non-existent section '{$fieldConfig['section']}'"
- );
- }
- }
- }
-
- /**
- * Validate creatable content references
- */
- private function validateCreatableContent(string $userSlug, array $canCreate, array $content, array $taxonomy): void
- {
- foreach ($canCreate as $item) {
- if (is_array($item)) {
- foreach ($item as $subType => $types) {
- foreach ($types as $type) {
- if (!isset($content[$type]) && !isset($taxonomy[$type])) {
- $this->addError(
- "user.{$userSlug}.can_create",
- "References non-existent type '{$type}'"
- );
- }
- }
- }
- } else {
- if (!isset($content[$item]) && !isset($taxonomy[$item])) {
- $this->addError(
- "user.{$userSlug}.can_create",
- "References non-existent type '{$item}'"
- );
- }
- }
- }
- }
-
- /**
- * Add error message
- */
- private function addError(string $path, string $message): void
- {
- $this->errors[] = "[{$path}] {$message}";
- }
-
- /**
- * Add warning message
- */
- private function addWarning(string $path, string $message): void
- {
- $this->warnings[] = "[{$path}] {$message}";
- }
-
- /**
- * Get validation errors
- */
- public function getErrors(): array
- {
- return $this->errors;
- }
-
- /**
- * Get validation warnings
- */
- public function getWarnings(): array
- {
- return $this->warnings;
- }
-
- /**
- * Output validation results to error log
- */
- public function logResults(): void
- {
- if (!empty($this->errors)) {
- error_log('[ConfigValidator] Validation Errors:');
- foreach ($this->errors as $error) {
- error_log(" - {$error}");
- }
- }
-
- if (!empty($this->warnings) && WP_DEBUG) {
- error_log('[ConfigValidator] Validation Warnings:');
- foreach ($this->warnings as $warning) {
- error_log(" - {$warning}");
- }
- }
- }
-
- /**
- * Validate SEO configurations across all types
- */
- public function validateSEOConfig(): bool
- {
- $this->errors = [];
- $this->warnings = [];
-
- foreach (Registrar::getRegistered('post') as $slug => $config) {
- if (isset($config['seo'])) {
- $this->validateTypeSEOConfig($slug, $config['seo'], 'content', $config);
- }
- }
-
- foreach (Registrar::getRegistered('term') as $slug => $config) {
- if (isset($config['seo'])) {
- $this->validateTypeSEOConfig($slug, $config['seo'], 'taxonomy', $config);
- }
- }
-
- foreach (Registrar::getRegistered('user') as $slug => $config) {
- if (isset($config['seo'])) {
- $this->validateTypeSEOConfig($slug, $config['seo'], 'user', $config);
- }
- }
-
- $this->logResults();
- return empty($this->errors);
- }
-
- /**
- * Validate SEO config for a specific type
- */
- private function validateTypeSEOConfig(string $slug, array $seo, string $objectType, array $fullConfig): void
- {
- $path = "{$objectType}.{$slug}.seo";
- $availableFields = $this->getAvailableSEOFields($slug, $objectType, $fullConfig);
-
- if (isset($seo['schema_type'])) {
- $validTypes = $this->validSchemaTypes[$objectType] ?? $this->validSchemaTypes['content'];
- if (!in_array($seo['schema_type'], $validTypes)) {
- $this->addWarning("{$path}.schema_type", "'{$seo['schema_type']}' may not be valid. Common types: " . implode(', ', array_slice($validTypes, 0, 5)));
- }
- }
-
- if (isset($seo['field_map'])) {
- foreach ($seo['field_map'] as $prop => $source) {
- $this->validateFieldSource($source, $availableFields, "{$path}.field_map.{$prop}");
- }
- }
-
- if (isset($seo['meta']['title'])) {
- $this->validatePatternString($seo['meta']['title'], $availableFields, "{$path}.meta.title");
- }
-
- if (isset($seo['meta']['description'])) {
- $this->validatePatternString($seo['meta']['description'], $availableFields, "{$path}.meta.description");
- }
- }
-
- /**
- * Validate a field source reference
- */
- private function validateFieldSource(string $source, array $availableFields, string $path): void
- {
- if (empty($source)) {
- return;
- }
-
- if (str_contains($source, '{{')) {
- $this->validatePatternString($source, $availableFields, $path);
- return;
- }
-
- $field = explode('|', $source)[0];
- $field = explode('.', $field)[0];
-
- if (!in_array($field, $availableFields) && !in_array($field, ['site', 'author', 'meta', 'terms'])) {
- $this->addWarning($path, "Field '{$field}' may not exist");
- }
- }
-
- /**
- * Validate pattern string syntax
- */
- private function validatePatternString(string $pattern, array $availableFields, string $path): void
- {
- preg_match_all('/\{\{([^}]+)\}\}/', $pattern, $matches);
-
- foreach ($matches[1] as $token) {
- $token = trim($token);
-
- if (empty($token)) {
- $this->addError($path, "Empty placeholder {{}} found");
- continue;
- }
-
- $parts = explode('|', $token);
- $field = trim(explode('.', $parts[0])[0]);
-
- if (!in_array($field, $availableFields) && !in_array($field, ['site', 'author', 'meta', 'terms'])) {
- $this->addWarning($path, "Field '{$field}' in pattern may not exist");
- }
-
- if (isset($parts[1])) {
- $modifier = trim(explode(':', $parts[1])[0]);
- if (!in_array($modifier, $this->validModifiers)) {
- $this->addWarning($path, "Unknown modifier '|{$modifier}'");
- }
- }
- }
- }
-
- /**
- * Validate JVB_SCHEMA configuration
- */
- public function validateSchemaConfig(array $schema): bool
- {
- $this->errors = [];
- $this->warnings = [];
-
- if (isset($schema['business'])) {
- $this->validateBusinessSchema($schema['business']);
- }
-
- if (isset($schema['faqs']['items'])) {
- foreach ($schema['faqs']['items'] as $i => $faq) {
- if (empty($faq['question'])) {
- $this->addError("schema.faqs.items[{$i}].question", "FAQ question required");
- }
- if (empty($faq['answer'])) {
- $this->addError("schema.faqs.items[{$i}].answer", "FAQ answer required");
- }
- }
- }
-
- $this->logResults();
- return empty($this->errors);
- }
-
- /**
- * Validate business schema
- */
- private function validateBusinessSchema(array $config): void
- {
- $path = 'schema.business';
-
- if (empty($config['name'])) {
- $this->addError("{$path}.name", "Business name required");
- }
-
- if (isset($config['url']) && !filter_var($config['url'], FILTER_VALIDATE_URL)) {
- $this->addError("{$path}.url", "Invalid URL");
- }
-
- if (isset($config['email']) && !filter_var($config['email'], FILTER_VALIDATE_EMAIL)) {
- $this->addError("{$path}.email", "Invalid email");
- }
-
- if (isset($config['geo'])) {
- $lat = $config['geo']['lat'] ?? null;
- $lng = $config['geo']['lng'] ?? null;
-
- if ($lat !== null && (!is_numeric($lat) || $lat < -90 || $lat > 90)) {
- $this->addError("{$path}.geo.lat", "Latitude must be -90 to 90");
- }
- if ($lng !== null && (!is_numeric($lng) || $lng < -180 || $lng > 180)) {
- $this->addError("{$path}.geo.lng", "Longitude must be -180 to 180");
- }
- }
-
- if (isset($config['opening_hours'])) {
- $days = ['monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday', 'sunday'];
- foreach ($config['opening_hours'] as $day => $data) {
- if (!in_array(strtolower($day), $days)) {
- $this->addWarning("{$path}.opening_hours.{$day}", "Invalid day");
- }
- if (is_array($data) && empty($data['closed'])) {
- if (isset($data['open']) && !preg_match('/^\d{2}:\d{2}$/', $data['open'])) {
- $this->addWarning("{$path}.opening_hours.{$day}.open", "Use HH:MM format");
- }
- }
- }
- }
-
- if (isset($config['aggregate_rating'])) {
- $value = $config['aggregate_rating']['value'] ?? null;
- if ($value !== null && (!is_numeric($value) || $value < 0 || $value > 5)) {
- $this->addError("{$path}.aggregate_rating.value", "Rating must be 0-5");
- }
- }
-
- if (isset($config['same_as'])) {
- foreach ($config['same_as'] as $i => $link) {
- $url = is_array($link) ? ($link['url'] ?? '') : $link;
- if (!empty($url) && !filter_var($url, FILTER_VALIDATE_URL)) {
- $this->addError("{$path}.same_as[{$i}]", "Invalid URL: {$url}");
- }
- }
- }
- }
-
- /**
- * Get available fields for SEO validation
- */
- private function getAvailableSEOFields(string $slug, string $objectType, array $config): array
- {
- $fields = match($objectType) {
- 'content' => ['post_title', 'post_excerpt', 'post_content', 'post_date', 'post_modified', 'post_thumbnail', 'permalink'],
- 'taxonomy' => ['term_name', 'term_description', 'term_slug', 'permalink', 'count'],
- 'user' => ['display_name', 'first_name', 'last_name', 'user_email', 'description', 'permalink'],
- default => []
- };
-
- if (!empty($config['fields'])) {
- $fields = array_merge($fields, array_keys($config['fields']));
- }
-
- return $fields;
- }
-}
diff --git a/inc/utility/setup.php b/inc/utility/setup.php
index e386de0..0ff336b 100644
--- a/inc/utility/setup.php
+++ b/inc/utility/setup.php
@@ -1,9 +1,5 @@
<?php
-
-require(JVB_DIR.'/inc/utility/Checker.php');
-require(JVB_DIR.'/inc/utility/Features.php');
require(JVB_DIR.'/inc/utility/helpers.php');
-require(JVB_DIR.'/inc/utility/Validator.php');
require(JVB_DIR.'/inc/utility/Image.php');
diff --git a/jvb.php b/jvb.php
index d340bcd..d400ce2 100644
--- a/jvb.php
+++ b/jvb.php
@@ -107,15 +107,10 @@
require(JVB_DIR.'/base/_setup.php');
-if (empty(JVB_SITE)) {
- return;
-}
require(JVB_DIR.'/inc/utility/setup.php');
require(JVB_DIR.'/checks.php');
-
-require(JVB_DIR . '/inc/registry/_setup.php');
-
+require(JVB_DIR . '/inc/registrar/_setup.php');
require(JVB_DIR . '/activate.php');
require(JVB_DIR . '/inc/helpers/all.php');
diff --git a/package-lock.json b/package-lock.json
index 6265fcc..9eaa5c6 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -9,44 +9,9 @@
"version": "0.1.0",
"license": "GPL-2.0-or-later",
"devDependencies": {
- "@wordpress/scripts": "^31.2.0"
+ "@wordpress/scripts": "^19.2.4"
}
},
- "node_modules/@ampproject/remapping": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz",
- "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@jridgewell/gen-mapping": "^0.3.5",
- "@jridgewell/trace-mapping": "^0.3.24"
- },
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/@asamuzakjp/css-color": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-3.2.0.tgz",
- "integrity": "sha512-K1A6z8tS3XsmCMM86xoWdn7Fkdn9m6RSVtocUrJYIwZnFVkng/PvkEoWtOWmP+Scc6saYWHWZYbndEEXxl24jw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@csstools/css-calc": "^2.1.3",
- "@csstools/css-color-parser": "^3.0.9",
- "@csstools/css-parser-algorithms": "^3.0.4",
- "@csstools/css-tokenizer": "^3.0.3",
- "lru-cache": "^10.4.3"
- }
- },
- "node_modules/@asamuzakjp/css-color/node_modules/lru-cache": {
- "version": "10.4.3",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
- "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
- "dev": true,
- "license": "ISC"
- },
"node_modules/@babel/code-frame": {
"version": "7.27.1",
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz",
@@ -63,9 +28,9 @@
}
},
"node_modules/@babel/compat-data": {
- "version": "7.26.5",
- "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.5.tgz",
- "integrity": "sha512-XvcZi1KWf88RVbF9wn8MN6tYFloU5qX8KjuF3E1PVBmJ9eypXfs4GRiJwLuTZL0iSnJUKn1BFPa5BPZZJyFzPg==",
+ "version": "7.29.0",
+ "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.0.tgz",
+ "integrity": "sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==",
"dev": true,
"license": "MIT",
"engines": {
@@ -73,23 +38,22 @@
}
},
"node_modules/@babel/core": {
- "version": "7.25.7",
- "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.25.7.tgz",
- "integrity": "sha512-yJ474Zv3cwiSOO9nXJuqzvwEeM+chDuQ8GJirw+pZ91sCGCyOZ3dJkVE09fTV0VEVzXyLWhh3G/AolYTPX7Mow==",
+ "version": "7.29.0",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz",
+ "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
- "@ampproject/remapping": "^2.2.0",
- "@babel/code-frame": "^7.25.7",
- "@babel/generator": "^7.25.7",
- "@babel/helper-compilation-targets": "^7.25.7",
- "@babel/helper-module-transforms": "^7.25.7",
- "@babel/helpers": "^7.25.7",
- "@babel/parser": "^7.25.7",
- "@babel/template": "^7.25.7",
- "@babel/traverse": "^7.25.7",
- "@babel/types": "^7.25.7",
+ "@babel/code-frame": "^7.29.0",
+ "@babel/generator": "^7.29.0",
+ "@babel/helper-compilation-targets": "^7.28.6",
+ "@babel/helper-module-transforms": "^7.28.6",
+ "@babel/helpers": "^7.28.6",
+ "@babel/parser": "^7.29.0",
+ "@babel/template": "^7.28.6",
+ "@babel/traverse": "^7.29.0",
+ "@babel/types": "^7.29.0",
+ "@jridgewell/remapping": "^2.3.5",
"convert-source-map": "^2.0.0",
"debug": "^4.1.0",
"gensync": "^1.0.0-beta.2",
@@ -104,10 +68,25 @@
"url": "https://opencollective.com/babel"
}
},
+ "node_modules/@babel/core/node_modules/@babel/code-frame": {
+ "version": "7.29.0",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz",
+ "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-validator-identifier": "^7.28.5",
+ "js-tokens": "^4.0.0",
+ "picocolors": "^1.1.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
"node_modules/@babel/eslint-parser": {
- "version": "7.25.7",
- "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.25.7.tgz",
- "integrity": "sha512-B+BO9x86VYsQHimucBAL1fxTJKF4wyKY6ZVzee9QgzdZOUfs3BaR6AQrgoGrRI+7IFS1wUz/VyQ+SoBcSpdPbw==",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.28.6.tgz",
+ "integrity": "sha512-QGmsKi2PBO/MHSQk+AAgA9R6OHQr+VqnniFE0eMWZcVcfBZoA2dKn2hUsl3Csg/Plt9opRUWdY7//VXsrIlEiA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -124,16 +103,16 @@
}
},
"node_modules/@babel/generator": {
- "version": "7.26.5",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.5.tgz",
- "integrity": "sha512-2caSP6fN9I7HOe6nqhtft7V4g7/V/gfDsC3Ag4W7kEzzvRGKqiv0pu0HogPiZ3KaVSoNDhUws6IJjDjpfmYIXw==",
+ "version": "7.29.1",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz",
+ "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/parser": "^7.26.5",
- "@babel/types": "^7.26.5",
- "@jridgewell/gen-mapping": "^0.3.5",
- "@jridgewell/trace-mapping": "^0.3.25",
+ "@babel/parser": "^7.29.0",
+ "@babel/types": "^7.29.0",
+ "@jridgewell/gen-mapping": "^0.3.12",
+ "@jridgewell/trace-mapping": "^0.3.28",
"jsesc": "^3.0.2"
},
"engines": {
@@ -141,27 +120,27 @@
}
},
"node_modules/@babel/helper-annotate-as-pure": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz",
- "integrity": "sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==",
+ "version": "7.27.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz",
+ "integrity": "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/types": "^7.25.9"
+ "@babel/types": "^7.27.3"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-compilation-targets": {
- "version": "7.26.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.26.5.tgz",
- "integrity": "sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz",
+ "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/compat-data": "^7.26.5",
- "@babel/helper-validator-option": "^7.25.9",
+ "@babel/compat-data": "^7.28.6",
+ "@babel/helper-validator-option": "^7.27.1",
"browserslist": "^4.24.0",
"lru-cache": "^5.1.1",
"semver": "^6.3.1"
@@ -171,18 +150,18 @@
}
},
"node_modules/@babel/helper-create-class-features-plugin": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.9.tgz",
- "integrity": "sha512-UTZQMvt0d/rSz6KI+qdu7GQze5TIajwTS++GUozlw8VBJDEOAqSXwm1WvmYEZwqdqSGQshRocPDqrt4HBZB3fQ==",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.28.6.tgz",
+ "integrity": "sha512-dTOdvsjnG3xNT9Y0AUg1wAl38y+4Rl4sf9caSQZOXdNqVn+H+HbbJ4IyyHaIqNR6SW9oJpA/RuRjsjCw2IdIow==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-annotate-as-pure": "^7.25.9",
- "@babel/helper-member-expression-to-functions": "^7.25.9",
- "@babel/helper-optimise-call-expression": "^7.25.9",
- "@babel/helper-replace-supers": "^7.25.9",
- "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9",
- "@babel/traverse": "^7.25.9",
+ "@babel/helper-annotate-as-pure": "^7.27.3",
+ "@babel/helper-member-expression-to-functions": "^7.28.5",
+ "@babel/helper-optimise-call-expression": "^7.27.1",
+ "@babel/helper-replace-supers": "^7.28.6",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1",
+ "@babel/traverse": "^7.28.6",
"semver": "^6.3.1"
},
"engines": {
@@ -193,14 +172,14 @@
}
},
"node_modules/@babel/helper-create-regexp-features-plugin": {
- "version": "7.26.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.26.3.tgz",
- "integrity": "sha512-G7ZRb40uUgdKOQqPLjfD12ZmGA54PzqDFUv2BKImnC9QIfGhIHKvVML0oN8IUiDq4iRqpq74ABpvOaerfWdong==",
+ "version": "7.28.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.28.5.tgz",
+ "integrity": "sha512-N1EhvLtHzOvj7QQOUCCS3NrPJP8c5W6ZXCHDn7Yialuy1iu4r5EmIYkXlKNqT99Ciw+W0mDqWoR6HWMZlFP3hw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-annotate-as-pure": "^7.25.9",
- "regexpu-core": "^6.2.0",
+ "@babel/helper-annotate-as-pure": "^7.27.3",
+ "regexpu-core": "^6.3.1",
"semver": "^6.3.1"
},
"engines": {
@@ -211,60 +190,70 @@
}
},
"node_modules/@babel/helper-define-polyfill-provider": {
- "version": "0.6.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.3.tgz",
- "integrity": "sha512-HK7Bi+Hj6H+VTHA3ZvBis7V/6hu9QuTrnMXNybfUf2iiuU/N97I8VjB+KbhFF8Rld/Lx5MzoCwPCpPjfK+n8Cg==",
+ "version": "0.6.8",
+ "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.8.tgz",
+ "integrity": "sha512-47UwBLPpQi1NoWzLuHNjRoHlYXMwIJoBf7MFou6viC/sIHWYygpvr0B6IAyh5sBdA2nr2LPIRww8lfaUVQINBA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-compilation-targets": "^7.22.6",
- "@babel/helper-plugin-utils": "^7.22.5",
- "debug": "^4.1.1",
+ "@babel/helper-compilation-targets": "^7.28.6",
+ "@babel/helper-plugin-utils": "^7.28.6",
+ "debug": "^4.4.3",
"lodash.debounce": "^4.0.8",
- "resolve": "^1.14.2"
+ "resolve": "^1.22.11"
},
"peerDependencies": {
"@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0"
}
},
+ "node_modules/@babel/helper-globals": {
+ "version": "7.28.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz",
+ "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
"node_modules/@babel/helper-member-expression-to-functions": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.9.tgz",
- "integrity": "sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==",
+ "version": "7.28.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.28.5.tgz",
+ "integrity": "sha512-cwM7SBRZcPCLgl8a7cY0soT1SptSzAlMH39vwiRpOQkJlh53r5hdHwLSCZpQdVLT39sZt+CRpNwYG4Y2v77atg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/traverse": "^7.25.9",
- "@babel/types": "^7.25.9"
+ "@babel/traverse": "^7.28.5",
+ "@babel/types": "^7.28.5"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-module-imports": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz",
- "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz",
+ "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/traverse": "^7.25.9",
- "@babel/types": "^7.25.9"
+ "@babel/traverse": "^7.28.6",
+ "@babel/types": "^7.28.6"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-module-transforms": {
- "version": "7.26.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz",
- "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz",
+ "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-module-imports": "^7.25.9",
- "@babel/helper-validator-identifier": "^7.25.9",
- "@babel/traverse": "^7.25.9"
+ "@babel/helper-module-imports": "^7.28.6",
+ "@babel/helper-validator-identifier": "^7.28.5",
+ "@babel/traverse": "^7.28.6"
},
"engines": {
"node": ">=6.9.0"
@@ -274,22 +263,22 @@
}
},
"node_modules/@babel/helper-optimise-call-expression": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.9.tgz",
- "integrity": "sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==",
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.27.1.tgz",
+ "integrity": "sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/types": "^7.25.9"
+ "@babel/types": "^7.27.1"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-plugin-utils": {
- "version": "7.26.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.26.5.tgz",
- "integrity": "sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.28.6.tgz",
+ "integrity": "sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==",
"dev": true,
"license": "MIT",
"engines": {
@@ -297,15 +286,15 @@
}
},
"node_modules/@babel/helper-remap-async-to-generator": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.9.tgz",
- "integrity": "sha512-IZtukuUeBbhgOcaW2s06OXTzVNJR0ybm4W5xC1opWFFJMZbwRj5LCk+ByYH7WdZPZTt8KnFwA8pvjN2yqcPlgw==",
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.27.1.tgz",
+ "integrity": "sha512-7fiA521aVw8lSPeI4ZOD3vRFkoqkJcS+z4hFo82bFSH/2tNd6eJ5qCVMS5OzDmZh/kaHQeBaeyxK6wljcPtveA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-annotate-as-pure": "^7.25.9",
- "@babel/helper-wrap-function": "^7.25.9",
- "@babel/traverse": "^7.25.9"
+ "@babel/helper-annotate-as-pure": "^7.27.1",
+ "@babel/helper-wrap-function": "^7.27.1",
+ "@babel/traverse": "^7.27.1"
},
"engines": {
"node": ">=6.9.0"
@@ -315,15 +304,15 @@
}
},
"node_modules/@babel/helper-replace-supers": {
- "version": "7.26.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.26.5.tgz",
- "integrity": "sha512-bJ6iIVdYX1YooY2X7w1q6VITt+LnUILtNk7zT78ykuwStx8BauCzxvFqFaHjOpW1bVnSUM1PN1f0p5P21wHxvg==",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.28.6.tgz",
+ "integrity": "sha512-mq8e+laIk94/yFec3DxSjCRD2Z0TAjhVbEJY3UQrlwVo15Lmt7C2wAUbK4bjnTs4APkwsYLTahXRraQXhb1WCg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-member-expression-to-functions": "^7.25.9",
- "@babel/helper-optimise-call-expression": "^7.25.9",
- "@babel/traverse": "^7.26.5"
+ "@babel/helper-member-expression-to-functions": "^7.28.5",
+ "@babel/helper-optimise-call-expression": "^7.27.1",
+ "@babel/traverse": "^7.28.6"
},
"engines": {
"node": ">=6.9.0"
@@ -333,14 +322,14 @@
}
},
"node_modules/@babel/helper-skip-transparent-expression-wrappers": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.9.tgz",
- "integrity": "sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==",
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.27.1.tgz",
+ "integrity": "sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/traverse": "^7.25.9",
- "@babel/types": "^7.25.9"
+ "@babel/traverse": "^7.27.1",
+ "@babel/types": "^7.27.1"
},
"engines": {
"node": ">=6.9.0"
@@ -367,9 +356,9 @@
}
},
"node_modules/@babel/helper-validator-option": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz",
- "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==",
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz",
+ "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==",
"dev": true,
"license": "MIT",
"engines": {
@@ -377,42 +366,136 @@
}
},
"node_modules/@babel/helper-wrap-function": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.25.9.tgz",
- "integrity": "sha512-ETzz9UTjQSTmw39GboatdymDq4XIQbR8ySgVrylRhPOFpsd+JrKHIuF0de7GCWmem+T4uC5z7EZguod7Wj4A4g==",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.28.6.tgz",
+ "integrity": "sha512-z+PwLziMNBeSQJonizz2AGnndLsP2DeGHIxDAn+wdHOGuo4Fo1x1HBPPXeE9TAOPHNNWQKCSlA2VZyYyyibDnQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/template": "^7.25.9",
- "@babel/traverse": "^7.25.9",
- "@babel/types": "^7.25.9"
+ "@babel/template": "^7.28.6",
+ "@babel/traverse": "^7.28.6",
+ "@babel/types": "^7.28.6"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helpers": {
- "version": "7.28.4",
- "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.4.tgz",
- "integrity": "sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==",
+ "version": "7.29.2",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.2.tgz",
+ "integrity": "sha512-HoGuUs4sCZNezVEKdVcwqmZN8GoHirLUcLaYVNBK2J0DadGtdcqgr3BCbvH8+XUo4NGjNl3VOtSjEKNzqfFgKw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/template": "^7.27.2",
- "@babel/types": "^7.28.4"
+ "@babel/template": "^7.28.6",
+ "@babel/types": "^7.29.0"
},
"engines": {
"node": ">=6.9.0"
}
},
- "node_modules/@babel/parser": {
- "version": "7.28.5",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.5.tgz",
- "integrity": "sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==",
+ "node_modules/@babel/highlight": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.25.9.tgz",
+ "integrity": "sha512-llL88JShoCsth8fF8R4SJnIn+WLvR6ccFxu1H3FlMhDontdcmZWf2HgIZ7AIqV3Xcck1idlohrN4EUBQz6klbw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/types": "^7.28.5"
+ "@babel/helper-validator-identifier": "^7.25.9",
+ "chalk": "^2.4.2",
+ "js-tokens": "^4.0.0",
+ "picocolors": "^1.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==",
+ "dev": true,
+ "license": "MIT",
+ "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==",
+ "dev": true,
+ "license": "MIT",
+ "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==",
+ "dev": true,
+ "license": "MIT",
+ "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==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "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==",
+ "dev": true,
+ "license": "MIT",
+ "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==",
+ "dev": true,
+ "license": "MIT",
+ "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==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "has-flag": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/@babel/parser": {
+ "version": "7.29.2",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.2.tgz",
+ "integrity": "sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/types": "^7.29.0"
},
"bin": {
"parser": "bin/babel-parser.js"
@@ -422,14 +505,14 @@
}
},
"node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.9.tgz",
- "integrity": "sha512-ZkRyVkThtxQ/J6nv3JFYv1RYY+JT5BvU0y3k5bWrmuG4woXypRa4PXmm9RhOwodRkYFWqC0C0cqcJ4OqR7kW+g==",
+ "version": "7.28.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.28.5.tgz",
+ "integrity": "sha512-87GDMS3tsmMSi/3bWOte1UblL+YUTFMV8SZPZ2eSEL17s74Cw/l63rR6NmGVKMYW2GYi85nE+/d6Hw5N0bEk2Q==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.25.9",
- "@babel/traverse": "^7.25.9"
+ "@babel/helper-plugin-utils": "^7.27.1",
+ "@babel/traverse": "^7.28.5"
},
"engines": {
"node": ">=6.9.0"
@@ -439,13 +522,13 @@
}
},
"node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.9.tgz",
- "integrity": "sha512-MrGRLZxLD/Zjj0gdU15dfs+HH/OXvnw/U4jJD8vpcP2CJQapPEv1IWwjc/qMg7ItBlPwSv1hRBbb7LeuANdcnw==",
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.27.1.tgz",
+ "integrity": "sha512-qNeq3bCKnGgLkEXUuFry6dPlGfCdQNZbn7yUAPCInwAJHMU7THJfrBSozkcWq5sNM6RcF3S8XyQL2A52KNR9IA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.25.9"
+ "@babel/helper-plugin-utils": "^7.27.1"
},
"engines": {
"node": ">=6.9.0"
@@ -455,13 +538,13 @@
}
},
"node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": {
- "version": "7.25.9",
- "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.25.9.tgz",
- "integrity": "sha512-2qUwwfAFpJLZqxd02YW9btUCZHl+RFvdDkNfZwaIJrvB8Tesjsk8pEQkTvGwZXLqXUx/2oyY3ySRhm6HOXuCug==",
+ "version": "7.27.1",
+ "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.27.1.tgz",
+ "integrity": "sha512-g4L7OYun04N1WyqMNjldFwlfPCLVkgB54A/YCXICZYBsvJJE3kByKv9c9+R/nAfmIfjl2rKYLNyMHboYbZaWaA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.25.9"
+ "@babel/helper-plugin-utils": "^7.27.1"
},
"engines": {
"node": ">=6.9.0"
@@ -471,15 +554,15 @@
}
},
"node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.25.9.tgz",
- "integrity": "sha512-6xWgLZTJXwilVjlnV7ospI3xi+sl8lN8rXXbBD6vYn3UYDlGsag8wrZkKcSI8G6KgqKP7vNFaDgeDnfAABq61g==",
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.27.1.tgz",
+ "integrity": "sha512-oO02gcONcD5O1iTLi/6frMJBIwWEHceWGSGqrpCmEL8nogiS6J9PBlE48CaK20/Jx1LuRml9aDftLgdjXT8+Cw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.25.9",
- "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9",
- "@babel/plugin-transform-optional-chaining": "^7.25.9"
+ "@babel/helper-plugin-utils": "^7.27.1",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1",
+ "@babel/plugin-transform-optional-chaining": "^7.27.1"
},
"engines": {
"node": ">=6.9.0"
@@ -489,14 +572,14 @@
}
},
"node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.9.tgz",
- "integrity": "sha512-aLnMXYPnzwwqhYSCyXfKkIkYgJ8zv9RK+roo9DkTXz38ynIhd9XCbN08s3MGvqL2MYGVUGdRQLL/JqBIeJhJBg==",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.28.6.tgz",
+ "integrity": "sha512-a0aBScVTlNaiUe35UtfxAN7A/tehvvG4/ByO6+46VPKTRSlfnAFsgKy0FUh+qAkQrDTmhDkT+IBOKlOoMUxQ0g==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.25.9",
- "@babel/traverse": "^7.25.9"
+ "@babel/helper-plugin-utils": "^7.28.6",
+ "@babel/traverse": "^7.28.6"
},
"engines": {
"node": ">=6.9.0"
@@ -574,13 +657,13 @@
}
},
"node_modules/@babel/plugin-syntax-import-assertions": {
- "version": "7.26.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.26.0.tgz",
- "integrity": "sha512-QCWT5Hh830hK5EQa7XzuqIkQU9tT/whqbDz7kuaZMHFl1inRRg7JnuAEOQ0Ur0QUl0NufCk1msK2BeY79Aj/eg==",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.28.6.tgz",
+ "integrity": "sha512-pSJUpFHdx9z5nqTSirOCMtYVP2wFgoWhP0p3g8ONK/4IHhLIBd0B9NYqAvIUAhq+OkhO4VM1tENCt0cjlsNShw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.25.9"
+ "@babel/helper-plugin-utils": "^7.28.6"
},
"engines": {
"node": ">=6.9.0"
@@ -590,13 +673,13 @@
}
},
"node_modules/@babel/plugin-syntax-import-attributes": {
- "version": "7.26.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.26.0.tgz",
- "integrity": "sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.28.6.tgz",
+ "integrity": "sha512-jiLC0ma9XkQT3TKJ9uYvlakm66Pamywo+qwL+oL8HJOvc6TWdZXVfhqJr8CCzbSGUAbDOzlGHJC1U+vRfLQDvw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.25.9"
+ "@babel/helper-plugin-utils": "^7.28.6"
},
"engines": {
"node": ">=6.9.0"
@@ -632,13 +715,13 @@
}
},
"node_modules/@babel/plugin-syntax-jsx": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.9.tgz",
- "integrity": "sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.28.6.tgz",
+ "integrity": "sha512-wgEmr06G6sIpqr8YDwA2dSRTE3bJ+V0IfpzfSY3Lfgd7YWOaAdlykvJi13ZKBt8cZHfgH1IXN+CL656W3uUa4w==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.25.9"
+ "@babel/helper-plugin-utils": "^7.28.6"
},
"engines": {
"node": ">=6.9.0"
@@ -758,13 +841,13 @@
}
},
"node_modules/@babel/plugin-syntax-typescript": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.9.tgz",
- "integrity": "sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.28.6.tgz",
+ "integrity": "sha512-+nDNmQye7nlnuuHDboPbGm00Vqg3oO8niRRL27/4LYHUsHYh0zJ1xWOz0uRwNFmM1Avzk8wZbc6rdiYhomzv/A==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.25.9"
+ "@babel/helper-plugin-utils": "^7.28.6"
},
"engines": {
"node": ">=6.9.0"
@@ -791,13 +874,13 @@
}
},
"node_modules/@babel/plugin-transform-arrow-functions": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.25.9.tgz",
- "integrity": "sha512-6jmooXYIwn9ca5/RylZADJ+EnSxVUS5sjeJ9UPk6RWRzXCmOJCy6dqItPJFpw2cuCangPK4OYr5uhGKcmrm5Qg==",
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.27.1.tgz",
+ "integrity": "sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.25.9"
+ "@babel/helper-plugin-utils": "^7.27.1"
},
"engines": {
"node": ">=6.9.0"
@@ -807,15 +890,15 @@
}
},
"node_modules/@babel/plugin-transform-async-generator-functions": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.9.tgz",
- "integrity": "sha512-RXV6QAzTBbhDMO9fWwOmwwTuYaiPbggWQ9INdZqAYeSHyG7FzQ+nOZaUUjNwKv9pV3aE4WFqFm1Hnbci5tBCAw==",
+ "version": "7.29.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.29.0.tgz",
+ "integrity": "sha512-va0VdWro4zlBr2JsXC+ofCPB2iG12wPtVGTWFx2WLDOM3nYQZZIGP82qku2eW/JR83sD+k2k+CsNtyEbUqhU6w==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.25.9",
- "@babel/helper-remap-async-to-generator": "^7.25.9",
- "@babel/traverse": "^7.25.9"
+ "@babel/helper-plugin-utils": "^7.28.6",
+ "@babel/helper-remap-async-to-generator": "^7.27.1",
+ "@babel/traverse": "^7.29.0"
},
"engines": {
"node": ">=6.9.0"
@@ -825,15 +908,15 @@
}
},
"node_modules/@babel/plugin-transform-async-to-generator": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.25.9.tgz",
- "integrity": "sha512-NT7Ejn7Z/LjUH0Gv5KsBCxh7BH3fbLTV0ptHvpeMvrt3cPThHfJfst9Wrb7S8EvJ7vRTFI7z+VAvFVEQn/m5zQ==",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.28.6.tgz",
+ "integrity": "sha512-ilTRcmbuXjsMmcZ3HASTe4caH5Tpo93PkTxF9oG2VZsSWsahydmcEHhix9Ik122RcTnZnUzPbmux4wh1swfv7g==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-module-imports": "^7.25.9",
- "@babel/helper-plugin-utils": "^7.25.9",
- "@babel/helper-remap-async-to-generator": "^7.25.9"
+ "@babel/helper-module-imports": "^7.28.6",
+ "@babel/helper-plugin-utils": "^7.28.6",
+ "@babel/helper-remap-async-to-generator": "^7.27.1"
},
"engines": {
"node": ">=6.9.0"
@@ -843,13 +926,13 @@
}
},
"node_modules/@babel/plugin-transform-block-scoped-functions": {
- "version": "7.26.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.26.5.tgz",
- "integrity": "sha512-chuTSY+hq09+/f5lMj8ZSYgCFpppV2CbYrhNFJ1BFoXpiWPnnAb7R0MqrafCpN8E1+YRrtM1MXZHJdIx8B6rMQ==",
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.27.1.tgz",
+ "integrity": "sha512-cnqkuOtZLapWYZUYM5rVIdv1nXYuFVIltZ6ZJ7nIj585QsjKM5dhL2Fu/lICXZ1OyIAFc7Qy+bvDAtTXqGrlhg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.26.5"
+ "@babel/helper-plugin-utils": "^7.27.1"
},
"engines": {
"node": ">=6.9.0"
@@ -859,13 +942,13 @@
}
},
"node_modules/@babel/plugin-transform-block-scoping": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.9.tgz",
- "integrity": "sha512-1F05O7AYjymAtqbsFETboN1NvBdcnzMerO+zlMyJBEz6WkMdejvGWw9p05iTSjC85RLlBseHHQpYaM4gzJkBGg==",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.28.6.tgz",
+ "integrity": "sha512-tt/7wOtBmwHPNMPu7ax4pdPz6shjFrmHDghvNC+FG9Qvj7D6mJcoRQIF5dy4njmxR941l6rgtvfSB2zX3VlUIw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.25.9"
+ "@babel/helper-plugin-utils": "^7.28.6"
},
"engines": {
"node": ">=6.9.0"
@@ -875,14 +958,14 @@
}
},
"node_modules/@babel/plugin-transform-class-properties": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.9.tgz",
- "integrity": "sha512-bbMAII8GRSkcd0h0b4X+36GksxuheLFjP65ul9w6C3KgAamI3JqErNgSrosX6ZPj+Mpim5VvEbawXxJCyEUV3Q==",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.28.6.tgz",
+ "integrity": "sha512-dY2wS3I2G7D697VHndN91TJr8/AAfXQNt5ynCTI/MpxMsSzHp+52uNivYT5wCPax3whc47DR8Ba7cmlQMg24bw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-create-class-features-plugin": "^7.25.9",
- "@babel/helper-plugin-utils": "^7.25.9"
+ "@babel/helper-create-class-features-plugin": "^7.28.6",
+ "@babel/helper-plugin-utils": "^7.28.6"
},
"engines": {
"node": ">=6.9.0"
@@ -892,14 +975,14 @@
}
},
"node_modules/@babel/plugin-transform-class-static-block": {
- "version": "7.26.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.26.0.tgz",
- "integrity": "sha512-6J2APTs7BDDm+UMqP1useWqhcRAXo0WIoVj26N7kPFB6S73Lgvyka4KTZYIxtgYXiN5HTyRObA72N2iu628iTQ==",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.28.6.tgz",
+ "integrity": "sha512-rfQ++ghVwTWTqQ7w8qyDxL1XGihjBss4CmTgGRCTAC9RIbhVpyp4fOeZtta0Lbf+dTNIVJer6ych2ibHwkZqsQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-create-class-features-plugin": "^7.25.9",
- "@babel/helper-plugin-utils": "^7.25.9"
+ "@babel/helper-create-class-features-plugin": "^7.28.6",
+ "@babel/helper-plugin-utils": "^7.28.6"
},
"engines": {
"node": ">=6.9.0"
@@ -909,18 +992,18 @@
}
},
"node_modules/@babel/plugin-transform-classes": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.9.tgz",
- "integrity": "sha512-mD8APIXmseE7oZvZgGABDyM34GUmK45Um2TXiBUt7PnuAxrgoSVf123qUzPxEr/+/BHrRn5NMZCdE2m/1F8DGg==",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.28.6.tgz",
+ "integrity": "sha512-EF5KONAqC5zAqT783iMGuM2ZtmEBy+mJMOKl2BCvPZ2lVrwvXnB6o+OBWCS+CoeCCpVRF2sA2RBKUxvT8tQT5Q==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-annotate-as-pure": "^7.25.9",
- "@babel/helper-compilation-targets": "^7.25.9",
- "@babel/helper-plugin-utils": "^7.25.9",
- "@babel/helper-replace-supers": "^7.25.9",
- "@babel/traverse": "^7.25.9",
- "globals": "^11.1.0"
+ "@babel/helper-annotate-as-pure": "^7.27.3",
+ "@babel/helper-compilation-targets": "^7.28.6",
+ "@babel/helper-globals": "^7.28.0",
+ "@babel/helper-plugin-utils": "^7.28.6",
+ "@babel/helper-replace-supers": "^7.28.6",
+ "@babel/traverse": "^7.28.6"
},
"engines": {
"node": ">=6.9.0"
@@ -930,14 +1013,14 @@
}
},
"node_modules/@babel/plugin-transform-computed-properties": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.25.9.tgz",
- "integrity": "sha512-HnBegGqXZR12xbcTHlJ9HGxw1OniltT26J5YpfruGqtUHlz/xKf/G2ak9e+t0rVqrjXa9WOhvYPz1ERfMj23AA==",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.28.6.tgz",
+ "integrity": "sha512-bcc3k0ijhHbc2lEfpFHgx7eYw9KNXqOerKWfzbxEHUGKnS3sz9C4CNL9OiFN1297bDNfUiSO7DaLzbvHQQQ1BQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.25.9",
- "@babel/template": "^7.25.9"
+ "@babel/helper-plugin-utils": "^7.28.6",
+ "@babel/template": "^7.28.6"
},
"engines": {
"node": ">=6.9.0"
@@ -947,13 +1030,14 @@
}
},
"node_modules/@babel/plugin-transform-destructuring": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.25.9.tgz",
- "integrity": "sha512-WkCGb/3ZxXepmMiX101nnGiU+1CAdut8oHyEOHxkKuS1qKpU2SMXE2uSvfz8PBuLd49V6LEsbtyPhWC7fnkgvQ==",
+ "version": "7.28.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.28.5.tgz",
+ "integrity": "sha512-Kl9Bc6D0zTUcFUvkNuQh4eGXPKKNDOJQXVyyM4ZAQPMveniJdxi8XMJwLo+xSoW3MIq81bD33lcUe9kZpl0MCw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.25.9"
+ "@babel/helper-plugin-utils": "^7.27.1",
+ "@babel/traverse": "^7.28.5"
},
"engines": {
"node": ">=6.9.0"
@@ -963,14 +1047,14 @@
}
},
"node_modules/@babel/plugin-transform-dotall-regex": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.25.9.tgz",
- "integrity": "sha512-t7ZQ7g5trIgSRYhI9pIJtRl64KHotutUJsh4Eze5l7olJv+mRSg4/MmbZ0tv1eeqRbdvo/+trvJD/Oc5DmW2cA==",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.28.6.tgz",
+ "integrity": "sha512-SljjowuNKB7q5Oayv4FoPzeB74g3QgLt8IVJw9ADvWy3QnUb/01aw8I4AVv8wYnPvQz2GDDZ/g3GhcNyDBI4Bg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-create-regexp-features-plugin": "^7.25.9",
- "@babel/helper-plugin-utils": "^7.25.9"
+ "@babel/helper-create-regexp-features-plugin": "^7.28.5",
+ "@babel/helper-plugin-utils": "^7.28.6"
},
"engines": {
"node": ">=6.9.0"
@@ -980,13 +1064,13 @@
}
},
"node_modules/@babel/plugin-transform-duplicate-keys": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.25.9.tgz",
- "integrity": "sha512-LZxhJ6dvBb/f3x8xwWIuyiAHy56nrRG3PeYTpBkkzkYRRQ6tJLu68lEF5VIqMUZiAV7a8+Tb78nEoMCMcqjXBw==",
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.27.1.tgz",
+ "integrity": "sha512-MTyJk98sHvSs+cvZ4nOauwTTG1JeonDjSGvGGUNHreGQns+Mpt6WX/dVzWBHgg+dYZhkC4X+zTDfkTU+Vy9y7Q==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.25.9"
+ "@babel/helper-plugin-utils": "^7.27.1"
},
"engines": {
"node": ">=6.9.0"
@@ -996,14 +1080,14 @@
}
},
"node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.9.tgz",
- "integrity": "sha512-0UfuJS0EsXbRvKnwcLjFtJy/Sxc5J5jhLHnFhy7u4zih97Hz6tJkLU+O+FMMrNZrosUPxDi6sYxJ/EA8jDiAog==",
+ "version": "7.29.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.29.0.tgz",
+ "integrity": "sha512-zBPcW2lFGxdiD8PUnPwJjag2J9otbcLQzvbiOzDxpYXyCuYX9agOwMPGn1prVH0a4qzhCKu24rlH4c1f7yA8rw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-create-regexp-features-plugin": "^7.25.9",
- "@babel/helper-plugin-utils": "^7.25.9"
+ "@babel/helper-create-regexp-features-plugin": "^7.28.5",
+ "@babel/helper-plugin-utils": "^7.28.6"
},
"engines": {
"node": ">=6.9.0"
@@ -1013,13 +1097,30 @@
}
},
"node_modules/@babel/plugin-transform-dynamic-import": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.25.9.tgz",
- "integrity": "sha512-GCggjexbmSLaFhqsojeugBpeaRIgWNTcgKVq/0qIteFEqY2A+b9QidYadrWlnbWQUrW5fn+mCvf3tr7OeBFTyg==",
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.27.1.tgz",
+ "integrity": "sha512-MHzkWQcEmjzzVW9j2q8LGjwGWpG2mjwaaB0BNQwst3FIjqsg8Ct/mIZlvSPJvfi9y2AC8mi/ktxbFVL9pZ1I4A==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.25.9"
+ "@babel/helper-plugin-utils": "^7.27.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-explicit-resource-management": {
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-explicit-resource-management/-/plugin-transform-explicit-resource-management-7.28.6.tgz",
+ "integrity": "sha512-Iao5Konzx2b6g7EPqTy40UZbcdXE126tTxVFr/nAIj+WItNxjKSYTEw3RC+A2/ZetmdJsgueL1KhaMCQHkLPIg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.28.6",
+ "@babel/plugin-transform-destructuring": "^7.28.5"
},
"engines": {
"node": ">=6.9.0"
@@ -1029,13 +1130,13 @@
}
},
"node_modules/@babel/plugin-transform-exponentiation-operator": {
- "version": "7.26.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.26.3.tgz",
- "integrity": "sha512-7CAHcQ58z2chuXPWblnn1K6rLDnDWieghSOEmqQsrBenH0P9InCUtOJYD89pvngljmZlJcz3fcmgYsXFNGa1ZQ==",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.28.6.tgz",
+ "integrity": "sha512-WitabqiGjV/vJ0aPOLSFfNY1u9U3R7W36B03r5I2KoNix+a3sOhJ3pKFB3R5It9/UiK78NiO0KE9P21cMhlPkw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.25.9"
+ "@babel/helper-plugin-utils": "^7.28.6"
},
"engines": {
"node": ">=6.9.0"
@@ -1045,13 +1146,13 @@
}
},
"node_modules/@babel/plugin-transform-export-namespace-from": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.25.9.tgz",
- "integrity": "sha512-2NsEz+CxzJIVOPx2o9UsW1rXLqtChtLoVnwYHHiB04wS5sgn7mrV45fWMBX0Kk+ub9uXytVYfNP2HjbVbCB3Ww==",
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.27.1.tgz",
+ "integrity": "sha512-tQvHWSZ3/jH2xuq/vZDy0jNn+ZdXJeM8gHvX4lnJmsc3+50yPlWdZXIc5ay+umX+2/tJIqHqiEqcJvxlmIvRvQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.25.9"
+ "@babel/helper-plugin-utils": "^7.27.1"
},
"engines": {
"node": ">=6.9.0"
@@ -1061,14 +1162,14 @@
}
},
"node_modules/@babel/plugin-transform-for-of": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.25.9.tgz",
- "integrity": "sha512-LqHxduHoaGELJl2uhImHwRQudhCM50pT46rIBNvtT/Oql3nqiS3wOwP+5ten7NpYSXrrVLgtZU3DZmPtWZo16A==",
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.27.1.tgz",
+ "integrity": "sha512-BfbWFFEJFQzLCQ5N8VocnCtA8J1CLkNTe2Ms2wocj75dd6VpiqS5Z5quTYcUoo4Yq+DN0rtikODccuv7RU81sw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.25.9",
- "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9"
+ "@babel/helper-plugin-utils": "^7.27.1",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1"
},
"engines": {
"node": ">=6.9.0"
@@ -1078,15 +1179,15 @@
}
},
"node_modules/@babel/plugin-transform-function-name": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.9.tgz",
- "integrity": "sha512-8lP+Yxjv14Vc5MuWBpJsoUCd3hD6V9DgBon2FVYL4jJgbnVQ9fTgYmonchzZJOVNgzEgbxp4OwAf6xz6M/14XA==",
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.27.1.tgz",
+ "integrity": "sha512-1bQeydJF9Nr1eBCMMbC+hdwmRlsv5XYOMu03YSWFwNs0HsAmtSxxF1fyuYPqemVldVyFmlCU7w8UE14LupUSZQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-compilation-targets": "^7.25.9",
- "@babel/helper-plugin-utils": "^7.25.9",
- "@babel/traverse": "^7.25.9"
+ "@babel/helper-compilation-targets": "^7.27.1",
+ "@babel/helper-plugin-utils": "^7.27.1",
+ "@babel/traverse": "^7.27.1"
},
"engines": {
"node": ">=6.9.0"
@@ -1096,13 +1197,13 @@
}
},
"node_modules/@babel/plugin-transform-json-strings": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.25.9.tgz",
- "integrity": "sha512-xoTMk0WXceiiIvsaquQQUaLLXSW1KJ159KP87VilruQm0LNNGxWzahxSS6T6i4Zg3ezp4vA4zuwiNUR53qmQAw==",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.28.6.tgz",
+ "integrity": "sha512-Nr+hEN+0geQkzhbdgQVPoqr47lZbm+5fCUmO70722xJZd0Mvb59+33QLImGj6F+DkK3xgDi1YVysP8whD6FQAw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.25.9"
+ "@babel/helper-plugin-utils": "^7.28.6"
},
"engines": {
"node": ">=6.9.0"
@@ -1112,13 +1213,13 @@
}
},
"node_modules/@babel/plugin-transform-literals": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.9.tgz",
- "integrity": "sha512-9N7+2lFziW8W9pBl2TzaNht3+pgMIRP74zizeCSrtnSKVdUl8mAjjOP2OOVQAfZ881P2cNjDj1uAMEdeD50nuQ==",
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.27.1.tgz",
+ "integrity": "sha512-0HCFSepIpLTkLcsi86GG3mTUzxV5jpmbv97hTETW3yzrAij8aqlD36toB1D0daVFJM8NK6GvKO0gslVQmm+zZA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.25.9"
+ "@babel/helper-plugin-utils": "^7.27.1"
},
"engines": {
"node": ">=6.9.0"
@@ -1128,13 +1229,13 @@
}
},
"node_modules/@babel/plugin-transform-logical-assignment-operators": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.25.9.tgz",
- "integrity": "sha512-wI4wRAzGko551Y8eVf6iOY9EouIDTtPb0ByZx+ktDGHwv6bHFimrgJM/2T021txPZ2s4c7bqvHbd+vXG6K948Q==",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.28.6.tgz",
+ "integrity": "sha512-+anKKair6gpi8VsM/95kmomGNMD0eLz1NQ8+Pfw5sAwWH9fGYXT50E55ZpV0pHUHWf6IUTWPM+f/7AAff+wr9A==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.25.9"
+ "@babel/helper-plugin-utils": "^7.28.6"
},
"engines": {
"node": ">=6.9.0"
@@ -1144,13 +1245,13 @@
}
},
"node_modules/@babel/plugin-transform-member-expression-literals": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.25.9.tgz",
- "integrity": "sha512-PYazBVfofCQkkMzh2P6IdIUaCEWni3iYEerAsRWuVd8+jlM1S9S9cz1dF9hIzyoZ8IA3+OwVYIp9v9e+GbgZhA==",
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.27.1.tgz",
+ "integrity": "sha512-hqoBX4dcZ1I33jCSWcXrP+1Ku7kdqXf1oeah7ooKOIiAdKQ+uqftgCFNOSzA5AMS2XIHEYeGFg4cKRCdpxzVOQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.25.9"
+ "@babel/helper-plugin-utils": "^7.27.1"
},
"engines": {
"node": ">=6.9.0"
@@ -1160,14 +1261,14 @@
}
},
"node_modules/@babel/plugin-transform-modules-amd": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.25.9.tgz",
- "integrity": "sha512-g5T11tnI36jVClQlMlt4qKDLlWnG5pP9CSM4GhdRciTNMRgkfpo5cR6b4rGIOYPgRRuFAvwjPQ/Yk+ql4dyhbw==",
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.27.1.tgz",
+ "integrity": "sha512-iCsytMg/N9/oFq6n+gFTvUYDZQOMK5kEdeYxmxt91fcJGycfxVP9CnrxoliM0oumFERba2i8ZtwRUCMhvP1LnA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-module-transforms": "^7.25.9",
- "@babel/helper-plugin-utils": "^7.25.9"
+ "@babel/helper-module-transforms": "^7.27.1",
+ "@babel/helper-plugin-utils": "^7.27.1"
},
"engines": {
"node": ">=6.9.0"
@@ -1177,14 +1278,14 @@
}
},
"node_modules/@babel/plugin-transform-modules-commonjs": {
- "version": "7.26.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.26.3.tgz",
- "integrity": "sha512-MgR55l4q9KddUDITEzEFYn5ZsGDXMSsU9E+kh7fjRXTIC3RHqfCo8RPRbyReYJh44HQ/yomFkqbOFohXvDCiIQ==",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.28.6.tgz",
+ "integrity": "sha512-jppVbf8IV9iWWwWTQIxJMAJCWBuuKx71475wHwYytrRGQ2CWiDvYlADQno3tcYpS/T2UUWFQp3nVtYfK/YBQrA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-module-transforms": "^7.26.0",
- "@babel/helper-plugin-utils": "^7.25.9"
+ "@babel/helper-module-transforms": "^7.28.6",
+ "@babel/helper-plugin-utils": "^7.28.6"
},
"engines": {
"node": ">=6.9.0"
@@ -1194,16 +1295,16 @@
}
},
"node_modules/@babel/plugin-transform-modules-systemjs": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.9.tgz",
- "integrity": "sha512-hyss7iIlH/zLHaehT+xwiymtPOpsiwIIRlCAOwBB04ta5Tt+lNItADdlXw3jAWZ96VJ2jlhl/c+PNIQPKNfvcA==",
+ "version": "7.29.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.29.0.tgz",
+ "integrity": "sha512-PrujnVFbOdUpw4UHiVwKvKRLMMic8+eC0CuNlxjsyZUiBjhFdPsewdXCkveh2KqBA9/waD0W1b4hXSOBQJezpQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-module-transforms": "^7.25.9",
- "@babel/helper-plugin-utils": "^7.25.9",
- "@babel/helper-validator-identifier": "^7.25.9",
- "@babel/traverse": "^7.25.9"
+ "@babel/helper-module-transforms": "^7.28.6",
+ "@babel/helper-plugin-utils": "^7.28.6",
+ "@babel/helper-validator-identifier": "^7.28.5",
+ "@babel/traverse": "^7.29.0"
},
"engines": {
"node": ">=6.9.0"
@@ -1213,14 +1314,14 @@
}
},
"node_modules/@babel/plugin-transform-modules-umd": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.25.9.tgz",
- "integrity": "sha512-bS9MVObUgE7ww36HEfwe6g9WakQ0KF07mQF74uuXdkoziUPfKyu/nIm663kz//e5O1nPInPFx36z7WJmJ4yNEw==",
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.27.1.tgz",
+ "integrity": "sha512-iQBE/xC5BV1OxJbp6WG7jq9IWiD+xxlZhLrdwpPkTX3ydmXdvoCpyfJN7acaIBZaOqTfr76pgzqBJflNbeRK+w==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-module-transforms": "^7.25.9",
- "@babel/helper-plugin-utils": "^7.25.9"
+ "@babel/helper-module-transforms": "^7.27.1",
+ "@babel/helper-plugin-utils": "^7.27.1"
},
"engines": {
"node": ">=6.9.0"
@@ -1230,14 +1331,14 @@
}
},
"node_modules/@babel/plugin-transform-named-capturing-groups-regex": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.25.9.tgz",
- "integrity": "sha512-oqB6WHdKTGl3q/ItQhpLSnWWOpjUJLsOCLVyeFgeTktkBSCiurvPOsyt93gibI9CmuKvTUEtWmG5VhZD+5T/KA==",
+ "version": "7.29.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.29.0.tgz",
+ "integrity": "sha512-1CZQA5KNAD6ZYQLPw7oi5ewtDNxH/2vuCh+6SmvgDfhumForvs8a1o9n0UrEoBD8HU4djO2yWngTQlXl1NDVEQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-create-regexp-features-plugin": "^7.25.9",
- "@babel/helper-plugin-utils": "^7.25.9"
+ "@babel/helper-create-regexp-features-plugin": "^7.28.5",
+ "@babel/helper-plugin-utils": "^7.28.6"
},
"engines": {
"node": ">=6.9.0"
@@ -1247,13 +1348,13 @@
}
},
"node_modules/@babel/plugin-transform-new-target": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.25.9.tgz",
- "integrity": "sha512-U/3p8X1yCSoKyUj2eOBIx3FOn6pElFOKvAAGf8HTtItuPyB+ZeOqfn+mvTtg9ZlOAjsPdK3ayQEjqHjU/yLeVQ==",
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.27.1.tgz",
+ "integrity": "sha512-f6PiYeqXQ05lYq3TIfIDu/MtliKUbNwkGApPUvyo6+tc7uaR4cPjPe7DFPr15Uyycg2lZU6btZ575CuQoYh7MQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.25.9"
+ "@babel/helper-plugin-utils": "^7.27.1"
},
"engines": {
"node": ">=6.9.0"
@@ -1263,13 +1364,13 @@
}
},
"node_modules/@babel/plugin-transform-nullish-coalescing-operator": {
- "version": "7.26.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.26.6.tgz",
- "integrity": "sha512-CKW8Vu+uUZneQCPtXmSBUC6NCAUdya26hWCElAWh5mVSlSRsmiCPUUDKb3Z0szng1hiAJa098Hkhg9o4SE35Qw==",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.28.6.tgz",
+ "integrity": "sha512-3wKbRgmzYbw24mDJXT7N+ADXw8BC/imU9yo9c9X9NKaLF1fW+e5H1U5QjMUBe4Qo4Ox/o++IyUkl1sVCLgevKg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.26.5"
+ "@babel/helper-plugin-utils": "^7.28.6"
},
"engines": {
"node": ">=6.9.0"
@@ -1279,13 +1380,13 @@
}
},
"node_modules/@babel/plugin-transform-numeric-separator": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.25.9.tgz",
- "integrity": "sha512-TlprrJ1GBZ3r6s96Yq8gEQv82s8/5HnCVHtEJScUj90thHQbwe+E5MLhi2bbNHBEJuzrvltXSru+BUxHDoog7Q==",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.28.6.tgz",
+ "integrity": "sha512-SJR8hPynj8outz+SlStQSwvziMN4+Bq99it4tMIf5/Caq+3iOc0JtKyse8puvyXkk3eFRIA5ID/XfunGgO5i6w==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.25.9"
+ "@babel/helper-plugin-utils": "^7.28.6"
},
"engines": {
"node": ">=6.9.0"
@@ -1295,15 +1396,17 @@
}
},
"node_modules/@babel/plugin-transform-object-rest-spread": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.25.9.tgz",
- "integrity": "sha512-fSaXafEE9CVHPweLYw4J0emp1t8zYTXyzN3UuG+lylqkvYd7RMrsOQ8TYx5RF231be0vqtFC6jnx3UmpJmKBYg==",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.28.6.tgz",
+ "integrity": "sha512-5rh+JR4JBC4pGkXLAcYdLHZjXudVxWMXbB6u6+E9lRL5TrGVbHt1TjxGbZ8CkmYw9zjkB7jutzOROArsqtncEA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-compilation-targets": "^7.25.9",
- "@babel/helper-plugin-utils": "^7.25.9",
- "@babel/plugin-transform-parameters": "^7.25.9"
+ "@babel/helper-compilation-targets": "^7.28.6",
+ "@babel/helper-plugin-utils": "^7.28.6",
+ "@babel/plugin-transform-destructuring": "^7.28.5",
+ "@babel/plugin-transform-parameters": "^7.27.7",
+ "@babel/traverse": "^7.28.6"
},
"engines": {
"node": ">=6.9.0"
@@ -1313,14 +1416,14 @@
}
},
"node_modules/@babel/plugin-transform-object-super": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.25.9.tgz",
- "integrity": "sha512-Kj/Gh+Rw2RNLbCK1VAWj2U48yxxqL2x0k10nPtSdRa0O2xnHXalD0s+o1A6a0W43gJ00ANo38jxkQreckOzv5A==",
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.27.1.tgz",
+ "integrity": "sha512-SFy8S9plRPbIcxlJ8A6mT/CxFdJx/c04JEctz4jf8YZaVS2px34j7NXRrlGlHkN/M2gnpL37ZpGRGVFLd3l8Ng==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.25.9",
- "@babel/helper-replace-supers": "^7.25.9"
+ "@babel/helper-plugin-utils": "^7.27.1",
+ "@babel/helper-replace-supers": "^7.27.1"
},
"engines": {
"node": ">=6.9.0"
@@ -1330,13 +1433,13 @@
}
},
"node_modules/@babel/plugin-transform-optional-catch-binding": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.25.9.tgz",
- "integrity": "sha512-qM/6m6hQZzDcZF3onzIhZeDHDO43bkNNlOX0i8n3lR6zLbu0GN2d8qfM/IERJZYauhAHSLHy39NF0Ctdvcid7g==",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.28.6.tgz",
+ "integrity": "sha512-R8ja/Pyrv0OGAvAXQhSTmWyPJPml+0TMqXlO5w+AsMEiwb2fg3WkOvob7UxFSL3OIttFSGSRFKQsOhJ/X6HQdQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.25.9"
+ "@babel/helper-plugin-utils": "^7.28.6"
},
"engines": {
"node": ">=6.9.0"
@@ -1346,14 +1449,14 @@
}
},
"node_modules/@babel/plugin-transform-optional-chaining": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.25.9.tgz",
- "integrity": "sha512-6AvV0FsLULbpnXeBjrY4dmWF8F7gf8QnvTEoO/wX/5xm/xE1Xo8oPuD3MPS+KS9f9XBEAWN7X1aWr4z9HdOr7A==",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.28.6.tgz",
+ "integrity": "sha512-A4zobikRGJTsX9uqVFdafzGkqD30t26ck2LmOzAuLL8b2x6k3TIqRiT2xVvA9fNmFeTX484VpsdgmKNA0bS23w==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.25.9",
- "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9"
+ "@babel/helper-plugin-utils": "^7.28.6",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1"
},
"engines": {
"node": ">=6.9.0"
@@ -1363,13 +1466,13 @@
}
},
"node_modules/@babel/plugin-transform-parameters": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.25.9.tgz",
- "integrity": "sha512-wzz6MKwpnshBAiRmn4jR8LYz/g8Ksg0o80XmwZDlordjwEk9SxBzTWC7F5ef1jhbrbOW2DJ5J6ayRukrJmnr0g==",
+ "version": "7.27.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.27.7.tgz",
+ "integrity": "sha512-qBkYTYCb76RRxUM6CcZA5KRu8K4SM8ajzVeUgVdMVO9NN9uI/GaVmBg/WKJJGnNokV9SY8FxNOVWGXzqzUidBg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.25.9"
+ "@babel/helper-plugin-utils": "^7.27.1"
},
"engines": {
"node": ">=6.9.0"
@@ -1379,14 +1482,14 @@
}
},
"node_modules/@babel/plugin-transform-private-methods": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.9.tgz",
- "integrity": "sha512-D/JUozNpQLAPUVusvqMxyvjzllRaF8/nSrP1s2YGQT/W4LHK4xxsMcHjhOGTS01mp9Hda8nswb+FblLdJornQw==",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.28.6.tgz",
+ "integrity": "sha512-piiuapX9CRv7+0st8lmuUlRSmX6mBcVeNQ1b4AYzJxfCMuBfB0vBXDiGSmm03pKJw1v6cZ8KSeM+oUnM6yAExg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-create-class-features-plugin": "^7.25.9",
- "@babel/helper-plugin-utils": "^7.25.9"
+ "@babel/helper-create-class-features-plugin": "^7.28.6",
+ "@babel/helper-plugin-utils": "^7.28.6"
},
"engines": {
"node": ">=6.9.0"
@@ -1396,15 +1499,15 @@
}
},
"node_modules/@babel/plugin-transform-private-property-in-object": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.25.9.tgz",
- "integrity": "sha512-Evf3kcMqzXA3xfYJmZ9Pg1OvKdtqsDMSWBDzZOPLvHiTt36E75jLDQo5w1gtRU95Q4E5PDttrTf25Fw8d/uWLw==",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.28.6.tgz",
+ "integrity": "sha512-b97jvNSOb5+ehyQmBpmhOCiUC5oVK4PMnpRvO7+ymFBoqYjeDHIU9jnrNUuwHOiL9RpGDoKBpSViarV+BU+eVA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-annotate-as-pure": "^7.25.9",
- "@babel/helper-create-class-features-plugin": "^7.25.9",
- "@babel/helper-plugin-utils": "^7.25.9"
+ "@babel/helper-annotate-as-pure": "^7.27.3",
+ "@babel/helper-create-class-features-plugin": "^7.28.6",
+ "@babel/helper-plugin-utils": "^7.28.6"
},
"engines": {
"node": ">=6.9.0"
@@ -1414,13 +1517,13 @@
}
},
"node_modules/@babel/plugin-transform-property-literals": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.25.9.tgz",
- "integrity": "sha512-IvIUeV5KrS/VPavfSM/Iu+RE6llrHrYIKY1yfCzyO/lMXHQ+p7uGhonmGVisv6tSBSVgWzMBohTcvkC9vQcQFA==",
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.27.1.tgz",
+ "integrity": "sha512-oThy3BCuCha8kDZ8ZkgOg2exvPYUlprMukKQXI1r1pJ47NCvxfkEy8vK+r/hT9nF0Aa4H1WUPZZjHTFtAhGfmQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.25.9"
+ "@babel/helper-plugin-utils": "^7.27.1"
},
"engines": {
"node": ">=6.9.0"
@@ -1430,13 +1533,13 @@
}
},
"node_modules/@babel/plugin-transform-react-constant-elements": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.25.9.tgz",
- "integrity": "sha512-Ncw2JFsJVuvfRsa2lSHiC55kETQVLSnsYGQ1JDDwkUeWGTL/8Tom8aLTnlqgoeuopWrbbGndrc9AlLYrIosrow==",
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.27.1.tgz",
+ "integrity": "sha512-edoidOjl/ZxvYo4lSBOQGDSyToYVkTAwyVoa2tkuYTSmjrB1+uAedoL5iROVLXkxH+vRgA7uP4tMg2pUJpZ3Ug==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.25.9"
+ "@babel/helper-plugin-utils": "^7.27.1"
},
"engines": {
"node": ">=6.9.0"
@@ -1446,13 +1549,13 @@
}
},
"node_modules/@babel/plugin-transform-react-display-name": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.25.9.tgz",
- "integrity": "sha512-KJfMlYIUxQB1CJfO3e0+h0ZHWOTLCPP115Awhaz8U0Zpq36Gl/cXlpoyMRnUWlhNUBAzldnCiAZNvCDj7CrKxQ==",
+ "version": "7.28.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.28.0.tgz",
+ "integrity": "sha512-D6Eujc2zMxKjfa4Zxl4GHMsmhKKZ9VpcqIchJLvwTxad9zWIYulwYItBovpDOoNLISpcZSXoDJ5gaGbQUDqViA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.25.9"
+ "@babel/helper-plugin-utils": "^7.27.1"
},
"engines": {
"node": ">=6.9.0"
@@ -1462,17 +1565,17 @@
}
},
"node_modules/@babel/plugin-transform-react-jsx": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.25.9.tgz",
- "integrity": "sha512-s5XwpQYCqGerXl+Pu6VDL3x0j2d82eiV77UJ8a2mDHAW7j9SWRqQ2y1fNo1Z74CdcYipl5Z41zvjj4Nfzq36rw==",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.28.6.tgz",
+ "integrity": "sha512-61bxqhiRfAACulXSLd/GxqmAedUSrRZIu/cbaT18T1CetkTmtDN15it7i80ru4DVqRK1WMxQhXs+Lf9kajm5Ow==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-annotate-as-pure": "^7.25.9",
- "@babel/helper-module-imports": "^7.25.9",
- "@babel/helper-plugin-utils": "^7.25.9",
- "@babel/plugin-syntax-jsx": "^7.25.9",
- "@babel/types": "^7.25.9"
+ "@babel/helper-annotate-as-pure": "^7.27.3",
+ "@babel/helper-module-imports": "^7.28.6",
+ "@babel/helper-plugin-utils": "^7.28.6",
+ "@babel/plugin-syntax-jsx": "^7.28.6",
+ "@babel/types": "^7.28.6"
},
"engines": {
"node": ">=6.9.0"
@@ -1482,13 +1585,13 @@
}
},
"node_modules/@babel/plugin-transform-react-jsx-development": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.25.9.tgz",
- "integrity": "sha512-9mj6rm7XVYs4mdLIpbZnHOYdpW42uoiBCTVowg7sP1thUOiANgMb4UtpRivR0pp5iL+ocvUv7X4mZgFRpJEzGw==",
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.27.1.tgz",
+ "integrity": "sha512-ykDdF5yI4f1WrAolLqeF3hmYU12j9ntLQl/AOG1HAS21jxyg1Q0/J/tpREuYLfatGdGmXp/3yS0ZA76kOlVq9Q==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/plugin-transform-react-jsx": "^7.25.9"
+ "@babel/plugin-transform-react-jsx": "^7.27.1"
},
"engines": {
"node": ">=6.9.0"
@@ -1498,14 +1601,14 @@
}
},
"node_modules/@babel/plugin-transform-react-pure-annotations": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.25.9.tgz",
- "integrity": "sha512-KQ/Takk3T8Qzj5TppkS1be588lkbTp5uj7w6a0LeQaTMSckU/wK0oJ/pih+T690tkgI5jfmg2TqDJvd41Sj1Cg==",
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.27.1.tgz",
+ "integrity": "sha512-JfuinvDOsD9FVMTHpzA/pBLisxpv1aSf+OIV8lgH3MuWrks19R27e6a6DipIg4aX1Zm9Wpb04p8wljfKrVSnPA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-annotate-as-pure": "^7.25.9",
- "@babel/helper-plugin-utils": "^7.25.9"
+ "@babel/helper-annotate-as-pure": "^7.27.1",
+ "@babel/helper-plugin-utils": "^7.27.1"
},
"engines": {
"node": ">=6.9.0"
@@ -1515,14 +1618,13 @@
}
},
"node_modules/@babel/plugin-transform-regenerator": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.25.9.tgz",
- "integrity": "sha512-vwDcDNsgMPDGP0nMqzahDWE5/MLcX8sv96+wfX7as7LoF/kr97Bo/7fI00lXY4wUXYfVmwIIyG80fGZ1uvt2qg==",
+ "version": "7.29.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.29.0.tgz",
+ "integrity": "sha512-FijqlqMA7DmRdg/aINBSs04y8XNTYw/lr1gJ2WsmBnnaNw1iS43EPkJW+zK7z65auG3AWRFXWj+NcTQwYptUog==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.25.9",
- "regenerator-transform": "^0.15.2"
+ "@babel/helper-plugin-utils": "^7.28.6"
},
"engines": {
"node": ">=6.9.0"
@@ -1532,14 +1634,14 @@
}
},
"node_modules/@babel/plugin-transform-regexp-modifiers": {
- "version": "7.26.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.26.0.tgz",
- "integrity": "sha512-vN6saax7lrA2yA/Pak3sCxuD6F5InBjn9IcrIKQPjpsLvuHYLVroTxjdlVRHjjBWxKOqIwpTXDkOssYT4BFdRw==",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.28.6.tgz",
+ "integrity": "sha512-QGWAepm9qxpaIs7UM9FvUSnCGlb8Ua1RhyM4/veAxLwt3gMat/LSGrZixyuj4I6+Kn9iwvqCyPTtbdxanYoWYg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-create-regexp-features-plugin": "^7.25.9",
- "@babel/helper-plugin-utils": "^7.25.9"
+ "@babel/helper-create-regexp-features-plugin": "^7.28.5",
+ "@babel/helper-plugin-utils": "^7.28.6"
},
"engines": {
"node": ">=6.9.0"
@@ -1549,13 +1651,13 @@
}
},
"node_modules/@babel/plugin-transform-reserved-words": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.25.9.tgz",
- "integrity": "sha512-7DL7DKYjn5Su++4RXu8puKZm2XBPHyjWLUidaPEkCUBbE7IPcsrkRHggAOOKydH1dASWdcUBxrkOGNxUv5P3Jg==",
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.27.1.tgz",
+ "integrity": "sha512-V2ABPHIJX4kC7HegLkYoDpfg9PVmuWy/i6vUM5eGK22bx4YVFD3M5F0QQnWQoDs6AGsUWTVOopBiMFQgHaSkVw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.25.9"
+ "@babel/helper-plugin-utils": "^7.27.1"
},
"engines": {
"node": ">=6.9.0"
@@ -1565,17 +1667,17 @@
}
},
"node_modules/@babel/plugin-transform-runtime": {
- "version": "7.25.7",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.25.7.tgz",
- "integrity": "sha512-Y9p487tyTzB0yDYQOtWnC+9HGOuogtP3/wNpun1xJXEEvI6vip59BSBTsHnekZLqxmPcgsrAKt46HAAb//xGhg==",
+ "version": "7.29.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.29.0.tgz",
+ "integrity": "sha512-jlaRT5dJtMaMCV6fAuLbsQMSwz/QkvaHOHOSXRitGGwSpR1blCY4KUKoyP2tYO8vJcqYe8cEj96cqSztv3uF9w==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-module-imports": "^7.25.7",
- "@babel/helper-plugin-utils": "^7.25.7",
- "babel-plugin-polyfill-corejs2": "^0.4.10",
- "babel-plugin-polyfill-corejs3": "^0.10.6",
- "babel-plugin-polyfill-regenerator": "^0.6.1",
+ "@babel/helper-module-imports": "^7.28.6",
+ "@babel/helper-plugin-utils": "^7.28.6",
+ "babel-plugin-polyfill-corejs2": "^0.4.14",
+ "babel-plugin-polyfill-corejs3": "^0.13.0",
+ "babel-plugin-polyfill-regenerator": "^0.6.5",
"semver": "^6.3.1"
},
"engines": {
@@ -1585,14 +1687,28 @@
"@babel/core": "^7.0.0-0"
}
},
- "node_modules/@babel/plugin-transform-shorthand-properties": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.25.9.tgz",
- "integrity": "sha512-MUv6t0FhO5qHnS/W8XCbHmiRWOphNufpE1IVxhK5kuN3Td9FT1x4rx4K42s3RYdMXCXpfWkGSbCSd0Z64xA7Ng==",
+ "node_modules/@babel/plugin-transform-runtime/node_modules/babel-plugin-polyfill-corejs3": {
+ "version": "0.13.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.13.0.tgz",
+ "integrity": "sha512-U+GNwMdSFgzVmfhNm8GJUX88AadB3uo9KpJqS3FaqNIPKgySuvMb+bHPsOmmuWyIcuqZj/pzt1RUIUZns4y2+A==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.25.9"
+ "@babel/helper-define-polyfill-provider": "^0.6.5",
+ "core-js-compat": "^3.43.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-shorthand-properties": {
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.27.1.tgz",
+ "integrity": "sha512-N/wH1vcn4oYawbJ13Y/FxcQrWk63jhfNa7jef0ih7PHSIHX2LB7GWE1rkPrOnka9kwMxb6hMl19p7lidA+EHmQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.27.1"
},
"engines": {
"node": ">=6.9.0"
@@ -1602,14 +1718,14 @@
}
},
"node_modules/@babel/plugin-transform-spread": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.25.9.tgz",
- "integrity": "sha512-oNknIB0TbURU5pqJFVbOOFspVlrpVwo2H1+HUIsVDvp5VauGGDP1ZEvO8Nn5xyMEs3dakajOxlmkNW7kNgSm6A==",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.28.6.tgz",
+ "integrity": "sha512-9U4QObUC0FtJl05AsUcodau/RWDytrU6uKgkxu09mLR9HLDAtUMoPuuskm5huQsoktmsYpI+bGmq+iapDcriKA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.25.9",
- "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9"
+ "@babel/helper-plugin-utils": "^7.28.6",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1"
},
"engines": {
"node": ">=6.9.0"
@@ -1619,13 +1735,13 @@
}
},
"node_modules/@babel/plugin-transform-sticky-regex": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.25.9.tgz",
- "integrity": "sha512-WqBUSgeVwucYDP9U/xNRQam7xV8W5Zf+6Eo7T2SRVUFlhRiMNFdFz58u0KZmCVVqs2i7SHgpRnAhzRNmKfi2uA==",
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.27.1.tgz",
+ "integrity": "sha512-lhInBO5bi/Kowe2/aLdBAawijx+q1pQzicSgnkB6dUPc1+RC8QmJHKf2OjvU+NZWitguJHEaEmbV6VWEouT58g==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.25.9"
+ "@babel/helper-plugin-utils": "^7.27.1"
},
"engines": {
"node": ">=6.9.0"
@@ -1635,13 +1751,13 @@
}
},
"node_modules/@babel/plugin-transform-template-literals": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.25.9.tgz",
- "integrity": "sha512-o97AE4syN71M/lxrCtQByzphAdlYluKPDBzDVzMmfCobUjjhAryZV0AIpRPrxN0eAkxXO6ZLEScmt+PNhj2OTw==",
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.27.1.tgz",
+ "integrity": "sha512-fBJKiV7F2DxZUkg5EtHKXQdbsbURW3DZKQUWphDum0uRP6eHGGa/He9mc0mypL680pb+e/lDIthRohlv8NCHkg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.25.9"
+ "@babel/helper-plugin-utils": "^7.27.1"
},
"engines": {
"node": ">=6.9.0"
@@ -1651,13 +1767,13 @@
}
},
"node_modules/@babel/plugin-transform-typeof-symbol": {
- "version": "7.26.7",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.26.7.tgz",
- "integrity": "sha512-jfoTXXZTgGg36BmhqT3cAYK5qkmqvJpvNrPhaK/52Vgjhw4Rq29s9UqpWWV0D6yuRmgiFH/BUVlkl96zJWqnaw==",
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.27.1.tgz",
+ "integrity": "sha512-RiSILC+nRJM7FY5srIyc4/fGIwUhyDuuBSdWn4y6yT6gm652DpCHZjIipgn6B7MQ1ITOUnAKWixEUjQRIBIcLw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.26.5"
+ "@babel/helper-plugin-utils": "^7.27.1"
},
"engines": {
"node": ">=6.9.0"
@@ -1667,17 +1783,17 @@
}
},
"node_modules/@babel/plugin-transform-typescript": {
- "version": "7.26.7",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.26.7.tgz",
- "integrity": "sha512-5cJurntg+AT+cgelGP9Bt788DKiAw9gIMSMU2NJrLAilnj0m8WZWUNZPSLOmadYsujHutpgElO+50foX+ib/Wg==",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.28.6.tgz",
+ "integrity": "sha512-0YWL2RFxOqEm9Efk5PvreamxPME8OyY0wM5wh5lHjF+VtVhdneCWGzZeSqzOfiobVqQaNCd2z0tQvnI9DaPWPw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-annotate-as-pure": "^7.25.9",
- "@babel/helper-create-class-features-plugin": "^7.25.9",
- "@babel/helper-plugin-utils": "^7.26.5",
- "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9",
- "@babel/plugin-syntax-typescript": "^7.25.9"
+ "@babel/helper-annotate-as-pure": "^7.27.3",
+ "@babel/helper-create-class-features-plugin": "^7.28.6",
+ "@babel/helper-plugin-utils": "^7.28.6",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1",
+ "@babel/plugin-syntax-typescript": "^7.28.6"
},
"engines": {
"node": ">=6.9.0"
@@ -1687,13 +1803,13 @@
}
},
"node_modules/@babel/plugin-transform-unicode-escapes": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.25.9.tgz",
- "integrity": "sha512-s5EDrE6bW97LtxOcGj1Khcx5AaXwiMmi4toFWRDP9/y0Woo6pXC+iyPu/KuhKtfSrNFd7jJB+/fkOtZy6aIC6Q==",
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.27.1.tgz",
+ "integrity": "sha512-Ysg4v6AmF26k9vpfFuTZg8HRfVWzsh1kVfowA23y9j/Gu6dOuahdUVhkLqpObp3JIv27MLSii6noRnuKN8H0Mg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.25.9"
+ "@babel/helper-plugin-utils": "^7.27.1"
},
"engines": {
"node": ">=6.9.0"
@@ -1703,14 +1819,14 @@
}
},
"node_modules/@babel/plugin-transform-unicode-property-regex": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.25.9.tgz",
- "integrity": "sha512-Jt2d8Ga+QwRluxRQ307Vlxa6dMrYEMZCgGxoPR8V52rxPyldHu3hdlHspxaqYmE7oID5+kB+UKUB/eWS+DkkWg==",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.28.6.tgz",
+ "integrity": "sha512-4Wlbdl/sIZjzi/8St0evF0gEZrgOswVO6aOzqxh1kDZOl9WmLrHq2HtGhnOJZmHZYKP8WZ1MDLCt5DAWwRo57A==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-create-regexp-features-plugin": "^7.25.9",
- "@babel/helper-plugin-utils": "^7.25.9"
+ "@babel/helper-create-regexp-features-plugin": "^7.28.5",
+ "@babel/helper-plugin-utils": "^7.28.6"
},
"engines": {
"node": ">=6.9.0"
@@ -1720,14 +1836,14 @@
}
},
"node_modules/@babel/plugin-transform-unicode-regex": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.25.9.tgz",
- "integrity": "sha512-yoxstj7Rg9dlNn9UQxzk4fcNivwv4nUYz7fYXBaKxvw/lnmPuOm/ikoELygbYq68Bls3D/D+NBPHiLwZdZZ4HA==",
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.27.1.tgz",
+ "integrity": "sha512-xvINq24TRojDuyt6JGtHmkVkrfVV3FPT16uytxImLeBZqW3/H52yN+kM1MGuyPkIQxrzKwPHs5U/MP3qKyzkGw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-create-regexp-features-plugin": "^7.25.9",
- "@babel/helper-plugin-utils": "^7.25.9"
+ "@babel/helper-create-regexp-features-plugin": "^7.27.1",
+ "@babel/helper-plugin-utils": "^7.27.1"
},
"engines": {
"node": ">=6.9.0"
@@ -1737,14 +1853,14 @@
}
},
"node_modules/@babel/plugin-transform-unicode-sets-regex": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.9.tgz",
- "integrity": "sha512-8BYqO3GeVNHtx69fdPshN3fnzUNLrWdHhk/icSwigksJGczKSizZ+Z6SBCxTs723Fr5VSNorTIK7a+R2tISvwQ==",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.28.6.tgz",
+ "integrity": "sha512-/wHc/paTUmsDYN7SZkpWxogTOBNnlx7nBQYfy6JJlCT7G3mVhltk3e++N7zV0XfgGsrqBxd4rJQt9H16I21Y1Q==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-create-regexp-features-plugin": "^7.25.9",
- "@babel/helper-plugin-utils": "^7.25.9"
+ "@babel/helper-create-regexp-features-plugin": "^7.28.5",
+ "@babel/helper-plugin-utils": "^7.28.6"
},
"engines": {
"node": ">=6.9.0"
@@ -1754,80 +1870,81 @@
}
},
"node_modules/@babel/preset-env": {
- "version": "7.26.7",
- "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.26.7.tgz",
- "integrity": "sha512-Ycg2tnXwixaXOVb29rana8HNPgLVBof8qqtNQ9LE22IoyZboQbGSxI6ZySMdW3K5nAe6gu35IaJefUJflhUFTQ==",
+ "version": "7.29.2",
+ "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.29.2.tgz",
+ "integrity": "sha512-DYD23veRYGvBFhcTY1iUvJnDNpuqNd/BzBwCvzOTKUnJjKg5kpUBh3/u9585Agdkgj+QuygG7jLfOPWMa2KVNw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/compat-data": "^7.26.5",
- "@babel/helper-compilation-targets": "^7.26.5",
- "@babel/helper-plugin-utils": "^7.26.5",
- "@babel/helper-validator-option": "^7.25.9",
- "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.9",
- "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.9",
- "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.25.9",
- "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.25.9",
- "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.25.9",
+ "@babel/compat-data": "^7.29.0",
+ "@babel/helper-compilation-targets": "^7.28.6",
+ "@babel/helper-plugin-utils": "^7.28.6",
+ "@babel/helper-validator-option": "^7.27.1",
+ "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.28.5",
+ "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.27.1",
+ "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.27.1",
+ "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.27.1",
+ "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.28.6",
"@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2",
- "@babel/plugin-syntax-import-assertions": "^7.26.0",
- "@babel/plugin-syntax-import-attributes": "^7.26.0",
+ "@babel/plugin-syntax-import-assertions": "^7.28.6",
+ "@babel/plugin-syntax-import-attributes": "^7.28.6",
"@babel/plugin-syntax-unicode-sets-regex": "^7.18.6",
- "@babel/plugin-transform-arrow-functions": "^7.25.9",
- "@babel/plugin-transform-async-generator-functions": "^7.25.9",
- "@babel/plugin-transform-async-to-generator": "^7.25.9",
- "@babel/plugin-transform-block-scoped-functions": "^7.26.5",
- "@babel/plugin-transform-block-scoping": "^7.25.9",
- "@babel/plugin-transform-class-properties": "^7.25.9",
- "@babel/plugin-transform-class-static-block": "^7.26.0",
- "@babel/plugin-transform-classes": "^7.25.9",
- "@babel/plugin-transform-computed-properties": "^7.25.9",
- "@babel/plugin-transform-destructuring": "^7.25.9",
- "@babel/plugin-transform-dotall-regex": "^7.25.9",
- "@babel/plugin-transform-duplicate-keys": "^7.25.9",
- "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.25.9",
- "@babel/plugin-transform-dynamic-import": "^7.25.9",
- "@babel/plugin-transform-exponentiation-operator": "^7.26.3",
- "@babel/plugin-transform-export-namespace-from": "^7.25.9",
- "@babel/plugin-transform-for-of": "^7.25.9",
- "@babel/plugin-transform-function-name": "^7.25.9",
- "@babel/plugin-transform-json-strings": "^7.25.9",
- "@babel/plugin-transform-literals": "^7.25.9",
- "@babel/plugin-transform-logical-assignment-operators": "^7.25.9",
- "@babel/plugin-transform-member-expression-literals": "^7.25.9",
- "@babel/plugin-transform-modules-amd": "^7.25.9",
- "@babel/plugin-transform-modules-commonjs": "^7.26.3",
- "@babel/plugin-transform-modules-systemjs": "^7.25.9",
- "@babel/plugin-transform-modules-umd": "^7.25.9",
- "@babel/plugin-transform-named-capturing-groups-regex": "^7.25.9",
- "@babel/plugin-transform-new-target": "^7.25.9",
- "@babel/plugin-transform-nullish-coalescing-operator": "^7.26.6",
- "@babel/plugin-transform-numeric-separator": "^7.25.9",
- "@babel/plugin-transform-object-rest-spread": "^7.25.9",
- "@babel/plugin-transform-object-super": "^7.25.9",
- "@babel/plugin-transform-optional-catch-binding": "^7.25.9",
- "@babel/plugin-transform-optional-chaining": "^7.25.9",
- "@babel/plugin-transform-parameters": "^7.25.9",
- "@babel/plugin-transform-private-methods": "^7.25.9",
- "@babel/plugin-transform-private-property-in-object": "^7.25.9",
- "@babel/plugin-transform-property-literals": "^7.25.9",
- "@babel/plugin-transform-regenerator": "^7.25.9",
- "@babel/plugin-transform-regexp-modifiers": "^7.26.0",
- "@babel/plugin-transform-reserved-words": "^7.25.9",
- "@babel/plugin-transform-shorthand-properties": "^7.25.9",
- "@babel/plugin-transform-spread": "^7.25.9",
- "@babel/plugin-transform-sticky-regex": "^7.25.9",
- "@babel/plugin-transform-template-literals": "^7.25.9",
- "@babel/plugin-transform-typeof-symbol": "^7.26.7",
- "@babel/plugin-transform-unicode-escapes": "^7.25.9",
- "@babel/plugin-transform-unicode-property-regex": "^7.25.9",
- "@babel/plugin-transform-unicode-regex": "^7.25.9",
- "@babel/plugin-transform-unicode-sets-regex": "^7.25.9",
+ "@babel/plugin-transform-arrow-functions": "^7.27.1",
+ "@babel/plugin-transform-async-generator-functions": "^7.29.0",
+ "@babel/plugin-transform-async-to-generator": "^7.28.6",
+ "@babel/plugin-transform-block-scoped-functions": "^7.27.1",
+ "@babel/plugin-transform-block-scoping": "^7.28.6",
+ "@babel/plugin-transform-class-properties": "^7.28.6",
+ "@babel/plugin-transform-class-static-block": "^7.28.6",
+ "@babel/plugin-transform-classes": "^7.28.6",
+ "@babel/plugin-transform-computed-properties": "^7.28.6",
+ "@babel/plugin-transform-destructuring": "^7.28.5",
+ "@babel/plugin-transform-dotall-regex": "^7.28.6",
+ "@babel/plugin-transform-duplicate-keys": "^7.27.1",
+ "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.29.0",
+ "@babel/plugin-transform-dynamic-import": "^7.27.1",
+ "@babel/plugin-transform-explicit-resource-management": "^7.28.6",
+ "@babel/plugin-transform-exponentiation-operator": "^7.28.6",
+ "@babel/plugin-transform-export-namespace-from": "^7.27.1",
+ "@babel/plugin-transform-for-of": "^7.27.1",
+ "@babel/plugin-transform-function-name": "^7.27.1",
+ "@babel/plugin-transform-json-strings": "^7.28.6",
+ "@babel/plugin-transform-literals": "^7.27.1",
+ "@babel/plugin-transform-logical-assignment-operators": "^7.28.6",
+ "@babel/plugin-transform-member-expression-literals": "^7.27.1",
+ "@babel/plugin-transform-modules-amd": "^7.27.1",
+ "@babel/plugin-transform-modules-commonjs": "^7.28.6",
+ "@babel/plugin-transform-modules-systemjs": "^7.29.0",
+ "@babel/plugin-transform-modules-umd": "^7.27.1",
+ "@babel/plugin-transform-named-capturing-groups-regex": "^7.29.0",
+ "@babel/plugin-transform-new-target": "^7.27.1",
+ "@babel/plugin-transform-nullish-coalescing-operator": "^7.28.6",
+ "@babel/plugin-transform-numeric-separator": "^7.28.6",
+ "@babel/plugin-transform-object-rest-spread": "^7.28.6",
+ "@babel/plugin-transform-object-super": "^7.27.1",
+ "@babel/plugin-transform-optional-catch-binding": "^7.28.6",
+ "@babel/plugin-transform-optional-chaining": "^7.28.6",
+ "@babel/plugin-transform-parameters": "^7.27.7",
+ "@babel/plugin-transform-private-methods": "^7.28.6",
+ "@babel/plugin-transform-private-property-in-object": "^7.28.6",
+ "@babel/plugin-transform-property-literals": "^7.27.1",
+ "@babel/plugin-transform-regenerator": "^7.29.0",
+ "@babel/plugin-transform-regexp-modifiers": "^7.28.6",
+ "@babel/plugin-transform-reserved-words": "^7.27.1",
+ "@babel/plugin-transform-shorthand-properties": "^7.27.1",
+ "@babel/plugin-transform-spread": "^7.28.6",
+ "@babel/plugin-transform-sticky-regex": "^7.27.1",
+ "@babel/plugin-transform-template-literals": "^7.27.1",
+ "@babel/plugin-transform-typeof-symbol": "^7.27.1",
+ "@babel/plugin-transform-unicode-escapes": "^7.27.1",
+ "@babel/plugin-transform-unicode-property-regex": "^7.28.6",
+ "@babel/plugin-transform-unicode-regex": "^7.27.1",
+ "@babel/plugin-transform-unicode-sets-regex": "^7.28.6",
"@babel/preset-modules": "0.1.6-no-external-plugins",
- "babel-plugin-polyfill-corejs2": "^0.4.10",
- "babel-plugin-polyfill-corejs3": "^0.10.6",
- "babel-plugin-polyfill-regenerator": "^0.6.1",
- "core-js-compat": "^3.38.1",
+ "babel-plugin-polyfill-corejs2": "^0.4.15",
+ "babel-plugin-polyfill-corejs3": "^0.14.0",
+ "babel-plugin-polyfill-regenerator": "^0.6.6",
+ "core-js-compat": "^3.48.0",
"semver": "^6.3.1"
},
"engines": {
@@ -1853,18 +1970,18 @@
}
},
"node_modules/@babel/preset-react": {
- "version": "7.26.3",
- "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.26.3.tgz",
- "integrity": "sha512-Nl03d6T9ky516DGK2YMxrTqvnpUW63TnJMOMonj+Zae0JiPC5BC9xPMSL6L8fiSpA5vP88qfygavVQvnLp+6Cw==",
+ "version": "7.28.5",
+ "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.28.5.tgz",
+ "integrity": "sha512-Z3J8vhRq7CeLjdC58jLv4lnZ5RKFUJWqH5emvxmv9Hv3BD1T9R/Im713R4MTKwvFaV74ejZ3sM01LyEKk4ugNQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.25.9",
- "@babel/helper-validator-option": "^7.25.9",
- "@babel/plugin-transform-react-display-name": "^7.25.9",
- "@babel/plugin-transform-react-jsx": "^7.25.9",
- "@babel/plugin-transform-react-jsx-development": "^7.25.9",
- "@babel/plugin-transform-react-pure-annotations": "^7.25.9"
+ "@babel/helper-plugin-utils": "^7.27.1",
+ "@babel/helper-validator-option": "^7.27.1",
+ "@babel/plugin-transform-react-display-name": "^7.28.0",
+ "@babel/plugin-transform-react-jsx": "^7.27.1",
+ "@babel/plugin-transform-react-jsx-development": "^7.27.1",
+ "@babel/plugin-transform-react-pure-annotations": "^7.27.1"
},
"engines": {
"node": ">=6.9.0"
@@ -1874,17 +1991,17 @@
}
},
"node_modules/@babel/preset-typescript": {
- "version": "7.26.0",
- "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.26.0.tgz",
- "integrity": "sha512-NMk1IGZ5I/oHhoXEElcm+xUnL/szL6xflkFZmoEU9xj1qSJXpiS7rsspYo92B4DRCDvZn2erT5LdsCeXAKNCkg==",
+ "version": "7.28.5",
+ "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.28.5.tgz",
+ "integrity": "sha512-+bQy5WOI2V6LJZpPVxY+yp66XdZ2yifu0Mc1aP5CQKgjn4QM5IN2i5fAZ4xKop47pr8rpVhiAeu+nDQa12C8+g==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.25.9",
- "@babel/helper-validator-option": "^7.25.9",
- "@babel/plugin-syntax-jsx": "^7.25.9",
- "@babel/plugin-transform-modules-commonjs": "^7.25.9",
- "@babel/plugin-transform-typescript": "^7.25.9"
+ "@babel/helper-plugin-utils": "^7.27.1",
+ "@babel/helper-validator-option": "^7.27.1",
+ "@babel/plugin-syntax-jsx": "^7.27.1",
+ "@babel/plugin-transform-modules-commonjs": "^7.27.1",
+ "@babel/plugin-transform-typescript": "^7.28.5"
},
"engines": {
"node": ">=6.9.0"
@@ -1894,9 +2011,9 @@
}
},
"node_modules/@babel/runtime": {
- "version": "7.28.4",
- "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.4.tgz",
- "integrity": "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==",
+ "version": "7.29.2",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.29.2.tgz",
+ "integrity": "sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g==",
"dev": true,
"license": "MIT",
"engines": {
@@ -1904,43 +2021,73 @@
}
},
"node_modules/@babel/template": {
- "version": "7.27.2",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz",
- "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz",
+ "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/code-frame": "^7.27.1",
- "@babel/parser": "^7.27.2",
- "@babel/types": "^7.27.1"
+ "@babel/code-frame": "^7.28.6",
+ "@babel/parser": "^7.28.6",
+ "@babel/types": "^7.28.6"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/template/node_modules/@babel/code-frame": {
+ "version": "7.29.0",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz",
+ "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-validator-identifier": "^7.28.5",
+ "js-tokens": "^4.0.0",
+ "picocolors": "^1.1.1"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/traverse": {
- "version": "7.26.7",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.7.tgz",
- "integrity": "sha512-1x1sgeyRLC3r5fQOM0/xtQKsYjyxmFjaOrLJNtZ81inNjyJHGIolTULPiSc/2qe1/qfpFLisLQYFnnZl7QoedA==",
+ "version": "7.29.0",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz",
+ "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/code-frame": "^7.26.2",
- "@babel/generator": "^7.26.5",
- "@babel/parser": "^7.26.7",
- "@babel/template": "^7.25.9",
- "@babel/types": "^7.26.7",
- "debug": "^4.3.1",
- "globals": "^11.1.0"
+ "@babel/code-frame": "^7.29.0",
+ "@babel/generator": "^7.29.0",
+ "@babel/helper-globals": "^7.28.0",
+ "@babel/parser": "^7.29.0",
+ "@babel/template": "^7.28.6",
+ "@babel/types": "^7.29.0",
+ "debug": "^4.3.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/traverse/node_modules/@babel/code-frame": {
+ "version": "7.29.0",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz",
+ "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-validator-identifier": "^7.28.5",
+ "js-tokens": "^4.0.0",
+ "picocolors": "^1.1.1"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/types": {
- "version": "7.28.5",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.5.tgz",
- "integrity": "sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==",
+ "version": "7.29.0",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz",
+ "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -1958,227 +2105,21 @@
"dev": true,
"license": "MIT"
},
- "node_modules/@cacheable/memory": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/@cacheable/memory/-/memory-2.0.6.tgz",
- "integrity": "sha512-7e8SScMocHxcAb8YhtkbMhGG+EKLRIficb1F5sjvhSYsWTZGxvg4KIDp8kgxnV2PUJ3ddPe6J9QESjKvBWRDkg==",
+ "node_modules/@cnakazawa/watch": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.4.tgz",
+ "integrity": "sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==",
"dev": true,
- "license": "MIT",
+ "license": "Apache-2.0",
"dependencies": {
- "@cacheable/utils": "^2.3.2",
- "@keyv/bigmap": "^1.3.0",
- "hookified": "^1.13.0",
- "keyv": "^5.5.4"
- }
- },
- "node_modules/@cacheable/memory/node_modules/@keyv/bigmap": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/@keyv/bigmap/-/bigmap-1.3.0.tgz",
- "integrity": "sha512-KT01GjzV6AQD5+IYrcpoYLkCu1Jod3nau1Z7EsEuViO3TZGRacSbO9MfHmbJ1WaOXFtWLxPVj169cn2WNKPkIg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "hashery": "^1.2.0",
- "hookified": "^1.13.0"
+ "exec-sh": "^0.3.2",
+ "minimist": "^1.2.0"
+ },
+ "bin": {
+ "watch": "cli.js"
},
"engines": {
- "node": ">= 18"
- },
- "peerDependencies": {
- "keyv": "^5.5.4"
- }
- },
- "node_modules/@cacheable/memory/node_modules/keyv": {
- "version": "5.5.5",
- "resolved": "https://registry.npmjs.org/keyv/-/keyv-5.5.5.tgz",
- "integrity": "sha512-FA5LmZVF1VziNc0bIdCSA1IoSVnDCqE8HJIZZv2/W8YmoAM50+tnUgJR/gQZwEeIMleuIOnRnHA/UaZRNeV4iQ==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "@keyv/serialize": "^1.1.1"
- }
- },
- "node_modules/@cacheable/utils": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/@cacheable/utils/-/utils-2.3.2.tgz",
- "integrity": "sha512-8kGE2P+HjfY8FglaOiW+y8qxcaQAfAhVML+i66XJR3YX5FtyDqn6Txctr3K2FrbxLKixRRYYBWMbuGciOhYNDg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "hashery": "^1.2.0",
- "keyv": "^5.5.4"
- }
- },
- "node_modules/@cacheable/utils/node_modules/keyv": {
- "version": "5.5.5",
- "resolved": "https://registry.npmjs.org/keyv/-/keyv-5.5.5.tgz",
- "integrity": "sha512-FA5LmZVF1VziNc0bIdCSA1IoSVnDCqE8HJIZZv2/W8YmoAM50+tnUgJR/gQZwEeIMleuIOnRnHA/UaZRNeV4iQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@keyv/serialize": "^1.1.1"
- }
- },
- "node_modules/@csstools/color-helpers": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-5.1.0.tgz",
- "integrity": "sha512-S11EXWJyy0Mz5SYvRmY8nJYTFFd1LCNV+7cXyAgQtOOuzb4EsgfqDufL+9esx72/eLhsRdGZwaldu/h+E4t4BA==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/csstools"
- },
- {
- "type": "opencollective",
- "url": "https://opencollective.com/csstools"
- }
- ],
- "license": "MIT-0",
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@csstools/css-calc": {
- "version": "2.1.4",
- "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-2.1.4.tgz",
- "integrity": "sha512-3N8oaj+0juUw/1H3YwmDDJXCgTB1gKU6Hc/bB502u9zR0q2vd786XJH9QfrKIEgFlZmhZiq6epXl4rHqhzsIgQ==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/csstools"
- },
- {
- "type": "opencollective",
- "url": "https://opencollective.com/csstools"
- }
- ],
- "license": "MIT",
- "engines": {
- "node": ">=18"
- },
- "peerDependencies": {
- "@csstools/css-parser-algorithms": "^3.0.5",
- "@csstools/css-tokenizer": "^3.0.4"
- }
- },
- "node_modules/@csstools/css-color-parser": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-3.1.0.tgz",
- "integrity": "sha512-nbtKwh3a6xNVIp/VRuXV64yTKnb1IjTAEEh3irzS+HkKjAOYLTGNb9pmVNntZ8iVBHcWDA2Dof0QtPgFI1BaTA==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/csstools"
- },
- {
- "type": "opencollective",
- "url": "https://opencollective.com/csstools"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "@csstools/color-helpers": "^5.1.0",
- "@csstools/css-calc": "^2.1.4"
- },
- "engines": {
- "node": ">=18"
- },
- "peerDependencies": {
- "@csstools/css-parser-algorithms": "^3.0.5",
- "@csstools/css-tokenizer": "^3.0.4"
- }
- },
- "node_modules/@csstools/css-parser-algorithms": {
- "version": "3.0.5",
- "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.5.tgz",
- "integrity": "sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/csstools"
- },
- {
- "type": "opencollective",
- "url": "https://opencollective.com/csstools"
- }
- ],
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=18"
- },
- "peerDependencies": {
- "@csstools/css-tokenizer": "^3.0.4"
- }
- },
- "node_modules/@csstools/css-syntax-patches-for-csstree": {
- "version": "1.0.22",
- "resolved": "https://registry.npmjs.org/@csstools/css-syntax-patches-for-csstree/-/css-syntax-patches-for-csstree-1.0.22.tgz",
- "integrity": "sha512-qBcx6zYlhleiFfdtzkRgwNC7VVoAwfK76Vmsw5t+PbvtdknO9StgRk7ROvq9so1iqbdW4uLIDAsXRsTfUrIoOw==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/csstools"
- },
- {
- "type": "opencollective",
- "url": "https://opencollective.com/csstools"
- }
- ],
- "license": "MIT-0",
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@csstools/css-tokenizer": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.4.tgz",
- "integrity": "sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/csstools"
- },
- {
- "type": "opencollective",
- "url": "https://opencollective.com/csstools"
- }
- ],
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@csstools/media-query-list-parser": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-3.0.1.tgz",
- "integrity": "sha512-HNo8gGD02kHmcbX6PvCoUuOQvn4szyB9ca63vZHKX5A81QytgDG4oxG4IaEfHTlEZSZ6MjPEMWIVU+zF2PZcgw==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/csstools"
- },
- {
- "type": "opencollective",
- "url": "https://opencollective.com/csstools"
- }
- ],
- "license": "MIT",
- "engines": {
- "node": ">=18"
- },
- "peerDependencies": {
- "@csstools/css-parser-algorithms": "^3.0.1",
- "@csstools/css-tokenizer": "^3.0.1"
+ "node": ">=0.1.95"
}
},
"node_modules/@discoveryjs/json-ext": {
@@ -2191,148 +2132,50 @@
"node": ">=10.0.0"
}
},
- "node_modules/@dual-bundle/import-meta-resolve": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/@dual-bundle/import-meta-resolve/-/import-meta-resolve-4.2.1.tgz",
- "integrity": "sha512-id+7YRUgoUX6CgV0DtuhirQWodeeA7Lf4i2x71JS/vtA5pRb/hIGWlw+G6MeXvsM+MXrz0VAydTGElX1rAfgPg==",
- "dev": true,
- "license": "MIT",
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/JounQin"
- }
- },
- "node_modules/@emnapi/core": {
- "version": "1.7.1",
- "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.7.1.tgz",
- "integrity": "sha512-o1uhUASyo921r2XtHYOHy7gdkGLge8ghBEQHMWmyJFoXlpU58kIrhhN3w26lpQb6dspetweapMn2CSNwQ8I4wg==",
- "dev": true,
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "@emnapi/wasi-threads": "1.1.0",
- "tslib": "^2.4.0"
- }
- },
- "node_modules/@emnapi/runtime": {
- "version": "1.7.1",
- "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.7.1.tgz",
- "integrity": "sha512-PVtJr5CmLwYAU9PZDMITZoR5iAOShYREoR45EyyLrbntV50mdePTgUn4AmOw90Ifcj+x2kRjdzr1HP3RrNiHGA==",
- "dev": true,
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "tslib": "^2.4.0"
- }
- },
- "node_modules/@emnapi/wasi-threads": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.1.0.tgz",
- "integrity": "sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==",
- "dev": true,
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "tslib": "^2.4.0"
- }
- },
"node_modules/@es-joy/jsdoccomment": {
- "version": "0.41.0",
- "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.41.0.tgz",
- "integrity": "sha512-aKUhyn1QI5Ksbqcr3fFJj16p99QdjUxXAEuFst1Z47DRyoiMwivIH9MV/ARcJOCXVjPfjITciej8ZD2O/6qUmw==",
+ "version": "0.10.8",
+ "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.10.8.tgz",
+ "integrity": "sha512-3P1JiGL4xaR9PoTKUHa2N/LKwa2/eUdRqGwijMWWgBqbFEqJUVpmaOi2TcjcemrsRMgFLBzQCK4ToPhrSVDiFQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "comment-parser": "1.4.1",
- "esquery": "^1.5.0",
- "jsdoc-type-pratt-parser": "~4.0.0"
+ "comment-parser": "1.2.4",
+ "esquery": "^1.4.0",
+ "jsdoc-type-pratt-parser": "1.1.1"
},
"engines": {
- "node": ">=16"
+ "node": "^12 || ^14 || ^16"
}
},
- "node_modules/@eslint-community/eslint-utils": {
- "version": "4.9.0",
- "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.0.tgz",
- "integrity": "sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "eslint-visitor-keys": "^3.4.3"
- },
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- },
- "peerDependencies": {
- "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0"
- }
- },
- "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": {
- "version": "3.4.3",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
- "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
- "dev": true,
- "license": "Apache-2.0",
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
- },
- "node_modules/@eslint-community/regexpp": {
- "version": "4.12.2",
- "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz",
- "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==",
+ "node_modules/@es-joy/jsdoccomment/node_modules/jsdoc-type-pratt-parser": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-1.1.1.tgz",
+ "integrity": "sha512-uelRmpghNwPBuZScwgBG/OzodaFk5RbO5xaivBdsAY70icWfShwZ7PCMO0x1zSkOa8T1FzHThmrdoyg/0AwV5g==",
"dev": true,
"license": "MIT",
"engines": {
- "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
+ "node": ">=12.0.0"
}
},
"node_modules/@eslint/eslintrc": {
- "version": "2.1.4",
- "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz",
- "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==",
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz",
+ "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==",
"dev": true,
"license": "MIT",
"dependencies": {
"ajv": "^6.12.4",
- "debug": "^4.3.2",
- "espree": "^9.6.0",
- "globals": "^13.19.0",
- "ignore": "^5.2.0",
+ "debug": "^4.1.1",
+ "espree": "^7.3.0",
+ "globals": "^13.9.0",
+ "ignore": "^4.0.6",
"import-fresh": "^3.2.1",
- "js-yaml": "^4.1.0",
- "minimatch": "^3.1.2",
+ "js-yaml": "^3.13.1",
+ "minimatch": "^3.0.4",
"strip-json-comments": "^3.1.1"
},
"engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
- },
- "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,
- "license": "Python-2.0"
- },
- "node_modules/@eslint/eslintrc/node_modules/brace-expansion": {
- "version": "1.1.12",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz",
- "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
+ "node": "^10.12.0 || >=12.0.0"
}
},
"node_modules/@eslint/eslintrc/node_modules/globals": {
@@ -2351,30 +2194,14 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/@eslint/eslintrc/node_modules/js-yaml": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz",
- "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==",
+ "node_modules/@eslint/eslintrc/node_modules/ignore": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
+ "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
"dev": true,
"license": "MIT",
- "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,
- "license": "ISC",
- "dependencies": {
- "brace-expansion": "^1.1.7"
- },
"engines": {
- "node": "*"
+ "node": ">= 4"
}
},
"node_modules/@eslint/eslintrc/node_modules/type-fest": {
@@ -2390,72 +2217,6 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/@eslint/js": {
- "version": "8.57.1",
- "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz",
- "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- }
- },
- "node_modules/@formatjs/ecma402-abstract": {
- "version": "2.3.6",
- "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-2.3.6.tgz",
- "integrity": "sha512-HJnTFeRM2kVFVr5gr5kH1XP6K0JcJtE7Lzvtr3FS/so5f1kpsqqqxy5JF+FRaO6H2qmcMfAUIox7AJteieRtVw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@formatjs/fast-memoize": "2.2.7",
- "@formatjs/intl-localematcher": "0.6.2",
- "decimal.js": "^10.4.3",
- "tslib": "^2.8.0"
- }
- },
- "node_modules/@formatjs/fast-memoize": {
- "version": "2.2.7",
- "resolved": "https://registry.npmjs.org/@formatjs/fast-memoize/-/fast-memoize-2.2.7.tgz",
- "integrity": "sha512-Yabmi9nSvyOMrlSeGGWDiH7rf3a7sIwplbvo/dlz9WCIjzIQAfy1RMf4S0X3yG724n5Ghu2GmEl5NJIV6O9sZQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "tslib": "^2.8.0"
- }
- },
- "node_modules/@formatjs/icu-messageformat-parser": {
- "version": "2.11.4",
- "resolved": "https://registry.npmjs.org/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.11.4.tgz",
- "integrity": "sha512-7kR78cRrPNB4fjGFZg3Rmj5aah8rQj9KPzuLsmcSn4ipLXQvC04keycTI1F7kJYDwIXtT2+7IDEto842CfZBtw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@formatjs/ecma402-abstract": "2.3.6",
- "@formatjs/icu-skeleton-parser": "1.8.16",
- "tslib": "^2.8.0"
- }
- },
- "node_modules/@formatjs/icu-skeleton-parser": {
- "version": "1.8.16",
- "resolved": "https://registry.npmjs.org/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.8.16.tgz",
- "integrity": "sha512-H13E9Xl+PxBd8D5/6TVUluSpxGNvFSlN/b3coUp0e0JpuWXXnQDiavIpY3NnvSp4xhEMoXyyBvVfdFX8jglOHQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@formatjs/ecma402-abstract": "2.3.6",
- "tslib": "^2.8.0"
- }
- },
- "node_modules/@formatjs/intl-localematcher": {
- "version": "0.6.2",
- "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.6.2.tgz",
- "integrity": "sha512-XOMO2Hupl0wdd172Y06h6kLpBz6Dv+J4okPLl4LPtzbr8f66WbIoy4ev98EBuZ6ZK4h5ydTN6XneT4QVpD7cdA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "tslib": "^2.8.0"
- }
- },
"node_modules/@hapi/hoek": {
"version": "9.3.0",
"resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz",
@@ -2474,63 +2235,25 @@
}
},
"node_modules/@humanwhocodes/config-array": {
- "version": "0.13.0",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz",
- "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==",
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz",
+ "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==",
"deprecated": "Use @eslint/config-array instead",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
- "@humanwhocodes/object-schema": "^2.0.3",
- "debug": "^4.3.1",
- "minimatch": "^3.0.5"
+ "@humanwhocodes/object-schema": "^1.2.0",
+ "debug": "^4.1.1",
+ "minimatch": "^3.0.4"
},
"engines": {
"node": ">=10.10.0"
}
},
- "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": {
- "version": "1.1.12",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz",
- "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "node_modules/@humanwhocodes/config-array/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,
- "license": "ISC",
- "dependencies": {
- "brace-expansion": "^1.1.7"
- },
- "engines": {
- "node": "*"
- }
- },
- "node_modules/@humanwhocodes/module-importer": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
- "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
- "dev": true,
- "license": "Apache-2.0",
- "engines": {
- "node": ">=12.22"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/nzakas"
- }
- },
"node_modules/@humanwhocodes/object-schema": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz",
- "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==",
+ "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==",
"deprecated": "Use @eslint/object-schema instead",
"dev": true,
"license": "BSD-3-Clause"
@@ -2563,9 +2286,9 @@
}
},
"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==",
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.6.tgz",
+ "integrity": "sha512-+Sg6GCR/wy1oSmQDFq4LQDAhm3ETKnorxN+y5nbLULOR3P0c14f2Wurzj3/xqPXtasLFfHd5iRFQ7AJt4KH2cw==",
"dev": true,
"license": "MIT",
"engines": {
@@ -2573,586 +2296,303 @@
}
},
"node_modules/@jest/console": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz",
- "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==",
+ "version": "26.6.2",
+ "resolved": "https://registry.npmjs.org/@jest/console/-/console-26.6.2.tgz",
+ "integrity": "sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@jest/types": "^29.6.3",
+ "@jest/types": "^26.6.2",
"@types/node": "*",
"chalk": "^4.0.0",
- "jest-message-util": "^29.7.0",
- "jest-util": "^29.7.0",
+ "jest-message-util": "^26.6.2",
+ "jest-util": "^26.6.2",
"slash": "^3.0.0"
},
"engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ "node": ">= 10.14.2"
}
},
"node_modules/@jest/core": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz",
- "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==",
+ "version": "26.6.3",
+ "resolved": "https://registry.npmjs.org/@jest/core/-/core-26.6.3.tgz",
+ "integrity": "sha512-xvV1kKbhfUqFVuZ8Cyo+JPpipAHHAV3kcDBftiduK8EICXmTFddryy3P7NfZt8Pv37rA9nEJBKCCkglCPt/Xjw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@jest/console": "^29.7.0",
- "@jest/reporters": "^29.7.0",
- "@jest/test-result": "^29.7.0",
- "@jest/transform": "^29.7.0",
- "@jest/types": "^29.6.3",
+ "@jest/console": "^26.6.2",
+ "@jest/reporters": "^26.6.2",
+ "@jest/test-result": "^26.6.2",
+ "@jest/transform": "^26.6.2",
+ "@jest/types": "^26.6.2",
"@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": "^29.7.0",
- "jest-config": "^29.7.0",
- "jest-haste-map": "^29.7.0",
- "jest-message-util": "^29.7.0",
- "jest-regex-util": "^29.6.3",
- "jest-resolve": "^29.7.0",
- "jest-resolve-dependencies": "^29.7.0",
- "jest-runner": "^29.7.0",
- "jest-runtime": "^29.7.0",
- "jest-snapshot": "^29.7.0",
- "jest-util": "^29.7.0",
- "jest-validate": "^29.7.0",
- "jest-watcher": "^29.7.0",
- "micromatch": "^4.0.4",
- "pretty-format": "^29.7.0",
+ "graceful-fs": "^4.2.4",
+ "jest-changed-files": "^26.6.2",
+ "jest-config": "^26.6.3",
+ "jest-haste-map": "^26.6.2",
+ "jest-message-util": "^26.6.2",
+ "jest-regex-util": "^26.0.0",
+ "jest-resolve": "^26.6.2",
+ "jest-resolve-dependencies": "^26.6.3",
+ "jest-runner": "^26.6.3",
+ "jest-runtime": "^26.6.3",
+ "jest-snapshot": "^26.6.2",
+ "jest-util": "^26.6.2",
+ "jest-validate": "^26.6.2",
+ "jest-watcher": "^26.6.2",
+ "micromatch": "^4.0.2",
+ "p-each-series": "^2.1.0",
+ "rimraf": "^3.0.0",
"slash": "^3.0.0",
"strip-ansi": "^6.0.0"
},
"engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ "node": ">= 10.14.2"
+ }
+ },
+ "node_modules/@jest/core/node_modules/rimraf": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+ "deprecated": "Rimraf versions prior to v4 are no longer supported",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "glob": "^7.1.3"
},
- "peerDependencies": {
- "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0"
+ "bin": {
+ "rimraf": "bin.js"
},
- "peerDependenciesMeta": {
- "node-notifier": {
- "optional": true
- }
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
}
},
"node_modules/@jest/environment": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz",
- "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==",
+ "version": "26.6.2",
+ "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-26.6.2.tgz",
+ "integrity": "sha512-nFy+fHl28zUrRsCeMB61VDThV1pVTtlEokBRgqPrcT1JNq4yRNIyTHfyht6PqtUvY9IsuLGTrbG8kPXjSZIZwA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@jest/fake-timers": "^29.7.0",
- "@jest/types": "^29.6.3",
+ "@jest/fake-timers": "^26.6.2",
+ "@jest/types": "^26.6.2",
"@types/node": "*",
- "jest-mock": "^29.7.0"
+ "jest-mock": "^26.6.2"
},
"engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/@jest/environment-jsdom-abstract": {
- "version": "30.2.0",
- "resolved": "https://registry.npmjs.org/@jest/environment-jsdom-abstract/-/environment-jsdom-abstract-30.2.0.tgz",
- "integrity": "sha512-kazxw2L9IPuZpQ0mEt9lu9Z98SqR74xcagANmMBU16X0lS23yPc0+S6hGLUz8kVRlomZEs/5S/Zlpqwf5yu6OQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@jest/environment": "30.2.0",
- "@jest/fake-timers": "30.2.0",
- "@jest/types": "30.2.0",
- "@types/jsdom": "^21.1.7",
- "@types/node": "*",
- "jest-mock": "30.2.0",
- "jest-util": "30.2.0"
- },
- "engines": {
- "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
- },
- "peerDependencies": {
- "canvas": "^3.0.0",
- "jsdom": "*"
- },
- "peerDependenciesMeta": {
- "canvas": {
- "optional": true
- }
- }
- },
- "node_modules/@jest/environment-jsdom-abstract/node_modules/@jest/environment": {
- "version": "30.2.0",
- "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-30.2.0.tgz",
- "integrity": "sha512-/QPTL7OBJQ5ac09UDRa3EQes4gt1FTEG/8jZ/4v5IVzx+Cv7dLxlVIvfvSVRiiX2drWyXeBjkMSR8hvOWSog5g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@jest/fake-timers": "30.2.0",
- "@jest/types": "30.2.0",
- "@types/node": "*",
- "jest-mock": "30.2.0"
- },
- "engines": {
- "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
- }
- },
- "node_modules/@jest/environment-jsdom-abstract/node_modules/@jest/fake-timers": {
- "version": "30.2.0",
- "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-30.2.0.tgz",
- "integrity": "sha512-HI3tRLjRxAbBy0VO8dqqm7Hb2mIa8d5bg/NJkyQcOk7V118ObQML8RC5luTF/Zsg4474a+gDvhce7eTnP4GhYw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@jest/types": "30.2.0",
- "@sinonjs/fake-timers": "^13.0.0",
- "@types/node": "*",
- "jest-message-util": "30.2.0",
- "jest-mock": "30.2.0",
- "jest-util": "30.2.0"
- },
- "engines": {
- "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
- }
- },
- "node_modules/@jest/environment-jsdom-abstract/node_modules/@jest/schemas": {
- "version": "30.0.5",
- "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.5.tgz",
- "integrity": "sha512-DmdYgtezMkh3cpU8/1uyXakv3tJRcmcXxBOcO0tbaozPwpmh4YMsnWrQm9ZmZMfa5ocbxzbFk6O4bDPEc/iAnA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@sinclair/typebox": "^0.34.0"
- },
- "engines": {
- "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
- }
- },
- "node_modules/@jest/environment-jsdom-abstract/node_modules/@jest/types": {
- "version": "30.2.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.2.0.tgz",
- "integrity": "sha512-H9xg1/sfVvyfU7o3zMfBEjQ1gcsdeTMgqHoYdN79tuLqfTtuu7WckRA1R5whDwOzxaZAeMKTYWqP+WCAi0CHsg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@jest/pattern": "30.0.1",
- "@jest/schemas": "30.0.5",
- "@types/istanbul-lib-coverage": "^2.0.6",
- "@types/istanbul-reports": "^3.0.4",
- "@types/node": "*",
- "@types/yargs": "^17.0.33",
- "chalk": "^4.1.2"
- },
- "engines": {
- "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
- }
- },
- "node_modules/@jest/environment-jsdom-abstract/node_modules/@sinclair/typebox": {
- "version": "0.34.41",
- "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.41.tgz",
- "integrity": "sha512-6gS8pZzSXdyRHTIqoqSVknxolr1kzfy4/CeDnrzsVz8TTIWUbOBr6gnzOmTYJ3eXQNh4IYHIGi5aIL7sOZ2G/g==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@jest/environment-jsdom-abstract/node_modules/@sinonjs/fake-timers": {
- "version": "13.0.5",
- "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-13.0.5.tgz",
- "integrity": "sha512-36/hTbH2uaWuGVERyC6da9YwGWnzUZXuPro/F2LfsdOsLnCojz/iSH8MxUt/FD2S5XBSVPhmArFUXcpCQ2Hkiw==",
- "dev": true,
- "license": "BSD-3-Clause",
- "dependencies": {
- "@sinonjs/commons": "^3.0.1"
- }
- },
- "node_modules/@jest/environment-jsdom-abstract/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,
- "license": "MIT",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/@jest/environment-jsdom-abstract/node_modules/ci-info": {
- "version": "4.3.1",
- "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.3.1.tgz",
- "integrity": "sha512-Wdy2Igu8OcBpI2pZePZ5oWjPC38tmDVx5WKUXKwlLYkA0ozo85sLsLvkBbBn/sZaSCMFOGZJ14fvW9t5/d7kdA==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/sibiraj-s"
- }
- ],
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/@jest/environment-jsdom-abstract/node_modules/jest-message-util": {
- "version": "30.2.0",
- "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-30.2.0.tgz",
- "integrity": "sha512-y4DKFLZ2y6DxTWD4cDe07RglV88ZiNEdlRfGtqahfbIjfsw1nMCPx49Uev4IA/hWn3sDKyAnSPwoYSsAEdcimw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/code-frame": "^7.27.1",
- "@jest/types": "30.2.0",
- "@types/stack-utils": "^2.0.3",
- "chalk": "^4.1.2",
- "graceful-fs": "^4.2.11",
- "micromatch": "^4.0.8",
- "pretty-format": "30.2.0",
- "slash": "^3.0.0",
- "stack-utils": "^2.0.6"
- },
- "engines": {
- "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
- }
- },
- "node_modules/@jest/environment-jsdom-abstract/node_modules/jest-mock": {
- "version": "30.2.0",
- "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-30.2.0.tgz",
- "integrity": "sha512-JNNNl2rj4b5ICpmAcq+WbLH83XswjPbjH4T7yvGzfAGCPh1rw+xVNbtk+FnRslvt9lkCcdn9i1oAoKUuFsOxRw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@jest/types": "30.2.0",
- "@types/node": "*",
- "jest-util": "30.2.0"
- },
- "engines": {
- "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
- }
- },
- "node_modules/@jest/environment-jsdom-abstract/node_modules/jest-util": {
- "version": "30.2.0",
- "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.2.0.tgz",
- "integrity": "sha512-QKNsM0o3Xe6ISQU869e+DhG+4CK/48aHYdJZGlFQVTjnbvgpcKyxpzk29fGiO7i/J8VENZ+d2iGnSsvmuHywlA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@jest/types": "30.2.0",
- "@types/node": "*",
- "chalk": "^4.1.2",
- "ci-info": "^4.2.0",
- "graceful-fs": "^4.2.11",
- "picomatch": "^4.0.2"
- },
- "engines": {
- "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
- }
- },
- "node_modules/@jest/environment-jsdom-abstract/node_modules/picomatch": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz",
- "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/jonschlinkert"
- }
- },
- "node_modules/@jest/environment-jsdom-abstract/node_modules/pretty-format": {
- "version": "30.2.0",
- "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.2.0.tgz",
- "integrity": "sha512-9uBdv/B4EefsuAL+pWqueZyZS2Ba+LxfFeQ9DN14HU4bN8bhaxKdkpjpB6fs9+pSjIBu+FXQHImEg8j/Lw0+vA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@jest/schemas": "30.0.5",
- "ansi-styles": "^5.2.0",
- "react-is": "^18.3.1"
- },
- "engines": {
- "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
- }
- },
- "node_modules/@jest/expect": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz",
- "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "expect": "^29.7.0",
- "jest-snapshot": "^29.7.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/@jest/expect-utils": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz",
- "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "jest-get-type": "^29.6.3"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ "node": ">= 10.14.2"
}
},
"node_modules/@jest/fake-timers": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz",
- "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==",
+ "version": "26.6.2",
+ "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-26.6.2.tgz",
+ "integrity": "sha512-14Uleatt7jdzefLPYM3KLcnUl1ZNikaKq34enpb5XG9i81JpppDb5muZvonvKyrl7ftEHkKS5L5/eB/kxJ+bvA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@jest/types": "^29.6.3",
- "@sinonjs/fake-timers": "^10.0.2",
+ "@jest/types": "^26.6.2",
+ "@sinonjs/fake-timers": "^6.0.1",
"@types/node": "*",
- "jest-message-util": "^29.7.0",
- "jest-mock": "^29.7.0",
- "jest-util": "^29.7.0"
+ "jest-message-util": "^26.6.2",
+ "jest-mock": "^26.6.2",
+ "jest-util": "^26.6.2"
},
"engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ "node": ">= 10.14.2"
}
},
"node_modules/@jest/globals": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz",
- "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==",
+ "version": "26.6.2",
+ "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-26.6.2.tgz",
+ "integrity": "sha512-85Ltnm7HlB/KesBUuALwQ68YTU72w9H2xW9FjZ1eL1U3lhtefjjl5c2MiUbpXt/i6LaPRvoOFJ22yCBSfQ0JIA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@jest/environment": "^29.7.0",
- "@jest/expect": "^29.7.0",
- "@jest/types": "^29.6.3",
- "jest-mock": "^29.7.0"
+ "@jest/environment": "^26.6.2",
+ "@jest/types": "^26.6.2",
+ "expect": "^26.6.2"
},
"engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/@jest/pattern": {
- "version": "30.0.1",
- "resolved": "https://registry.npmjs.org/@jest/pattern/-/pattern-30.0.1.tgz",
- "integrity": "sha512-gWp7NfQW27LaBQz3TITS8L7ZCQ0TLvtmI//4OwlQRx4rnWxcPNIYjxZpDcN4+UlGxgm3jS5QPz8IPTCkb59wZA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/node": "*",
- "jest-regex-util": "30.0.1"
- },
- "engines": {
- "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
- }
- },
- "node_modules/@jest/pattern/node_modules/jest-regex-util": {
- "version": "30.0.1",
- "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-30.0.1.tgz",
- "integrity": "sha512-jHEQgBXAgc+Gh4g0p3bCevgRCVRkB4VB70zhoAE48gxeSr1hfUOsM/C2WoJgVL7Eyg//hudYENbm3Ne+/dRVVA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ "node": ">= 10.14.2"
}
},
"node_modules/@jest/reporters": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz",
- "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==",
+ "version": "26.6.2",
+ "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-26.6.2.tgz",
+ "integrity": "sha512-h2bW53APG4HvkOnVMo8q3QXa6pcaNt1HkwVsOPMBV6LD/q9oSpxNSYZQYkAnjdMjrJ86UuYeLo+aEZClV6opnw==",
"dev": true,
"license": "MIT",
"dependencies": {
"@bcoe/v8-coverage": "^0.2.3",
- "@jest/console": "^29.7.0",
- "@jest/test-result": "^29.7.0",
- "@jest/transform": "^29.7.0",
- "@jest/types": "^29.6.3",
- "@jridgewell/trace-mapping": "^0.3.18",
- "@types/node": "*",
+ "@jest/console": "^26.6.2",
+ "@jest/test-result": "^26.6.2",
+ "@jest/transform": "^26.6.2",
+ "@jest/types": "^26.6.2",
"chalk": "^4.0.0",
"collect-v8-coverage": "^1.0.0",
"exit": "^0.1.2",
- "glob": "^7.1.3",
- "graceful-fs": "^4.2.9",
+ "glob": "^7.1.2",
+ "graceful-fs": "^4.2.4",
"istanbul-lib-coverage": "^3.0.0",
- "istanbul-lib-instrument": "^6.0.0",
+ "istanbul-lib-instrument": "^4.0.3",
"istanbul-lib-report": "^3.0.0",
"istanbul-lib-source-maps": "^4.0.0",
- "istanbul-reports": "^3.1.3",
- "jest-message-util": "^29.7.0",
- "jest-util": "^29.7.0",
- "jest-worker": "^29.7.0",
+ "istanbul-reports": "^3.0.2",
+ "jest-haste-map": "^26.6.2",
+ "jest-resolve": "^26.6.2",
+ "jest-util": "^26.6.2",
+ "jest-worker": "^26.6.2",
"slash": "^3.0.0",
+ "source-map": "^0.6.0",
"string-length": "^4.0.1",
- "strip-ansi": "^6.0.0",
- "v8-to-istanbul": "^9.0.1"
+ "terminal-link": "^2.0.0",
+ "v8-to-istanbul": "^7.0.0"
},
"engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ "node": ">= 10.14.2"
},
- "peerDependencies": {
- "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0"
- },
- "peerDependenciesMeta": {
- "node-notifier": {
- "optional": true
- }
+ "optionalDependencies": {
+ "node-notifier": "^8.0.0"
}
},
"node_modules/@jest/reporters/node_modules/istanbul-lib-instrument": {
- "version": "6.0.3",
- "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz",
- "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==",
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz",
+ "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==",
"dev": true,
"license": "BSD-3-Clause",
"dependencies": {
- "@babel/core": "^7.23.9",
- "@babel/parser": "^7.23.9",
- "@istanbuljs/schema": "^0.1.3",
- "istanbul-lib-coverage": "^3.2.0",
- "semver": "^7.5.4"
+ "@babel/core": "^7.7.5",
+ "@istanbuljs/schema": "^0.1.2",
+ "istanbul-lib-coverage": "^3.0.0",
+ "semver": "^6.3.0"
},
"engines": {
- "node": ">=10"
- }
- },
- "node_modules/@jest/reporters/node_modules/semver": {
- "version": "7.7.3",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz",
- "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==",
- "dev": true,
- "license": "ISC",
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@jest/schemas": {
- "version": "29.6.3",
- "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz",
- "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@sinclair/typebox": "^0.27.8"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ "node": ">=8"
}
},
"node_modules/@jest/source-map": {
- "version": "29.6.3",
- "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz",
- "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==",
+ "version": "26.6.2",
+ "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-26.6.2.tgz",
+ "integrity": "sha512-YwYcCwAnNmOVsZ8mr3GfnzdXDAl4LaenZP5z+G0c8bzC9/dugL8zRmxZzdoTl4IaS3CryS1uWnROLPFmb6lVvA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@jridgewell/trace-mapping": "^0.3.18",
"callsites": "^3.0.0",
- "graceful-fs": "^4.2.9"
+ "graceful-fs": "^4.2.4",
+ "source-map": "^0.6.0"
},
"engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ "node": ">= 10.14.2"
}
},
"node_modules/@jest/test-result": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz",
- "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==",
+ "version": "26.6.2",
+ "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-26.6.2.tgz",
+ "integrity": "sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@jest/console": "^29.7.0",
- "@jest/types": "^29.6.3",
+ "@jest/console": "^26.6.2",
+ "@jest/types": "^26.6.2",
"@types/istanbul-lib-coverage": "^2.0.0",
"collect-v8-coverage": "^1.0.0"
},
"engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ "node": ">= 10.14.2"
}
},
"node_modules/@jest/test-sequencer": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz",
- "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==",
+ "version": "26.6.3",
+ "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-26.6.3.tgz",
+ "integrity": "sha512-YHlVIjP5nfEyjlrSr8t/YdNfU/1XEt7c5b4OxcXCjyRhjzLYu/rO69/WHPuYcbCWkz8kAeZVZp2N2+IOLLEPGw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@jest/test-result": "^29.7.0",
- "graceful-fs": "^4.2.9",
- "jest-haste-map": "^29.7.0",
- "slash": "^3.0.0"
+ "@jest/test-result": "^26.6.2",
+ "graceful-fs": "^4.2.4",
+ "jest-haste-map": "^26.6.2",
+ "jest-runner": "^26.6.3",
+ "jest-runtime": "^26.6.3"
},
"engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ "node": ">= 10.14.2"
}
},
"node_modules/@jest/transform": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz",
- "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==",
+ "version": "26.6.2",
+ "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-26.6.2.tgz",
+ "integrity": "sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/core": "^7.11.6",
- "@jest/types": "^29.6.3",
- "@jridgewell/trace-mapping": "^0.3.18",
- "babel-plugin-istanbul": "^6.1.1",
+ "@babel/core": "^7.1.0",
+ "@jest/types": "^26.6.2",
+ "babel-plugin-istanbul": "^6.0.0",
"chalk": "^4.0.0",
- "convert-source-map": "^2.0.0",
- "fast-json-stable-stringify": "^2.1.0",
- "graceful-fs": "^4.2.9",
- "jest-haste-map": "^29.7.0",
- "jest-regex-util": "^29.6.3",
- "jest-util": "^29.7.0",
- "micromatch": "^4.0.4",
- "pirates": "^4.0.4",
+ "convert-source-map": "^1.4.0",
+ "fast-json-stable-stringify": "^2.0.0",
+ "graceful-fs": "^4.2.4",
+ "jest-haste-map": "^26.6.2",
+ "jest-regex-util": "^26.0.0",
+ "jest-util": "^26.6.2",
+ "micromatch": "^4.0.2",
+ "pirates": "^4.0.1",
"slash": "^3.0.0",
- "write-file-atomic": "^4.0.2"
+ "source-map": "^0.6.1",
+ "write-file-atomic": "^3.0.0"
},
"engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ "node": ">= 10.14.2"
}
},
+ "node_modules/@jest/transform/node_modules/convert-source-map": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz",
+ "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/@jest/types": {
- "version": "29.6.3",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz",
- "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==",
+ "version": "26.6.2",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz",
+ "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@jest/schemas": "^29.6.3",
"@types/istanbul-lib-coverage": "^2.0.0",
"@types/istanbul-reports": "^3.0.0",
"@types/node": "*",
- "@types/yargs": "^17.0.8",
+ "@types/yargs": "^15.0.0",
"chalk": "^4.0.0"
},
"engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ "node": ">= 10.14.2"
}
},
"node_modules/@jridgewell/gen-mapping": {
- "version": "0.3.8",
- "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz",
- "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==",
+ "version": "0.3.13",
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz",
+ "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@jridgewell/set-array": "^1.2.1",
- "@jridgewell/sourcemap-codec": "^1.4.10",
+ "@jridgewell/sourcemap-codec": "^1.5.0",
"@jridgewell/trace-mapping": "^0.3.24"
- },
- "engines": {
- "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/remapping": {
+ "version": "2.3.5",
+ "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz",
+ "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/gen-mapping": "^0.3.5",
+ "@jridgewell/trace-mapping": "^0.3.24"
}
},
"node_modules/@jridgewell/resolve-uri": {
@@ -3165,16 +2605,6 @@
"node": ">=6.0.0"
}
},
- "node_modules/@jridgewell/set-array": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz",
- "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6.0.0"
- }
- },
"node_modules/@jridgewell/source-map": {
"version": "0.3.6",
"resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz",
@@ -3194,9 +2624,9 @@
"license": "MIT"
},
"node_modules/@jridgewell/trace-mapping": {
- "version": "0.3.25",
- "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz",
- "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==",
+ "version": "0.3.31",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz",
+ "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -3204,33 +2634,6 @@
"@jridgewell/sourcemap-codec": "^1.4.14"
}
},
- "node_modules/@keyv/serialize": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/@keyv/serialize/-/serialize-1.1.1.tgz",
- "integrity": "sha512-dXn3FZhPv0US+7dtJsIi2R+c7qWYiReoEh5zUntWCf4oSpMNib8FDhSoed6m3QyZdx5hK7iLFkYk3rNxwt8vTA==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@leichtgewicht/ip-codec": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz",
- "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@napi-rs/wasm-runtime": {
- "version": "0.2.12",
- "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.12.tgz",
- "integrity": "sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==",
- "dev": true,
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "@emnapi/core": "^1.4.3",
- "@emnapi/runtime": "^1.4.3",
- "@tybys/wasm-util": "^0.10.0"
- }
- },
"node_modules/@nicolo-ribaudo/eslint-scope-5-internals": {
"version": "5.1.1-v1",
"resolved": "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz",
@@ -3279,624 +2682,19 @@
"node": ">= 8"
}
},
- "node_modules/@opentelemetry/api": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.0.tgz",
- "integrity": "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==",
- "dev": true,
- "license": "Apache-2.0",
- "peer": true,
- "engines": {
- "node": ">=8.0.0"
- }
- },
- "node_modules/@opentelemetry/api-logs": {
- "version": "0.57.2",
- "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.57.2.tgz",
- "integrity": "sha512-uIX52NnTM0iBh84MShlpouI7UKqkZ7MrUszTmaypHBu4r7NofznSnQRfJ+uUeDtQDj6w8eFGg5KBLDAwAPz1+A==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@opentelemetry/api": "^1.3.0"
- },
- "engines": {
- "node": ">=14"
- }
- },
- "node_modules/@opentelemetry/context-async-hooks": {
- "version": "1.30.1",
- "resolved": "https://registry.npmjs.org/@opentelemetry/context-async-hooks/-/context-async-hooks-1.30.1.tgz",
- "integrity": "sha512-s5vvxXPVdjqS3kTLKMeBMvop9hbWkwzBpu+mUO2M7sZtlkyDJGwFe33wRKnbaYDo8ExRVBIIdwIGrqpxHuKttA==",
- "dev": true,
- "license": "Apache-2.0",
- "peer": true,
- "engines": {
- "node": ">=14"
- },
- "peerDependencies": {
- "@opentelemetry/api": ">=1.0.0 <1.10.0"
- }
- },
- "node_modules/@opentelemetry/core": {
- "version": "1.30.1",
- "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.30.1.tgz",
- "integrity": "sha512-OOCM2C/QIURhJMuKaekP3TRBxBKxG/TWWA0TL2J6nXUtDnuCtccy49LUJF8xPFXMX+0LMcxFpCo8M9cGY1W6rQ==",
- "dev": true,
- "license": "Apache-2.0",
- "peer": true,
- "dependencies": {
- "@opentelemetry/semantic-conventions": "1.28.0"
- },
- "engines": {
- "node": ">=14"
- },
- "peerDependencies": {
- "@opentelemetry/api": ">=1.0.0 <1.10.0"
- }
- },
- "node_modules/@opentelemetry/core/node_modules/@opentelemetry/semantic-conventions": {
- "version": "1.28.0",
- "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.28.0.tgz",
- "integrity": "sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA==",
- "dev": true,
- "license": "Apache-2.0",
- "engines": {
- "node": ">=14"
- }
- },
- "node_modules/@opentelemetry/instrumentation": {
- "version": "0.57.2",
- "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.57.2.tgz",
- "integrity": "sha512-BdBGhQBh8IjZ2oIIX6F2/Q3LKm/FDDKi6ccYKcBTeilh6SNdNKveDOLk73BkSJjQLJk6qe4Yh+hHw1UPhCDdrg==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@opentelemetry/api-logs": "0.57.2",
- "@types/shimmer": "^1.2.0",
- "import-in-the-middle": "^1.8.1",
- "require-in-the-middle": "^7.1.1",
- "semver": "^7.5.2",
- "shimmer": "^1.2.1"
- },
- "engines": {
- "node": ">=14"
- },
- "peerDependencies": {
- "@opentelemetry/api": "^1.3.0"
- }
- },
- "node_modules/@opentelemetry/instrumentation-amqplib": {
- "version": "0.46.1",
- "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-amqplib/-/instrumentation-amqplib-0.46.1.tgz",
- "integrity": "sha512-AyXVnlCf/xV3K/rNumzKxZqsULyITJH6OVLiW6730JPRqWA7Zc9bvYoVNpN6iOpTU8CasH34SU/ksVJmObFibQ==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@opentelemetry/core": "^1.8.0",
- "@opentelemetry/instrumentation": "^0.57.1",
- "@opentelemetry/semantic-conventions": "^1.27.0"
- },
- "engines": {
- "node": ">=14"
- },
- "peerDependencies": {
- "@opentelemetry/api": "^1.3.0"
- }
- },
- "node_modules/@opentelemetry/instrumentation-connect": {
- "version": "0.43.1",
- "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-connect/-/instrumentation-connect-0.43.1.tgz",
- "integrity": "sha512-ht7YGWQuV5BopMcw5Q2hXn3I8eG8TH0J/kc/GMcW4CuNTgiP6wCu44BOnucJWL3CmFWaRHI//vWyAhaC8BwePw==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@opentelemetry/core": "^1.8.0",
- "@opentelemetry/instrumentation": "^0.57.1",
- "@opentelemetry/semantic-conventions": "^1.27.0",
- "@types/connect": "3.4.38"
- },
- "engines": {
- "node": ">=14"
- },
- "peerDependencies": {
- "@opentelemetry/api": "^1.3.0"
- }
- },
- "node_modules/@opentelemetry/instrumentation-dataloader": {
- "version": "0.16.1",
- "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-dataloader/-/instrumentation-dataloader-0.16.1.tgz",
- "integrity": "sha512-K/qU4CjnzOpNkkKO4DfCLSQshejRNAJtd4esgigo/50nxCB6XCyi1dhAblUHM9jG5dRm8eu0FB+t87nIo99LYQ==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@opentelemetry/instrumentation": "^0.57.1"
- },
- "engines": {
- "node": ">=14"
- },
- "peerDependencies": {
- "@opentelemetry/api": "^1.3.0"
- }
- },
- "node_modules/@opentelemetry/instrumentation-express": {
- "version": "0.47.1",
- "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-express/-/instrumentation-express-0.47.1.tgz",
- "integrity": "sha512-QNXPTWteDclR2B4pDFpz0TNghgB33UMjUt14B+BZPmtH1MwUFAfLHBaP5If0Z5NZC+jaH8oF2glgYjrmhZWmSw==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@opentelemetry/core": "^1.8.0",
- "@opentelemetry/instrumentation": "^0.57.1",
- "@opentelemetry/semantic-conventions": "^1.27.0"
- },
- "engines": {
- "node": ">=14"
- },
- "peerDependencies": {
- "@opentelemetry/api": "^1.3.0"
- }
- },
- "node_modules/@opentelemetry/instrumentation-fs": {
- "version": "0.19.1",
- "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-fs/-/instrumentation-fs-0.19.1.tgz",
- "integrity": "sha512-6g0FhB3B9UobAR60BGTcXg4IHZ6aaYJzp0Ki5FhnxyAPt8Ns+9SSvgcrnsN2eGmk3RWG5vYycUGOEApycQL24A==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@opentelemetry/core": "^1.8.0",
- "@opentelemetry/instrumentation": "^0.57.1"
- },
- "engines": {
- "node": ">=14"
- },
- "peerDependencies": {
- "@opentelemetry/api": "^1.3.0"
- }
- },
- "node_modules/@opentelemetry/instrumentation-generic-pool": {
- "version": "0.43.1",
- "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-generic-pool/-/instrumentation-generic-pool-0.43.1.tgz",
- "integrity": "sha512-M6qGYsp1cURtvVLGDrPPZemMFEbuMmCXgQYTReC/IbimV5sGrLBjB+/hANUpRZjX67nGLdKSVLZuQQAiNz+sww==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@opentelemetry/instrumentation": "^0.57.1"
- },
- "engines": {
- "node": ">=14"
- },
- "peerDependencies": {
- "@opentelemetry/api": "^1.3.0"
- }
- },
- "node_modules/@opentelemetry/instrumentation-graphql": {
- "version": "0.47.1",
- "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-graphql/-/instrumentation-graphql-0.47.1.tgz",
- "integrity": "sha512-EGQRWMGqwiuVma8ZLAZnExQ7sBvbOx0N/AE/nlafISPs8S+QtXX+Viy6dcQwVWwYHQPAcuY3bFt3xgoAwb4ZNQ==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@opentelemetry/instrumentation": "^0.57.1"
- },
- "engines": {
- "node": ">=14"
- },
- "peerDependencies": {
- "@opentelemetry/api": "^1.3.0"
- }
- },
- "node_modules/@opentelemetry/instrumentation-hapi": {
- "version": "0.45.2",
- "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-hapi/-/instrumentation-hapi-0.45.2.tgz",
- "integrity": "sha512-7Ehow/7Wp3aoyCrZwQpU7a2CnoMq0XhIcioFuKjBb0PLYfBfmTsFTUyatlHu0fRxhwcRsSQRTvEhmZu8CppBpQ==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@opentelemetry/core": "^1.8.0",
- "@opentelemetry/instrumentation": "^0.57.1",
- "@opentelemetry/semantic-conventions": "^1.27.0"
- },
- "engines": {
- "node": ">=14"
- },
- "peerDependencies": {
- "@opentelemetry/api": "^1.3.0"
- }
- },
- "node_modules/@opentelemetry/instrumentation-http": {
- "version": "0.57.2",
- "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-http/-/instrumentation-http-0.57.2.tgz",
- "integrity": "sha512-1Uz5iJ9ZAlFOiPuwYg29Bf7bJJc/GeoeJIFKJYQf67nTVKFe8RHbEtxgkOmK4UGZNHKXcpW4P8cWBYzBn1USpg==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@opentelemetry/core": "1.30.1",
- "@opentelemetry/instrumentation": "0.57.2",
- "@opentelemetry/semantic-conventions": "1.28.0",
- "forwarded-parse": "2.1.2",
- "semver": "^7.5.2"
- },
- "engines": {
- "node": ">=14"
- },
- "peerDependencies": {
- "@opentelemetry/api": "^1.3.0"
- }
- },
- "node_modules/@opentelemetry/instrumentation-http/node_modules/@opentelemetry/semantic-conventions": {
- "version": "1.28.0",
- "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.28.0.tgz",
- "integrity": "sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA==",
- "dev": true,
- "license": "Apache-2.0",
- "engines": {
- "node": ">=14"
- }
- },
- "node_modules/@opentelemetry/instrumentation-http/node_modules/semver": {
- "version": "7.7.3",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz",
- "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==",
- "dev": true,
- "license": "ISC",
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@opentelemetry/instrumentation-ioredis": {
- "version": "0.47.1",
- "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-ioredis/-/instrumentation-ioredis-0.47.1.tgz",
- "integrity": "sha512-OtFGSN+kgk/aoKgdkKQnBsQFDiG8WdCxu+UrHr0bXScdAmtSzLSraLo7wFIb25RVHfRWvzI5kZomqJYEg/l1iA==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@opentelemetry/instrumentation": "^0.57.1",
- "@opentelemetry/redis-common": "^0.36.2",
- "@opentelemetry/semantic-conventions": "^1.27.0"
- },
- "engines": {
- "node": ">=14"
- },
- "peerDependencies": {
- "@opentelemetry/api": "^1.3.0"
- }
- },
- "node_modules/@opentelemetry/instrumentation-kafkajs": {
- "version": "0.7.1",
- "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-kafkajs/-/instrumentation-kafkajs-0.7.1.tgz",
- "integrity": "sha512-OtjaKs8H7oysfErajdYr1yuWSjMAectT7Dwr+axIoZqT9lmEOkD/H/3rgAs8h/NIuEi2imSXD+vL4MZtOuJfqQ==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@opentelemetry/instrumentation": "^0.57.1",
- "@opentelemetry/semantic-conventions": "^1.27.0"
- },
- "engines": {
- "node": ">=14"
- },
- "peerDependencies": {
- "@opentelemetry/api": "^1.3.0"
- }
- },
- "node_modules/@opentelemetry/instrumentation-knex": {
- "version": "0.44.1",
- "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-knex/-/instrumentation-knex-0.44.1.tgz",
- "integrity": "sha512-U4dQxkNhvPexffjEmGwCq68FuftFK15JgUF05y/HlK3M6W/G2iEaACIfXdSnwVNe9Qh0sPfw8LbOPxrWzGWGMQ==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@opentelemetry/instrumentation": "^0.57.1",
- "@opentelemetry/semantic-conventions": "^1.27.0"
- },
- "engines": {
- "node": ">=14"
- },
- "peerDependencies": {
- "@opentelemetry/api": "^1.3.0"
- }
- },
- "node_modules/@opentelemetry/instrumentation-koa": {
- "version": "0.47.1",
- "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-koa/-/instrumentation-koa-0.47.1.tgz",
- "integrity": "sha512-l/c+Z9F86cOiPJUllUCt09v+kICKvT+Vg1vOAJHtHPsJIzurGayucfCMq2acd/A/yxeNWunl9d9eqZ0G+XiI6A==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@opentelemetry/core": "^1.8.0",
- "@opentelemetry/instrumentation": "^0.57.1",
- "@opentelemetry/semantic-conventions": "^1.27.0"
- },
- "engines": {
- "node": ">=14"
- },
- "peerDependencies": {
- "@opentelemetry/api": "^1.3.0"
- }
- },
- "node_modules/@opentelemetry/instrumentation-lru-memoizer": {
- "version": "0.44.1",
- "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-lru-memoizer/-/instrumentation-lru-memoizer-0.44.1.tgz",
- "integrity": "sha512-5MPkYCvG2yw7WONEjYj5lr5JFehTobW7wX+ZUFy81oF2lr9IPfZk9qO+FTaM0bGEiymwfLwKe6jE15nHn1nmHg==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@opentelemetry/instrumentation": "^0.57.1"
- },
- "engines": {
- "node": ">=14"
- },
- "peerDependencies": {
- "@opentelemetry/api": "^1.3.0"
- }
- },
- "node_modules/@opentelemetry/instrumentation-mongodb": {
- "version": "0.52.0",
- "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mongodb/-/instrumentation-mongodb-0.52.0.tgz",
- "integrity": "sha512-1xmAqOtRUQGR7QfJFfGV/M2kC7wmI2WgZdpru8hJl3S0r4hW0n3OQpEHlSGXJAaNFyvT+ilnwkT+g5L4ljHR6g==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@opentelemetry/instrumentation": "^0.57.1",
- "@opentelemetry/semantic-conventions": "^1.27.0"
- },
- "engines": {
- "node": ">=14"
- },
- "peerDependencies": {
- "@opentelemetry/api": "^1.3.0"
- }
- },
- "node_modules/@opentelemetry/instrumentation-mongoose": {
- "version": "0.46.1",
- "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mongoose/-/instrumentation-mongoose-0.46.1.tgz",
- "integrity": "sha512-3kINtW1LUTPkiXFRSSBmva1SXzS/72we/jL22N+BnF3DFcoewkdkHPYOIdAAk9gSicJ4d5Ojtt1/HeibEc5OQg==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@opentelemetry/core": "^1.8.0",
- "@opentelemetry/instrumentation": "^0.57.1",
- "@opentelemetry/semantic-conventions": "^1.27.0"
- },
- "engines": {
- "node": ">=14"
- },
- "peerDependencies": {
- "@opentelemetry/api": "^1.3.0"
- }
- },
- "node_modules/@opentelemetry/instrumentation-mysql": {
- "version": "0.45.1",
- "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mysql/-/instrumentation-mysql-0.45.1.tgz",
- "integrity": "sha512-TKp4hQ8iKQsY7vnp/j0yJJ4ZsP109Ht6l4RHTj0lNEG1TfgTrIH5vJMbgmoYXWzNHAqBH2e7fncN12p3BP8LFg==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@opentelemetry/instrumentation": "^0.57.1",
- "@opentelemetry/semantic-conventions": "^1.27.0",
- "@types/mysql": "2.15.26"
- },
- "engines": {
- "node": ">=14"
- },
- "peerDependencies": {
- "@opentelemetry/api": "^1.3.0"
- }
- },
- "node_modules/@opentelemetry/instrumentation-mysql2": {
- "version": "0.45.2",
- "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mysql2/-/instrumentation-mysql2-0.45.2.tgz",
- "integrity": "sha512-h6Ad60FjCYdJZ5DTz1Lk2VmQsShiViKe0G7sYikb0GHI0NVvApp2XQNRHNjEMz87roFttGPLHOYVPlfy+yVIhQ==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@opentelemetry/instrumentation": "^0.57.1",
- "@opentelemetry/semantic-conventions": "^1.27.0",
- "@opentelemetry/sql-common": "^0.40.1"
- },
- "engines": {
- "node": ">=14"
- },
- "peerDependencies": {
- "@opentelemetry/api": "^1.3.0"
- }
- },
- "node_modules/@opentelemetry/instrumentation-pg": {
- "version": "0.51.1",
- "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-pg/-/instrumentation-pg-0.51.1.tgz",
- "integrity": "sha512-QxgjSrxyWZc7Vk+qGSfsejPVFL1AgAJdSBMYZdDUbwg730D09ub3PXScB9d04vIqPriZ+0dqzjmQx0yWKiCi2Q==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@opentelemetry/core": "^1.26.0",
- "@opentelemetry/instrumentation": "^0.57.1",
- "@opentelemetry/semantic-conventions": "^1.27.0",
- "@opentelemetry/sql-common": "^0.40.1",
- "@types/pg": "8.6.1",
- "@types/pg-pool": "2.0.6"
- },
- "engines": {
- "node": ">=14"
- },
- "peerDependencies": {
- "@opentelemetry/api": "^1.3.0"
- }
- },
- "node_modules/@opentelemetry/instrumentation-redis-4": {
- "version": "0.46.1",
- "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-redis-4/-/instrumentation-redis-4-0.46.1.tgz",
- "integrity": "sha512-UMqleEoabYMsWoTkqyt9WAzXwZ4BlFZHO40wr3d5ZvtjKCHlD4YXLm+6OLCeIi/HkX7EXvQaz8gtAwkwwSEvcQ==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@opentelemetry/instrumentation": "^0.57.1",
- "@opentelemetry/redis-common": "^0.36.2",
- "@opentelemetry/semantic-conventions": "^1.27.0"
- },
- "engines": {
- "node": ">=14"
- },
- "peerDependencies": {
- "@opentelemetry/api": "^1.3.0"
- }
- },
- "node_modules/@opentelemetry/instrumentation-tedious": {
- "version": "0.18.1",
- "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-tedious/-/instrumentation-tedious-0.18.1.tgz",
- "integrity": "sha512-5Cuy/nj0HBaH+ZJ4leuD7RjgvA844aY2WW+B5uLcWtxGjRZl3MNLuxnNg5DYWZNPO+NafSSnra0q49KWAHsKBg==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@opentelemetry/instrumentation": "^0.57.1",
- "@opentelemetry/semantic-conventions": "^1.27.0",
- "@types/tedious": "^4.0.14"
- },
- "engines": {
- "node": ">=14"
- },
- "peerDependencies": {
- "@opentelemetry/api": "^1.3.0"
- }
- },
- "node_modules/@opentelemetry/instrumentation-undici": {
- "version": "0.10.1",
- "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-undici/-/instrumentation-undici-0.10.1.tgz",
- "integrity": "sha512-rkOGikPEyRpMCmNu9AQuV5dtRlDmJp2dK5sw8roVshAGoB6hH/3QjDtRhdwd75SsJwgynWUNRUYe0wAkTo16tQ==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@opentelemetry/core": "^1.8.0",
- "@opentelemetry/instrumentation": "^0.57.1"
- },
- "engines": {
- "node": ">=14"
- },
- "peerDependencies": {
- "@opentelemetry/api": "^1.7.0"
- }
- },
- "node_modules/@opentelemetry/instrumentation/node_modules/semver": {
- "version": "7.7.3",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz",
- "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==",
- "dev": true,
- "license": "ISC",
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@opentelemetry/redis-common": {
- "version": "0.36.2",
- "resolved": "https://registry.npmjs.org/@opentelemetry/redis-common/-/redis-common-0.36.2.tgz",
- "integrity": "sha512-faYX1N0gpLhej/6nyp6bgRjzAKXn5GOEMYY7YhciSfCoITAktLUtQ36d24QEWNA1/WA1y6qQunCe0OhHRkVl9g==",
- "dev": true,
- "license": "Apache-2.0",
- "engines": {
- "node": ">=14"
- }
- },
- "node_modules/@opentelemetry/resources": {
- "version": "1.30.1",
- "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.30.1.tgz",
- "integrity": "sha512-5UxZqiAgLYGFjS4s9qm5mBVo433u+dSPUFWVWXmLAD4wB65oMCoXaJP1KJa9DIYYMeHu3z4BZcStG3LC593cWA==",
- "dev": true,
- "license": "Apache-2.0",
- "peer": true,
- "dependencies": {
- "@opentelemetry/core": "1.30.1",
- "@opentelemetry/semantic-conventions": "1.28.0"
- },
- "engines": {
- "node": ">=14"
- },
- "peerDependencies": {
- "@opentelemetry/api": ">=1.0.0 <1.10.0"
- }
- },
- "node_modules/@opentelemetry/resources/node_modules/@opentelemetry/semantic-conventions": {
- "version": "1.28.0",
- "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.28.0.tgz",
- "integrity": "sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA==",
- "dev": true,
- "license": "Apache-2.0",
- "engines": {
- "node": ">=14"
- }
- },
- "node_modules/@opentelemetry/sdk-trace-base": {
- "version": "1.30.1",
- "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.30.1.tgz",
- "integrity": "sha512-jVPgBbH1gCy2Lb7X0AVQ8XAfgg0pJ4nvl8/IiQA6nxOsPvS+0zMJaFSs2ltXe0J6C8dqjcnpyqINDJmU30+uOg==",
- "dev": true,
- "license": "Apache-2.0",
- "peer": true,
- "dependencies": {
- "@opentelemetry/core": "1.30.1",
- "@opentelemetry/resources": "1.30.1",
- "@opentelemetry/semantic-conventions": "1.28.0"
- },
- "engines": {
- "node": ">=14"
- },
- "peerDependencies": {
- "@opentelemetry/api": ">=1.0.0 <1.10.0"
- }
- },
- "node_modules/@opentelemetry/sdk-trace-base/node_modules/@opentelemetry/semantic-conventions": {
- "version": "1.28.0",
- "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.28.0.tgz",
- "integrity": "sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA==",
- "dev": true,
- "license": "Apache-2.0",
- "engines": {
- "node": ">=14"
- }
- },
- "node_modules/@opentelemetry/semantic-conventions": {
- "version": "1.38.0",
- "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.38.0.tgz",
- "integrity": "sha512-kocjix+/sSggfJhwXqClZ3i9Y/MI0fp7b+g7kCRm6psy2dsf8uApTRclwG18h8Avm7C9+fnt+O36PspJ/OzoWg==",
- "dev": true,
- "license": "Apache-2.0",
- "peer": true,
- "engines": {
- "node": ">=14"
- }
- },
- "node_modules/@opentelemetry/sql-common": {
- "version": "0.40.1",
- "resolved": "https://registry.npmjs.org/@opentelemetry/sql-common/-/sql-common-0.40.1.tgz",
- "integrity": "sha512-nSDlnHSqzC3pXn/wZEZVLuAuJ1MYMXPBwtv2qAbCa3847SaHItdE7SzUq/Jtb0KZmh1zfAbNi3AAMjztTT4Ugg==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@opentelemetry/core": "^1.1.0"
- },
- "engines": {
- "node": ">=14"
- },
- "peerDependencies": {
- "@opentelemetry/api": "^1.1.0"
- }
- },
"node_modules/@parcel/watcher": {
- "version": "2.5.1",
- "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.1.tgz",
- "integrity": "sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==",
+ "version": "2.5.6",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.6.tgz",
+ "integrity": "sha512-tmmZ3lQxAe/k/+rNnXQRawJ4NjxO2hqiOLTHvWchtGZULp4RyFeh6aU4XdOYBFe2KE1oShQTv4AblOs2iOrNnQ==",
"dev": true,
"hasInstallScript": true,
"license": "MIT",
"optional": true,
"dependencies": {
- "detect-libc": "^1.0.3",
+ "detect-libc": "^2.0.3",
"is-glob": "^4.0.3",
- "micromatch": "^4.0.5",
- "node-addon-api": "^7.0.0"
+ "node-addon-api": "^7.0.0",
+ "picomatch": "^4.0.3"
},
"engines": {
"node": ">= 10.0.0"
@@ -3906,25 +2704,25 @@
"url": "https://opencollective.com/parcel"
},
"optionalDependencies": {
- "@parcel/watcher-android-arm64": "2.5.1",
- "@parcel/watcher-darwin-arm64": "2.5.1",
- "@parcel/watcher-darwin-x64": "2.5.1",
- "@parcel/watcher-freebsd-x64": "2.5.1",
- "@parcel/watcher-linux-arm-glibc": "2.5.1",
- "@parcel/watcher-linux-arm-musl": "2.5.1",
- "@parcel/watcher-linux-arm64-glibc": "2.5.1",
- "@parcel/watcher-linux-arm64-musl": "2.5.1",
- "@parcel/watcher-linux-x64-glibc": "2.5.1",
- "@parcel/watcher-linux-x64-musl": "2.5.1",
- "@parcel/watcher-win32-arm64": "2.5.1",
- "@parcel/watcher-win32-ia32": "2.5.1",
- "@parcel/watcher-win32-x64": "2.5.1"
+ "@parcel/watcher-android-arm64": "2.5.6",
+ "@parcel/watcher-darwin-arm64": "2.5.6",
+ "@parcel/watcher-darwin-x64": "2.5.6",
+ "@parcel/watcher-freebsd-x64": "2.5.6",
+ "@parcel/watcher-linux-arm-glibc": "2.5.6",
+ "@parcel/watcher-linux-arm-musl": "2.5.6",
+ "@parcel/watcher-linux-arm64-glibc": "2.5.6",
+ "@parcel/watcher-linux-arm64-musl": "2.5.6",
+ "@parcel/watcher-linux-x64-glibc": "2.5.6",
+ "@parcel/watcher-linux-x64-musl": "2.5.6",
+ "@parcel/watcher-win32-arm64": "2.5.6",
+ "@parcel/watcher-win32-ia32": "2.5.6",
+ "@parcel/watcher-win32-x64": "2.5.6"
}
},
"node_modules/@parcel/watcher-android-arm64": {
- "version": "2.5.1",
- "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.1.tgz",
- "integrity": "sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==",
+ "version": "2.5.6",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.6.tgz",
+ "integrity": "sha512-YQxSS34tPF/6ZG7r/Ih9xy+kP/WwediEUsqmtf0cuCV5TPPKw/PQHRhueUo6JdeFJaqV3pyjm0GdYjZotbRt/A==",
"cpu": [
"arm64"
],
@@ -3943,9 +2741,9 @@
}
},
"node_modules/@parcel/watcher-darwin-arm64": {
- "version": "2.5.1",
- "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.1.tgz",
- "integrity": "sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==",
+ "version": "2.5.6",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.6.tgz",
+ "integrity": "sha512-Z2ZdrnwyXvvvdtRHLmM4knydIdU9adO3D4n/0cVipF3rRiwP+3/sfzpAwA/qKFL6i1ModaabkU7IbpeMBgiVEA==",
"cpu": [
"arm64"
],
@@ -3964,9 +2762,9 @@
}
},
"node_modules/@parcel/watcher-darwin-x64": {
- "version": "2.5.1",
- "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.1.tgz",
- "integrity": "sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==",
+ "version": "2.5.6",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.6.tgz",
+ "integrity": "sha512-HgvOf3W9dhithcwOWX9uDZyn1lW9R+7tPZ4sug+NGrGIo4Rk1hAXLEbcH1TQSqxts0NYXXlOWqVpvS1SFS4fRg==",
"cpu": [
"x64"
],
@@ -3985,9 +2783,9 @@
}
},
"node_modules/@parcel/watcher-freebsd-x64": {
- "version": "2.5.1",
- "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.1.tgz",
- "integrity": "sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==",
+ "version": "2.5.6",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.6.tgz",
+ "integrity": "sha512-vJVi8yd/qzJxEKHkeemh7w3YAn6RJCtYlE4HPMoVnCpIXEzSrxErBW5SJBgKLbXU3WdIpkjBTeUNtyBVn8TRng==",
"cpu": [
"x64"
],
@@ -4006,13 +2804,16 @@
}
},
"node_modules/@parcel/watcher-linux-arm-glibc": {
- "version": "2.5.1",
- "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.1.tgz",
- "integrity": "sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==",
+ "version": "2.5.6",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.6.tgz",
+ "integrity": "sha512-9JiYfB6h6BgV50CCfasfLf/uvOcJskMSwcdH1PHH9rvS1IrNy8zad6IUVPVUfmXr+u+Km9IxcfMLzgdOudz9EQ==",
"cpu": [
"arm"
],
"dev": true,
+ "libc": [
+ "glibc"
+ ],
"license": "MIT",
"optional": true,
"os": [
@@ -4027,13 +2828,16 @@
}
},
"node_modules/@parcel/watcher-linux-arm-musl": {
- "version": "2.5.1",
- "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.1.tgz",
- "integrity": "sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==",
+ "version": "2.5.6",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.6.tgz",
+ "integrity": "sha512-Ve3gUCG57nuUUSyjBq/MAM0CzArtuIOxsBdQ+ftz6ho8n7s1i9E1Nmk/xmP323r2YL0SONs1EuwqBp2u1k5fxg==",
"cpu": [
"arm"
],
"dev": true,
+ "libc": [
+ "musl"
+ ],
"license": "MIT",
"optional": true,
"os": [
@@ -4048,13 +2852,16 @@
}
},
"node_modules/@parcel/watcher-linux-arm64-glibc": {
- "version": "2.5.1",
- "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.1.tgz",
- "integrity": "sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==",
+ "version": "2.5.6",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.6.tgz",
+ "integrity": "sha512-f2g/DT3NhGPdBmMWYoxixqYr3v/UXcmLOYy16Bx0TM20Tchduwr4EaCbmxh1321TABqPGDpS8D/ggOTaljijOA==",
"cpu": [
"arm64"
],
"dev": true,
+ "libc": [
+ "glibc"
+ ],
"license": "MIT",
"optional": true,
"os": [
@@ -4069,13 +2876,16 @@
}
},
"node_modules/@parcel/watcher-linux-arm64-musl": {
- "version": "2.5.1",
- "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.1.tgz",
- "integrity": "sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==",
+ "version": "2.5.6",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.6.tgz",
+ "integrity": "sha512-qb6naMDGlbCwdhLj6hgoVKJl2odL34z2sqkC7Z6kzir8b5W65WYDpLB6R06KabvZdgoHI/zxke4b3zR0wAbDTA==",
"cpu": [
"arm64"
],
"dev": true,
+ "libc": [
+ "musl"
+ ],
"license": "MIT",
"optional": true,
"os": [
@@ -4090,13 +2900,16 @@
}
},
"node_modules/@parcel/watcher-linux-x64-glibc": {
- "version": "2.5.1",
- "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.1.tgz",
- "integrity": "sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==",
+ "version": "2.5.6",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.6.tgz",
+ "integrity": "sha512-kbT5wvNQlx7NaGjzPFu8nVIW1rWqV780O7ZtkjuWaPUgpv2NMFpjYERVi0UYj1msZNyCzGlaCWEtzc+exjMGbQ==",
"cpu": [
"x64"
],
"dev": true,
+ "libc": [
+ "glibc"
+ ],
"license": "MIT",
"optional": true,
"os": [
@@ -4111,13 +2924,16 @@
}
},
"node_modules/@parcel/watcher-linux-x64-musl": {
- "version": "2.5.1",
- "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.1.tgz",
- "integrity": "sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==",
+ "version": "2.5.6",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.6.tgz",
+ "integrity": "sha512-1JRFeC+h7RdXwldHzTsmdtYR/Ku8SylLgTU/reMuqdVD7CtLwf0VR1FqeprZ0eHQkO0vqsbvFLXUmYm/uNKJBg==",
"cpu": [
"x64"
],
"dev": true,
+ "libc": [
+ "musl"
+ ],
"license": "MIT",
"optional": true,
"os": [
@@ -4132,9 +2948,9 @@
}
},
"node_modules/@parcel/watcher-win32-arm64": {
- "version": "2.5.1",
- "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.1.tgz",
- "integrity": "sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==",
+ "version": "2.5.6",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.6.tgz",
+ "integrity": "sha512-3ukyebjc6eGlw9yRt678DxVF7rjXatWiHvTXqphZLvo7aC5NdEgFufVwjFfY51ijYEWpXbqF5jtrK275z52D4Q==",
"cpu": [
"arm64"
],
@@ -4153,9 +2969,9 @@
}
},
"node_modules/@parcel/watcher-win32-ia32": {
- "version": "2.5.1",
- "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.1.tgz",
- "integrity": "sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==",
+ "version": "2.5.6",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.6.tgz",
+ "integrity": "sha512-k35yLp1ZMwwee3Ez/pxBi5cf4AoBKYXj00CZ80jUz5h8prpiaQsiRPKQMxoLstNuqe2vR4RNPEAEcjEFzhEz/g==",
"cpu": [
"ia32"
],
@@ -4174,9 +2990,9 @@
}
},
"node_modules/@parcel/watcher-win32-x64": {
- "version": "2.5.1",
- "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.1.tgz",
- "integrity": "sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==",
+ "version": "2.5.6",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.6.tgz",
+ "integrity": "sha512-hbQlYcCq5dlAX9Qx+kFb0FHue6vbjlf0FrNzSKdYK2APUf7tGfGxQCk2ihEREmbR6ZMc0MVAD5RIX/41gpUzTw==",
"cpu": [
"x64"
],
@@ -4194,94 +3010,18 @@
"url": "https://opencollective.com/parcel"
}
},
- "node_modules/@paulirish/trace_engine": {
- "version": "0.0.59",
- "resolved": "https://registry.npmjs.org/@paulirish/trace_engine/-/trace_engine-0.0.59.tgz",
- "integrity": "sha512-439NUzQGmH+9Y017/xCchBP9571J4bzhpcNhrxorf7r37wcyJZkgUfrUsRL3xl+JDcZ6ORhoFCzCw98c6S3YHw==",
- "dev": true,
- "license": "BSD-3-Clause",
- "dependencies": {
- "legacy-javascript": "latest",
- "third-party-web": "latest"
- }
- },
- "node_modules/@pkgr/core": {
- "version": "0.2.9",
- "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.9.tgz",
- "integrity": "sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==",
+ "node_modules/@parcel/watcher/node_modules/picomatch": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz",
+ "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==",
"dev": true,
"license": "MIT",
+ "optional": true,
"engines": {
- "node": "^12.20.0 || ^14.18.0 || >=16.0.0"
+ "node": ">=12"
},
"funding": {
- "url": "https://opencollective.com/pkgr"
- }
- },
- "node_modules/@playwright/test": {
- "version": "1.57.0",
- "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.57.0.tgz",
- "integrity": "sha512-6TyEnHgd6SArQO8UO2OMTxshln3QMWBtPGrOCgs3wVEmQmwyuNtB10IZMfmYDE0riwNR1cu4q+pPcxMVtaG3TA==",
- "dev": true,
- "license": "Apache-2.0",
- "peer": true,
- "dependencies": {
- "playwright": "1.57.0"
- },
- "bin": {
- "playwright": "cli.js"
- },
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@pmmmwh/react-refresh-webpack-plugin": {
- "version": "0.5.15",
- "resolved": "https://registry.npmjs.org/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.15.tgz",
- "integrity": "sha512-LFWllMA55pzB9D34w/wXUCf8+c+IYKuJDgxiZ3qMhl64KRMBHYM1I3VdGaD2BV5FNPV2/S2596bppxHbv2ZydQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ansi-html": "^0.0.9",
- "core-js-pure": "^3.23.3",
- "error-stack-parser": "^2.0.6",
- "html-entities": "^2.1.0",
- "loader-utils": "^2.0.4",
- "schema-utils": "^4.2.0",
- "source-map": "^0.7.3"
- },
- "engines": {
- "node": ">= 10.13"
- },
- "peerDependencies": {
- "@types/webpack": "4.x || 5.x",
- "react-refresh": ">=0.10.0 <1.0.0",
- "sockjs-client": "^1.4.0",
- "type-fest": ">=0.17.0 <5.0.0",
- "webpack": ">=4.43.0 <6.0.0",
- "webpack-dev-server": "3.x || 4.x || 5.x",
- "webpack-hot-middleware": "2.x",
- "webpack-plugin-serve": "0.x || 1.x"
- },
- "peerDependenciesMeta": {
- "@types/webpack": {
- "optional": true
- },
- "sockjs-client": {
- "optional": true
- },
- "type-fest": {
- "optional": true
- },
- "webpack-dev-server": {
- "optional": true
- },
- "webpack-hot-middleware": {
- "optional": true
- },
- "webpack-plugin-serve": {
- "optional": true
- }
+ "url": "https://github.com/sponsors/jonschlinkert"
}
},
"node_modules/@polka/url": {
@@ -4291,55 +3031,6 @@
"dev": true,
"license": "MIT"
},
- "node_modules/@prisma/instrumentation": {
- "version": "6.11.1",
- "resolved": "https://registry.npmjs.org/@prisma/instrumentation/-/instrumentation-6.11.1.tgz",
- "integrity": "sha512-mrZOev24EDhnefmnZX7WVVT7v+r9LttPRqf54ONvj6re4XMF7wFTpK2tLJi4XHB7fFp/6xhYbgRel8YV7gQiyA==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@opentelemetry/instrumentation": "^0.52.0 || ^0.53.0 || ^0.54.0 || ^0.55.0 || ^0.56.0 || ^0.57.0"
- },
- "peerDependencies": {
- "@opentelemetry/api": "^1.8"
- }
- },
- "node_modules/@puppeteer/browsers": {
- "version": "2.6.1",
- "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-2.6.1.tgz",
- "integrity": "sha512-aBSREisdsGH890S2rQqK82qmQYU3uFpSH8wcZWHgHzl3LfzsxAKbLNiAG9mO8v1Y0UICBeClICxPJvyr0rcuxg==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "debug": "^4.4.0",
- "extract-zip": "^2.0.1",
- "progress": "^2.0.3",
- "proxy-agent": "^6.5.0",
- "semver": "^7.6.3",
- "tar-fs": "^3.0.6",
- "unbzip2-stream": "^1.4.3",
- "yargs": "^17.7.2"
- },
- "bin": {
- "browsers": "lib/cjs/main-cli.js"
- },
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@puppeteer/browsers/node_modules/semver": {
- "version": "7.7.3",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz",
- "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==",
- "dev": true,
- "license": "ISC",
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
"node_modules/@rtsao/scc": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz",
@@ -4347,107 +3038,6 @@
"dev": true,
"license": "MIT"
},
- "node_modules/@sentry/core": {
- "version": "9.47.1",
- "resolved": "https://registry.npmjs.org/@sentry/core/-/core-9.47.1.tgz",
- "integrity": "sha512-KX62+qIt4xgy8eHKHiikfhz2p5fOciXd0Cl+dNzhgPFq8klq4MGMNaf148GB3M/vBqP4nw/eFvRMAayFCgdRQw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@sentry/node": {
- "version": "9.47.1",
- "resolved": "https://registry.npmjs.org/@sentry/node/-/node-9.47.1.tgz",
- "integrity": "sha512-CDbkasBz3fnWRKSFs6mmaRepM2pa+tbZkrqhPWifFfIkJDidtVW40p6OnquTvPXyPAszCnDZRnZT14xyvNmKPQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@opentelemetry/api": "^1.9.0",
- "@opentelemetry/context-async-hooks": "^1.30.1",
- "@opentelemetry/core": "^1.30.1",
- "@opentelemetry/instrumentation": "^0.57.2",
- "@opentelemetry/instrumentation-amqplib": "^0.46.1",
- "@opentelemetry/instrumentation-connect": "0.43.1",
- "@opentelemetry/instrumentation-dataloader": "0.16.1",
- "@opentelemetry/instrumentation-express": "0.47.1",
- "@opentelemetry/instrumentation-fs": "0.19.1",
- "@opentelemetry/instrumentation-generic-pool": "0.43.1",
- "@opentelemetry/instrumentation-graphql": "0.47.1",
- "@opentelemetry/instrumentation-hapi": "0.45.2",
- "@opentelemetry/instrumentation-http": "0.57.2",
- "@opentelemetry/instrumentation-ioredis": "0.47.1",
- "@opentelemetry/instrumentation-kafkajs": "0.7.1",
- "@opentelemetry/instrumentation-knex": "0.44.1",
- "@opentelemetry/instrumentation-koa": "0.47.1",
- "@opentelemetry/instrumentation-lru-memoizer": "0.44.1",
- "@opentelemetry/instrumentation-mongodb": "0.52.0",
- "@opentelemetry/instrumentation-mongoose": "0.46.1",
- "@opentelemetry/instrumentation-mysql": "0.45.1",
- "@opentelemetry/instrumentation-mysql2": "0.45.2",
- "@opentelemetry/instrumentation-pg": "0.51.1",
- "@opentelemetry/instrumentation-redis-4": "0.46.1",
- "@opentelemetry/instrumentation-tedious": "0.18.1",
- "@opentelemetry/instrumentation-undici": "0.10.1",
- "@opentelemetry/resources": "^1.30.1",
- "@opentelemetry/sdk-trace-base": "^1.30.1",
- "@opentelemetry/semantic-conventions": "^1.34.0",
- "@prisma/instrumentation": "6.11.1",
- "@sentry/core": "9.47.1",
- "@sentry/node-core": "9.47.1",
- "@sentry/opentelemetry": "9.47.1",
- "import-in-the-middle": "^1.14.2",
- "minimatch": "^9.0.0"
- },
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@sentry/node-core": {
- "version": "9.47.1",
- "resolved": "https://registry.npmjs.org/@sentry/node-core/-/node-core-9.47.1.tgz",
- "integrity": "sha512-7TEOiCGkyShJ8CKtsri9lbgMCbB+qNts2Xq37itiMPN2m+lIukK3OX//L8DC5nfKYZlgikrefS63/vJtm669hQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@sentry/core": "9.47.1",
- "@sentry/opentelemetry": "9.47.1",
- "import-in-the-middle": "^1.14.2"
- },
- "engines": {
- "node": ">=18"
- },
- "peerDependencies": {
- "@opentelemetry/api": "^1.9.0",
- "@opentelemetry/context-async-hooks": "^1.30.1 || ^2.0.0",
- "@opentelemetry/core": "^1.30.1 || ^2.0.0",
- "@opentelemetry/instrumentation": ">=0.57.1 <1",
- "@opentelemetry/resources": "^1.30.1 || ^2.0.0",
- "@opentelemetry/sdk-trace-base": "^1.30.1 || ^2.0.0",
- "@opentelemetry/semantic-conventions": "^1.34.0"
- }
- },
- "node_modules/@sentry/opentelemetry": {
- "version": "9.47.1",
- "resolved": "https://registry.npmjs.org/@sentry/opentelemetry/-/opentelemetry-9.47.1.tgz",
- "integrity": "sha512-STtFpjF7lwzeoedDJV+5XA6P89BfmFwFftmHSGSe3UTI8z8IoiR5yB6X2vCjSPvXlfeOs13qCNNCEZyznxM8Xw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@sentry/core": "9.47.1"
- },
- "engines": {
- "node": ">=18"
- },
- "peerDependencies": {
- "@opentelemetry/api": "^1.9.0",
- "@opentelemetry/context-async-hooks": "^1.30.1 || ^2.0.0",
- "@opentelemetry/core": "^1.30.1 || ^2.0.0",
- "@opentelemetry/sdk-trace-base": "^1.30.1 || ^2.0.0",
- "@opentelemetry/semantic-conventions": "^1.34.0"
- }
- },
"node_modules/@sideway/address": {
"version": "4.1.5",
"resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.5.tgz",
@@ -4472,17 +3062,10 @@
"dev": true,
"license": "BSD-3-Clause"
},
- "node_modules/@sinclair/typebox": {
- "version": "0.27.8",
- "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz",
- "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/@sinonjs/commons": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz",
- "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==",
+ "version": "1.8.6",
+ "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.6.tgz",
+ "integrity": "sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==",
"dev": true,
"license": "BSD-3-Clause",
"dependencies": {
@@ -4490,217 +3073,195 @@
}
},
"node_modules/@sinonjs/fake-timers": {
- "version": "10.3.0",
- "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz",
- "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==",
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz",
+ "integrity": "sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA==",
"dev": true,
"license": "BSD-3-Clause",
"dependencies": {
- "@sinonjs/commons": "^3.0.0"
+ "@sinonjs/commons": "^1.7.0"
}
},
- "node_modules/@stylistic/stylelint-plugin": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/@stylistic/stylelint-plugin/-/stylelint-plugin-3.1.3.tgz",
- "integrity": "sha512-85fsmzgsIVmyG3/GFrjuYj6Cz8rAM7IZiPiXCMiSMfoDOC1lOrzrXPDk24WqviAghnPqGpx8b0caK2PuewWGFg==",
+ "node_modules/@stylelint/postcss-css-in-js": {
+ "version": "0.37.3",
+ "resolved": "https://registry.npmjs.org/@stylelint/postcss-css-in-js/-/postcss-css-in-js-0.37.3.tgz",
+ "integrity": "sha512-scLk3cSH1H9KggSniseb2KNAU5D9FWc3H7BxCSAIdtU9OWIyw0zkEZ9qEKHryRM+SExYXRKNb7tOOVNAsQ3iwg==",
+ "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.",
"dev": true,
"license": "MIT",
"dependencies": {
- "@csstools/css-parser-algorithms": "^3.0.1",
- "@csstools/css-tokenizer": "^3.0.1",
- "@csstools/media-query-list-parser": "^3.0.1",
- "is-plain-object": "^5.0.0",
- "postcss": "^8.4.41",
- "postcss-selector-parser": "^6.1.2",
- "postcss-value-parser": "^4.2.0",
- "style-search": "^0.1.0"
- },
- "engines": {
- "node": "^18.12 || >=20.9"
+ "@babel/core": "^7.17.9"
},
"peerDependencies": {
- "stylelint": "^16.8.0"
+ "postcss": ">=7.0.0",
+ "postcss-syntax": ">=0.36.2"
+ }
+ },
+ "node_modules/@stylelint/postcss-markdown": {
+ "version": "0.36.2",
+ "resolved": "https://registry.npmjs.org/@stylelint/postcss-markdown/-/postcss-markdown-0.36.2.tgz",
+ "integrity": "sha512-2kGbqUVJUGE8dM+bMzXG/PYUWKkjLIkRLWNh39OaADkiabDRdw8ATFCgbMz5xdIcvwspPAluSL7uY+ZiTWdWmQ==",
+ "deprecated": "Use the original unforked package instead: postcss-markdown",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "remark": "^13.0.0",
+ "unist-util-find-all-after": "^3.0.2"
+ },
+ "peerDependencies": {
+ "postcss": ">=7.0.0",
+ "postcss-syntax": ">=0.36.2"
}
},
"node_modules/@svgr/babel-plugin-add-jsx-attribute": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-8.0.0.tgz",
- "integrity": "sha512-b9MIk7yhdS1pMCZM8VeNfUlSKVRhsHZNMl5O9SfaX0l0t5wjdgu4IDzGB8bpnGBBOjGST3rRFVsaaEtI4W6f7g==",
+ "version": "5.4.0",
+ "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-5.4.0.tgz",
+ "integrity": "sha512-ZFf2gs/8/6B8PnSofI0inYXr2SDNTDScPXhN7k5EqD4aZ3gi6u+rbmZHVB8IM3wDyx8ntKACZbtXSm7oZGRqVg==",
"dev": true,
"license": "MIT",
"engines": {
- "node": ">=14"
+ "node": ">=10"
},
"funding": {
"type": "github",
"url": "https://github.com/sponsors/gregberge"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
}
},
"node_modules/@svgr/babel-plugin-remove-jsx-attribute": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-8.0.0.tgz",
- "integrity": "sha512-BcCkm/STipKvbCl6b7QFrMh/vx00vIP63k2eM66MfHJzPr6O2U0jYEViXkHJWqXqQYjdeA9cuCl5KWmlwjDvbA==",
+ "version": "5.4.0",
+ "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-5.4.0.tgz",
+ "integrity": "sha512-yaS4o2PgUtwLFGTKbsiAy6D0o3ugcUhWK0Z45umJ66EPWunAz9fuFw2gJuje6wqQvQWOTJvIahUwndOXb7QCPg==",
"dev": true,
"license": "MIT",
"engines": {
- "node": ">=14"
+ "node": ">=10"
},
"funding": {
"type": "github",
"url": "https://github.com/sponsors/gregberge"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
}
},
"node_modules/@svgr/babel-plugin-remove-jsx-empty-expression": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-8.0.0.tgz",
- "integrity": "sha512-5BcGCBfBxB5+XSDSWnhTThfI9jcO5f0Ai2V24gZpG+wXF14BzwxxdDb4g6trdOux0rhibGs385BeFMSmxtS3uA==",
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-5.0.1.tgz",
+ "integrity": "sha512-LA72+88A11ND/yFIMzyuLRSMJ+tRKeYKeQ+mR3DcAZ5I4h5CPWN9AHyUzJbWSYp/u2u0xhmgOe0+E41+GjEueA==",
"dev": true,
"license": "MIT",
"engines": {
- "node": ">=14"
+ "node": ">=10"
},
"funding": {
"type": "github",
"url": "https://github.com/sponsors/gregberge"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
}
},
"node_modules/@svgr/babel-plugin-replace-jsx-attribute-value": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-8.0.0.tgz",
- "integrity": "sha512-KVQ+PtIjb1BuYT3ht8M5KbzWBhdAjjUPdlMtpuw/VjT8coTrItWX6Qafl9+ji831JaJcu6PJNKCV0bp01lBNzQ==",
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-5.0.1.tgz",
+ "integrity": "sha512-PoiE6ZD2Eiy5mK+fjHqwGOS+IXX0wq/YDtNyIgOrc6ejFnxN4b13pRpiIPbtPwHEc+NT2KCjteAcq33/F1Y9KQ==",
"dev": true,
"license": "MIT",
"engines": {
- "node": ">=14"
+ "node": ">=10"
},
"funding": {
"type": "github",
"url": "https://github.com/sponsors/gregberge"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
}
},
"node_modules/@svgr/babel-plugin-svg-dynamic-title": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-8.0.0.tgz",
- "integrity": "sha512-omNiKqwjNmOQJ2v6ge4SErBbkooV2aAWwaPFs2vUY7p7GhVkzRkJ00kILXQvRhA6miHnNpXv7MRnnSjdRjK8og==",
+ "version": "5.4.0",
+ "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-5.4.0.tgz",
+ "integrity": "sha512-zSOZH8PdZOpuG1ZVx/cLVePB2ibo3WPpqo7gFIjLV9a0QsuQAzJiwwqmuEdTaW2pegyBE17Uu15mOgOcgabQZg==",
"dev": true,
"license": "MIT",
"engines": {
- "node": ">=14"
+ "node": ">=10"
},
"funding": {
"type": "github",
"url": "https://github.com/sponsors/gregberge"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
}
},
"node_modules/@svgr/babel-plugin-svg-em-dimensions": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-8.0.0.tgz",
- "integrity": "sha512-mURHYnu6Iw3UBTbhGwE/vsngtCIbHE43xCRK7kCw4t01xyGqb2Pd+WXekRRoFOBIY29ZoOhUCTEweDMdrjfi9g==",
+ "version": "5.4.0",
+ "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-5.4.0.tgz",
+ "integrity": "sha512-cPzDbDA5oT/sPXDCUYoVXEmm3VIoAWAPT6mSPTJNbQaBNUuEKVKyGH93oDY4e42PYHRW67N5alJx/eEol20abw==",
"dev": true,
"license": "MIT",
"engines": {
- "node": ">=14"
+ "node": ">=10"
},
"funding": {
"type": "github",
"url": "https://github.com/sponsors/gregberge"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
}
},
"node_modules/@svgr/babel-plugin-transform-react-native-svg": {
- "version": "8.1.0",
- "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-8.1.0.tgz",
- "integrity": "sha512-Tx8T58CHo+7nwJ+EhUwx3LfdNSG9R2OKfaIXXs5soiy5HtgoAEkDay9LIimLOcG8dJQH1wPZp/cnAv6S9CrR1Q==",
+ "version": "5.4.0",
+ "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-5.4.0.tgz",
+ "integrity": "sha512-3eYP/SaopZ41GHwXma7Rmxcv9uRslRDTY1estspeB1w1ueZWd/tPlMfEOoccYpEMZU3jD4OU7YitnXcF5hLW2Q==",
"dev": true,
"license": "MIT",
"engines": {
- "node": ">=14"
+ "node": ">=10"
},
"funding": {
"type": "github",
"url": "https://github.com/sponsors/gregberge"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
}
},
"node_modules/@svgr/babel-plugin-transform-svg-component": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-8.0.0.tgz",
- "integrity": "sha512-DFx8xa3cZXTdb/k3kfPeaixecQLgKh5NVBMwD0AQxOzcZawK4oo1Jh9LbrcACUivsCA7TLG8eeWgrDXjTMhRmw==",
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-5.5.0.tgz",
+ "integrity": "sha512-q4jSH1UUvbrsOtlo/tKcgSeiCHRSBdXoIoqX1pgcKK/aU3JD27wmMKwGtpB8qRYUYoyXvfGxUVKchLuR5pB3rQ==",
"dev": true,
"license": "MIT",
"engines": {
- "node": ">=12"
+ "node": ">=10"
},
"funding": {
"type": "github",
"url": "https://github.com/sponsors/gregberge"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
}
},
"node_modules/@svgr/babel-preset": {
- "version": "8.1.0",
- "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-8.1.0.tgz",
- "integrity": "sha512-7EYDbHE7MxHpv4sxvnVPngw5fuR6pw79SkcrILHJ/iMpuKySNCl5W1qcwPEpU+LgyRXOaAFgH0KhwD18wwg6ug==",
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-5.5.0.tgz",
+ "integrity": "sha512-4FiXBjvQ+z2j7yASeGPEi8VD/5rrGQk4Xrq3EdJmoZgz/tpqChpo5hgXDvmEauwtvOc52q8ghhZK4Oy7qph4ig==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@svgr/babel-plugin-add-jsx-attribute": "8.0.0",
- "@svgr/babel-plugin-remove-jsx-attribute": "8.0.0",
- "@svgr/babel-plugin-remove-jsx-empty-expression": "8.0.0",
- "@svgr/babel-plugin-replace-jsx-attribute-value": "8.0.0",
- "@svgr/babel-plugin-svg-dynamic-title": "8.0.0",
- "@svgr/babel-plugin-svg-em-dimensions": "8.0.0",
- "@svgr/babel-plugin-transform-react-native-svg": "8.1.0",
- "@svgr/babel-plugin-transform-svg-component": "8.0.0"
+ "@svgr/babel-plugin-add-jsx-attribute": "^5.4.0",
+ "@svgr/babel-plugin-remove-jsx-attribute": "^5.4.0",
+ "@svgr/babel-plugin-remove-jsx-empty-expression": "^5.0.1",
+ "@svgr/babel-plugin-replace-jsx-attribute-value": "^5.0.1",
+ "@svgr/babel-plugin-svg-dynamic-title": "^5.4.0",
+ "@svgr/babel-plugin-svg-em-dimensions": "^5.4.0",
+ "@svgr/babel-plugin-transform-react-native-svg": "^5.4.0",
+ "@svgr/babel-plugin-transform-svg-component": "^5.5.0"
},
"engines": {
- "node": ">=14"
+ "node": ">=10"
},
"funding": {
"type": "github",
"url": "https://github.com/sponsors/gregberge"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
}
},
"node_modules/@svgr/core": {
- "version": "8.1.0",
- "resolved": "https://registry.npmjs.org/@svgr/core/-/core-8.1.0.tgz",
- "integrity": "sha512-8QqtOQT5ACVlmsvKOJNEaWmRPmcojMOzCz4Hs2BGG/toAp/K38LcsMRyLp349glq5AzJbCEeimEoxaX6v/fLrA==",
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/@svgr/core/-/core-5.5.0.tgz",
+ "integrity": "sha512-q52VOcsJPvV3jO1wkPtzTuKlvX7Y3xIcWRpCMtBF3MrteZJtBfQw/+u0B1BHy5ColpQc1/YVTrPEtSYIMNZlrQ==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
- "@babel/core": "^7.21.3",
- "@svgr/babel-preset": "8.1.0",
+ "@svgr/plugin-jsx": "^5.5.0",
"camelcase": "^6.2.0",
- "cosmiconfig": "^8.1.3",
- "snake-case": "^3.0.4"
+ "cosmiconfig": "^7.0.0"
},
"engines": {
- "node": ">=14"
+ "node": ">=10"
},
"funding": {
"type": "github",
@@ -4708,17 +3269,16 @@
}
},
"node_modules/@svgr/hast-util-to-babel-ast": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-8.0.0.tgz",
- "integrity": "sha512-EbDKwO9GpfWP4jN9sGdYwPBU0kdomaPIL2Eu4YwmgP+sJeXT+L7bMwJUBnhzfH8Q2qMBqZ4fJwpCyYsAN3mt2Q==",
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-5.5.0.tgz",
+ "integrity": "sha512-cAaR/CAiZRB8GP32N+1jocovUtvlj0+e65TB50/6Lcime+EA49m/8l+P2ko+XPJ4dw3xaPS3jOL4F2X4KWxoeQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/types": "^7.21.3",
- "entities": "^4.4.0"
+ "@babel/types": "^7.12.6"
},
"engines": {
- "node": ">=14"
+ "node": ">=10"
},
"funding": {
"type": "github",
@@ -4726,100 +3286,76 @@
}
},
"node_modules/@svgr/plugin-jsx": {
- "version": "8.1.0",
- "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-8.1.0.tgz",
- "integrity": "sha512-0xiIyBsLlr8quN+WyuxooNW9RJ0Dpr8uOnH/xrCVO8GLUcwHISwj1AG0k+LFzteTkAA0GbX0kj9q6Dk70PTiPA==",
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-5.5.0.tgz",
+ "integrity": "sha512-V/wVh33j12hGh05IDg8GpIUXbjAPnTdPTKuP4VNLggnwaHMPNQNae2pRnyTAILWCQdz5GyMqtO488g7CKM8CBA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/core": "^7.21.3",
- "@svgr/babel-preset": "8.1.0",
- "@svgr/hast-util-to-babel-ast": "8.0.0",
- "svg-parser": "^2.0.4"
+ "@babel/core": "^7.12.3",
+ "@svgr/babel-preset": "^5.5.0",
+ "@svgr/hast-util-to-babel-ast": "^5.5.0",
+ "svg-parser": "^2.0.2"
},
"engines": {
- "node": ">=14"
+ "node": ">=10"
},
"funding": {
"type": "github",
"url": "https://github.com/sponsors/gregberge"
- },
- "peerDependencies": {
- "@svgr/core": "*"
}
},
"node_modules/@svgr/plugin-svgo": {
- "version": "8.1.0",
- "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-8.1.0.tgz",
- "integrity": "sha512-Ywtl837OGO9pTLIN/onoWLmDQ4zFUycI1g76vuKGEz6evR/ZTJlJuz3G/fIkb6OVBJ2g0o6CGJzaEjfmEo3AHA==",
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-5.5.0.tgz",
+ "integrity": "sha512-r5swKk46GuQl4RrVejVwpeeJaydoxkdwkM1mBKOgJLBUJPGaLci6ylg/IjhrRsREKDkr4kbMWdgOtbXEh0fyLQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "cosmiconfig": "^8.1.3",
- "deepmerge": "^4.3.1",
- "svgo": "^3.0.2"
+ "cosmiconfig": "^7.0.0",
+ "deepmerge": "^4.2.2",
+ "svgo": "^1.2.2"
},
"engines": {
- "node": ">=14"
+ "node": ">=10"
},
"funding": {
"type": "github",
"url": "https://github.com/sponsors/gregberge"
- },
- "peerDependencies": {
- "@svgr/core": "*"
}
},
"node_modules/@svgr/webpack": {
- "version": "8.1.0",
- "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-8.1.0.tgz",
- "integrity": "sha512-LnhVjMWyMQV9ZmeEy26maJk+8HTIbd59cH4F2MJ439k9DqejRisfFNGAPvRYlKETuh9LrImlS8aKsBgKjMA8WA==",
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-5.5.0.tgz",
+ "integrity": "sha512-DOBOK255wfQxguUta2INKkzPj6AIS6iafZYiYmHn6W3pHlycSRRlvWKCfLDG10fXfLWqE3DJHgRUOyJYmARa7g==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/core": "^7.21.3",
- "@babel/plugin-transform-react-constant-elements": "^7.21.3",
- "@babel/preset-env": "^7.20.2",
- "@babel/preset-react": "^7.18.6",
- "@babel/preset-typescript": "^7.21.0",
- "@svgr/core": "8.1.0",
- "@svgr/plugin-jsx": "8.1.0",
- "@svgr/plugin-svgo": "8.1.0"
+ "@babel/core": "^7.12.3",
+ "@babel/plugin-transform-react-constant-elements": "^7.12.1",
+ "@babel/preset-env": "^7.12.1",
+ "@babel/preset-react": "^7.12.5",
+ "@svgr/core": "^5.5.0",
+ "@svgr/plugin-jsx": "^5.5.0",
+ "@svgr/plugin-svgo": "^5.5.0",
+ "loader-utils": "^2.0.0"
},
"engines": {
- "node": ">=14"
+ "node": ">=10"
},
"funding": {
"type": "github",
"url": "https://github.com/sponsors/gregberge"
}
},
- "node_modules/@tootallnate/quickjs-emscripten": {
- "version": "0.23.0",
- "resolved": "https://registry.npmjs.org/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz",
- "integrity": "sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@trysound/sax": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz",
- "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==",
- "dev": true,
- "license": "ISC",
- "engines": {
- "node": ">=10.13.0"
- }
- },
- "node_modules/@tybys/wasm-util": {
- "version": "0.10.1",
- "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.1.tgz",
- "integrity": "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==",
+ "node_modules/@tootallnate/once": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz",
+ "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==",
"dev": true,
"license": "MIT",
- "optional": true,
- "dependencies": {
- "tslib": "^2.4.0"
+ "engines": {
+ "node": ">= 6"
}
},
"node_modules/@types/babel__core": {
@@ -4867,45 +3403,13 @@
"@babel/types": "^7.28.2"
}
},
- "node_modules/@types/body-parser": {
- "version": "1.19.5",
- "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz",
- "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==",
+ "node_modules/@types/cheerio": {
+ "version": "0.22.35",
+ "resolved": "https://registry.npmjs.org/@types/cheerio/-/cheerio-0.22.35.tgz",
+ "integrity": "sha512-yD57BchKRvTV+JD53UZ6PD8KWY5g5rvvMLRnZR3EQBCZXiDT/HR+pKpMzFGlWNhFrXlo7VPZXtKvIEwZkAWOIA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@types/connect": "*",
- "@types/node": "*"
- }
- },
- "node_modules/@types/bonjour": {
- "version": "3.5.13",
- "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.13.tgz",
- "integrity": "sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/node": "*"
- }
- },
- "node_modules/@types/connect": {
- "version": "3.4.38",
- "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz",
- "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/node": "*"
- }
- },
- "node_modules/@types/connect-history-api-fallback": {
- "version": "1.5.4",
- "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz",
- "integrity": "sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/express-serve-static-core": "*",
"@types/node": "*"
}
},
@@ -4915,7 +3419,6 @@
"integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"@types/estree": "*",
"@types/json-schema": "*"
@@ -4933,49 +3436,21 @@
}
},
"node_modules/@types/estree": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz",
- "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==",
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz",
+ "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==",
"dev": true,
"license": "MIT"
},
- "node_modules/@types/express": {
- "version": "4.17.21",
- "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz",
- "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==",
+ "node_modules/@types/glob": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz",
+ "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@types/body-parser": "*",
- "@types/express-serve-static-core": "^4.17.33",
- "@types/qs": "*",
- "@types/serve-static": "*"
- }
- },
- "node_modules/@types/express-serve-static-core": {
- "version": "5.0.6",
- "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.0.6.tgz",
- "integrity": "sha512-3xhRnjJPkULekpSzgtoNYYcTWgEZkp4myc+Saevii5JPnHNvHMRlBSHDbs7Bh1iPPoVTERHEZXyhyLbMEsExsA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/node": "*",
- "@types/qs": "*",
- "@types/range-parser": "*",
- "@types/send": "*"
- }
- },
- "node_modules/@types/express/node_modules/@types/express-serve-static-core": {
- "version": "4.19.6",
- "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.6.tgz",
- "integrity": "sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/node": "*",
- "@types/qs": "*",
- "@types/range-parser": "*",
- "@types/send": "*"
+ "@types/minimatch": "*",
+ "@types/node": "*"
}
},
"node_modules/@types/graceful-fs": {
@@ -4988,23 +3463,6 @@
"@types/node": "*"
}
},
- "node_modules/@types/http-errors": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz",
- "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@types/http-proxy": {
- "version": "1.17.15",
- "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.15.tgz",
- "integrity": "sha512-25g5atgiVNTIv0LBDTg1H74Hvayx0ajtJPLLcYE3whFv75J0pWNtOBzaXJQgDTmrX1bx5U9YC2w/n65BN1HwRQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/node": "*"
- }
- },
"node_modules/@types/istanbul-lib-coverage": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz",
@@ -5032,18 +3490,6 @@
"@types/istanbul-lib-report": "*"
}
},
- "node_modules/@types/jsdom": {
- "version": "21.1.7",
- "resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-21.1.7.tgz",
- "integrity": "sha512-yOriVnggzrnQ3a9OKOCxaVuSug3w3/SbOj5i7VwXWZEyUNl3bLF9V3MfxGbZKuwqJOQyRfqXyROBB1CoZLFWzA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/node": "*",
- "@types/tough-cookie": "*",
- "parse5": "^7.0.0"
- }
- },
"node_modules/@types/json-schema": {
"version": "7.0.15",
"resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
@@ -5058,10 +3504,20 @@
"dev": true,
"license": "MIT"
},
- "node_modules/@types/mime": {
- "version": "1.3.5",
- "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz",
- "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==",
+ "node_modules/@types/mdast": {
+ "version": "3.0.15",
+ "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.15.tgz",
+ "integrity": "sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "^2"
+ }
+ },
+ "node_modules/@types/minimatch": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz",
+ "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==",
"dev": true,
"license": "MIT"
},
@@ -5072,34 +3528,14 @@
"dev": true,
"license": "MIT"
},
- "node_modules/@types/mysql": {
- "version": "2.15.26",
- "resolved": "https://registry.npmjs.org/@types/mysql/-/mysql-2.15.26.tgz",
- "integrity": "sha512-DSLCOXhkvfS5WNNPbfn2KdICAmk8lLc+/PNvnPnF7gOdMZCxopXduqv0OQ13y/yA/zXTSikZZqVgybUxOEg6YQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/node": "*"
- }
- },
"node_modules/@types/node": {
- "version": "22.13.1",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-22.13.1.tgz",
- "integrity": "sha512-jK8uzQlrvXqEU91UxiK5J7pKHyzgnI1Qnl0QDHIgVGuolJhRb9EEl28Cj9b3rGR8B2lhFCtvIm5os8lFnO/1Ew==",
+ "version": "20.19.39",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.39.tgz",
+ "integrity": "sha512-orrrD74MBUyK8jOAD/r0+lfa1I2MO6I+vAkmAWzMYbCcgrN4lCrmK52gRFQq/JRxfYPfonkr4b0jcY7Olqdqbw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "undici-types": "~6.20.0"
- }
- },
- "node_modules/@types/node-forge": {
- "version": "1.3.11",
- "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.11.tgz",
- "integrity": "sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/node": "*"
+ "undici-types": "~6.21.0"
}
},
"node_modules/@types/normalize-package-data": {
@@ -5116,113 +3552,62 @@
"dev": true,
"license": "MIT"
},
- "node_modules/@types/pg": {
- "version": "8.6.1",
- "resolved": "https://registry.npmjs.org/@types/pg/-/pg-8.6.1.tgz",
- "integrity": "sha512-1Kc4oAGzAl7uqUStZCDvaLFqZrW9qWSjXOmBfdgyBP5La7Us6Mg4GBvRlSoaZMhQF/zSj1C8CtKMBkoiT8eL8w==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/node": "*",
- "pg-protocol": "*",
- "pg-types": "^2.2.0"
- }
- },
- "node_modules/@types/pg-pool": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/@types/pg-pool/-/pg-pool-2.0.6.tgz",
- "integrity": "sha512-TaAUE5rq2VQYxab5Ts7WZhKNmuN78Q6PiFonTDdpbx8a1H0M1vhy3rhiMjl+e2iHmogyMw7jZF4FrE6eJUy5HQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/pg": "*"
- }
- },
- "node_modules/@types/qs": {
- "version": "6.9.18",
- "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.18.tgz",
- "integrity": "sha512-kK7dgTYDyGqS+e2Q4aK9X3D7q234CIZ1Bv0q/7Z5IwRDoADNU81xXJK/YVyLbLTZCoIwUoDoffFeF+p/eIklAA==",
+ "node_modules/@types/prettier": {
+ "version": "2.7.3",
+ "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.3.tgz",
+ "integrity": "sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==",
"dev": true,
"license": "MIT"
},
- "node_modules/@types/range-parser": {
- "version": "1.2.7",
- "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz",
- "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==",
+ "node_modules/@types/prop-types": {
+ "version": "15.7.15",
+ "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.15.tgz",
+ "integrity": "sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==",
"dev": true,
"license": "MIT"
},
- "node_modules/@types/retry": {
- "version": "0.12.0",
- "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz",
- "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==",
+ "node_modules/@types/q": {
+ "version": "1.5.8",
+ "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.8.tgz",
+ "integrity": "sha512-hroOstUScF6zhIi+5+x0dzqrHA1EJi+Irri6b1fxolMTqqHIV/Cg77EtnQcZqZCu8hR3mX2BzIxN4/GzI68Kfw==",
"dev": true,
"license": "MIT"
},
- "node_modules/@types/semver": {
- "version": "7.7.1",
- "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.7.1.tgz",
- "integrity": "sha512-FmgJfu+MOcQ370SD0ev7EI8TlCAfKYU+B4m5T3yXc1CiRN94g/SZPtsCkk506aUDtlMnFZvasDwHHUcZUEaYuA==",
+ "node_modules/@types/react": {
+ "version": "17.0.91",
+ "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.91.tgz",
+ "integrity": "sha512-xauZca6qMeCU3Moy0KxCM9jtf1vyk6qRYK39Ryf3afUqwgNUjRIGoDdS9BcGWgAMGSg1hvP4XcmlYrM66PtqeA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/prop-types": "*",
+ "@types/scheduler": "^0.16",
+ "csstype": "^3.2.2"
+ }
+ },
+ "node_modules/@types/react-dom": {
+ "version": "17.0.26",
+ "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-17.0.26.tgz",
+ "integrity": "sha512-Z+2VcYXJwOqQ79HreLU/1fyQ88eXSSFh6I3JdrEHQIfYSI0kCQpTGvOrbE6jFGGYXKsHuwY9tBa/w5Uo6KzrEg==",
+ "dev": true,
+ "license": "MIT",
+ "peerDependencies": {
+ "@types/react": "^17.0.0"
+ }
+ },
+ "node_modules/@types/scheduler": {
+ "version": "0.16.8",
+ "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.8.tgz",
+ "integrity": "sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==",
"dev": true,
"license": "MIT"
},
- "node_modules/@types/send": {
- "version": "0.17.4",
- "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz",
- "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/mime": "^1",
- "@types/node": "*"
- }
- },
- "node_modules/@types/serve-index": {
- "version": "1.9.4",
- "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.4.tgz",
- "integrity": "sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/express": "*"
- }
- },
- "node_modules/@types/serve-static": {
- "version": "1.15.7",
- "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz",
- "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/http-errors": "*",
- "@types/node": "*",
- "@types/send": "*"
- }
- },
- "node_modules/@types/shimmer": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/@types/shimmer/-/shimmer-1.2.0.tgz",
- "integrity": "sha512-UE7oxhQLLd9gub6JKIAhDq06T0F6FnztwMNRvYgjeQSBeMc1ZG/tA47EwfduvkuQS8apbkM/lpLpWsaCeYsXVg==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@types/sockjs": {
- "version": "0.3.36",
- "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.36.tgz",
- "integrity": "sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/node": "*"
- }
- },
"node_modules/@types/source-list-map": {
"version": "0.1.6",
"resolved": "https://registry.npmjs.org/@types/source-list-map/-/source-list-map-0.1.6.tgz",
"integrity": "sha512-5JcVt1u5HDmlXkwOD2nslZVllBBc7HDuOICfiZah2Z0is8M8g+ddAEawbmd3VjedfDHBzxCaXLs07QEmb7y54g==",
"dev": true,
- "license": "MIT",
- "optional": true
+ "license": "MIT"
},
"node_modules/@types/stack-utils": {
"version": "2.0.3",
@@ -5236,24 +3621,6 @@
"resolved": "https://registry.npmjs.org/@types/tapable/-/tapable-1.0.12.tgz",
"integrity": "sha512-bTHG8fcxEqv1M9+TD14P8ok8hjxoOCkfKc8XXLaaD05kI7ohpeI956jtDOD3XHKBQrlyPughUtzm1jtVhHpA5Q==",
"dev": true,
- "license": "MIT",
- "optional": true
- },
- "node_modules/@types/tedious": {
- "version": "4.0.14",
- "resolved": "https://registry.npmjs.org/@types/tedious/-/tedious-4.0.14.tgz",
- "integrity": "sha512-KHPsfX/FoVbUGbyYvk1q9MMQHLPeRZhRJZdO45Q4YjvFkv4hMNghCWTvy7rdKessBsmtz4euWCWAB6/tVpI1Iw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/node": "*"
- }
- },
- "node_modules/@types/tough-cookie": {
- "version": "4.0.5",
- "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.5.tgz",
- "integrity": "sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==",
- "dev": true,
"license": "MIT"
},
"node_modules/@types/uglify-js": {
@@ -5262,21 +3629,16 @@
"integrity": "sha512-TU+fZFBTBcXj/GpDpDaBmgWk/gn96kMZ+uocaFUlV2f8a6WdMzzI44QBCmGcCiYR0Y6ZlNRiyUyKKt5nl/lbzQ==",
"dev": true,
"license": "MIT",
- "optional": true,
"dependencies": {
"source-map": "^0.6.1"
}
},
- "node_modules/@types/uglify-js/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==",
+ "node_modules/@types/unist": {
+ "version": "2.0.11",
+ "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz",
+ "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==",
"dev": true,
- "license": "BSD-3-Clause",
- "optional": true,
- "engines": {
- "node": ">=0.10.0"
- }
+ "license": "MIT"
},
"node_modules/@types/webpack": {
"version": "4.41.40",
@@ -5284,7 +3646,6 @@
"integrity": "sha512-u6kMFSBM9HcoTpUXnL6mt2HSzftqb3JgYV6oxIgL2dl6sX6aCa5k6SOkzv5DuZjBTPUE/dJltKtwwuqrkZHpfw==",
"dev": true,
"license": "MIT",
- "optional": true,
"dependencies": {
"@types/node": "*",
"@types/tapable": "^1",
@@ -5300,38 +3661,26 @@
"integrity": "sha512-4nZOdMwSPHZ4pTEZzSp0AsTM4K7Qmu40UKW4tJDiOVs20UzYF9l+qUe4s0ftfN0pin06n+5cWWDJXH+sbhAiDw==",
"dev": true,
"license": "MIT",
- "optional": true,
"dependencies": {
"@types/node": "*",
"@types/source-list-map": "*",
"source-map": "^0.7.3"
}
},
- "node_modules/@types/webpack/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==",
+ "node_modules/@types/webpack-sources/node_modules/source-map": {
+ "version": "0.7.6",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz",
+ "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==",
"dev": true,
"license": "BSD-3-Clause",
- "optional": true,
"engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/@types/ws": {
- "version": "8.5.14",
- "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.14.tgz",
- "integrity": "sha512-bd/YFLW+URhBzMXurx7lWByOu+xzU9+kb3RboOteXYDfW+tr+JZa99OyNmPINEGB/ahzKrEuc8rcv4gnpJmxTw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/node": "*"
+ "node": ">= 12"
}
},
"node_modules/@types/yargs": {
- "version": "17.0.33",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz",
- "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==",
+ "version": "15.0.20",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.20.tgz",
+ "integrity": "sha512-KIkX+/GgfFitlASYCGoSF+T4XRXhOubJLhkLVtSfsRTe9jWMmuM2g28zQ41BtPTG7TRBb2xHW+LCNVE9QR/vsg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -5357,34 +3706,31 @@
}
},
"node_modules/@typescript-eslint/eslint-plugin": {
- "version": "6.21.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.21.0.tgz",
- "integrity": "sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==",
+ "version": "4.33.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.33.0.tgz",
+ "integrity": "sha512-aINiAxGVdOl1eJyVjaWn/YcVAq4Gi/Yo35qHGCnqbWVz61g39D0h23veY/MA0rFFGfxK7TySg2uwDeNv+JgVpg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@eslint-community/regexpp": "^4.5.1",
- "@typescript-eslint/scope-manager": "6.21.0",
- "@typescript-eslint/type-utils": "6.21.0",
- "@typescript-eslint/utils": "6.21.0",
- "@typescript-eslint/visitor-keys": "6.21.0",
- "debug": "^4.3.4",
- "graphemer": "^1.4.0",
- "ignore": "^5.2.4",
- "natural-compare": "^1.4.0",
- "semver": "^7.5.4",
- "ts-api-utils": "^1.0.1"
+ "@typescript-eslint/experimental-utils": "4.33.0",
+ "@typescript-eslint/scope-manager": "4.33.0",
+ "debug": "^4.3.1",
+ "functional-red-black-tree": "^1.0.1",
+ "ignore": "^5.1.8",
+ "regexpp": "^3.1.0",
+ "semver": "^7.3.5",
+ "tsutils": "^3.21.0"
},
"engines": {
- "node": "^16.0.0 || >=18.0.0"
+ "node": "^10.12.0 || >=12.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/typescript-eslint"
},
"peerDependencies": {
- "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha",
- "eslint": "^7.0.0 || ^8.0.0"
+ "@typescript-eslint/parser": "^4.0.0",
+ "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0"
},
"peerDependenciesMeta": {
"typescript": {
@@ -5393,9 +3739,9 @@
}
},
"node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": {
- "version": "7.7.3",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz",
- "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==",
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz",
+ "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==",
"dev": true,
"license": "ISC",
"bin": {
@@ -5405,29 +3751,52 @@
"node": ">=10"
}
},
- "node_modules/@typescript-eslint/parser": {
- "version": "6.21.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.21.0.tgz",
- "integrity": "sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==",
+ "node_modules/@typescript-eslint/experimental-utils": {
+ "version": "4.33.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.33.0.tgz",
+ "integrity": "sha512-zeQjOoES5JFjTnAhI5QY7ZviczMzDptls15GFsI6jyUOq0kOf9+WonkhtlIhh0RgHRnqj5gdNxW5j1EvAyYg6Q==",
"dev": true,
- "license": "BSD-2-Clause",
- "peer": true,
+ "license": "MIT",
"dependencies": {
- "@typescript-eslint/scope-manager": "6.21.0",
- "@typescript-eslint/types": "6.21.0",
- "@typescript-eslint/typescript-estree": "6.21.0",
- "@typescript-eslint/visitor-keys": "6.21.0",
- "debug": "^4.3.4"
+ "@types/json-schema": "^7.0.7",
+ "@typescript-eslint/scope-manager": "4.33.0",
+ "@typescript-eslint/types": "4.33.0",
+ "@typescript-eslint/typescript-estree": "4.33.0",
+ "eslint-scope": "^5.1.1",
+ "eslint-utils": "^3.0.0"
},
"engines": {
- "node": "^16.0.0 || >=18.0.0"
+ "node": "^10.12.0 || >=12.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/typescript-eslint"
},
"peerDependencies": {
- "eslint": "^7.0.0 || ^8.0.0"
+ "eslint": "*"
+ }
+ },
+ "node_modules/@typescript-eslint/parser": {
+ "version": "4.33.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.33.0.tgz",
+ "integrity": "sha512-ZohdsbXadjGBSK0/r+d87X0SBmKzOq4/S5nzK6SBgJspFo9/CUDJ7hjayuze+JK7CZQLDMroqytp7pOcFKTxZA==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "@typescript-eslint/scope-manager": "4.33.0",
+ "@typescript-eslint/types": "4.33.0",
+ "@typescript-eslint/typescript-estree": "4.33.0",
+ "debug": "^4.3.1"
+ },
+ "engines": {
+ "node": "^10.12.0 || >=12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0"
},
"peerDependenciesMeta": {
"typescript": {
@@ -5436,59 +3805,31 @@
}
},
"node_modules/@typescript-eslint/scope-manager": {
- "version": "6.21.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz",
- "integrity": "sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==",
+ "version": "4.33.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.33.0.tgz",
+ "integrity": "sha512-5IfJHpgTsTZuONKbODctL4kKuQje/bzBRkwHE8UOZ4f89Zeddg+EGZs8PD8NcN4LdM3ygHWYB3ukPAYjvl/qbQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/types": "6.21.0",
- "@typescript-eslint/visitor-keys": "6.21.0"
+ "@typescript-eslint/types": "4.33.0",
+ "@typescript-eslint/visitor-keys": "4.33.0"
},
"engines": {
- "node": "^16.0.0 || >=18.0.0"
+ "node": "^8.10.0 || ^10.13.0 || >=11.10.1"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/typescript-eslint"
}
},
- "node_modules/@typescript-eslint/type-utils": {
- "version": "6.21.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.21.0.tgz",
- "integrity": "sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@typescript-eslint/typescript-estree": "6.21.0",
- "@typescript-eslint/utils": "6.21.0",
- "debug": "^4.3.4",
- "ts-api-utils": "^1.0.1"
- },
- "engines": {
- "node": "^16.0.0 || >=18.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependencies": {
- "eslint": "^7.0.0 || ^8.0.0"
- },
- "peerDependenciesMeta": {
- "typescript": {
- "optional": true
- }
- }
- },
"node_modules/@typescript-eslint/types": {
- "version": "6.21.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.21.0.tgz",
- "integrity": "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==",
+ "version": "4.33.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.33.0.tgz",
+ "integrity": "sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ==",
"dev": true,
"license": "MIT",
"engines": {
- "node": "^16.0.0 || >=18.0.0"
+ "node": "^8.10.0 || ^10.13.0 || >=11.10.1"
},
"funding": {
"type": "opencollective",
@@ -5496,23 +3837,22 @@
}
},
"node_modules/@typescript-eslint/typescript-estree": {
- "version": "6.21.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz",
- "integrity": "sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==",
+ "version": "4.33.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.33.0.tgz",
+ "integrity": "sha512-rkWRY1MPFzjwnEVHsxGemDzqqddw2QbTJlICPD9p9I9LfsO8fdmfQPOX3uKfUaGRDFJbfrtm/sXhVXN4E+bzCA==",
"dev": true,
"license": "BSD-2-Clause",
"dependencies": {
- "@typescript-eslint/types": "6.21.0",
- "@typescript-eslint/visitor-keys": "6.21.0",
- "debug": "^4.3.4",
- "globby": "^11.1.0",
- "is-glob": "^4.0.3",
- "minimatch": "9.0.3",
- "semver": "^7.5.4",
- "ts-api-utils": "^1.0.1"
+ "@typescript-eslint/types": "4.33.0",
+ "@typescript-eslint/visitor-keys": "4.33.0",
+ "debug": "^4.3.1",
+ "globby": "^11.0.3",
+ "is-glob": "^4.0.1",
+ "semver": "^7.3.5",
+ "tsutils": "^3.21.0"
},
"engines": {
- "node": "^16.0.0 || >=18.0.0"
+ "node": "^10.12.0 || >=12.0.0"
},
"funding": {
"type": "opencollective",
@@ -5525,48 +3865,9 @@
}
},
"node_modules/@typescript-eslint/typescript-estree/node_modules/semver": {
- "version": "7.7.3",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz",
- "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==",
- "dev": true,
- "license": "ISC",
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@typescript-eslint/utils": {
- "version": "6.21.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.21.0.tgz",
- "integrity": "sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@eslint-community/eslint-utils": "^4.4.0",
- "@types/json-schema": "^7.0.12",
- "@types/semver": "^7.5.0",
- "@typescript-eslint/scope-manager": "6.21.0",
- "@typescript-eslint/types": "6.21.0",
- "@typescript-eslint/typescript-estree": "6.21.0",
- "semver": "^7.5.4"
- },
- "engines": {
- "node": "^16.0.0 || >=18.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependencies": {
- "eslint": "^7.0.0 || ^8.0.0"
- }
- },
- "node_modules/@typescript-eslint/utils/node_modules/semver": {
- "version": "7.7.3",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz",
- "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==",
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz",
+ "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==",
"dev": true,
"license": "ISC",
"bin": {
@@ -5577,312 +3878,23 @@
}
},
"node_modules/@typescript-eslint/visitor-keys": {
- "version": "6.21.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz",
- "integrity": "sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==",
+ "version": "4.33.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.33.0.tgz",
+ "integrity": "sha512-uqi/2aSz9g2ftcHWf8uLPJA70rUv6yuMW5Bohw+bwcuzaxQIHaKFZCKGoGXIrc9vkTJ3+0txM73K0Hq3d5wgIg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/types": "6.21.0",
- "eslint-visitor-keys": "^3.4.1"
+ "@typescript-eslint/types": "4.33.0",
+ "eslint-visitor-keys": "^2.0.0"
},
"engines": {
- "node": "^16.0.0 || >=18.0.0"
+ "node": "^8.10.0 || ^10.13.0 || >=11.10.1"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/typescript-eslint"
}
},
- "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": {
- "version": "3.4.3",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
- "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
- "dev": true,
- "license": "Apache-2.0",
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
- },
- "node_modules/@ungap/structured-clone": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz",
- "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/@unrs/resolver-binding-android-arm-eabi": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm-eabi/-/resolver-binding-android-arm-eabi-1.11.1.tgz",
- "integrity": "sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "android"
- ]
- },
- "node_modules/@unrs/resolver-binding-android-arm64": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm64/-/resolver-binding-android-arm64-1.11.1.tgz",
- "integrity": "sha512-lCxkVtb4wp1v+EoN+HjIG9cIIzPkX5OtM03pQYkG+U5O/wL53LC4QbIeazgiKqluGeVEeBlZahHalCaBvU1a2g==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "android"
- ]
- },
- "node_modules/@unrs/resolver-binding-darwin-arm64": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-arm64/-/resolver-binding-darwin-arm64-1.11.1.tgz",
- "integrity": "sha512-gPVA1UjRu1Y/IsB/dQEsp2V1pm44Of6+LWvbLc9SDk1c2KhhDRDBUkQCYVWe6f26uJb3fOK8saWMgtX8IrMk3g==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ]
- },
- "node_modules/@unrs/resolver-binding-darwin-x64": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-x64/-/resolver-binding-darwin-x64-1.11.1.tgz",
- "integrity": "sha512-cFzP7rWKd3lZaCsDze07QX1SC24lO8mPty9vdP+YVa3MGdVgPmFc59317b2ioXtgCMKGiCLxJ4HQs62oz6GfRQ==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ]
- },
- "node_modules/@unrs/resolver-binding-freebsd-x64": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-freebsd-x64/-/resolver-binding-freebsd-x64-1.11.1.tgz",
- "integrity": "sha512-fqtGgak3zX4DCB6PFpsH5+Kmt/8CIi4Bry4rb1ho6Av2QHTREM+47y282Uqiu3ZRF5IQioJQ5qWRV6jduA+iGw==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "freebsd"
- ]
- },
- "node_modules/@unrs/resolver-binding-linux-arm-gnueabihf": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-gnueabihf/-/resolver-binding-linux-arm-gnueabihf-1.11.1.tgz",
- "integrity": "sha512-u92mvlcYtp9MRKmP+ZvMmtPN34+/3lMHlyMj7wXJDeXxuM0Vgzz0+PPJNsro1m3IZPYChIkn944wW8TYgGKFHw==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@unrs/resolver-binding-linux-arm-musleabihf": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-musleabihf/-/resolver-binding-linux-arm-musleabihf-1.11.1.tgz",
- "integrity": "sha512-cINaoY2z7LVCrfHkIcmvj7osTOtm6VVT16b5oQdS4beibX2SYBwgYLmqhBjA1t51CarSaBuX5YNsWLjsqfW5Cw==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@unrs/resolver-binding-linux-arm64-gnu": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-gnu/-/resolver-binding-linux-arm64-gnu-1.11.1.tgz",
- "integrity": "sha512-34gw7PjDGB9JgePJEmhEqBhWvCiiWCuXsL9hYphDF7crW7UgI05gyBAi6MF58uGcMOiOqSJ2ybEeCvHcq0BCmQ==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@unrs/resolver-binding-linux-arm64-musl": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-musl/-/resolver-binding-linux-arm64-musl-1.11.1.tgz",
- "integrity": "sha512-RyMIx6Uf53hhOtJDIamSbTskA99sPHS96wxVE/bJtePJJtpdKGXO1wY90oRdXuYOGOTuqjT8ACccMc4K6QmT3w==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@unrs/resolver-binding-linux-ppc64-gnu": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-ppc64-gnu/-/resolver-binding-linux-ppc64-gnu-1.11.1.tgz",
- "integrity": "sha512-D8Vae74A4/a+mZH0FbOkFJL9DSK2R6TFPC9M+jCWYia/q2einCubX10pecpDiTmkJVUH+y8K3BZClycD8nCShA==",
- "cpu": [
- "ppc64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@unrs/resolver-binding-linux-riscv64-gnu": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-gnu/-/resolver-binding-linux-riscv64-gnu-1.11.1.tgz",
- "integrity": "sha512-frxL4OrzOWVVsOc96+V3aqTIQl1O2TjgExV4EKgRY09AJ9leZpEg8Ak9phadbuX0BA4k8U5qtvMSQQGGmaJqcQ==",
- "cpu": [
- "riscv64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@unrs/resolver-binding-linux-riscv64-musl": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-musl/-/resolver-binding-linux-riscv64-musl-1.11.1.tgz",
- "integrity": "sha512-mJ5vuDaIZ+l/acv01sHoXfpnyrNKOk/3aDoEdLO/Xtn9HuZlDD6jKxHlkN8ZhWyLJsRBxfv9GYM2utQ1SChKew==",
- "cpu": [
- "riscv64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@unrs/resolver-binding-linux-s390x-gnu": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-s390x-gnu/-/resolver-binding-linux-s390x-gnu-1.11.1.tgz",
- "integrity": "sha512-kELo8ebBVtb9sA7rMe1Cph4QHreByhaZ2QEADd9NzIQsYNQpt9UkM9iqr2lhGr5afh885d/cB5QeTXSbZHTYPg==",
- "cpu": [
- "s390x"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@unrs/resolver-binding-linux-x64-gnu": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-gnu/-/resolver-binding-linux-x64-gnu-1.11.1.tgz",
- "integrity": "sha512-C3ZAHugKgovV5YvAMsxhq0gtXuwESUKc5MhEtjBpLoHPLYM+iuwSj3lflFwK3DPm68660rZ7G8BMcwSro7hD5w==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@unrs/resolver-binding-linux-x64-musl": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-musl/-/resolver-binding-linux-x64-musl-1.11.1.tgz",
- "integrity": "sha512-rV0YSoyhK2nZ4vEswT/QwqzqQXw5I6CjoaYMOX0TqBlWhojUf8P94mvI7nuJTeaCkkds3QE4+zS8Ko+GdXuZtA==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@unrs/resolver-binding-wasm32-wasi": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-wasm32-wasi/-/resolver-binding-wasm32-wasi-1.11.1.tgz",
- "integrity": "sha512-5u4RkfxJm+Ng7IWgkzi3qrFOvLvQYnPBmjmZQ8+szTK/b31fQCnleNl1GgEt7nIsZRIf5PLhPwT0WM+q45x/UQ==",
- "cpu": [
- "wasm32"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "@napi-rs/wasm-runtime": "^0.2.11"
- },
- "engines": {
- "node": ">=14.0.0"
- }
- },
- "node_modules/@unrs/resolver-binding-win32-arm64-msvc": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-arm64-msvc/-/resolver-binding-win32-arm64-msvc-1.11.1.tgz",
- "integrity": "sha512-nRcz5Il4ln0kMhfL8S3hLkxI85BXs3o8EYoattsJNdsX4YUU89iOkVn7g0VHSRxFuVMdM4Q1jEpIId1Ihim/Uw==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ]
- },
- "node_modules/@unrs/resolver-binding-win32-ia32-msvc": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-ia32-msvc/-/resolver-binding-win32-ia32-msvc-1.11.1.tgz",
- "integrity": "sha512-DCEI6t5i1NmAZp6pFonpD5m7i6aFrpofcp4LA2i8IIq60Jyo28hamKBxNrZcyOwVOZkgsRp9O2sXWBWP8MnvIQ==",
- "cpu": [
- "ia32"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ]
- },
- "node_modules/@unrs/resolver-binding-win32-x64-msvc": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-x64-msvc/-/resolver-binding-win32-x64-msvc-1.11.1.tgz",
- "integrity": "sha512-lrW200hZdbfRtztbygyaq/6jP6AKE8qQN2KvPcJ+x7wiD038YtnYtZ82IMNJ69GJibV7bwL3y9FgK+5w/pYt6g==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ]
- },
"node_modules/@webassemblyjs/ast": {
"version": "1.14.1",
"resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz",
@@ -6045,45 +4057,37 @@
}
},
"node_modules/@webpack-cli/configtest": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-2.1.1.tgz",
- "integrity": "sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw==",
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.2.0.tgz",
+ "integrity": "sha512-4FB8Tj6xyVkyqjj1OaTqCjXYULB9FMkqQ8yGrZjRDrYh0nOE+7Lhs45WioWQQMV+ceFlE368Ukhe6xdvJM9Egg==",
"dev": true,
"license": "MIT",
- "engines": {
- "node": ">=14.15.0"
- },
"peerDependencies": {
- "webpack": "5.x.x",
- "webpack-cli": "5.x.x"
+ "webpack": "4.x.x || 5.x.x",
+ "webpack-cli": "4.x.x"
}
},
"node_modules/@webpack-cli/info": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-2.0.2.tgz",
- "integrity": "sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A==",
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.5.0.tgz",
+ "integrity": "sha512-e8tSXZpw2hPl2uMJY6fsMswaok5FdlGNRTktvFk2sD8RjH0hE2+XistawJx1vmKteh4NmGmNUrp+Tb2w+udPcQ==",
"dev": true,
"license": "MIT",
- "engines": {
- "node": ">=14.15.0"
+ "dependencies": {
+ "envinfo": "^7.7.3"
},
"peerDependencies": {
- "webpack": "5.x.x",
- "webpack-cli": "5.x.x"
+ "webpack-cli": "4.x.x"
}
},
"node_modules/@webpack-cli/serve": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-2.0.5.tgz",
- "integrity": "sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ==",
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.7.0.tgz",
+ "integrity": "sha512-oxnCNGj88fL+xzV+dacXs44HcDwf1ovs3AuEzvP7mqXw7fQntqIhQ1BRmynh4qEKQSSSRSWVyXRjmTbZIX9V2Q==",
"dev": true,
"license": "MIT",
- "engines": {
- "node": ">=14.15.0"
- },
"peerDependencies": {
- "webpack": "5.x.x",
- "webpack-cli": "5.x.x"
+ "webpack-cli": "4.x.x"
},
"peerDependenciesMeta": {
"webpack-dev-server": {
@@ -6091,331 +4095,394 @@
}
}
},
+ "node_modules/@wojtekmaj/enzyme-adapter-react-17": {
+ "version": "0.6.7",
+ "resolved": "https://registry.npmjs.org/@wojtekmaj/enzyme-adapter-react-17/-/enzyme-adapter-react-17-0.6.7.tgz",
+ "integrity": "sha512-B+byiwi/T1bx5hcj9wc0fUL5Hlb5giSXJzcnEfJVl2j6dGV2NJfcxDBYX0WWwIxlzNiFz8kAvlkFWI2y/nscZQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@wojtekmaj/enzyme-adapter-utils": "^0.1.4",
+ "enzyme-shallow-equal": "^1.0.0",
+ "has": "^1.0.0",
+ "prop-types": "^15.7.0",
+ "react-is": "^17.0.0",
+ "react-test-renderer": "^17.0.0"
+ },
+ "peerDependencies": {
+ "enzyme": "^3.0.0",
+ "react": "^17.0.0-0",
+ "react-dom": "^17.0.0-0"
+ }
+ },
+ "node_modules/@wojtekmaj/enzyme-adapter-utils": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/@wojtekmaj/enzyme-adapter-utils/-/enzyme-adapter-utils-0.1.4.tgz",
+ "integrity": "sha512-ARGIQSIIv3oBia1m5Ihn1VU0FGmft6KPe39SBKTb8p7LSXO23YI4kNtc4M/cKoIY7P+IYdrZcgMObvedyjoSQA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "function.prototype.name": "^1.1.0",
+ "has": "^1.0.0",
+ "object.fromentries": "^2.0.0",
+ "prop-types": "^15.7.0"
+ },
+ "peerDependencies": {
+ "react": "^17.0.0-0"
+ }
+ },
+ "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,
+ "license": "GPL-2.0-or-later",
+ "engines": {
+ "node": ">=12"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.12.9"
+ }
+ },
"node_modules/@wordpress/babel-preset-default": {
- "version": "8.37.0",
- "resolved": "https://registry.npmjs.org/@wordpress/babel-preset-default/-/babel-preset-default-8.37.0.tgz",
- "integrity": "sha512-tPLa2YFAau+gT2zKovRK5DRiJchsKgNFiuElIWeKYkLytkyws9fQAgjF/AkDFFxRMdDocNfCscpKWhp79+tIFA==",
+ "version": "6.17.0",
+ "resolved": "https://registry.npmjs.org/@wordpress/babel-preset-default/-/babel-preset-default-6.17.0.tgz",
+ "integrity": "sha512-mBB1KHWT2vN+maKIPYLQSxhhAzW6CNwYiJNRSNaNBALie9TULe7etrnwoZ1eqPVsuYvBlXB4XKcPaSm3/FW+qQ==",
"dev": true,
"license": "GPL-2.0-or-later",
"dependencies": {
- "@babel/core": "7.25.7",
- "@babel/plugin-syntax-import-attributes": "7.26.0",
- "@babel/plugin-transform-react-jsx": "7.25.7",
- "@babel/plugin-transform-runtime": "7.25.7",
- "@babel/preset-env": "7.25.7",
- "@babel/preset-typescript": "7.25.7",
- "@wordpress/browserslist-config": "^6.37.0",
- "@wordpress/warning": "^3.37.0",
- "browserslist": "^4.21.10",
- "core-js": "^3.31.0",
- "react": "^18.3.0"
+ "@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.13.0",
+ "@wordpress/warning": "^2.15.0",
+ "browserslist": "^4.17.6",
+ "core-js": "^3.19.1"
},
"engines": {
- "node": ">=18.12.0",
- "npm": ">=8.19.2"
- }
- },
- "node_modules/@wordpress/babel-preset-default/node_modules/@babel/plugin-transform-react-jsx": {
- "version": "7.25.7",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.25.7.tgz",
- "integrity": "sha512-vILAg5nwGlR9EXE8JIOX4NHXd49lrYbN8hnjffDtoULwpL9hUx/N55nqh2qd0q6FyNDfjl9V79ecKGvFbcSA0Q==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-annotate-as-pure": "^7.25.7",
- "@babel/helper-module-imports": "^7.25.7",
- "@babel/helper-plugin-utils": "^7.25.7",
- "@babel/plugin-syntax-jsx": "^7.25.7",
- "@babel/types": "^7.25.7"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@wordpress/babel-preset-default/node_modules/@babel/preset-env": {
- "version": "7.25.7",
- "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.25.7.tgz",
- "integrity": "sha512-Gibz4OUdyNqqLj+7OAvBZxOD7CklCtMA5/j0JgUEwOnaRULsPDXmic2iKxL2DX2vQduPR5wH2hjZas/Vr/Oc0g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/compat-data": "^7.25.7",
- "@babel/helper-compilation-targets": "^7.25.7",
- "@babel/helper-plugin-utils": "^7.25.7",
- "@babel/helper-validator-option": "^7.25.7",
- "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.7",
- "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.7",
- "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.25.7",
- "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.25.7",
- "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.25.7",
- "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2",
- "@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.25.7",
- "@babel/plugin-syntax-import-attributes": "^7.25.7",
- "@babel/plugin-syntax-import-meta": "^7.10.4",
- "@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-syntax-unicode-sets-regex": "^7.18.6",
- "@babel/plugin-transform-arrow-functions": "^7.25.7",
- "@babel/plugin-transform-async-generator-functions": "^7.25.7",
- "@babel/plugin-transform-async-to-generator": "^7.25.7",
- "@babel/plugin-transform-block-scoped-functions": "^7.25.7",
- "@babel/plugin-transform-block-scoping": "^7.25.7",
- "@babel/plugin-transform-class-properties": "^7.25.7",
- "@babel/plugin-transform-class-static-block": "^7.25.7",
- "@babel/plugin-transform-classes": "^7.25.7",
- "@babel/plugin-transform-computed-properties": "^7.25.7",
- "@babel/plugin-transform-destructuring": "^7.25.7",
- "@babel/plugin-transform-dotall-regex": "^7.25.7",
- "@babel/plugin-transform-duplicate-keys": "^7.25.7",
- "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.25.7",
- "@babel/plugin-transform-dynamic-import": "^7.25.7",
- "@babel/plugin-transform-exponentiation-operator": "^7.25.7",
- "@babel/plugin-transform-export-namespace-from": "^7.25.7",
- "@babel/plugin-transform-for-of": "^7.25.7",
- "@babel/plugin-transform-function-name": "^7.25.7",
- "@babel/plugin-transform-json-strings": "^7.25.7",
- "@babel/plugin-transform-literals": "^7.25.7",
- "@babel/plugin-transform-logical-assignment-operators": "^7.25.7",
- "@babel/plugin-transform-member-expression-literals": "^7.25.7",
- "@babel/plugin-transform-modules-amd": "^7.25.7",
- "@babel/plugin-transform-modules-commonjs": "^7.25.7",
- "@babel/plugin-transform-modules-systemjs": "^7.25.7",
- "@babel/plugin-transform-modules-umd": "^7.25.7",
- "@babel/plugin-transform-named-capturing-groups-regex": "^7.25.7",
- "@babel/plugin-transform-new-target": "^7.25.7",
- "@babel/plugin-transform-nullish-coalescing-operator": "^7.25.7",
- "@babel/plugin-transform-numeric-separator": "^7.25.7",
- "@babel/plugin-transform-object-rest-spread": "^7.25.7",
- "@babel/plugin-transform-object-super": "^7.25.7",
- "@babel/plugin-transform-optional-catch-binding": "^7.25.7",
- "@babel/plugin-transform-optional-chaining": "^7.25.7",
- "@babel/plugin-transform-parameters": "^7.25.7",
- "@babel/plugin-transform-private-methods": "^7.25.7",
- "@babel/plugin-transform-private-property-in-object": "^7.25.7",
- "@babel/plugin-transform-property-literals": "^7.25.7",
- "@babel/plugin-transform-regenerator": "^7.25.7",
- "@babel/plugin-transform-reserved-words": "^7.25.7",
- "@babel/plugin-transform-shorthand-properties": "^7.25.7",
- "@babel/plugin-transform-spread": "^7.25.7",
- "@babel/plugin-transform-sticky-regex": "^7.25.7",
- "@babel/plugin-transform-template-literals": "^7.25.7",
- "@babel/plugin-transform-typeof-symbol": "^7.25.7",
- "@babel/plugin-transform-unicode-escapes": "^7.25.7",
- "@babel/plugin-transform-unicode-property-regex": "^7.25.7",
- "@babel/plugin-transform-unicode-regex": "^7.25.7",
- "@babel/plugin-transform-unicode-sets-regex": "^7.25.7",
- "@babel/preset-modules": "0.1.6-no-external-plugins",
- "babel-plugin-polyfill-corejs2": "^0.4.10",
- "babel-plugin-polyfill-corejs3": "^0.10.6",
- "babel-plugin-polyfill-regenerator": "^0.6.1",
- "core-js-compat": "^3.38.1",
- "semver": "^6.3.1"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@wordpress/babel-preset-default/node_modules/@babel/preset-env/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,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.8.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@wordpress/babel-preset-default/node_modules/@babel/preset-env/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,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.8.3"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@wordpress/babel-preset-default/node_modules/@babel/preset-typescript": {
- "version": "7.25.7",
- "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.25.7.tgz",
- "integrity": "sha512-rkkpaXJZOFN45Fb+Gki0c+KMIglk4+zZXOoMJuyEK8y8Kkc8Jd3BDmP7qPsz0zQMJj+UD7EprF+AqAXcILnexw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.25.7",
- "@babel/helper-validator-option": "^7.25.7",
- "@babel/plugin-syntax-jsx": "^7.25.7",
- "@babel/plugin-transform-modules-commonjs": "^7.25.7",
- "@babel/plugin-transform-typescript": "^7.25.7"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
+ "node": ">=12"
}
},
"node_modules/@wordpress/base-styles": {
- "version": "6.13.0",
- "resolved": "https://registry.npmjs.org/@wordpress/base-styles/-/base-styles-6.13.0.tgz",
- "integrity": "sha512-+APLd5GqzzJ/atVVs3LGPcCRRy8mVfVQi1QY+cseNAQbRe4LvsDarLbzkblWEwuksxgUGmVGDC3fDNxrwszJ2A==",
+ "version": "4.49.0",
+ "resolved": "https://registry.npmjs.org/@wordpress/base-styles/-/base-styles-4.49.0.tgz",
+ "integrity": "sha512-yFRYqNtd26ULZ0oAHhCu/IcaA0XHI3E7kRCKajZqUvyRQj7YprXnpD3o0/pnwvF6ZFTXzCX8pXHjUc2TIv97ig==",
"dev": true,
- "license": "GPL-2.0-or-later",
- "engines": {
- "node": ">=18.12.0",
- "npm": ">=8.19.2"
- }
+ "license": "GPL-2.0-or-later"
},
"node_modules/@wordpress/browserslist-config": {
- "version": "6.37.0",
- "resolved": "https://registry.npmjs.org/@wordpress/browserslist-config/-/browserslist-config-6.37.0.tgz",
- "integrity": "sha512-L//FRak9bo+sDLAignC4QkhITHgeFVlL0C4lWI/AM+AIHKGrHT4LOdwwNpYWMkkztW9rxHRptGkF/JDxuCakxQ==",
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/@wordpress/browserslist-config/-/browserslist-config-4.1.3.tgz",
+ "integrity": "sha512-M4WQ0C4zCfMWyCmK40git3rfPdNkRwg5boGjoTL4LSdhrY+rtchFAtfOHS9KovAZ5ZzTB0gyZsCu/QKZlPClog==",
"dev": true,
"license": "GPL-2.0-or-later",
"engines": {
- "node": ">=18.12.0",
- "npm": ">=8.19.2"
+ "node": ">=12"
}
},
"node_modules/@wordpress/dependency-extraction-webpack-plugin": {
- "version": "6.37.0",
- "resolved": "https://registry.npmjs.org/@wordpress/dependency-extraction-webpack-plugin/-/dependency-extraction-webpack-plugin-6.37.0.tgz",
- "integrity": "sha512-N9DTLr07AYV9vo/kFVSKYp/+wg2wBHL4ekDldwx2rGNtOHjoSi1oo+iBmStSaKMRtCQX2Xq8xVFH04+53T0yXA==",
+ "version": "3.7.0",
+ "resolved": "https://registry.npmjs.org/@wordpress/dependency-extraction-webpack-plugin/-/dependency-extraction-webpack-plugin-3.7.0.tgz",
+ "integrity": "sha512-SHyp88D1ICSaRVMfs/kKEicjKXWf1y2wecUeZIiMtkfAi8Bnk3JsnUo11LH7drJIXfjmDoer2B2rrBMZmRm8VA==",
"dev": true,
"license": "GPL-2.0-or-later",
"dependencies": {
- "json2php": "^0.0.7"
+ "json2php": "^0.0.4",
+ "webpack-sources": "^3.2.2"
},
"engines": {
- "node": ">=18.12.0",
- "npm": ">=8.19.2"
+ "node": ">=12"
},
"peerDependencies": {
- "webpack": "^5.0.0"
+ "webpack": "^4.8.3 || ^5.0.0"
}
},
- "node_modules/@wordpress/dependency-extraction-webpack-plugin/node_modules/json2php": {
- "version": "0.0.7",
- "resolved": "https://registry.npmjs.org/json2php/-/json2php-0.0.7.tgz",
- "integrity": "sha512-dnSoUiLAoVaMXxFsVi4CrPVYMKOuDBXTghXSmMINX44RZ8WM9cXlY7UqrQnlAcODCVO7FV3+8t/5nDKAjimLfg==",
- "dev": true,
- "license": "BSD"
- },
- "node_modules/@wordpress/e2e-test-utils-playwright": {
- "version": "1.37.0",
- "resolved": "https://registry.npmjs.org/@wordpress/e2e-test-utils-playwright/-/e2e-test-utils-playwright-1.37.0.tgz",
- "integrity": "sha512-H77He9+sPNchzbEeFk2YSuYW5JNk3oHnlXJ1EVPUHpIZTr6gM80AGBuxP/W4WtWdLn0A5/TxCmTAxsN1M8YVvQ==",
+ "node_modules/@wordpress/element": {
+ "version": "4.20.0",
+ "resolved": "https://registry.npmjs.org/@wordpress/element/-/element-4.20.0.tgz",
+ "integrity": "sha512-Ou7EoGtGe4FUL6fKALINXJLKoSfyWTBJzkJfN2HzSgM1wira9EuWahl8MQN0HAUaWeOoDqMKPvnglfS+kC8JLA==",
"dev": true,
"license": "GPL-2.0-or-later",
"dependencies": {
+ "@babel/runtime": "^7.16.0",
+ "@types/react": "^17.0.37",
+ "@types/react-dom": "^17.0.11",
+ "@wordpress/escape-html": "^2.22.0",
"change-case": "^4.1.2",
- "get-port": "^5.1.1",
- "lighthouse": "^12.2.2",
- "mime": "^3.0.0",
- "web-vitals": "^4.2.1"
+ "is-plain-object": "^5.0.0",
+ "react": "^17.0.2",
+ "react-dom": "^17.0.2"
},
"engines": {
- "node": ">=18.12.0",
- "npm": ">=8.19.2"
+ "node": ">=12"
+ }
+ },
+ "node_modules/@wordpress/escape-html": {
+ "version": "2.58.0",
+ "resolved": "https://registry.npmjs.org/@wordpress/escape-html/-/escape-html-2.58.0.tgz",
+ "integrity": "sha512-9YJXMNfzkrhHEVP1jFEhgijbZqW8Mt3NHIMZjIQoWtBf7QE86umpYpGGBXzYC0YlpGTRGzZTBwYaqFKxjeaSgA==",
+ "dev": true,
+ "license": "GPL-2.0-or-later",
+ "dependencies": {
+ "@babel/runtime": "^7.16.0"
},
- "peerDependencies": {
- "@playwright/test": ">=1"
+ "engines": {
+ "node": ">=12"
}
},
"node_modules/@wordpress/eslint-plugin": {
- "version": "23.0.0",
- "resolved": "https://registry.npmjs.org/@wordpress/eslint-plugin/-/eslint-plugin-23.0.0.tgz",
- "integrity": "sha512-fdgBWc7jC0JKi8j16lt51F3Sp02n7emSU3af5UFnQ5feXyJSO3mGcVJzZDpehL3ts/Clhu3II+CYOlUeek4H8g==",
+ "version": "9.3.0",
+ "resolved": "https://registry.npmjs.org/@wordpress/eslint-plugin/-/eslint-plugin-9.3.0.tgz",
+ "integrity": "sha512-9F7B60gHAjiTIi9vBw5ZoH0MZW3UnmbuKols4kWpJVdgsvG4X1Wj6XXTLmQKrzh/Em7mD1CCIbCSyWknEzIOLw==",
"dev": true,
"license": "GPL-2.0-or-later",
"dependencies": {
- "@babel/eslint-parser": "7.25.7",
- "@typescript-eslint/eslint-plugin": "^6.4.1",
- "@typescript-eslint/parser": "^6.4.1",
- "@wordpress/babel-preset-default": "^8.37.0",
- "@wordpress/prettier-config": "^4.37.0",
+ "@babel/eslint-parser": "^7.16.0",
+ "@typescript-eslint/eslint-plugin": "^4.31.0",
+ "@typescript-eslint/parser": "^4.31.0",
+ "@wordpress/prettier-config": "^1.1.1",
"cosmiconfig": "^7.0.0",
- "eslint-config-prettier": "^8.3.0",
- "eslint-import-resolver-typescript": "^4.4.4",
+ "eslint-config-prettier": "^7.1.0",
"eslint-plugin-import": "^2.25.2",
- "eslint-plugin-jest": "^27.4.3",
- "eslint-plugin-jsdoc": "^46.4.6",
- "eslint-plugin-jsx-a11y": "^6.5.1",
- "eslint-plugin-playwright": "^0.15.3",
- "eslint-plugin-prettier": "^5.0.0",
- "eslint-plugin-react": "^7.27.0",
- "eslint-plugin-react-hooks": "^4.3.0",
- "globals": "^13.12.0",
+ "eslint-plugin-jest": "^24.1.3",
+ "eslint-plugin-jsdoc": "^36.0.8",
+ "eslint-plugin-jsx-a11y": "^6.4.1",
+ "eslint-plugin-prettier": "^3.3.0",
+ "eslint-plugin-react": "^7.22.0",
+ "eslint-plugin-react-hooks": "^4.2.0",
+ "globals": "^12.0.0",
+ "prettier": "npm:wp-prettier@2.2.1-beta-1",
"requireindex": "^1.2.0"
},
"engines": {
- "node": ">=18.12.0",
- "npm": ">=8.19.2"
+ "node": ">=12",
+ "npm": ">=6.9"
},
"peerDependencies": {
- "@babel/core": ">=7",
- "eslint": ">=8",
- "prettier": ">=3",
- "typescript": ">=5"
+ "eslint": "^6 || ^7",
+ "typescript": "^4"
},
"peerDependenciesMeta": {
- "prettier": {
- "optional": true
- },
"typescript": {
"optional": true
}
}
},
- "node_modules/@wordpress/eslint-plugin/node_modules/cosmiconfig": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz",
- "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==",
+ "node_modules/@wordpress/eslint-plugin/node_modules/prettier": {
+ "name": "wp-prettier",
+ "version": "2.2.1-beta-1",
+ "resolved": "https://registry.npmjs.org/wp-prettier/-/wp-prettier-2.2.1-beta-1.tgz",
+ "integrity": "sha512-+JHkqs9LC/JPp51yy1hzs3lQ7qeuWCwOcSzpQNeeY/G7oSpnF61vxt7hRh87zNRTr6ob2ndy0W8rVzhgrcA+Gw==",
"dev": true,
"license": "MIT",
- "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"
+ "bin": {
+ "prettier": "bin-prettier.js"
},
"engines": {
- "node": ">=10"
+ "node": ">=10.13.0"
}
},
- "node_modules/@wordpress/eslint-plugin/node_modules/globals": {
- "version": "13.24.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz",
- "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==",
+ "node_modules/@wordpress/jest-console": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/@wordpress/jest-console/-/jest-console-4.1.1.tgz",
+ "integrity": "sha512-f/DwduxU6k53tULurpCox4TKzp877+IWTHRUxE91+FOXS+2OsnhUPKfMiMEex4nu81a54EArwekPVKxaq4swbA==",
+ "dev": true,
+ "license": "GPL-2.0-or-later",
+ "dependencies": {
+ "@babel/runtime": "^7.16.0",
+ "jest-matcher-utils": "^26.6.2",
+ "lodash": "^4.17.21"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "peerDependencies": {
+ "jest": ">=26"
+ }
+ },
+ "node_modules/@wordpress/jest-preset-default": {
+ "version": "7.1.3",
+ "resolved": "https://registry.npmjs.org/@wordpress/jest-preset-default/-/jest-preset-default-7.1.3.tgz",
+ "integrity": "sha512-rz9V/YRr3TjLdZJQu7DAZHo848PpZ4N5ThtP4Lujy1O/UtcvtKF0r34SZTNDlFQO/G1USZQX/WL6HRhgl57iHA==",
+ "dev": true,
+ "license": "GPL-2.0-or-later",
+ "dependencies": {
+ "@wojtekmaj/enzyme-adapter-react-17": "^0.6.1",
+ "@wordpress/jest-console": "^4.1.1",
+ "babel-jest": "^26.6.3",
+ "enzyme": "^3.11.0",
+ "enzyme-to-json": "^3.4.4"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "peerDependencies": {
+ "jest": ">=26"
+ }
+ },
+ "node_modules/@wordpress/npm-package-json-lint-config": {
+ "version": "4.43.0",
+ "resolved": "https://registry.npmjs.org/@wordpress/npm-package-json-lint-config/-/npm-package-json-lint-config-4.43.0.tgz",
+ "integrity": "sha512-XSb7AdDC7yGTBVYeRM4oqmOygEB+/+tk7lobLIGDmlZJs+M3F/NUvQq0Vcas1pojq2fyPYTUwOlu81ga33fNwQ==",
+ "dev": true,
+ "license": "GPL-2.0-or-later",
+ "engines": {
+ "node": ">=14"
+ },
+ "peerDependencies": {
+ "npm-package-json-lint": ">=6.0.0"
+ }
+ },
+ "node_modules/@wordpress/postcss-plugins-preset": {
+ "version": "3.10.0",
+ "resolved": "https://registry.npmjs.org/@wordpress/postcss-plugins-preset/-/postcss-plugins-preset-3.10.0.tgz",
+ "integrity": "sha512-vBXy+8e6BpUvmxcIFgldvFlTFA6kAlC+J86GcDEoIq/IFVoqSJlnX1s1QHXgG3CzTHjIlN/FNJxGxYinSMJhng==",
+ "dev": true,
+ "license": "GPL-2.0-or-later",
+ "dependencies": {
+ "@wordpress/base-styles": "^4.7.0",
+ "autoprefixer": "^10.2.5"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "peerDependencies": {
+ "postcss": "^8.0.0"
+ }
+ },
+ "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,
+ "license": "GPL-2.0-or-later",
+ "engines": {
+ "node": ">=12"
+ },
+ "peerDependencies": {
+ "prettier": ">=2"
+ }
+ },
+ "node_modules/@wordpress/scripts": {
+ "version": "19.2.4",
+ "resolved": "https://registry.npmjs.org/@wordpress/scripts/-/scripts-19.2.4.tgz",
+ "integrity": "sha512-klkfjBOPfr/RT/3Tvmx+gLbZ+dxq5L0dJQHCHxEURMRW/A8SfJJPtmC29L9sE1KhO3zUMWxrkn2L6HhSzbvQbA==",
+ "dev": true,
+ "license": "GPL-2.0-or-later",
+ "dependencies": {
+ "@svgr/webpack": "^5.5.0",
+ "@wordpress/babel-preset-default": "^6.4.1",
+ "@wordpress/browserslist-config": "^4.1.0",
+ "@wordpress/dependency-extraction-webpack-plugin": "^3.2.1",
+ "@wordpress/eslint-plugin": "^9.3.0",
+ "@wordpress/jest-preset-default": "^7.1.3",
+ "@wordpress/npm-package-json-lint-config": "^4.1.0",
+ "@wordpress/postcss-plugins-preset": "^3.2.5",
+ "@wordpress/prettier-config": "^1.1.1",
+ "@wordpress/stylelint-config": "^19.1.0",
+ "babel-jest": "^26.6.3",
+ "babel-loader": "^8.2.3",
+ "browserslist": "^4.17.6",
+ "chalk": "^4.0.0",
+ "check-node-version": "^4.1.0",
+ "clean-webpack-plugin": "^3.0.0",
+ "cross-spawn": "^5.1.0",
+ "css-loader": "^6.2.0",
+ "cssnano": "^5.0.7",
+ "cwd": "^0.10.0",
+ "dir-glob": "^3.0.1",
+ "eslint": "^7.17.0",
+ "eslint-plugin-markdown": "^2.2.0",
+ "expect-puppeteer": "^4.4.0",
+ "filenamify": "^4.2.0",
+ "jest": "^26.6.3",
+ "jest-circus": "^26.6.3",
+ "jest-dev-server": "^5.0.3",
+ "jest-environment-node": "^26.6.2",
+ "markdownlint": "^0.23.1",
+ "markdownlint-cli": "^0.27.1",
+ "merge-deep": "^3.0.3",
+ "mini-css-extract-plugin": "^2.5.0",
+ "minimist": "^1.2.0",
+ "npm-package-json-lint": "^5.0.0",
+ "postcss": "^8.2.15",
+ "postcss-loader": "^6.1.1",
+ "prettier": "npm:wp-prettier@2.2.1-beta-1",
+ "puppeteer-core": "^10.1.0",
+ "read-pkg-up": "^1.0.1",
+ "resolve-bin": "^0.4.0",
+ "sass": "^1.35.2",
+ "sass-loader": "^12.1.0",
+ "source-map-loader": "^3.0.0",
+ "stylelint": "^13.8.0",
+ "terser-webpack-plugin": "^5.1.4",
+ "url-loader": "^4.1.1",
+ "webpack": "^5.47.1",
+ "webpack-bundle-analyzer": "^4.4.2",
+ "webpack-cli": "^4.7.2",
+ "webpack-livereload-plugin": "^3.0.1"
+ },
+ "bin": {
+ "wp-scripts": "bin/wp-scripts.js"
+ },
+ "engines": {
+ "node": ">=12.13",
+ "npm": ">=6.9"
+ }
+ },
+ "node_modules/@wordpress/scripts/node_modules/camelcase": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
+ "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/@wordpress/scripts/node_modules/hosted-git-info": {
+ "version": "2.8.9",
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz",
+ "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/@wordpress/scripts/node_modules/is-plain-obj": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz",
+ "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@wordpress/scripts/node_modules/meow": {
+ "version": "6.1.1",
+ "resolved": "https://registry.npmjs.org/meow/-/meow-6.1.1.tgz",
+ "integrity": "sha512-3YffViIt2QWgTy6Pale5QpopX/IvU3LPL03jOTqp6pGj3VjesdO/U8CuHMKpnQr4shCNCM5fd5XFFvIIl6JBHg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "type-fest": "^0.20.2"
+ "@types/minimist": "^1.2.0",
+ "camelcase-keys": "^6.2.2",
+ "decamelize-keys": "^1.1.0",
+ "hard-rejection": "^2.1.0",
+ "minimist-options": "^4.0.2",
+ "normalize-package-data": "^2.5.0",
+ "read-pkg-up": "^7.0.1",
+ "redent": "^3.0.0",
+ "trim-newlines": "^3.0.0",
+ "type-fest": "^0.13.1",
+ "yargs-parser": "^18.1.3"
},
"engines": {
"node": ">=8"
@@ -6424,10 +4491,38 @@
"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==",
+ "node_modules/@wordpress/scripts/node_modules/meow/node_modules/read-pkg-up": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz",
+ "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "find-up": "^4.1.0",
+ "read-pkg": "^5.2.0",
+ "type-fest": "^0.8.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@wordpress/scripts/node_modules/meow/node_modules/read-pkg-up/node_modules/type-fest": {
+ "version": "0.8.1",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
+ "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==",
+ "dev": true,
+ "license": "(MIT OR CC0-1.0)",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@wordpress/scripts/node_modules/meow/node_modules/type-fest": {
+ "version": "0.13.1",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz",
+ "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==",
"dev": true,
"license": "(MIT OR CC0-1.0)",
"engines": {
@@ -6437,204 +4532,153 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/@wordpress/jest-console": {
- "version": "8.37.0",
- "resolved": "https://registry.npmjs.org/@wordpress/jest-console/-/jest-console-8.37.0.tgz",
- "integrity": "sha512-RTNy0qg1sQLRunqsWjCAR8Nw2RZ62DSIaf09J6xzmuYdFjdvsmeQWs0OSs9e6mVQftxqDgJ/V4NQ1ctLxZM06w==",
+ "node_modules/@wordpress/scripts/node_modules/normalize-package-data": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
+ "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
"dev": true,
- "license": "GPL-2.0-or-later",
+ "license": "BSD-2-Clause",
"dependencies": {
- "jest-matcher-utils": "^29.6.2"
- },
- "engines": {
- "node": ">=18.12.0",
- "npm": ">=8.19.2"
- },
- "peerDependencies": {
- "jest": ">=29"
+ "hosted-git-info": "^2.1.4",
+ "resolve": "^1.10.0",
+ "semver": "2 || 3 || 4 || 5",
+ "validate-npm-package-license": "^3.0.1"
}
},
- "node_modules/@wordpress/jest-preset-default": {
- "version": "12.37.0",
- "resolved": "https://registry.npmjs.org/@wordpress/jest-preset-default/-/jest-preset-default-12.37.0.tgz",
- "integrity": "sha512-AaT02lS2a/FnD/arYSSc1TkbIlLd1zXY40YqGtpYz1/MqJKoje6th/RZGOMQKC1pyXt5KKBzSFMD4Av39CxThw==",
+ "node_modules/@wordpress/scripts/node_modules/normalize-package-data/node_modules/semver": {
+ "version": "5.7.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
+ "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
"dev": true,
- "license": "GPL-2.0-or-later",
- "dependencies": {
- "@wordpress/jest-console": "^8.37.0",
- "babel-jest": "29.7.0"
- },
- "engines": {
- "node": ">=18.12.0",
- "npm": ">=8.19.2"
- },
- "peerDependencies": {
- "@babel/core": ">=7",
- "jest": ">=29"
- }
- },
- "node_modules/@wordpress/npm-package-json-lint-config": {
- "version": "5.37.0",
- "resolved": "https://registry.npmjs.org/@wordpress/npm-package-json-lint-config/-/npm-package-json-lint-config-5.37.0.tgz",
- "integrity": "sha512-Ond/mR+fw+8JMlcMmj1MBjVgQKD7GVYlL3Ww1n1/yBpRS9OP+UECF4vES3rdEqvL8TU+O/cvoWFpNY2DWO4P8w==",
- "dev": true,
- "license": "GPL-2.0-or-later",
- "engines": {
- "node": ">=18.12.0",
- "npm": ">=8.19.2"
- },
- "peerDependencies": {
- "npm-package-json-lint": ">=6.0.0"
- }
- },
- "node_modules/@wordpress/postcss-plugins-preset": {
- "version": "5.37.0",
- "resolved": "https://registry.npmjs.org/@wordpress/postcss-plugins-preset/-/postcss-plugins-preset-5.37.0.tgz",
- "integrity": "sha512-6+/aFPjr3AhmiBQEZs/huG3pkHPUHwwqwS8IIUqwDFuXnX3RkqRJvIoLdfDyR04QaFamyk1IoRv01zU0pZB8YA==",
- "dev": true,
- "license": "GPL-2.0-or-later",
- "dependencies": {
- "@wordpress/base-styles": "^6.13.0",
- "autoprefixer": "^10.4.20",
- "postcss-import": "^16.1.1"
- },
- "engines": {
- "node": ">=18.12.0",
- "npm": ">=8.19.2"
- },
- "peerDependencies": {
- "postcss": "^8.0.0"
- }
- },
- "node_modules/@wordpress/prettier-config": {
- "version": "4.37.0",
- "resolved": "https://registry.npmjs.org/@wordpress/prettier-config/-/prettier-config-4.37.0.tgz",
- "integrity": "sha512-5l+5q07DXpoMhGWxVjJqb60RFyspaD7twCnnVWzqfFNUfKWptytMj3KYV3oO9+4ONWehsEzRF9zl3ai+S6ztvg==",
- "dev": true,
- "license": "GPL-2.0-or-later",
- "engines": {
- "node": ">=18.12.0",
- "npm": ">=8.19.2"
- },
- "peerDependencies": {
- "prettier": ">=3"
- }
- },
- "node_modules/@wordpress/scripts": {
- "version": "31.2.0",
- "resolved": "https://registry.npmjs.org/@wordpress/scripts/-/scripts-31.2.0.tgz",
- "integrity": "sha512-0BKF/aWGX2MegnsgxNkoKQCIlZzvzc/w9noC0hCsNCQqgTolP+idtr8sBA3J2E5gP3ieGk4DCr9CbAtLjkP23g==",
- "dev": true,
- "license": "GPL-2.0-or-later",
- "dependencies": {
- "@babel/core": "7.25.7",
- "@pmmmwh/react-refresh-webpack-plugin": "^0.5.11",
- "@svgr/webpack": "^8.0.1",
- "@wordpress/babel-preset-default": "^8.37.0",
- "@wordpress/browserslist-config": "^6.37.0",
- "@wordpress/dependency-extraction-webpack-plugin": "^6.37.0",
- "@wordpress/e2e-test-utils-playwright": "^1.37.0",
- "@wordpress/eslint-plugin": "^23.0.0",
- "@wordpress/jest-preset-default": "^12.37.0",
- "@wordpress/npm-package-json-lint-config": "^5.37.0",
- "@wordpress/postcss-plugins-preset": "^5.37.0",
- "@wordpress/prettier-config": "^4.37.0",
- "@wordpress/stylelint-config": "^23.29.0",
- "adm-zip": "^0.5.9",
- "babel-jest": "29.7.0",
- "babel-loader": "9.2.1",
- "browserslist": "^4.21.10",
- "chalk": "^4.0.0",
- "check-node-version": "^4.1.0",
- "copy-webpack-plugin": "^10.2.0",
- "cross-spawn": "^7.0.6",
- "css-loader": "^6.2.0",
- "cssnano": "^6.0.1",
- "cwd": "^0.10.0",
- "dir-glob": "^3.0.1",
- "eslint": "^8.3.0",
- "expect-puppeteer": "^4.4.0",
- "fast-glob": "^3.2.7",
- "filenamify": "^4.2.0",
- "jest": "^29.6.2",
- "jest-dev-server": "^10.1.4",
- "jest-environment-jsdom": "^30.2.0",
- "jest-environment-node": "^29.6.2",
- "json2php": "^0.0.9",
- "markdownlint-cli": "^0.31.1",
- "merge-deep": "^3.0.3",
- "mini-css-extract-plugin": "^2.9.2",
- "minimist": "^1.2.0",
- "npm-package-json-lint": "^6.4.0",
- "npm-packlist": "^3.0.0",
- "postcss": "^8.4.5",
- "postcss-loader": "^6.2.1",
- "prettier": "npm:wp-prettier@3.0.3",
- "puppeteer-core": "^23.10.1",
- "react-refresh": "^0.14.0",
- "read-pkg-up": "^7.0.1",
- "resolve-bin": "^0.4.0",
- "rtlcss": "^4.3.0",
- "sass": "^1.54.0",
- "sass-loader": "^16.0.3",
- "schema-utils": "^4.2.0",
- "source-map-loader": "^3.0.0",
- "stylelint": "^16.8.2",
- "terser-webpack-plugin": "^5.3.10",
- "url-loader": "^4.1.1",
- "webpack": "^5.97.0",
- "webpack-bundle-analyzer": "^4.9.1",
- "webpack-cli": "^5.1.4",
- "webpack-dev-server": "^4.15.1"
- },
+ "license": "ISC",
"bin": {
- "wp-scripts": "bin/wp-scripts.js"
- },
- "engines": {
- "node": ">=18.12.0",
- "npm": ">=8.19.2"
- },
- "peerDependencies": {
- "@playwright/test": "^1.57.0",
- "@wordpress/env": "^10.0.0",
- "react": "^18.0.0",
- "react-dom": "^18.0.0"
- },
- "peerDependenciesMeta": {
- "@wordpress/env": {
- "optional": true
- }
+ "semver": "bin/semver"
}
},
- "node_modules/@wordpress/stylelint-config": {
- "version": "23.29.0",
- "resolved": "https://registry.npmjs.org/@wordpress/stylelint-config/-/stylelint-config-23.29.0.tgz",
- "integrity": "sha512-TTT2oc9Fw2rdnCs4bzI2EHRXgODT3YggjcewqxbBcioPsiAOff9E9gp6NZhe2VlZjVsDcwabUs6m4RIgbBSKaQ==",
+ "node_modules/@wordpress/scripts/node_modules/npm-package-json-lint": {
+ "version": "5.4.2",
+ "resolved": "https://registry.npmjs.org/npm-package-json-lint/-/npm-package-json-lint-5.4.2.tgz",
+ "integrity": "sha512-DH1MSvYvm+cuQFXcPehIIu/WiYzMYs7BOxlhOOFHaH2SNrA+P2uDtTEe5LOG90Ci7PTwgF/dCmSKM2HWTgWXNA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@stylistic/stylelint-plugin": "^3.0.1",
- "stylelint-config-recommended": "^14.0.1",
- "stylelint-config-recommended-scss": "^14.1.0"
+ "ajv": "^6.12.6",
+ "ajv-errors": "^1.0.1",
+ "chalk": "^4.1.2",
+ "cosmiconfig": "^7.0.1",
+ "debug": "^4.3.2",
+ "globby": "^11.0.4",
+ "ignore": "^5.1.9",
+ "is-plain-obj": "^3.0.0",
+ "jsonc-parser": "^3.0.0",
+ "log-symbols": "^4.1.0",
+ "meow": "^6.1.1",
+ "plur": "^4.0.0",
+ "semver": "^7.3.5",
+ "slash": "^3.0.0",
+ "strip-json-comments": "^3.1.1"
+ },
+ "bin": {
+ "npmPkgJsonLint": "src/cli.js"
},
"engines": {
- "node": ">=18.12.0",
- "npm": ">=8.19.2"
+ "node": ">=10.0.0",
+ "npm": ">=6.0.0"
+ }
+ },
+ "node_modules/@wordpress/scripts/node_modules/prettier": {
+ "name": "wp-prettier",
+ "version": "2.2.1-beta-1",
+ "resolved": "https://registry.npmjs.org/wp-prettier/-/wp-prettier-2.2.1-beta-1.tgz",
+ "integrity": "sha512-+JHkqs9LC/JPp51yy1hzs3lQ7qeuWCwOcSzpQNeeY/G7oSpnF61vxt7hRh87zNRTr6ob2ndy0W8rVzhgrcA+Gw==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "prettier": "bin-prettier.js"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/@wordpress/scripts/node_modules/read-pkg": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz",
+ "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/normalize-package-data": "^2.4.0",
+ "normalize-package-data": "^2.5.0",
+ "parse-json": "^5.0.0",
+ "type-fest": "^0.6.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@wordpress/scripts/node_modules/semver": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz",
+ "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==",
+ "dev": true,
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@wordpress/scripts/node_modules/type-fest": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz",
+ "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==",
+ "dev": true,
+ "license": "(MIT OR CC0-1.0)",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@wordpress/scripts/node_modules/yargs-parser": {
+ "version": "18.1.3",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz",
+ "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "camelcase": "^5.0.0",
+ "decamelize": "^1.2.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/@wordpress/stylelint-config": {
+ "version": "19.1.0",
+ "resolved": "https://registry.npmjs.org/@wordpress/stylelint-config/-/stylelint-config-19.1.0.tgz",
+ "integrity": "sha512-K/wB9rhB+pH5WvDh3fV3DN5C3Bud+jPGXmnPY8fOXKMYI3twCFozK/j6sVuaJHqGp/0kKEF0hkkGh+HhD30KGQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "stylelint-config-recommended": "^3.0.0",
+ "stylelint-config-recommended-scss": "^4.2.0",
+ "stylelint-scss": "^3.17.2"
+ },
+ "engines": {
+ "node": ">=12"
},
"peerDependencies": {
- "stylelint": "^16.8.2",
- "stylelint-scss": "^6.4.0"
+ "stylelint": "^13.7.0"
}
},
"node_modules/@wordpress/warning": {
- "version": "3.37.0",
- "resolved": "https://registry.npmjs.org/@wordpress/warning/-/warning-3.37.0.tgz",
- "integrity": "sha512-oXWyKiYJIa9SuPRNEJiOWn2Qk0RzfxOsDqXcus1OL44swCRtSM+ypm16CJpRhZpMUcsJ6d23PBxTC97C/iiJpQ==",
+ "version": "2.58.0",
+ "resolved": "https://registry.npmjs.org/@wordpress/warning/-/warning-2.58.0.tgz",
+ "integrity": "sha512-9bZlORhyMY2nbWozeyC5kqJsFzEPP4DCLhGmjtbv+YWGHttUrxUZEfrKdqO+rUODA8rP5zeIly1nCQOUnkw4Lg==",
"dev": true,
"license": "GPL-2.0-or-later",
"engines": {
- "node": ">=18.12.0",
- "npm": ">=8.19.2"
+ "node": ">=12"
}
},
"node_modules/@xtuc/ieee754": {
@@ -6659,37 +4703,12 @@
"dev": true,
"license": "BSD-3-Clause"
},
- "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,
- "license": "MIT",
- "dependencies": {
- "mime-types": "~2.1.34",
- "negotiator": "0.6.3"
- },
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/accepts/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,
- "license": "MIT",
- "engines": {
- "node": ">= 0.6"
- }
- },
"node_modules/acorn": {
- "version": "8.14.0",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz",
- "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==",
+ "version": "8.16.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz",
+ "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==",
"dev": true,
"license": "MIT",
- "peer": true,
"bin": {
"acorn": "bin/acorn"
},
@@ -6697,14 +4716,51 @@
"node": ">=0.4.0"
}
},
- "node_modules/acorn-import-attributes": {
- "version": "1.9.5",
- "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz",
- "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==",
+ "node_modules/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,
"license": "MIT",
+ "dependencies": {
+ "acorn": "^7.1.1",
+ "acorn-walk": "^7.1.1"
+ }
+ },
+ "node_modules/acorn-globals/node_modules/acorn": {
+ "version": "7.4.1",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
+ "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "acorn": "bin/acorn"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/acorn-globals/node_modules/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,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/acorn-import-phases": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/acorn-import-phases/-/acorn-import-phases-1.0.4.tgz",
+ "integrity": "sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10.13.0"
+ },
"peerDependencies": {
- "acorn": "^8"
+ "acorn": "^8.14.0"
}
},
"node_modules/acorn-jsx": {
@@ -6730,33 +4786,25 @@
"node": ">=0.4.0"
}
},
- "node_modules/adm-zip": {
- "version": "0.5.16",
- "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.16.tgz",
- "integrity": "sha512-TGw5yVi4saajsSEgz25grObGHEUaDrniwvA2qwSC060KfqGPdglhvPMA2lPIoxs3PQIItj2iag35fONcQqgUaQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=12.0"
- }
- },
"node_modules/agent-base": {
- "version": "7.1.4",
- "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz",
- "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==",
+ "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,
"license": "MIT",
+ "dependencies": {
+ "debug": "4"
+ },
"engines": {
- "node": ">= 14"
+ "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==",
+ "version": "6.15.0",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.15.0.tgz",
+ "integrity": "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"fast-deep-equal": "^3.1.1",
"fast-json-stable-stringify": "^2.0.0",
@@ -6797,9 +4845,9 @@
}
},
"node_modules/ajv-formats/node_modules/ajv": {
- "version": "8.17.1",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz",
- "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
+ "version": "8.20.0",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.20.0.tgz",
+ "integrity": "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -6856,30 +4904,17 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/ansi-html": {
- "version": "0.0.9",
- "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.9.tgz",
- "integrity": "sha512-ozbS3LuenHVxNRh/wdnN16QapUHzauqSomAl1jwwJRRsGwFwtj644lIhxfWu0Fy0acCij2+AEgHvjscq3dlVXg==",
+ "node_modules/ansi-escapes/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==",
"dev": true,
- "engines": [
- "node >= 0.8.0"
- ],
- "license": "Apache-2.0",
- "bin": {
- "ansi-html": "bin/ansi-html"
- }
- },
- "node_modules/ansi-html-community": {
- "version": "0.0.8",
- "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz",
- "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==",
- "dev": true,
- "engines": [
- "node >= 0.8.0"
- ],
- "license": "Apache-2.0",
- "bin": {
- "ansi-html": "bin/ansi-html"
+ "license": "(MIT OR CC0-1.0)",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/ansi-regex": {
@@ -6922,16 +4957,6 @@
"node": ">= 8"
}
},
- "node_modules/are-docs-informative": {
- "version": "0.0.2",
- "resolved": "https://registry.npmjs.org/are-docs-informative/-/are-docs-informative-0.0.2.tgz",
- "integrity": "sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=14"
- }
- },
"node_modules/argparse": {
"version": "1.0.10",
"resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
@@ -6952,6 +4977,26 @@
"node": ">= 0.4"
}
},
+ "node_modules/arr-diff": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
+ "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==",
+ "dev": true,
+ "license": "MIT",
+ "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,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/arr-union": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
@@ -6979,13 +5024,6 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/array-flatten": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
- "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/array-includes": {
"version": "3.1.9",
"resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.9.tgz",
@@ -7019,6 +5057,47 @@
"node": ">=8"
}
},
+ "node_modules/array-uniq": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz",
+ "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/array-unique": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
+ "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/array.prototype.filter": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/array.prototype.filter/-/array.prototype.filter-1.0.4.tgz",
+ "integrity": "sha512-r+mCJ7zXgXElgR4IRC+fkvNCeoaavWBs6EdCso5Tbcf+iEMKzBU/His60lt34WEZ9vlb8wDkZvQGcVI5GwkfoQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.2",
+ "es-array-method-boxes-properly": "^1.0.0",
+ "es-object-atoms": "^1.0.0",
+ "is-string": "^1.0.7"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/array.prototype.findlast": {
"version": "1.2.5",
"resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz",
@@ -7100,6 +5179,29 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/array.prototype.reduce": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.8.tgz",
+ "integrity": "sha512-DwuEqgXFBwbmZSRqt3BpQigWNUoqw9Ml2dTWdF3B2zQlQX4OeUE0zyuzX0fX0IbTvjdkZbcBTU3idgpO78qkTw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.8",
+ "call-bound": "^1.0.4",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.9",
+ "es-array-method-boxes-properly": "^1.0.0",
+ "es-errors": "^1.3.0",
+ "es-object-atoms": "^1.1.1",
+ "is-string": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/array.prototype.tosorted": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz",
@@ -7149,17 +5251,14 @@
"node": ">=0.10.0"
}
},
- "node_modules/ast-types": {
- "version": "0.13.4",
- "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz",
- "integrity": "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==",
+ "node_modules/assign-symbols": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
+ "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==",
"dev": true,
"license": "MIT",
- "dependencies": {
- "tslib": "^2.0.1"
- },
"engines": {
- "node": ">=4"
+ "node": ">=0.10.0"
}
},
"node_modules/ast-types-flow": {
@@ -7179,6 +5278,13 @@
"node": ">=8"
}
},
+ "node_modules/async": {
+ "version": "3.2.6",
+ "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz",
+ "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/async-function": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz",
@@ -7196,21 +5302,23 @@
"dev": true,
"license": "MIT"
},
- "node_modules/atomically": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/atomically/-/atomically-2.1.0.tgz",
- "integrity": "sha512-+gDffFXRW6sl/HCwbta7zK4uNqbPjv4YJEAdz7Vu+FLQHe77eZ4bvbJGi4hE0QPeJlMYMA3piXEr1UL3dAwx7Q==",
+ "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==",
"dev": true,
- "license": "MIT",
- "dependencies": {
- "stubborn-fs": "^2.0.0",
- "when-exit": "^2.1.4"
+ "license": "(MIT OR Apache-2.0)",
+ "bin": {
+ "atob": "bin/atob.js"
+ },
+ "engines": {
+ "node": ">= 4.5.0"
}
},
"node_modules/autoprefixer": {
- "version": "10.4.23",
- "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.23.tgz",
- "integrity": "sha512-YYTXSFulfwytnjAPlw8QHncHJmlvFKtczb8InXaAx9Q0LbfDnfEYDE55omerIJKihhmU61Ft+cAOSzQVaBUmeA==",
+ "version": "10.5.0",
+ "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.5.0.tgz",
+ "integrity": "sha512-FMhOoZV4+qR6aTUALKX2rEqGG+oyATvwBt9IIzVR5rMa2HRWPkxf+P+PAJLD1I/H5/II+HuZcBJYEFBpq39ong==",
"dev": true,
"funding": [
{
@@ -7228,8 +5336,8 @@
],
"license": "MIT",
"dependencies": {
- "browserslist": "^4.28.1",
- "caniuse-lite": "^1.0.30001760",
+ "browserslist": "^4.28.2",
+ "caniuse-lite": "^1.0.30001787",
"fraction.js": "^5.3.4",
"picocolors": "^1.1.1",
"postcss-value-parser": "^4.2.0"
@@ -7261,9 +5369,9 @@
}
},
"node_modules/axe-core": {
- "version": "4.11.0",
- "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.11.0.tgz",
- "integrity": "sha512-ilYanEU8vxxBexpJd8cWM4ElSQq4QctCLKih0TSfjIfCQTeyH/6zVrmIJfLPrKTKJRbiG+cfnZbQIjAlJmF1jQ==",
+ "version": "4.11.4",
+ "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.11.4.tgz",
+ "integrity": "sha512-KunSNx+TVpkAw/6ULfhnx+HWRecjqZGTOyquAoWHYLRSdK1tB5Ihce1ZW+UY3fj33bYAFWPu7W/GRSmmrCGuxA==",
"dev": true,
"license": "MPL-2.0",
"engines": {
@@ -7271,15 +5379,13 @@
}
},
"node_modules/axios": {
- "version": "1.13.2",
- "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.2.tgz",
- "integrity": "sha512-VPk9ebNqPcy5lRGuSlKx752IlDatOjT9paPlm8A7yOuW2Fbvp4X3JznJtT4f0GzGLLiWE9W8onz51SqLYwzGaA==",
+ "version": "0.21.4",
+ "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz",
+ "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "follow-redirects": "^1.15.6",
- "form-data": "^4.0.4",
- "proxy-from-env": "^1.1.0"
+ "follow-redirects": "^1.14.0"
}
},
"node_modules/axobject-query": {
@@ -7293,43 +5399,65 @@
}
},
"node_modules/babel-jest": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz",
- "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==",
+ "version": "26.6.3",
+ "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-26.6.3.tgz",
+ "integrity": "sha512-pl4Q+GAVOHwvjrck6jKjvmGhnO3jHX/xuB9d27f+EJZ/6k+6nMuPjorrYp7s++bKKdANwzElBWnLWaObvTnaZA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@jest/transform": "^29.7.0",
- "@types/babel__core": "^7.1.14",
- "babel-plugin-istanbul": "^6.1.1",
- "babel-preset-jest": "^29.6.3",
+ "@jest/transform": "^26.6.2",
+ "@jest/types": "^26.6.2",
+ "@types/babel__core": "^7.1.7",
+ "babel-plugin-istanbul": "^6.0.0",
+ "babel-preset-jest": "^26.6.2",
"chalk": "^4.0.0",
- "graceful-fs": "^4.2.9",
+ "graceful-fs": "^4.2.4",
"slash": "^3.0.0"
},
"engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ "node": ">= 10.14.2"
},
"peerDependencies": {
- "@babel/core": "^7.8.0"
+ "@babel/core": "^7.0.0"
}
},
"node_modules/babel-loader": {
- "version": "9.2.1",
- "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-9.2.1.tgz",
- "integrity": "sha512-fqe8naHt46e0yIdkjUZYqddSXfej3AHajX+CSO5X7oy0EmPc6o5Xh+RClNoHjnieWz9AW4kZxW9yyFMhVB1QLA==",
+ "version": "8.4.1",
+ "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.4.1.tgz",
+ "integrity": "sha512-nXzRChX+Z1GoE6yWavBQg6jDslyFF3SDjl2paADuoQtQW10JqShJt62R6eJQ5m/pjJFDT8xgKIWSP85OY8eXeA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "find-cache-dir": "^4.0.0",
- "schema-utils": "^4.0.0"
+ "find-cache-dir": "^3.3.1",
+ "loader-utils": "^2.0.4",
+ "make-dir": "^3.1.0",
+ "schema-utils": "^2.6.5"
},
"engines": {
- "node": ">= 14.15.0"
+ "node": ">= 8.9"
},
"peerDependencies": {
- "@babel/core": "^7.12.0",
- "webpack": ">=5"
+ "@babel/core": "^7.0.0",
+ "webpack": ">=2"
+ }
+ },
+ "node_modules/babel-loader/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,
+ "license": "MIT",
+ "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/babel-plugin-istanbul": {
@@ -7350,30 +5478,30 @@
}
},
"node_modules/babel-plugin-jest-hoist": {
- "version": "29.6.3",
- "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz",
- "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==",
+ "version": "26.6.2",
+ "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.6.2.tgz",
+ "integrity": "sha512-PO9t0697lNTmcEHH69mdtYiOIkkOlj9fySqfO3K1eCcdISevLAE0xY59VLLUj0SoiPiTX/JU2CYFpILydUa5Lw==",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/template": "^7.3.3",
"@babel/types": "^7.3.3",
- "@types/babel__core": "^7.1.14",
+ "@types/babel__core": "^7.0.0",
"@types/babel__traverse": "^7.0.6"
},
"engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ "node": ">= 10.14.2"
}
},
"node_modules/babel-plugin-polyfill-corejs2": {
- "version": "0.4.12",
- "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.12.tgz",
- "integrity": "sha512-CPWT6BwvhrTO2d8QVorhTCQw9Y43zOu7G9HigcfxvepOU6b8o3tcWad6oVgZIsZCTt42FFv97aA7ZJsbM4+8og==",
+ "version": "0.4.17",
+ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.17.tgz",
+ "integrity": "sha512-aTyf30K/rqAsNwN76zYrdtx8obu0E4KoUME29B1xj+B3WxgvWkp943vYQ+z8Mv3lw9xHXMHpvSPOBxzAkIa94w==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/compat-data": "^7.22.6",
- "@babel/helper-define-polyfill-provider": "^0.6.3",
+ "@babel/compat-data": "^7.28.6",
+ "@babel/helper-define-polyfill-provider": "^0.6.8",
"semver": "^6.3.1"
},
"peerDependencies": {
@@ -7381,27 +5509,27 @@
}
},
"node_modules/babel-plugin-polyfill-corejs3": {
- "version": "0.10.6",
- "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.6.tgz",
- "integrity": "sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA==",
+ "version": "0.14.2",
+ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.14.2.tgz",
+ "integrity": "sha512-coWpDLJ410R781Npmn/SIBZEsAetR4xVi0SxLMXPaMO4lSf1MwnkGYMtkFxew0Dn8B3/CpbpYxN0JCgg8mn67g==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-define-polyfill-provider": "^0.6.2",
- "core-js-compat": "^3.38.0"
+ "@babel/helper-define-polyfill-provider": "^0.6.8",
+ "core-js-compat": "^3.48.0"
},
"peerDependencies": {
"@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0"
}
},
"node_modules/babel-plugin-polyfill-regenerator": {
- "version": "0.6.3",
- "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.3.tgz",
- "integrity": "sha512-LiWSbl4CRSIa5x/JAU6jZiG9eit9w6mz+yVMFwDE83LAWvt0AfGBoZ7HS/mkhrKuh2ZlzfVZYKoLjXdqw6Yt7Q==",
+ "version": "0.6.8",
+ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.8.tgz",
+ "integrity": "sha512-M762rNHfSF1EV3SLtnCJXFoQbbIIz0OyRwnCmV0KPC7qosSfCO0QLTSuJX3ayAebubhE6oYBAYPrBA5ljowaZg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-define-polyfill-provider": "^0.6.3"
+ "@babel/helper-define-polyfill-provider": "^0.6.8"
},
"peerDependencies": {
"@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0"
@@ -7435,22 +5563,33 @@
}
},
"node_modules/babel-preset-jest": {
- "version": "29.6.3",
- "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz",
- "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==",
+ "version": "26.6.2",
+ "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-26.6.2.tgz",
+ "integrity": "sha512-YvdtlVm9t3k777c5NPQIv6cxFFFapys25HiUmuSgHwIZhfifweR5c5Sf5nwE3MAbfu327CYSvps8Yx6ANLyleQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "babel-plugin-jest-hoist": "^29.6.3",
+ "babel-plugin-jest-hoist": "^26.6.2",
"babel-preset-current-node-syntax": "^1.0.0"
},
"engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ "node": ">= 10.14.2"
},
"peerDependencies": {
"@babel/core": "^7.0.0"
}
},
+ "node_modules/bail": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz",
+ "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
"node_modules/balanced-match": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
@@ -7458,101 +5597,36 @@
"dev": true,
"license": "MIT"
},
- "node_modules/bare-events": {
- "version": "2.8.0",
- "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.8.0.tgz",
- "integrity": "sha512-AOhh6Bg5QmFIXdViHbMc2tLDsBIRxdkIaIddPslJF9Z5De3APBScuqGP2uThXnIpqFrgoxMNC6km7uXNIMLHXA==",
+ "node_modules/base": {
+ "version": "0.11.2",
+ "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
+ "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
"dev": true,
- "license": "Apache-2.0",
- "peerDependencies": {
- "bare-abort-controller": "*"
- },
- "peerDependenciesMeta": {
- "bare-abort-controller": {
- "optional": true
- }
- }
- },
- "node_modules/bare-fs": {
- "version": "4.4.11",
- "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-4.4.11.tgz",
- "integrity": "sha512-Bejmm9zRMvMTRoHS+2adgmXw1ANZnCNx+B5dgZpGwlP1E3x6Yuxea8RToddHUbWtVV0iUMWqsgZr8+jcgUI2SA==",
- "dev": true,
- "license": "Apache-2.0",
- "optional": true,
+ "license": "MIT",
"dependencies": {
- "bare-events": "^2.5.4",
- "bare-path": "^3.0.0",
- "bare-stream": "^2.6.4",
- "bare-url": "^2.2.2",
- "fast-fifo": "^1.3.2"
+ "cache-base": "^1.0.1",
+ "class-utils": "^0.3.5",
+ "component-emitter": "^1.2.1",
+ "define-property": "^1.0.0",
+ "isobject": "^3.0.1",
+ "mixin-deep": "^1.2.0",
+ "pascalcase": "^0.1.1"
},
"engines": {
- "bare": ">=1.16.0"
- },
- "peerDependencies": {
- "bare-buffer": "*"
- },
- "peerDependenciesMeta": {
- "bare-buffer": {
- "optional": true
- }
+ "node": ">=0.10.0"
}
},
- "node_modules/bare-os": {
- "version": "3.6.2",
- "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-3.6.2.tgz",
- "integrity": "sha512-T+V1+1srU2qYNBmJCXZkUY5vQ0B4FSlL3QDROnKQYOqeiQR8UbjNHlPa+TIbM4cuidiN9GaTaOZgSEgsvPbh5A==",
+ "node_modules/base/node_modules/define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==",
"dev": true,
- "license": "Apache-2.0",
- "optional": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-descriptor": "^1.0.0"
+ },
"engines": {
- "bare": ">=1.14.0"
- }
- },
- "node_modules/bare-path": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/bare-path/-/bare-path-3.0.0.tgz",
- "integrity": "sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==",
- "dev": true,
- "license": "Apache-2.0",
- "optional": true,
- "dependencies": {
- "bare-os": "^3.0.1"
- }
- },
- "node_modules/bare-stream": {
- "version": "2.7.0",
- "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-2.7.0.tgz",
- "integrity": "sha512-oyXQNicV1y8nc2aKffH+BUHFRXmx6VrPzlnaEvMhram0nPBrKcEdcyBg5r08D0i8VxngHFAiVyn1QKXpSG0B8A==",
- "dev": true,
- "license": "Apache-2.0",
- "optional": true,
- "dependencies": {
- "streamx": "^2.21.0"
- },
- "peerDependencies": {
- "bare-buffer": "*",
- "bare-events": "*"
- },
- "peerDependenciesMeta": {
- "bare-buffer": {
- "optional": true
- },
- "bare-events": {
- "optional": true
- }
- }
- },
- "node_modules/bare-url": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/bare-url/-/bare-url-2.3.1.tgz",
- "integrity": "sha512-v2yl0TnaZTdEnelkKtXZGnotiV6qATBlnNuUMrHl6v9Lmmrh9mw9RYyImPU7/4RahumSwQS1k2oKXcRfXcbjJw==",
- "dev": true,
- "license": "Apache-2.0",
- "optional": true,
- "dependencies": {
- "bare-path": "^3.0.0"
+ "node": ">=0.10.0"
}
},
"node_modules/base64-js": {
@@ -7577,32 +5651,18 @@
"license": "MIT"
},
"node_modules/baseline-browser-mapping": {
- "version": "2.9.11",
- "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.11.tgz",
- "integrity": "sha512-Sg0xJUNDU1sJNGdfGWhVHX0kkZ+HWcvmVymJbj6NSgZZmW/8S9Y2HQ5euytnIgakgxN6papOAWiwDo1ctFDcoQ==",
+ "version": "2.10.24",
+ "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.24.tgz",
+ "integrity": "sha512-I2NkZOOrj2XuguvWCK6OVh9GavsNjZjK908Rq3mIBK25+GD8vPX5w2WdxVqnQ7xx3SrZJiCiZFu+/Oz50oSYSA==",
"dev": true,
"license": "Apache-2.0",
"bin": {
- "baseline-browser-mapping": "dist/cli.js"
- }
- },
- "node_modules/basic-ftp": {
- "version": "5.0.5",
- "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.0.5.tgz",
- "integrity": "sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==",
- "dev": true,
- "license": "MIT",
+ "baseline-browser-mapping": "dist/cli.cjs"
+ },
"engines": {
- "node": ">=10.0.0"
+ "node": ">=6.0.0"
}
},
- "node_modules/batch": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz",
- "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/big.js": {
"version": "5.2.2",
"resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz",
@@ -7613,83 +5673,28 @@
"node": "*"
}
},
- "node_modules/binary-extensions": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz",
- "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/body-parser": {
- "version": "1.20.3",
- "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz",
- "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==",
+ "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,
"license": "MIT",
"dependencies": {
- "bytes": "3.1.2",
- "content-type": "~1.0.5",
- "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.13.0",
- "raw-body": "2.5.2",
- "type-is": "~1.6.18",
- "unpipe": "1.0.0"
- },
- "engines": {
- "node": ">= 0.8",
- "npm": "1.2.8000 || >= 1.4.16"
+ "buffer": "^5.5.0",
+ "inherits": "^2.0.4",
+ "readable-stream": "^3.4.0"
}
},
- "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==",
+ "node_modules/body": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/body/-/body-5.1.0.tgz",
+ "integrity": "sha512-chUsBxGRtuElD6fmw1gHLpvnKdVLK302peeFa9ZqAEk8TyzZ3fygLyUEDDPTJvL9+Bor0dIwn6ePOsRM2y0zQQ==",
"dev": true,
- "license": "MIT",
"dependencies": {
- "ms": "2.0.0"
- }
- },
- "node_modules/body-parser/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,
- "license": "MIT",
- "dependencies": {
- "safer-buffer": ">= 2.1.2 < 3"
- },
- "engines": {
- "node": ">=0.10.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,
- "license": "MIT"
- },
- "node_modules/bonjour-service": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.3.0.tgz",
- "integrity": "sha512-3YuAUiSkWykd+2Azjgyxei8OWf8thdn8AITIog2M4UICzoqfjlqr64WIjEXZllf/W6vK1goqleSR6brGomxQqA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "fast-deep-equal": "^3.1.3",
- "multicast-dns": "^7.2.5"
+ "continuable-cache": "^0.3.1",
+ "error": "^7.0.0",
+ "raw-body": "~1.1.0",
+ "safe-json-parse": "~1.0.1"
}
},
"node_modules/boolbase": {
@@ -7700,13 +5705,14 @@
"license": "ISC"
},
"node_modules/brace-expansion": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
- "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
+ "version": "1.1.14",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz",
+ "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==",
"dev": true,
"license": "MIT",
"dependencies": {
- "balanced-match": "^1.0.0"
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
}
},
"node_modules/braces": {
@@ -7722,10 +5728,17 @@
"node": ">=8"
}
},
+ "node_modules/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,
+ "license": "BSD-2-Clause"
+ },
"node_modules/browserslist": {
- "version": "4.28.1",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz",
- "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==",
+ "version": "4.28.2",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.2.tgz",
+ "integrity": "sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg==",
"dev": true,
"funding": [
{
@@ -7742,13 +5755,12 @@
}
],
"license": "MIT",
- "peer": true,
"dependencies": {
- "baseline-browser-mapping": "^2.9.0",
- "caniuse-lite": "^1.0.30001759",
- "electron-to-chromium": "^1.5.263",
- "node-releases": "^2.0.27",
- "update-browserslist-db": "^1.2.0"
+ "baseline-browser-mapping": "^2.10.12",
+ "caniuse-lite": "^1.0.30001782",
+ "electron-to-chromium": "^1.5.328",
+ "node-releases": "^2.0.36",
+ "update-browserslist-db": "^1.2.3"
},
"bin": {
"browserslist": "cli.js"
@@ -7809,63 +5821,43 @@
"dev": true,
"license": "MIT"
},
- "node_modules/builtin-modules": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz",
- "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/bytes": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
- "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
+ "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/cache-base": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
+ "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
"dev": true,
"license": "MIT",
+ "dependencies": {
+ "collection-visit": "^1.0.0",
+ "component-emitter": "^1.2.1",
+ "get-value": "^2.0.6",
+ "has-value": "^1.0.0",
+ "isobject": "^3.0.1",
+ "set-value": "^2.0.0",
+ "to-object-path": "^0.3.0",
+ "union-value": "^1.0.0",
+ "unset-value": "^1.0.0"
+ },
"engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/cacheable": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/cacheable/-/cacheable-2.3.1.tgz",
- "integrity": "sha512-yr+FSHWn1ZUou5LkULX/S+jhfgfnLbuKQjE40tyEd4fxGZVMbBL5ifno0J0OauykS8UiCSgHi+DV/YD+rjFxFg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@cacheable/memory": "^2.0.6",
- "@cacheable/utils": "^2.3.2",
- "hookified": "^1.14.0",
- "keyv": "^5.5.5",
- "qified": "^0.5.3"
- }
- },
- "node_modules/cacheable/node_modules/keyv": {
- "version": "5.5.5",
- "resolved": "https://registry.npmjs.org/keyv/-/keyv-5.5.5.tgz",
- "integrity": "sha512-FA5LmZVF1VziNc0bIdCSA1IoSVnDCqE8HJIZZv2/W8YmoAM50+tnUgJR/gQZwEeIMleuIOnRnHA/UaZRNeV4iQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@keyv/serialize": "^1.1.1"
+ "node": ">=0.10.0"
}
},
"node_modules/call-bind": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz",
- "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==",
+ "version": "1.0.9",
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.9.tgz",
+ "integrity": "sha512-a/hy+pNsFUTR+Iz8TCJvXudKVLAnz/DyeSUo10I5yvFDQJBFU2s9uqQpoSrJlroHUKoKqzg+epxyP9lqFdzfBQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "call-bind-apply-helpers": "^1.0.0",
- "es-define-property": "^1.0.0",
- "get-intrinsic": "^1.2.4",
+ "call-bind-apply-helpers": "^1.0.2",
+ "es-define-property": "^1.0.1",
+ "get-intrinsic": "^1.3.0",
"set-function-length": "^1.2.2"
},
"engines": {
@@ -7982,9 +5974,9 @@
}
},
"node_modules/caniuse-lite": {
- "version": "1.0.30001762",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001762.tgz",
- "integrity": "sha512-PxZwGNvH7Ak8WX5iXzoK1KPZttBXNPuaOvI2ZYU7NrlM+d9Ov+TUvlLOBNGzVXAntMSMMlJPd+jY6ovrVjSmUw==",
+ "version": "1.0.30001791",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001791.tgz",
+ "integrity": "sha512-yk0l/YSrOnFZk3UROpDLQD9+kC1l4meK/wed583AXrzoarMGJcbRi2Q4RaUYbKxYAsZ8sWmaSa/DsLmdBeI1vQ==",
"dev": true,
"funding": [
{
@@ -8014,6 +6006,19 @@
"upper-case-first": "^2.0.2"
}
},
+ "node_modules/capture-exit": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz",
+ "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "rsvp": "^4.8.4"
+ },
+ "engines": {
+ "node": "6.* || 8.* || >= 10.*"
+ }
+ },
"node_modules/chalk": {
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
@@ -8062,6 +6067,39 @@
"node": ">=10"
}
},
+ "node_modules/character-entities": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz",
+ "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/character-entities-legacy": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz",
+ "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/character-reference-invalid": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz",
+ "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
"node_modules/check-node-version": {
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/check-node-version/-/check-node-version-4.2.1.tgz",
@@ -8097,6 +6135,50 @@
"node": ">=8"
}
},
+ "node_modules/cheerio": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.2.0.tgz",
+ "integrity": "sha512-WDrybc/gKFpTYQutKIK6UvfcuxijIZfMfXaYm8NMsPQxSYvf+13fXUJ4rztGGbJcBQ/GF55gvrZ0Bc0bj/mqvg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "cheerio-select": "^2.1.0",
+ "dom-serializer": "^2.0.0",
+ "domhandler": "^5.0.3",
+ "domutils": "^3.2.2",
+ "encoding-sniffer": "^0.2.1",
+ "htmlparser2": "^10.1.0",
+ "parse5": "^7.3.0",
+ "parse5-htmlparser2-tree-adapter": "^7.1.0",
+ "parse5-parser-stream": "^7.1.2",
+ "undici": "^7.19.0",
+ "whatwg-mimetype": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=20.18.1"
+ },
+ "funding": {
+ "url": "https://github.com/cheeriojs/cheerio?sponsor=1"
+ }
+ },
+ "node_modules/cheerio-select": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz",
+ "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "boolbase": "^1.0.0",
+ "css-select": "^5.1.0",
+ "css-what": "^6.1.0",
+ "domelementtype": "^2.3.0",
+ "domhandler": "^5.0.3",
+ "domutils": "^3.0.1"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/fb55"
+ }
+ },
"node_modules/chokidar": {
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz",
@@ -8113,24 +6195,12 @@
"url": "https://paulmillr.com/funding/"
}
},
- "node_modules/chrome-launcher": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/chrome-launcher/-/chrome-launcher-1.2.1.tgz",
- "integrity": "sha512-qmFR5PLMzHyuNJHwOloHPAHhbaNglkfeV/xDtt5b7xiFFyU1I+AZZX0PYseMuhenJSSirgxELYIbswcoc+5H4A==",
+ "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,
- "license": "Apache-2.0",
- "dependencies": {
- "@types/node": "*",
- "escape-string-regexp": "^4.0.0",
- "is-wsl": "^2.2.0",
- "lighthouse-logger": "^2.0.1"
- },
- "bin": {
- "print-chrome-path": "bin/print-chrome-path.cjs"
- },
- "engines": {
- "node": ">=12.13.0"
- }
+ "license": "ISC"
},
"node_modules/chrome-trace-event": {
"version": "1.0.4",
@@ -8142,56 +6212,90 @@
"node": ">=6.0"
}
},
- "node_modules/chromium-bidi": {
- "version": "0.11.0",
- "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.11.0.tgz",
- "integrity": "sha512-6CJWHkNRoyZyjV9Rwv2lYONZf1Xm0IuDyNq97nwSsxxP3wf5Bwy15K5rOvVKMtJ127jJBmxFUanSAOjgFRxgrA==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "mitt": "3.0.1",
- "zod": "3.23.8"
- },
- "peerDependencies": {
- "devtools-protocol": "*"
- }
- },
"node_modules/ci-info": {
- "version": "3.9.0",
- "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz",
- "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/sibiraj-s"
- }
- ],
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/cjs-module-lexer": {
- "version": "1.4.3",
- "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.3.tgz",
- "integrity": "sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz",
+ "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==",
"dev": true,
"license": "MIT"
},
+ "node_modules/cjs-module-lexer": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-0.6.0.tgz",
+ "integrity": "sha512-uc2Vix1frTfnuzxxu1Hp4ktSvM3QaI4oXl4ZUqL1wjTu/BGki9TrCWoqLTg/drR1KwAEarXuRFCG2Svr1GxPFw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/class-utils": {
+ "version": "0.3.6",
+ "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
+ "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "arr-union": "^3.1.0",
+ "define-property": "^0.2.5",
+ "isobject": "^3.0.0",
+ "static-extend": "^0.1.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/class-utils/node_modules/define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-descriptor": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/class-utils/node_modules/is-descriptor": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz",
+ "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-accessor-descriptor": "^1.0.1",
+ "is-data-descriptor": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/clean-webpack-plugin": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/clean-webpack-plugin/-/clean-webpack-plugin-3.0.0.tgz",
+ "integrity": "sha512-MciirUH5r+cYLGCOL5JX/ZLzOZbVr1ot3Fw+KcvbhUb6PM+yycqd9ZhIlcigQ5gl+XhppNmw3bEFuaaMNyLj3A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/webpack": "^4.4.31",
+ "del": "^4.1.1"
+ },
+ "engines": {
+ "node": ">=8.9.0"
+ },
+ "peerDependencies": {
+ "webpack": "*"
+ }
+ },
"node_modules/cliui": {
- "version": "8.0.1",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
- "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz",
+ "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==",
"dev": true,
"license": "ISC",
"dependencies": {
"string-width": "^4.2.0",
- "strip-ansi": "^6.0.1",
- "wrap-ansi": "^7.0.0"
- },
- "engines": {
- "node": ">=12"
+ "strip-ansi": "^6.0.0",
+ "wrap-ansi": "^6.2.0"
}
},
"node_modules/clone-deep": {
@@ -8224,6 +6328,19 @@
"node": ">=0.10.0"
}
},
+ "node_modules/clone-regexp": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/clone-regexp/-/clone-regexp-2.2.0.tgz",
+ "integrity": "sha512-beMpP7BOtTipFuW8hrJvREQ2DrRu3BE7by0ZpibtfBA+qfHYvMGTc2Yb1JMYPKg/JUw0CHYvpg796aNTSW9z7Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-regexp": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
"node_modules/co": {
"version": "4.6.0",
"resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
@@ -8235,6 +6352,99 @@
"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,
+ "license": "MIT",
+ "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,
+ "license": "MIT",
+ "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,
+ "license": "MIT",
+ "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,
+ "license": "MIT",
+ "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,
+ "license": "MIT"
+ },
+ "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,
+ "license": "MIT",
+ "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,
+ "license": "MIT",
+ "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,
+ "license": "MIT",
+ "dependencies": {
+ "has-flag": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
"node_modules/collect-v8-coverage": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.3.tgz",
@@ -8242,6 +6452,20 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/collection-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
+ "integrity": "sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "map-visit": "^1.0.0",
+ "object-visit": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
@@ -8300,71 +6524,32 @@
}
},
"node_modules/comment-parser": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.4.1.tgz",
- "integrity": "sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg==",
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.2.4.tgz",
+ "integrity": "sha512-pm0b+qv+CkWNriSTMsfnjChF9kH0kxz55y44Wo5le9qLxMj5xDQAaEd9ZN1ovSuk9CsrncWaFwgpOMg7ClJwkw==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 12.0.0"
}
},
- "node_modules/common-path-prefix": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz",
- "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/compressible": {
- "version": "2.0.18",
- "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz",
- "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "mime-db": ">= 1.43.0 < 2"
- },
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/compression": {
- "version": "1.8.1",
- "resolved": "https://registry.npmjs.org/compression/-/compression-1.8.1.tgz",
- "integrity": "sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "bytes": "3.1.2",
- "compressible": "~2.0.18",
- "debug": "2.6.9",
- "negotiator": "~0.6.4",
- "on-headers": "~1.1.0",
- "safe-buffer": "5.2.1",
- "vary": "~1.1.2"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/compression/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,
- "license": "MIT",
- "dependencies": {
- "ms": "2.0.0"
- }
- },
- "node_modules/compression/node_modules/ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
+ "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,
"license": "MIT"
},
+ "node_modules/component-emitter": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.1.tgz",
+ "integrity": "sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/concat-map": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
@@ -8372,35 +6557,6 @@
"dev": true,
"license": "MIT"
},
- "node_modules/configstore": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/configstore/-/configstore-7.1.0.tgz",
- "integrity": "sha512-N4oog6YJWbR9kGyXvS7jEykLDXIE2C0ILYqNBZBp9iwiJpoCBWYsuAdW6PPFn6w06jjnC+3JstVvWHO4cZqvRg==",
- "dev": true,
- "license": "BSD-2-Clause",
- "dependencies": {
- "atomically": "^2.0.3",
- "dot-prop": "^9.0.0",
- "graceful-fs": "^4.2.11",
- "xdg-basedir": "^5.1.0"
- },
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/connect-history-api-fallback": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz",
- "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.8"
- }
- },
"node_modules/constant-case": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/constant-case/-/constant-case-3.0.4.tgz",
@@ -8413,28 +6569,11 @@
"upper-case": "^2.0.2"
}
},
- "node_modules/content-disposition": {
- "version": "0.5.4",
- "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz",
- "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "safe-buffer": "5.2.1"
- },
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/content-type": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz",
- "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==",
- "dev": true,
- "license": "MIT",
- "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": "2.0.0",
@@ -8443,99 +6582,20 @@
"dev": true,
"license": "MIT"
},
- "node_modules/cookie": {
- "version": "0.7.1",
- "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz",
- "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==",
+ "node_modules/copy-descriptor": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
+ "integrity": "sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==",
"dev": true,
"license": "MIT",
"engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/cookie-signature": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
- "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/copy-webpack-plugin": {
- "version": "10.2.4",
- "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-10.2.4.tgz",
- "integrity": "sha512-xFVltahqlsRcyyJqQbDY6EYTtyQZF9rf+JPjwHObLdPFMEISqkFkr7mFoVOC6BfYS/dNThyoQKvziugm+OnwBg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "fast-glob": "^3.2.7",
- "glob-parent": "^6.0.1",
- "globby": "^12.0.2",
- "normalize-path": "^3.0.0",
- "schema-utils": "^4.0.0",
- "serialize-javascript": "^6.0.0"
- },
- "engines": {
- "node": ">= 12.20.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/webpack"
- },
- "peerDependencies": {
- "webpack": "^5.1.0"
- }
- },
- "node_modules/copy-webpack-plugin/node_modules/array-union": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/array-union/-/array-union-3.0.1.tgz",
- "integrity": "sha512-1OvF9IbWwaeiM9VhzYXVQacMibxpXOMYVNIvMtKRyX9SImBXpKcFr8XvFDeEslCyuH/t6KRt7HEO94AlP8Iatw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/copy-webpack-plugin/node_modules/globby": {
- "version": "12.2.0",
- "resolved": "https://registry.npmjs.org/globby/-/globby-12.2.0.tgz",
- "integrity": "sha512-wiSuFQLZ+urS9x2gGPl1H5drc5twabmm4m2gTR27XDFyjUHJUNsS8o/2aKyIF6IoBaR630atdher0XJ5g6OMmA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "array-union": "^3.0.1",
- "dir-glob": "^3.0.1",
- "fast-glob": "^3.2.7",
- "ignore": "^5.1.9",
- "merge2": "^1.4.1",
- "slash": "^4.0.0"
- },
- "engines": {
- "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/copy-webpack-plugin/node_modules/slash": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz",
- "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "node": ">=0.10.0"
}
},
"node_modules/core-js": {
- "version": "3.47.0",
- "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.47.0.tgz",
- "integrity": "sha512-c3Q2VVkGAUyupsjRnaNX6u8Dq2vAdzm9iuPj5FW0fRxzlxgq9Q39MDq10IvmQSpLgHQNyQzQmOo6bgGHmH3NNg==",
+ "version": "3.49.0",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.49.0.tgz",
+ "integrity": "sha512-es1U2+YTtzpwkxVLwAFdSpaIMyQaq0PBgm3YD1W3Qpsn1NAmO3KSgZfu+oGSWVu6NvLHoHCV/aYcsE5wiB7ALg==",
"dev": true,
"hasInstallScript": true,
"license": "MIT",
@@ -8545,152 +6605,79 @@
}
},
"node_modules/core-js-compat": {
- "version": "3.40.0",
- "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.40.0.tgz",
- "integrity": "sha512-0XEDpr5y5mijvw8Lbc6E5AkjrHfp7eEoPlu36SWeAbcL8fn1G1ANe8DBlo2XoNN89oVpxWwOjYIPVzR4ZvsKCQ==",
+ "version": "3.49.0",
+ "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.49.0.tgz",
+ "integrity": "sha512-VQXt1jr9cBz03b331DFDCCP90b3fanciLkgiOoy8SBHy06gNf+vQ1A3WFLqG7I8TipYIKeYK9wxd0tUrvHcOZA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "browserslist": "^4.24.3"
+ "browserslist": "^4.28.1"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/core-js"
}
},
- "node_modules/core-js-pure": {
- "version": "3.40.0",
- "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.40.0.tgz",
- "integrity": "sha512-AtDzVIgRrmRKQai62yuSIN5vNiQjcJakJb4fbhVw3ehxx7Lohphvw9SGNWKhLFqSxC4ilD0g/L1huAYFQU3Q6A==",
- "dev": true,
- "hasInstallScript": true,
- "license": "MIT",
- "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,
- "license": "MIT"
- },
"node_modules/cosmiconfig": {
- "version": "8.3.6",
- "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz",
- "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==",
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz",
+ "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "import-fresh": "^3.3.0",
- "js-yaml": "^4.1.0",
- "parse-json": "^5.2.0",
- "path-type": "^4.0.0"
+ "@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": ">=14"
- },
- "funding": {
- "url": "https://github.com/sponsors/d-fischer"
- },
- "peerDependencies": {
- "typescript": ">=4.9.5"
- },
- "peerDependenciesMeta": {
- "typescript": {
- "optional": true
- }
- }
- },
- "node_modules/cosmiconfig/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,
- "license": "Python-2.0"
- },
- "node_modules/cosmiconfig/node_modules/js-yaml": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz",
- "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "argparse": "^2.0.1"
- },
- "bin": {
- "js-yaml": "bin/js-yaml.js"
- }
- },
- "node_modules/create-jest": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz",
- "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@jest/types": "^29.6.3",
- "chalk": "^4.0.0",
- "exit": "^0.1.2",
- "graceful-fs": "^4.2.9",
- "jest-config": "^29.7.0",
- "jest-util": "^29.7.0",
- "prompts": "^2.0.1"
- },
- "bin": {
- "create-jest": "bin/create-jest.js"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ "node": ">=10"
}
},
"node_modules/cross-spawn": {
- "version": "7.0.6",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
- "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz",
+ "integrity": "sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==",
"dev": true,
"license": "MIT",
"dependencies": {
- "path-key": "^3.1.0",
- "shebang-command": "^2.0.0",
- "which": "^2.0.1"
- },
- "engines": {
- "node": ">= 8"
+ "lru-cache": "^4.0.1",
+ "shebang-command": "^1.2.0",
+ "which": "^1.2.9"
}
},
- "node_modules/csp_evaluator": {
- "version": "1.1.5",
- "resolved": "https://registry.npmjs.org/csp_evaluator/-/csp_evaluator-1.1.5.tgz",
- "integrity": "sha512-EL/iN9etCTzw/fBnp0/uj0f5BOOGvZut2mzsiiBZ/FdT6gFQCKRO/tmcKOxn5drWZ2Ndm/xBb1SI4zwWbGtmIw==",
+ "node_modules/cross-spawn/node_modules/lru-cache": {
+ "version": "4.1.5",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
+ "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
"dev": true,
- "license": "Apache-2.0"
+ "license": "ISC",
+ "dependencies": {
+ "pseudomap": "^1.0.2",
+ "yallist": "^2.1.2"
+ }
+ },
+ "node_modules/cross-spawn/node_modules/yallist": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
+ "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==",
+ "dev": true,
+ "license": "ISC"
},
"node_modules/css-declaration-sorter": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-7.2.0.tgz",
- "integrity": "sha512-h70rUM+3PNFuaBDTLe8wF/cdWu+dOZmb7pJt8Z2sedYbAcQVQV/tEchueg3GWxwqS0cxtbxmaHEdkNACqcvsow==",
+ "version": "6.4.1",
+ "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.4.1.tgz",
+ "integrity": "sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g==",
"dev": true,
"license": "ISC",
"engines": {
- "node": "^14 || ^16 || >=18"
+ "node": "^10 || ^12 || >=14"
},
"peerDependencies": {
"postcss": "^8.0.9"
}
},
- "node_modules/css-functions-list": {
- "version": "3.2.3",
- "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.2.3.tgz",
- "integrity": "sha512-IQOkD3hbR5KrN93MtcYuad6YPuTSUhntLHDuLEbFWE+ff2/XSZNdZG+LcbbIW5AXKg/WFIfYItIzVoHngHXZzA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=12 || >=16"
- }
- },
"node_modules/css-loader": {
"version": "6.11.0",
"resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.11.0.tgz",
@@ -8741,9 +6728,9 @@
}
},
"node_modules/css-select": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz",
- "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==",
+ "version": "5.2.2",
+ "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.2.2.tgz",
+ "integrity": "sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==",
"dev": true,
"license": "BSD-2-Clause",
"dependencies": {
@@ -8757,24 +6744,31 @@
"url": "https://github.com/sponsors/fb55"
}
},
+ "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,
+ "license": "MIT"
+ },
"node_modules/css-tree": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.1.0.tgz",
- "integrity": "sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==",
+ "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,
"license": "MIT",
"dependencies": {
- "mdn-data": "2.12.2",
- "source-map-js": "^1.0.1"
+ "mdn-data": "2.0.4",
+ "source-map": "^0.6.1"
},
"engines": {
- "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0"
+ "node": ">=8.0.0"
}
},
"node_modules/css-what": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz",
- "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==",
+ "version": "6.2.2",
+ "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz",
+ "integrity": "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==",
"dev": true,
"license": "BSD-2-Clause",
"engines": {
@@ -8798,134 +6792,152 @@
}
},
"node_modules/cssnano": {
- "version": "6.1.2",
- "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-6.1.2.tgz",
- "integrity": "sha512-rYk5UeX7VAM/u0lNqewCdasdtPK81CgX8wJFLEIXHbV2oldWRgJAsZrdhRXkV1NJzA2g850KiFm9mMU2HxNxMA==",
+ "version": "5.1.15",
+ "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.1.15.tgz",
+ "integrity": "sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "cssnano-preset-default": "^6.1.2",
- "lilconfig": "^3.1.1"
+ "cssnano-preset-default": "^5.2.14",
+ "lilconfig": "^2.0.3",
+ "yaml": "^1.10.2"
},
"engines": {
- "node": "^14 || ^16 || >=18.0"
+ "node": "^10 || ^12 || >=14.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/cssnano"
},
"peerDependencies": {
- "postcss": "^8.4.31"
+ "postcss": "^8.2.15"
}
},
"node_modules/cssnano-preset-default": {
- "version": "6.1.2",
- "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-6.1.2.tgz",
- "integrity": "sha512-1C0C+eNaeN8OcHQa193aRgYexyJtU8XwbdieEjClw+J9d94E41LwT6ivKH0WT+fYwYWB0Zp3I3IZ7tI/BbUbrg==",
+ "version": "5.2.14",
+ "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.14.tgz",
+ "integrity": "sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==",
"dev": true,
"license": "MIT",
"dependencies": {
- "browserslist": "^4.23.0",
- "css-declaration-sorter": "^7.2.0",
- "cssnano-utils": "^4.0.2",
- "postcss-calc": "^9.0.1",
- "postcss-colormin": "^6.1.0",
- "postcss-convert-values": "^6.1.0",
- "postcss-discard-comments": "^6.0.2",
- "postcss-discard-duplicates": "^6.0.3",
- "postcss-discard-empty": "^6.0.3",
- "postcss-discard-overridden": "^6.0.2",
- "postcss-merge-longhand": "^6.0.5",
- "postcss-merge-rules": "^6.1.1",
- "postcss-minify-font-values": "^6.1.0",
- "postcss-minify-gradients": "^6.0.3",
- "postcss-minify-params": "^6.1.0",
- "postcss-minify-selectors": "^6.0.4",
- "postcss-normalize-charset": "^6.0.2",
- "postcss-normalize-display-values": "^6.0.2",
- "postcss-normalize-positions": "^6.0.2",
- "postcss-normalize-repeat-style": "^6.0.2",
- "postcss-normalize-string": "^6.0.2",
- "postcss-normalize-timing-functions": "^6.0.2",
- "postcss-normalize-unicode": "^6.1.0",
- "postcss-normalize-url": "^6.0.2",
- "postcss-normalize-whitespace": "^6.0.2",
- "postcss-ordered-values": "^6.0.2",
- "postcss-reduce-initial": "^6.1.0",
- "postcss-reduce-transforms": "^6.0.2",
- "postcss-svgo": "^6.0.3",
- "postcss-unique-selectors": "^6.0.4"
+ "css-declaration-sorter": "^6.3.1",
+ "cssnano-utils": "^3.1.0",
+ "postcss-calc": "^8.2.3",
+ "postcss-colormin": "^5.3.1",
+ "postcss-convert-values": "^5.1.3",
+ "postcss-discard-comments": "^5.1.2",
+ "postcss-discard-duplicates": "^5.1.0",
+ "postcss-discard-empty": "^5.1.1",
+ "postcss-discard-overridden": "^5.1.0",
+ "postcss-merge-longhand": "^5.1.7",
+ "postcss-merge-rules": "^5.1.4",
+ "postcss-minify-font-values": "^5.1.0",
+ "postcss-minify-gradients": "^5.1.1",
+ "postcss-minify-params": "^5.1.4",
+ "postcss-minify-selectors": "^5.2.1",
+ "postcss-normalize-charset": "^5.1.0",
+ "postcss-normalize-display-values": "^5.1.0",
+ "postcss-normalize-positions": "^5.1.1",
+ "postcss-normalize-repeat-style": "^5.1.1",
+ "postcss-normalize-string": "^5.1.0",
+ "postcss-normalize-timing-functions": "^5.1.0",
+ "postcss-normalize-unicode": "^5.1.1",
+ "postcss-normalize-url": "^5.1.0",
+ "postcss-normalize-whitespace": "^5.1.1",
+ "postcss-ordered-values": "^5.1.3",
+ "postcss-reduce-initial": "^5.1.2",
+ "postcss-reduce-transforms": "^5.1.0",
+ "postcss-svgo": "^5.1.0",
+ "postcss-unique-selectors": "^5.1.1"
},
"engines": {
- "node": "^14 || ^16 || >=18.0"
+ "node": "^10 || ^12 || >=14.0"
},
"peerDependencies": {
- "postcss": "^8.4.31"
+ "postcss": "^8.2.15"
}
},
"node_modules/cssnano-utils": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-4.0.2.tgz",
- "integrity": "sha512-ZR1jHg+wZ8o4c3zqf1SIUSTIvm/9mU343FMR6Obe/unskbvpGhZOo1J6d/r8D1pzkRQYuwbcH3hToOuoA2G7oQ==",
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.1.0.tgz",
+ "integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==",
"dev": true,
"license": "MIT",
"engines": {
- "node": "^14 || ^16 || >=18.0"
+ "node": "^10 || ^12 || >=14.0"
},
"peerDependencies": {
- "postcss": "^8.4.31"
+ "postcss": "^8.2.15"
}
},
"node_modules/csso": {
- "version": "5.0.5",
- "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz",
- "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==",
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz",
+ "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "css-tree": "~2.2.0"
+ "css-tree": "^1.1.2"
},
"engines": {
- "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0",
- "npm": ">=7.0.0"
+ "node": ">=8.0.0"
}
},
"node_modules/csso/node_modules/css-tree": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz",
- "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==",
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz",
+ "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==",
"dev": true,
"license": "MIT",
"dependencies": {
- "mdn-data": "2.0.28",
- "source-map-js": "^1.0.1"
+ "mdn-data": "2.0.14",
+ "source-map": "^0.6.1"
},
"engines": {
- "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0",
- "npm": ">=7.0.0"
+ "node": ">=8.0.0"
}
},
"node_modules/csso/node_modules/mdn-data": {
- "version": "2.0.28",
- "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz",
- "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==",
+ "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,
"license": "CC0-1.0"
},
+ "node_modules/cssom": {
+ "version": "0.4.4",
+ "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz",
+ "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/cssstyle": {
- "version": "4.6.0",
- "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.6.0.tgz",
- "integrity": "sha512-2z+rWdzbbSZv6/rhtvzvqeZQHrBaqgogqt85sqFNbabZOuFbCVFb8kPeEtZjiKkbrm395irpNKiYeFeLiQnFPg==",
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz",
+ "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@asamuzakjp/css-color": "^3.2.0",
- "rrweb-cssom": "^0.8.0"
+ "cssom": "~0.3.6"
},
"engines": {
- "node": ">=18"
+ "node": ">=8"
}
},
+ "node_modules/cssstyle/node_modules/cssom": {
+ "version": "0.3.8",
+ "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz",
+ "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/csstype": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz",
+ "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/cwd": {
"version": "0.10.0",
"resolved": "https://registry.npmjs.org/cwd/-/cwd-0.10.0.tgz",
@@ -8947,30 +6959,28 @@
"dev": true,
"license": "BSD-2-Clause"
},
- "node_modules/data-uri-to-buffer": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-6.0.2.tgz",
- "integrity": "sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 14"
- }
- },
"node_modules/data-urls": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-5.0.0.tgz",
- "integrity": "sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz",
+ "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "whatwg-mimetype": "^4.0.0",
- "whatwg-url": "^14.0.0"
+ "abab": "^2.0.3",
+ "whatwg-mimetype": "^2.3.0",
+ "whatwg-url": "^8.0.0"
},
"engines": {
- "node": ">=18"
+ "node": ">=10"
}
},
+ "node_modules/data-urls/node_modules/whatwg-mimetype": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz",
+ "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/data-view-buffer": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz",
@@ -9088,27 +7098,29 @@
}
},
"node_modules/decimal.js": {
- "version": "10.5.0",
- "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.5.0.tgz",
- "integrity": "sha512-8vDa8Qxvr/+d94hSh5P3IJwI5t8/c0KsMp+g8bNw9cY2icONa5aPfvKeieW1WlG0WQYwwhJ7mjui2xtiePQSXw==",
+ "version": "10.6.0",
+ "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.6.0.tgz",
+ "integrity": "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==",
"dev": true,
"license": "MIT"
},
- "node_modules/dedent": {
- "version": "1.7.1",
- "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.7.1.tgz",
- "integrity": "sha512-9JmrhGZpOlEgOLdQgSm0zxFaYoQon408V1v49aqTWuXENVlnCuY9JBZcXZiCsZQWDjTm5Qf/nIvAy77mXDAjEg==",
+ "node_modules/decode-uri-component": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz",
+ "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==",
"dev": true,
"license": "MIT",
- "peerDependencies": {
- "babel-plugin-macros": "^3.1.0"
- },
- "peerDependenciesMeta": {
- "babel-plugin-macros": {
- "optional": true
- }
+ "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==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/deep-extend": {
"version": "0.6.0",
"resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
@@ -9136,19 +7148,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/default-gateway": {
- "version": "6.0.3",
- "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz",
- "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==",
- "dev": true,
- "license": "BSD-2-Clause",
- "dependencies": {
- "execa": "^5.0.0"
- },
- "engines": {
- "node": ">= 10"
- }
- },
"node_modules/define-data-property": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz",
@@ -9167,16 +7166,6 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "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,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/define-properties": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz",
@@ -9195,19 +7184,77 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/degenerator": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-5.0.1.tgz",
- "integrity": "sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==",
+ "node_modules/define-property": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
+ "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "ast-types": "^0.13.4",
- "escodegen": "^2.1.0",
- "esprima": "^4.0.1"
+ "is-descriptor": "^1.0.2",
+ "isobject": "^3.0.1"
},
"engines": {
- "node": ">= 14"
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/del": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz",
+ "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/glob": "^7.1.1",
+ "globby": "^6.1.0",
+ "is-path-cwd": "^2.0.0",
+ "is-path-in-cwd": "^2.0.0",
+ "p-map": "^2.0.0",
+ "pify": "^4.0.1",
+ "rimraf": "^2.6.3"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/del/node_modules/array-union": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
+ "integrity": "sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "array-uniq": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/del/node_modules/globby": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz",
+ "integrity": "sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "array-union": "^1.0.1",
+ "glob": "^7.0.3",
+ "object-assign": "^4.0.1",
+ "pify": "^2.0.0",
+ "pinkie-promise": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/del/node_modules/globby/node_modules/pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
}
},
"node_modules/delayed-stream": {
@@ -9220,39 +7267,15 @@
"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,
- "license": "MIT",
- "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,
- "license": "MIT",
- "engines": {
- "node": ">= 0.8",
- "npm": "1.2.8000 || >= 1.4.16"
- }
- },
"node_modules/detect-libc": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz",
- "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==",
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz",
+ "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==",
"dev": true,
"license": "Apache-2.0",
"optional": true,
- "bin": {
- "detect-libc": "bin/detect-libc.js"
- },
"engines": {
- "node": ">=0.10"
+ "node": ">=8"
}
},
"node_modules/detect-newline": {
@@ -9265,29 +7288,21 @@
"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,
- "license": "MIT"
- },
"node_modules/devtools-protocol": {
- "version": "0.0.1507524",
- "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1507524.tgz",
- "integrity": "sha512-OjaNE7qpk6GRTXtqQjAE5bGx6+c4F1zZH0YXtpZQLM92HNXx4zMAaqlKhP4T52DosG6hDW8gPMNhGOF8xbwk/w==",
+ "version": "0.0.901419",
+ "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.901419.tgz",
+ "integrity": "sha512-4INMPwNm9XRpBukhNbF7OB6fNTTCaI8pzy/fXg0xQzAy5h3zL1P8xT3QazgKqBrb/hAYwIBizqDBZ7GtJE74QQ==",
"dev": true,
- "license": "BSD-3-Clause",
- "peer": true
+ "license": "BSD-3-Clause"
},
"node_modules/diff-sequences": {
- "version": "29.6.3",
- "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz",
- "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==",
+ "version": "26.6.2",
+ "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-26.6.2.tgz",
+ "integrity": "sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q==",
"dev": true,
"license": "MIT",
"engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ "node": ">= 10.14.2"
}
},
"node_modules/dir-glob": {
@@ -9303,18 +7318,12 @@
"node": ">=8"
}
},
- "node_modules/dns-packet": {
- "version": "5.6.1",
- "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz",
- "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==",
+ "node_modules/discontinuous-range": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/discontinuous-range/-/discontinuous-range-1.0.0.tgz",
+ "integrity": "sha512-c68LpLbO+7kP/b1Hr1qs8/BJ09F5khZGTxqxZuhzxpmwJKOgRFHJWIb9/KmqnqHhLdO55aOxFH/EGBvUQbL/RQ==",
"dev": true,
- "license": "MIT",
- "dependencies": {
- "@leichtgewicht/ip-codec": "^2.0.1"
- },
- "engines": {
- "node": ">=6"
- }
+ "license": "MIT"
},
"node_modules/doctrine": {
"version": "3.0.0",
@@ -9357,6 +7366,30 @@
],
"license": "BSD-2-Clause"
},
+ "node_modules/domexception": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz",
+ "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==",
+ "deprecated": "Use your platform's native DOMException instead",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "webidl-conversions": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/domexception/node_modules/webidl-conversions": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz",
+ "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/domhandler": {
"version": "5.0.3",
"resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz",
@@ -9399,35 +7432,6 @@
"tslib": "^2.0.3"
}
},
- "node_modules/dot-prop": {
- "version": "9.0.0",
- "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-9.0.0.tgz",
- "integrity": "sha512-1gxPBJpI/pcjQhKgIU91II6Wkay+dLcN3M6rf2uwP8hRur3HtQXjVrdAK3sjC0piaEuxzMwjXChcETiJl47lAQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "type-fest": "^4.18.2"
- },
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/dot-prop/node_modules/type-fest": {
- "version": "4.41.0",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz",
- "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==",
- "dev": true,
- "license": "(MIT OR CC0-1.0)",
- "engines": {
- "node": ">=16"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/dunder-proto": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
@@ -9450,28 +7454,21 @@
"dev": true,
"license": "MIT"
},
- "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,
- "license": "MIT"
- },
"node_modules/electron-to-chromium": {
- "version": "1.5.267",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.267.tgz",
- "integrity": "sha512-0Drusm6MVRXSOJpGbaSVgcQsuB4hEkMpHXaVstcPmhu5LIedxs1xNK/nIxmQIU/RPC0+1/o0AVZfBTkTNJOdUw==",
+ "version": "1.5.344",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.344.tgz",
+ "integrity": "sha512-4MxfbmNDm+KPh066EZy+eUnkcDPcZ35wNmOWzFuh/ijvHsve6kbLTLURy88uCNK5FbpN+yk2nQY6BYh1GEt+wg==",
"dev": true,
"license": "ISC"
},
"node_modules/emittery": {
- "version": "0.13.1",
- "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz",
- "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==",
+ "version": "0.7.2",
+ "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.7.2.tgz",
+ "integrity": "sha512-A8OG5SR/ij3SsJdWDJdkkSYUjQdCUx6APQXem0SaEePBSRg4eymGYwBkKo1Y6DU+af/Jn2dBQqDBvjnr9Vi8nQ==",
"dev": true,
"license": "MIT",
"engines": {
- "node": ">=12"
+ "node": ">=10"
},
"funding": {
"url": "https://github.com/sindresorhus/emittery?sponsor=1"
@@ -9494,14 +7491,18 @@
"node": ">= 4"
}
},
- "node_modules/encodeurl": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz",
- "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==",
+ "node_modules/encoding-sniffer": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/encoding-sniffer/-/encoding-sniffer-0.2.1.tgz",
+ "integrity": "sha512-5gvq20T6vfpekVtqrYQsSCFZ1wEg5+wW0/QaZMWkFr6BqD3NfKs0rLCx4rrVlSWJeZb5NBJgVLswK/w2MWU+Gw==",
"dev": true,
"license": "MIT",
- "engines": {
- "node": ">= 0.8"
+ "dependencies": {
+ "iconv-lite": "^0.6.3",
+ "whatwg-encoding": "^3.1.1"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/encoding-sniffer?sponsor=1"
}
},
"node_modules/end-of-stream": {
@@ -9515,14 +7516,14 @@
}
},
"node_modules/enhanced-resolve": {
- "version": "5.18.1",
- "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.1.tgz",
- "integrity": "sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==",
+ "version": "5.21.0",
+ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.21.0.tgz",
+ "integrity": "sha512-otxSQPw4lkOZWkHpB3zaEQs6gWYEsmX4xQF68ElXC/TWvGxGMSGOvoNbaLXm6/cS/fSfHtsEdw90y20PCd+sCA==",
"dev": true,
"license": "MIT",
"dependencies": {
"graceful-fs": "^4.2.4",
- "tapable": "^2.2.0"
+ "tapable": "^2.3.3"
},
"engines": {
"node": ">=10.13.0"
@@ -9555,20 +7556,10 @@
"url": "https://github.com/fb55/entities?sponsor=1"
}
},
- "node_modules/env-paths": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz",
- "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/envinfo": {
- "version": "7.14.0",
- "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.14.0.tgz",
- "integrity": "sha512-CO40UI41xDQzhLB1hWyqUKgFhs250pNcGbyGKe1l/e4FSaI/+YE4IMG76GDt0In67WLPACIITC+sOi08x4wIvg==",
+ "version": "7.21.0",
+ "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.21.0.tgz",
+ "integrity": "sha512-Lw7I8Zp5YKHFCXL7+Dz95g4CcbMEpgvqZNNq3AmlT5XAV6CgAAk6gyAMqn2zjw08K9BHfcNuKrMiCPLByGafow==",
"dev": true,
"license": "MIT",
"bin": {
@@ -9578,6 +7569,88 @@
"node": ">=4"
}
},
+ "node_modules/enzyme": {
+ "version": "3.11.0",
+ "resolved": "https://registry.npmjs.org/enzyme/-/enzyme-3.11.0.tgz",
+ "integrity": "sha512-Dw8/Gs4vRjxY6/6i9wU0V+utmQO9kvh9XLnz3LIudviOnVYDEe2ec+0k+NQoMamn1VrjKgCUOWj5jG/5M5M0Qw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "array.prototype.flat": "^1.2.3",
+ "cheerio": "^1.0.0-rc.3",
+ "enzyme-shallow-equal": "^1.0.1",
+ "function.prototype.name": "^1.1.2",
+ "has": "^1.0.3",
+ "html-element-map": "^1.2.0",
+ "is-boolean-object": "^1.0.1",
+ "is-callable": "^1.1.5",
+ "is-number-object": "^1.0.4",
+ "is-regex": "^1.0.5",
+ "is-string": "^1.0.5",
+ "is-subset": "^0.1.1",
+ "lodash.escape": "^4.0.1",
+ "lodash.isequal": "^4.5.0",
+ "object-inspect": "^1.7.0",
+ "object-is": "^1.0.2",
+ "object.assign": "^4.1.0",
+ "object.entries": "^1.1.1",
+ "object.values": "^1.1.1",
+ "raf": "^3.4.1",
+ "rst-selector-parser": "^2.2.3",
+ "string.prototype.trim": "^1.2.1"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/enzyme-shallow-equal": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/enzyme-shallow-equal/-/enzyme-shallow-equal-1.0.7.tgz",
+ "integrity": "sha512-/um0GFqUXnpM9SvKtje+9Tjoz3f1fpBC3eXRFrNs8kpYn69JljciYP7KZTqM/YQbUY9KUjvKB4jo/q+L6WGGvg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "hasown": "^2.0.0",
+ "object-is": "^1.1.5"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/enzyme-to-json": {
+ "version": "3.6.2",
+ "resolved": "https://registry.npmjs.org/enzyme-to-json/-/enzyme-to-json-3.6.2.tgz",
+ "integrity": "sha512-Ynm6Z6R6iwQ0g2g1YToz6DWhxVnt8Dy1ijR2zynRKxTyBGA8rCDXU3rs2Qc4OKvUvc2Qoe1bcFK6bnPs20TrTg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/cheerio": "^0.22.22",
+ "lodash": "^4.17.21",
+ "react-is": "^16.12.0"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ },
+ "peerDependencies": {
+ "enzyme": "^3.4.0"
+ }
+ },
+ "node_modules/enzyme-to-json/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==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "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",
@@ -9588,20 +7661,10 @@
"is-arrayish": "^0.2.1"
}
},
- "node_modules/error-stack-parser": {
- "version": "2.1.4",
- "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz",
- "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "stackframe": "^1.3.4"
- }
- },
"node_modules/es-abstract": {
- "version": "1.24.1",
- "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.1.tgz",
- "integrity": "sha512-zHXBLhP+QehSSbsS9Pt23Gg964240DPd6QCf8WpkqEXxQ7fhdZzYsocOr5u7apWonsS5EjZDmTF+/slGMyasvw==",
+ "version": "1.24.2",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.2.tgz",
+ "integrity": "sha512-2FpH9Q5i2RRwyEP1AylXe6nYLR5OhaJTZwmlcP0dL/+JCbgg7yyEo/sEK6HeGZRf3dFpWwThaRHVApXSkW3xeg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -9667,6 +7730,13 @@
"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,
+ "license": "MIT"
+ },
"node_modules/es-define-property": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",
@@ -9688,16 +7758,16 @@
}
},
"node_modules/es-iterator-helpers": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.2.2.tgz",
- "integrity": "sha512-BrUQ0cPTB/IwXj23HtwHjS9n7O4h9FX94b4xc5zlTHxeLgTAdzYUDyy6KdExAl9lbN5rtfe44xpjpmj9grxs5w==",
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.3.2.tgz",
+ "integrity": "sha512-HVLACW1TppGYjJ8H6/jqH/pqOtKRw6wMlrB23xfExmFWxFquAIWCmwoLsOyN96K4a5KbmOf5At9ZUO3GZbetAw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "call-bind": "^1.0.8",
+ "call-bind": "^1.0.9",
"call-bound": "^1.0.4",
"define-properties": "^1.2.1",
- "es-abstract": "^1.24.1",
+ "es-abstract": "^1.24.2",
"es-errors": "^1.3.0",
"es-set-tostringtag": "^2.1.0",
"function-bind": "^1.1.2",
@@ -9709,16 +7779,16 @@
"has-symbols": "^1.1.0",
"internal-slot": "^1.1.0",
"iterator.prototype": "^1.1.5",
- "safe-array-concat": "^1.1.3"
+ "math-intrinsics": "^1.1.0"
},
"engines": {
"node": ">= 0.4"
}
},
"node_modules/es-module-lexer": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.6.0.tgz",
- "integrity": "sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==",
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.1.0.tgz",
+ "integrity": "sha512-n27zTYMjYu1aj4MjCWzSP7G9r75utsaoc8m61weK+W8JMBGGQybd43GstCXZ3WNmSFtGT9wi59qQTW6mhTR5LQ==",
"dev": true,
"license": "MIT"
},
@@ -9792,13 +7862,6 @@
"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,
- "license": "MIT"
- },
"node_modules/escape-string-regexp": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
@@ -9834,82 +7897,71 @@
"source-map": "~0.6.1"
}
},
- "node_modules/escodegen/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==",
- "dev": true,
- "license": "BSD-3-Clause",
- "optional": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/eslint": {
- "version": "8.57.1",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz",
- "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==",
+ "version": "7.32.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz",
+ "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==",
"deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
- "@eslint-community/eslint-utils": "^4.2.0",
- "@eslint-community/regexpp": "^4.6.1",
- "@eslint/eslintrc": "^2.1.4",
- "@eslint/js": "8.57.1",
- "@humanwhocodes/config-array": "^0.13.0",
- "@humanwhocodes/module-importer": "^1.0.1",
- "@nodelib/fs.walk": "^1.2.8",
- "@ungap/structured-clone": "^1.2.0",
- "ajv": "^6.12.4",
+ "@babel/code-frame": "7.12.11",
+ "@eslint/eslintrc": "^0.4.3",
+ "@humanwhocodes/config-array": "^0.5.0",
+ "ajv": "^6.10.0",
"chalk": "^4.0.0",
"cross-spawn": "^7.0.2",
- "debug": "^4.3.2",
+ "debug": "^4.0.1",
"doctrine": "^3.0.0",
+ "enquirer": "^2.3.5",
"escape-string-regexp": "^4.0.0",
- "eslint-scope": "^7.2.2",
- "eslint-visitor-keys": "^3.4.3",
- "espree": "^9.6.1",
- "esquery": "^1.4.2",
+ "eslint-scope": "^5.1.1",
+ "eslint-utils": "^2.1.0",
+ "eslint-visitor-keys": "^2.0.0",
+ "espree": "^7.3.1",
+ "esquery": "^1.4.0",
"esutils": "^2.0.2",
"fast-deep-equal": "^3.1.3",
"file-entry-cache": "^6.0.1",
- "find-up": "^5.0.0",
- "glob-parent": "^6.0.2",
- "globals": "^13.19.0",
- "graphemer": "^1.4.0",
- "ignore": "^5.2.0",
+ "functional-red-black-tree": "^1.0.1",
+ "glob-parent": "^5.1.2",
+ "globals": "^13.6.0",
+ "ignore": "^4.0.6",
+ "import-fresh": "^3.0.0",
"imurmurhash": "^0.1.4",
"is-glob": "^4.0.0",
- "is-path-inside": "^3.0.3",
- "js-yaml": "^4.1.0",
+ "js-yaml": "^3.13.1",
"json-stable-stringify-without-jsonify": "^1.0.1",
"levn": "^0.4.1",
"lodash.merge": "^4.6.2",
- "minimatch": "^3.1.2",
+ "minimatch": "^3.0.4",
"natural-compare": "^1.4.0",
- "optionator": "^0.9.3",
- "strip-ansi": "^6.0.1",
- "text-table": "^0.2.0"
+ "optionator": "^0.9.1",
+ "progress": "^2.0.0",
+ "regexpp": "^3.1.0",
+ "semver": "^7.2.1",
+ "strip-ansi": "^6.0.0",
+ "strip-json-comments": "^3.1.0",
+ "table": "^6.0.9",
+ "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"
+ "node": "^10.12.0 || >=12.0.0"
},
"funding": {
"url": "https://opencollective.com/eslint"
}
},
"node_modules/eslint-config-prettier": {
- "version": "8.10.2",
- "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.10.2.tgz",
- "integrity": "sha512-/IGJ6+Dka158JnP5n5YFMOszjDWrXggGz1LaK/guZq9vZTmniaKlHcsscvkAhn9y4U+BU3JuUdYvtAMcv30y4A==",
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-7.2.0.tgz",
+ "integrity": "sha512-rV4Qu0C3nfJKPOAhFujFxB7RMP+URFyQqqOZW9DMRD7ZDTFyjaIlETU3xzHELt++4ugC0+Jm084HQYkkJe+Ivg==",
"dev": true,
"license": "MIT",
- "peer": true,
"bin": {
"eslint-config-prettier": "bin/cli.js"
},
@@ -9917,41 +7969,16 @@
"eslint": ">=7.0.0"
}
},
- "node_modules/eslint-import-context": {
- "version": "0.1.9",
- "resolved": "https://registry.npmjs.org/eslint-import-context/-/eslint-import-context-0.1.9.tgz",
- "integrity": "sha512-K9Hb+yRaGAGUbwjhFNHvSmmkZs9+zbuoe3kFQ4V1wYjrepUFYM2dZAfNtjbbj3qsPfUfsA68Bx/ICWQMi+C8Eg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "get-tsconfig": "^4.10.1",
- "stable-hash-x": "^0.2.0"
- },
- "engines": {
- "node": "^12.20.0 || ^14.18.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint-import-context"
- },
- "peerDependencies": {
- "unrs-resolver": "^1.0.0"
- },
- "peerDependenciesMeta": {
- "unrs-resolver": {
- "optional": true
- }
- }
- },
"node_modules/eslint-import-resolver-node": {
- "version": "0.3.9",
- "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz",
- "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==",
+ "version": "0.3.10",
+ "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.10.tgz",
+ "integrity": "sha512-tRrKqFyCaKict5hOd244sL6EQFNycnMQnBe+j8uqGNXYzsImGbGUU4ibtoaBmv5FLwJwcFJNeg1GeVjQfbMrDQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"debug": "^3.2.7",
- "is-core-module": "^2.13.0",
- "resolve": "^1.22.4"
+ "is-core-module": "^2.16.1",
+ "resolve": "^2.0.0-next.6"
}
},
"node_modules/eslint-import-resolver-node/node_modules/debug": {
@@ -9964,39 +7991,28 @@
"ms": "^2.1.1"
}
},
- "node_modules/eslint-import-resolver-typescript": {
- "version": "4.4.4",
- "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-4.4.4.tgz",
- "integrity": "sha512-1iM2zeBvrYmUNTj2vSC/90JTHDth+dfOfiNKkxApWRsTJYNrc8rOdxxIf5vazX+BiAXTeOT0UvWpGI/7qIWQOw==",
+ "node_modules/eslint-import-resolver-node/node_modules/resolve": {
+ "version": "2.0.0-next.6",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.6.tgz",
+ "integrity": "sha512-3JmVl5hMGtJ3kMmB3zi3DL25KfkCEyy3Tw7Gmw7z5w8M9WlwoPFnIvwChzu1+cF3iaK3sp18hhPz8ANeimdJfA==",
"dev": true,
- "license": "ISC",
+ "license": "MIT",
"dependencies": {
- "debug": "^4.4.1",
- "eslint-import-context": "^0.1.8",
- "get-tsconfig": "^4.10.1",
- "is-bun-module": "^2.0.0",
- "stable-hash-x": "^0.2.0",
- "tinyglobby": "^0.2.14",
- "unrs-resolver": "^1.7.11"
+ "es-errors": "^1.3.0",
+ "is-core-module": "^2.16.1",
+ "node-exports-info": "^1.6.0",
+ "object-keys": "^1.1.1",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ },
+ "bin": {
+ "resolve": "bin/resolve"
},
"engines": {
- "node": "^16.17.0 || >=18.6.0"
+ "node": ">= 0.4"
},
"funding": {
- "url": "https://opencollective.com/eslint-import-resolver-typescript"
- },
- "peerDependencies": {
- "eslint": "*",
- "eslint-plugin-import": "*",
- "eslint-plugin-import-x": "*"
- },
- "peerDependenciesMeta": {
- "eslint-plugin-import": {
- "optional": true
- },
- "eslint-plugin-import-x": {
- "optional": true
- }
+ "url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/eslint-module-utils": {
@@ -10033,7 +8049,6 @@
"integrity": "sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"@rtsao/scc": "^1.1.0",
"array-includes": "^3.1.9",
@@ -10062,17 +8077,6 @@
"eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9"
}
},
- "node_modules/eslint-plugin-import/node_modules/brace-expansion": {
- "version": "1.1.12",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz",
- "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
"node_modules/eslint-plugin-import/node_modules/debug": {
"version": "3.2.7",
"resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
@@ -10096,204 +8100,56 @@
"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,
- "license": "ISC",
- "dependencies": {
- "brace-expansion": "^1.1.7"
- },
- "engines": {
- "node": "*"
- }
- },
"node_modules/eslint-plugin-jest": {
- "version": "27.9.0",
- "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-27.9.0.tgz",
- "integrity": "sha512-QIT7FH7fNmd9n4se7FFKHbsLKGQiw885Ds6Y/sxKgCZ6natwCsXdgPOADnYVxN2QrRweF0FZWbJ6S7Rsn7llug==",
+ "version": "24.7.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-24.7.0.tgz",
+ "integrity": "sha512-wUxdF2bAZiYSKBclsUMrYHH6WxiBreNjyDxbRv345TIvPeoCEgPNEn3Sa+ZrSqsf1Dl9SqqSREXMHExlMMu1DA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/utils": "^5.10.0"
+ "@typescript-eslint/experimental-utils": "^4.0.1"
},
"engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ "node": ">=10"
},
"peerDependencies": {
- "@typescript-eslint/eslint-plugin": "^5.0.0 || ^6.0.0 || ^7.0.0",
- "eslint": "^7.0.0 || ^8.0.0",
- "jest": "*"
+ "@typescript-eslint/eslint-plugin": ">= 4",
+ "eslint": ">=5"
},
"peerDependenciesMeta": {
"@typescript-eslint/eslint-plugin": {
"optional": true
- },
- "jest": {
- "optional": true
}
}
},
- "node_modules/eslint-plugin-jest/node_modules/@typescript-eslint/scope-manager": {
- "version": "5.62.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz",
- "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@typescript-eslint/types": "5.62.0",
- "@typescript-eslint/visitor-keys": "5.62.0"
- },
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- }
- },
- "node_modules/eslint-plugin-jest/node_modules/@typescript-eslint/types": {
- "version": "5.62.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz",
- "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- }
- },
- "node_modules/eslint-plugin-jest/node_modules/@typescript-eslint/typescript-estree": {
- "version": "5.62.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz",
- "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==",
- "dev": true,
- "license": "BSD-2-Clause",
- "dependencies": {
- "@typescript-eslint/types": "5.62.0",
- "@typescript-eslint/visitor-keys": "5.62.0",
- "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/eslint-plugin-jest/node_modules/@typescript-eslint/utils": {
- "version": "5.62.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz",
- "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@eslint-community/eslint-utils": "^4.2.0",
- "@types/json-schema": "^7.0.9",
- "@types/semver": "^7.3.12",
- "@typescript-eslint/scope-manager": "5.62.0",
- "@typescript-eslint/types": "5.62.0",
- "@typescript-eslint/typescript-estree": "5.62.0",
- "eslint-scope": "^5.1.1",
- "semver": "^7.3.7"
- },
- "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/eslint-plugin-jest/node_modules/@typescript-eslint/visitor-keys": {
- "version": "5.62.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz",
- "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@typescript-eslint/types": "5.62.0",
- "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/eslint-plugin-jest/node_modules/eslint-visitor-keys": {
- "version": "3.4.3",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
- "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
- "dev": true,
- "license": "Apache-2.0",
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
- },
- "node_modules/eslint-plugin-jest/node_modules/semver": {
- "version": "7.7.3",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz",
- "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==",
- "dev": true,
- "license": "ISC",
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
"node_modules/eslint-plugin-jsdoc": {
- "version": "46.10.1",
- "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-46.10.1.tgz",
- "integrity": "sha512-x8wxIpv00Y50NyweDUpa+58ffgSAI5sqe+zcZh33xphD0AVh+1kqr1ombaTRb7Fhpove1zfUuujlX9DWWBP5ag==",
+ "version": "36.1.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-36.1.1.tgz",
+ "integrity": "sha512-nuLDvH1EJaKx0PCa9oeQIxH6pACIhZd1gkalTUxZbaxxwokjs7TplqY0Q8Ew3CoZaf5aowm0g/Z3JGHCatt+gQ==",
"dev": true,
"license": "BSD-3-Clause",
"dependencies": {
- "@es-joy/jsdoccomment": "~0.41.0",
- "are-docs-informative": "^0.0.2",
- "comment-parser": "1.4.1",
- "debug": "^4.3.4",
- "escape-string-regexp": "^4.0.0",
- "esquery": "^1.5.0",
- "is-builtin-module": "^3.2.1",
- "semver": "^7.5.4",
- "spdx-expression-parse": "^4.0.0"
+ "@es-joy/jsdoccomment": "0.10.8",
+ "comment-parser": "1.2.4",
+ "debug": "^4.3.2",
+ "esquery": "^1.4.0",
+ "jsdoc-type-pratt-parser": "^1.1.1",
+ "lodash": "^4.17.21",
+ "regextras": "^0.8.0",
+ "semver": "^7.3.5",
+ "spdx-expression-parse": "^3.0.1"
},
"engines": {
- "node": ">=16"
+ "node": "^12 || ^14 || ^16"
},
"peerDependencies": {
- "eslint": "^7.0.0 || ^8.0.0 || ^9.0.0"
+ "eslint": "^6.0.0 || ^7.0.0"
}
},
"node_modules/eslint-plugin-jsdoc/node_modules/semver": {
- "version": "7.7.3",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz",
- "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==",
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz",
+ "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==",
"dev": true,
"license": "ISC",
"bin": {
@@ -10333,72 +8189,40 @@
"eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9"
}
},
- "node_modules/eslint-plugin-jsx-a11y/node_modules/brace-expansion": {
- "version": "1.1.12",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz",
- "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==",
+ "node_modules/eslint-plugin-markdown": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-markdown/-/eslint-plugin-markdown-2.2.1.tgz",
+ "integrity": "sha512-FgWp4iyYvTFxPwfbxofTvXxgzPsDuSKHQy2S+a8Ve6savbujey+lgrFFbXQA0HPygISpRYWYBjooPzhYSF81iA==",
+ "deprecated": "Please use @eslint/markdown instead",
"dev": true,
"license": "MIT",
"dependencies": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "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,
- "license": "ISC",
- "dependencies": {
- "brace-expansion": "^1.1.7"
+ "mdast-util-from-markdown": "^0.8.5"
},
"engines": {
- "node": "*"
- }
- },
- "node_modules/eslint-plugin-playwright": {
- "version": "0.15.3",
- "resolved": "https://registry.npmjs.org/eslint-plugin-playwright/-/eslint-plugin-playwright-0.15.3.tgz",
- "integrity": "sha512-LQMW5y0DLK5Fnpya7JR1oAYL2/7Y9wDiYw6VZqlKqcRGSgjbVKNqxraphk7ra1U3Bb5EK444xMgUlQPbMg2M1g==",
- "dev": true,
- "license": "MIT",
- "peerDependencies": {
- "eslint": ">=7",
- "eslint-plugin-jest": ">=25"
+ "node": "^8.10.0 || ^10.12.0 || >= 12.0.0"
},
- "peerDependenciesMeta": {
- "eslint-plugin-jest": {
- "optional": true
- }
+ "peerDependencies": {
+ "eslint": ">=6.0.0"
}
},
"node_modules/eslint-plugin-prettier": {
- "version": "5.5.4",
- "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.5.4.tgz",
- "integrity": "sha512-swNtI95SToIz05YINMA6Ox5R057IMAmWZ26GqPxusAp1TZzj+IdY9tXNWWD3vkF/wEqydCONcwjTFpxybBqZsg==",
+ "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,
"license": "MIT",
"dependencies": {
- "prettier-linter-helpers": "^1.0.0",
- "synckit": "^0.11.7"
+ "prettier-linter-helpers": "^1.0.0"
},
"engines": {
- "node": "^14.18.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint-plugin-prettier"
+ "node": ">=6.0.0"
},
"peerDependencies": {
- "@types/eslint": ">=8.0.0",
- "eslint": ">=8.0.0",
- "eslint-config-prettier": ">= 7.0.0 <10.0.0 || >=10.1.0",
- "prettier": ">=3.0.0"
+ "eslint": ">=5.0.0",
+ "prettier": ">=1.13.0"
},
"peerDependenciesMeta": {
- "@types/eslint": {
- "optional": true
- },
"eslint-config-prettier": {
"optional": true
}
@@ -10450,17 +8274,6 @@
"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/brace-expansion": {
- "version": "1.1.12",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz",
- "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
"node_modules/eslint-plugin-react/node_modules/doctrine": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
@@ -10474,33 +8287,26 @@
"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,
- "license": "ISC",
- "dependencies": {
- "brace-expansion": "^1.1.7"
- },
- "engines": {
- "node": "*"
- }
- },
"node_modules/eslint-plugin-react/node_modules/resolve": {
- "version": "2.0.0-next.5",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz",
- "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==",
+ "version": "2.0.0-next.6",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.6.tgz",
+ "integrity": "sha512-3JmVl5hMGtJ3kMmB3zi3DL25KfkCEyy3Tw7Gmw7z5w8M9WlwoPFnIvwChzu1+cF3iaK3sp18hhPz8ANeimdJfA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "is-core-module": "^2.13.0",
+ "es-errors": "^1.3.0",
+ "is-core-module": "^2.16.1",
+ "node-exports-info": "^1.6.0",
+ "object-keys": "^1.1.1",
"path-parse": "^1.0.7",
"supports-preserve-symlinks-flag": "^1.0.0"
},
"bin": {
"resolve": "bin/resolve"
},
+ "engines": {
+ "node": ">= 0.4"
+ },
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
@@ -10529,6 +8335,25 @@
"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,
+ "license": "MIT",
+ "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",
@@ -10539,69 +8364,55 @@
"node": ">=10"
}
},
- "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,
- "license": "Python-2.0"
- },
- "node_modules/eslint/node_modules/brace-expansion": {
- "version": "1.1.12",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz",
- "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==",
+ "node_modules/eslint/node_modules/@babel/code-frame": {
+ "version": "7.12.11",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz",
+ "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
+ "@babel/highlight": "^7.10.4"
}
},
- "node_modules/eslint/node_modules/eslint-scope": {
- "version": "7.2.2",
- "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz",
- "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==",
+ "node_modules/eslint/node_modules/cross-spawn": {
+ "version": "7.0.6",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
+ "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
"dev": true,
- "license": "BSD-2-Clause",
+ "license": "MIT",
"dependencies": {
- "esrecurse": "^4.3.0",
- "estraverse": "^5.2.0"
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
},
"engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
+ "node": ">= 8"
}
},
- "node_modules/eslint/node_modules/eslint-visitor-keys": {
- "version": "3.4.3",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
- "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
+ "node_modules/eslint/node_modules/eslint-utils": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz",
+ "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "eslint-visitor-keys": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/mysticatea"
+ }
+ },
+ "node_modules/eslint/node_modules/eslint-utils/node_modules/eslint-visitor-keys": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
+ "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
"dev": true,
"license": "Apache-2.0",
"engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
- },
- "node_modules/eslint/node_modules/find-up": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
- "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "locate-path": "^6.0.0",
- "path-exists": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "node": ">=4"
}
},
"node_modules/eslint/node_modules/globals": {
@@ -10620,62 +8431,50 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/eslint/node_modules/js-yaml": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz",
- "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==",
+ "node_modules/eslint/node_modules/ignore": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
+ "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
"dev": true,
"license": "MIT",
- "dependencies": {
- "argparse": "^2.0.1"
- },
- "bin": {
- "js-yaml": "bin/js-yaml.js"
- }
- },
- "node_modules/eslint/node_modules/locate-path": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
- "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "p-locate": "^5.0.0"
- },
"engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "node": ">= 4"
}
},
- "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==",
+ "node_modules/eslint/node_modules/semver": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz",
+ "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==",
"dev": true,
"license": "ISC",
- "dependencies": {
- "brace-expansion": "^1.1.7"
- },
- "engines": {
- "node": "*"
- }
- },
- "node_modules/eslint/node_modules/p-locate": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
- "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "p-limit": "^3.0.2"
+ "bin": {
+ "semver": "bin/semver.js"
},
"engines": {
"node": ">=10"
+ }
+ },
+ "node_modules/eslint/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==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "shebang-regex": "^3.0.0"
},
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/eslint/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==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
}
},
"node_modules/eslint/node_modules/type-fest": {
@@ -10691,35 +8490,58 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/eslint/node_modules/which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "isexe": "^2.0.0"
+ },
+ "bin": {
+ "node-which": "bin/node-which"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
"node_modules/espree": {
- "version": "9.6.1",
- "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz",
- "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==",
+ "version": "7.3.1",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz",
+ "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==",
"dev": true,
"license": "BSD-2-Clause",
"dependencies": {
- "acorn": "^8.9.0",
- "acorn-jsx": "^5.3.2",
- "eslint-visitor-keys": "^3.4.1"
+ "acorn": "^7.4.0",
+ "acorn-jsx": "^5.3.1",
+ "eslint-visitor-keys": "^1.3.0"
},
"engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ "node": "^10.12.0 || >=12.0.0"
+ }
+ },
+ "node_modules/espree/node_modules/acorn": {
+ "version": "7.4.1",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
+ "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "acorn": "bin/acorn"
},
- "funding": {
- "url": "https://opencollective.com/eslint"
+ "engines": {
+ "node": ">=0.4.0"
}
},
"node_modules/espree/node_modules/eslint-visitor-keys": {
- "version": "3.4.3",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
- "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
+ "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
"dev": true,
"license": "Apache-2.0",
"engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
+ "node": ">=4"
}
},
"node_modules/esprima": {
@@ -10737,9 +8559,9 @@
}
},
"node_modules/esquery": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz",
- "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==",
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz",
+ "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==",
"dev": true,
"license": "BSD-3-Clause",
"dependencies": {
@@ -10782,23 +8604,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/etag": {
- "version": "1.8.1",
- "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
- "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/eventemitter3": {
- "version": "4.0.7",
- "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz",
- "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/events": {
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
@@ -10809,31 +8614,28 @@
"node": ">=0.8.x"
}
},
- "node_modules/events-universal": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/events-universal/-/events-universal-1.0.1.tgz",
- "integrity": "sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw==",
+ "node_modules/exec-sh": {
+ "version": "0.3.6",
+ "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.6.tgz",
+ "integrity": "sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w==",
"dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "bare-events": "^2.7.0"
- }
+ "license": "MIT"
},
"node_modules/execa": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz",
- "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==",
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz",
+ "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "cross-spawn": "^7.0.3",
- "get-stream": "^6.0.0",
- "human-signals": "^2.1.0",
+ "cross-spawn": "^7.0.0",
+ "get-stream": "^5.0.0",
+ "human-signals": "^1.1.1",
"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",
+ "npm-run-path": "^4.0.0",
+ "onetime": "^5.1.0",
+ "signal-exit": "^3.0.2",
"strip-final-newline": "^2.0.0"
},
"engines": {
@@ -10843,6 +8645,73 @@
"url": "https://github.com/sindresorhus/execa?sponsor=1"
}
},
+ "node_modules/execa/node_modules/cross-spawn": {
+ "version": "7.0.6",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
+ "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/execa/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==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "shebang-regex": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/execa/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==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/execa/node_modules/which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "isexe": "^2.0.0"
+ },
+ "bin": {
+ "node-which": "bin/node-which"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/execall": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/execall/-/execall-2.0.0.tgz",
+ "integrity": "sha512-0FU2hZ5Hh6iQnarpRtQurM/aAvp3RIbfvgLHrcqJYzhXyV2KFruhuChf9NC6waAhiUR7FFtlugkI4p7f2Fqlow==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "clone-regexp": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/exit": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz",
@@ -10852,6 +8721,82 @@
"node": ">= 0.8.0"
}
},
+ "node_modules/expand-brackets": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
+ "integrity": "sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "debug": "^2.3.3",
+ "define-property": "^0.2.5",
+ "extend-shallow": "^2.0.1",
+ "posix-character-classes": "^0.1.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/expand-brackets/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,
+ "license": "MIT",
+ "dependencies": {
+ "ms": "2.0.0"
+ }
+ },
+ "node_modules/expand-brackets/node_modules/define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-descriptor": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/expand-brackets/node_modules/extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-extendable": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/expand-brackets/node_modules/is-descriptor": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz",
+ "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-accessor-descriptor": "^1.0.1",
+ "is-data-descriptor": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/expand-brackets/node_modules/ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/expand-tilde": {
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-1.2.2.tgz",
@@ -10866,20 +8811,21 @@
}
},
"node_modules/expect": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz",
- "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==",
+ "version": "26.6.2",
+ "resolved": "https://registry.npmjs.org/expect/-/expect-26.6.2.tgz",
+ "integrity": "sha512-9/hlOBkQl2l/PLHJx6JjoDF6xPKcJEsUlWKb23rKE7KzeDqUZKXKNMW27KIue5JMdBV9HgmoJPcc8HtO85t9IA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@jest/expect-utils": "^29.7.0",
- "jest-get-type": "^29.6.3",
- "jest-matcher-utils": "^29.7.0",
- "jest-message-util": "^29.7.0",
- "jest-util": "^29.7.0"
+ "@jest/types": "^26.6.2",
+ "ansi-styles": "^4.0.0",
+ "jest-get-type": "^26.3.0",
+ "jest-matcher-utils": "^26.6.2",
+ "jest-message-util": "^26.6.2",
+ "jest-regex-util": "^26.0.0"
},
"engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ "node": ">= 10.14.2"
}
},
"node_modules/expect-puppeteer": {
@@ -10889,70 +8835,99 @@
"dev": true,
"license": "MIT"
},
- "node_modules/express": {
- "version": "4.21.2",
- "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz",
- "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "accepts": "~1.3.8",
- "array-flatten": "1.1.1",
- "body-parser": "1.20.3",
- "content-disposition": "0.5.4",
- "content-type": "~1.0.4",
- "cookie": "0.7.1",
- "cookie-signature": "1.0.6",
- "debug": "2.6.9",
- "depd": "2.0.0",
- "encodeurl": "~2.0.0",
- "escape-html": "~1.0.3",
- "etag": "~1.8.1",
- "finalhandler": "1.3.1",
- "fresh": "0.5.2",
- "http-errors": "2.0.0",
- "merge-descriptors": "1.0.3",
- "methods": "~1.1.2",
- "on-finished": "2.4.1",
- "parseurl": "~1.3.3",
- "path-to-regexp": "0.1.12",
- "proxy-addr": "~2.0.7",
- "qs": "6.13.0",
- "range-parser": "~1.2.1",
- "safe-buffer": "5.2.1",
- "send": "0.19.0",
- "serve-static": "1.16.2",
- "setprototypeof": "1.2.0",
- "statuses": "2.0.1",
- "type-is": "~1.6.18",
- "utils-merge": "1.0.1",
- "vary": "~1.1.2"
- },
- "engines": {
- "node": ">= 0.10.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/express"
- }
- },
- "node_modules/express/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,
- "license": "MIT",
- "dependencies": {
- "ms": "2.0.0"
- }
- },
- "node_modules/express/node_modules/ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
+ "node_modules/extend": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
+ "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
"dev": true,
"license": "MIT"
},
+ "node_modules/extend-shallow": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+ "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "assign-symbols": "^1.0.0",
+ "is-extendable": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/extend-shallow/node_modules/is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-plain-object": "^2.0.4"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/extend-shallow/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==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "isobject": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/extglob": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
+ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "array-unique": "^0.3.2",
+ "define-property": "^1.0.0",
+ "expand-brackets": "^2.1.4",
+ "extend-shallow": "^2.0.1",
+ "fragment-cache": "^0.2.1",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/extglob/node_modules/define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-descriptor": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/extglob/node_modules/extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-extendable": "^0.1.0"
+ },
+ "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",
@@ -10974,22 +8949,6 @@
"@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,
- "license": "MIT",
- "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",
@@ -11004,13 +8963,6 @@
"dev": true,
"license": "Apache-2.0"
},
- "node_modules/fast-fifo": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz",
- "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/fast-glob": {
"version": "3.3.3",
"resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz",
@@ -11028,19 +8980,6 @@
"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,
- "license": "ISC",
- "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",
@@ -11083,9 +9022,9 @@
}
},
"node_modules/fastq": {
- "version": "1.19.0",
- "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.0.tgz",
- "integrity": "sha512-7SFSRCNjBQIZH/xZR3iy5iQYR8aGBE0h3VG6/cwlbrpdciNYBMotQav8c1XI3HjHH+NikUpP53nPdlZSdWmFzA==",
+ "version": "1.20.1",
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz",
+ "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==",
"dev": true,
"license": "ISC",
"dependencies": {
@@ -11093,16 +9032,16 @@
}
},
"node_modules/faye-websocket": {
- "version": "0.11.4",
- "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz",
- "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==",
+ "version": "0.10.0",
+ "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz",
+ "integrity": "sha512-Xhj93RXbMSq8urNCUq4p9l0P6hnySJ/7YNRhYNug0bLOuii7pKO7xQFb5mx9xZXWCar88pLPb805PvUkwrLZpQ==",
"dev": true,
- "license": "Apache-2.0",
+ "license": "MIT",
"dependencies": {
"websocket-driver": ">=0.5.1"
},
"engines": {
- "node": ">=0.8.0"
+ "node": ">=0.4.0"
}
},
"node_modules/fb-watchman": {
@@ -11179,57 +9118,22 @@
"node": ">=8"
}
},
- "node_modules/finalhandler": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz",
- "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "debug": "2.6.9",
- "encodeurl": "~2.0.0",
- "escape-html": "~1.0.3",
- "on-finished": "2.4.1",
- "parseurl": "~1.3.3",
- "statuses": "2.0.1",
- "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,
- "license": "MIT",
- "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,
- "license": "MIT"
- },
"node_modules/find-cache-dir": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-4.0.0.tgz",
- "integrity": "sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg==",
+ "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,
"license": "MIT",
"dependencies": {
- "common-path-prefix": "^3.0.0",
- "pkg-dir": "^7.0.0"
+ "commondir": "^1.0.1",
+ "make-dir": "^3.0.2",
+ "pkg-dir": "^4.1.0"
},
"engines": {
- "node": ">=14.16"
+ "node": ">=8"
},
"funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "url": "https://github.com/avajs/find-cache-dir?sponsor=1"
}
},
"node_modules/find-file-up": {
@@ -11267,9 +9171,9 @@
}
},
"node_modules/find-process": {
- "version": "1.4.10",
- "resolved": "https://registry.npmjs.org/find-process/-/find-process-1.4.10.tgz",
- "integrity": "sha512-ncYFnWEIwL7PzmrK1yZtaccN8GhethD37RzBHG6iOZoFYB4vSmLLXfeWJjeN5nMvCJMjOtBvBBF8OgxEcikiZg==",
+ "version": "1.4.11",
+ "resolved": "https://registry.npmjs.org/find-process/-/find-process-1.4.11.tgz",
+ "integrity": "sha512-mAOh9gGk9WZ4ip5UjV0o6Vb4SrfnAmtsFNzkMRH9HQiFXVQnDyQFrSHTK5UoG6E+KV+s+cIznbtwpfN41l2nFA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -11320,17 +9224,34 @@
"node": "^10.12.0 || >=12.0.0"
}
},
+ "node_modules/flat-cache/node_modules/rimraf": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+ "deprecated": "Rimraf versions prior to v4 are no longer supported",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "glob": "^7.1.3"
+ },
+ "bin": {
+ "rimraf": "bin.js"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
"node_modules/flatted": {
- "version": "3.3.3",
- "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz",
- "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==",
+ "version": "3.4.2",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz",
+ "integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==",
"dev": true,
"license": "ISC"
},
"node_modules/follow-redirects": {
- "version": "1.15.9",
- "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz",
- "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==",
+ "version": "1.16.0",
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.16.0.tgz",
+ "integrity": "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==",
"dev": true,
"funding": [
{
@@ -11388,9 +9309,9 @@
}
},
"node_modules/form-data": {
- "version": "4.0.5",
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz",
- "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==",
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.4.tgz",
+ "integrity": "sha512-f0cRzm6dkyVYV3nPoooP8XlccPQukegwhAnpoLcXy+X+A8KfpGOoXwDr9FLZd3wzgLaBGQBE3lY93Zm/i1JvIQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -11398,29 +9319,12 @@
"combined-stream": "^1.0.8",
"es-set-tostringtag": "^2.1.0",
"hasown": "^2.0.2",
- "mime-types": "^2.1.12"
+ "mime-types": "^2.1.35"
},
"engines": {
"node": ">= 6"
}
},
- "node_modules/forwarded": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
- "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/forwarded-parse": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/forwarded-parse/-/forwarded-parse-2.1.2.tgz",
- "integrity": "sha512-alTFZZQDKMporBH77856pXgzhEzaUVmLCDk+egLgIgHst3Tpndzz8MnKe+GzRJRfvVdn69HhpW7cmXzvtLvJAw==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/fraction.js": {
"version": "5.3.4",
"resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-5.3.4.tgz",
@@ -11435,16 +9339,26 @@
"url": "https://github.com/sponsors/rawify"
}
},
- "node_modules/fresh": {
- "version": "0.5.2",
- "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
- "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==",
+ "node_modules/fragment-cache": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
+ "integrity": "sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==",
"dev": true,
"license": "MIT",
+ "dependencies": {
+ "map-cache": "^0.2.2"
+ },
"engines": {
- "node": ">= 0.6"
+ "node": ">=0.10.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,
+ "license": "MIT"
+ },
"node_modules/fs-exists-sync": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/fs-exists-sync/-/fs-exists-sync-0.1.0.tgz",
@@ -11455,13 +9369,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/fs-monkey": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.6.tgz",
- "integrity": "sha512-b1FMfwetIKymC0eioW7mTywihSQE4oLzQn1dB6rZB5fx/3NpNEdAWeCSMB+60/AeT0TCXsxzAlcYVEFCTAksWg==",
- "dev": true,
- "license": "Unlicense"
- },
"node_modules/fs.realpath": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
@@ -11515,6 +9422,13 @@
"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,
+ "license": "MIT"
+ },
"node_modules/functions-have-names": {
"version": "1.2.3",
"resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz",
@@ -11590,19 +9504,6 @@
"node": ">=8.0.0"
}
},
- "node_modules/get-port": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/get-port/-/get-port-5.1.1.tgz",
- "integrity": "sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/get-proto": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz",
@@ -11618,26 +9519,29 @@
}
},
"node_modules/get-stdin": {
- "version": "9.0.0",
- "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-9.0.0.tgz",
- "integrity": "sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==",
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-8.0.0.tgz",
+ "integrity": "sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==",
"dev": true,
"license": "MIT",
"engines": {
- "node": ">=12"
+ "node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"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==",
+ "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,
"license": "MIT",
+ "dependencies": {
+ "pump": "^3.0.0"
+ },
"engines": {
- "node": ">=10"
+ "node": ">=8"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
@@ -11661,39 +9565,21 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/get-tsconfig": {
- "version": "4.13.0",
- "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.13.0.tgz",
- "integrity": "sha512-1VKTZJCwBrvbd+Wn3AOgQP/2Av+TfTCOlE4AcRJE72W1ksZXbAx8PPBR9RzgTeSPzlPMHrbANMH3LbltH73wxQ==",
+ "node_modules/get-value": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
+ "integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==",
"dev": true,
"license": "MIT",
- "dependencies": {
- "resolve-pkg-maps": "^1.0.0"
- },
- "funding": {
- "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1"
- }
- },
- "node_modules/get-uri": {
- "version": "6.0.5",
- "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.5.tgz",
- "integrity": "sha512-b1O07XYq8eRuVzBNgJLstU6FYc1tS6wnMtF1I1D9lE8LxZSOGZ7LhxN54yPP6mGw5f2CkXY2BQUL9Fx41qvcIg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "basic-ftp": "^5.0.2",
- "data-uri-to-buffer": "^6.0.2",
- "debug": "^4.3.4"
- },
"engines": {
- "node": ">= 14"
+ "node": ">=0.10.0"
}
},
"node_modules/glob": {
"version": "7.2.3",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
"integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
- "deprecated": "Glob versions prior to v9 are no longer supported",
+ "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me",
"dev": true,
"license": "ISC",
"dependencies": {
@@ -11712,16 +9598,16 @@
}
},
"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==",
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
"dev": true,
"license": "ISC",
"dependencies": {
- "is-glob": "^4.0.3"
+ "is-glob": "^4.0.1"
},
"engines": {
- "node": ">=10.13.0"
+ "node": ">= 6"
}
},
"node_modules/glob-to-regexp": {
@@ -11731,30 +9617,6 @@
"dev": true,
"license": "BSD-2-Clause"
},
- "node_modules/glob/node_modules/brace-expansion": {
- "version": "1.1.12",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz",
- "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "node_modules/glob/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,
- "license": "ISC",
- "dependencies": {
- "brace-expansion": "^1.1.7"
- },
- "engines": {
- "node": "*"
- }
- },
"node_modules/global-modules": {
"version": "0.2.3",
"resolved": "https://registry.npmjs.org/global-modules/-/global-modules-0.2.3.tgz",
@@ -11785,27 +9647,20 @@
"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==",
- "dev": true,
- "license": "ISC",
- "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==",
+ "version": "12.4.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz",
+ "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==",
"dev": true,
"license": "MIT",
+ "dependencies": {
+ "type-fest": "^0.8.1"
+ },
"engines": {
- "node": ">=4"
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/globalthis": {
@@ -11853,6 +9708,22 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/gonzales-pe": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/gonzales-pe/-/gonzales-pe-4.3.0.tgz",
+ "integrity": "sha512-otgSPpUmdWJ43VXyiNgEYE4luzHCL2pz4wQ0OnDluC6Eg4Ko3Vexy/SrSynglw/eR+OhkzmqFCZa/OFa/RgAOQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "minimist": "^1.2.5"
+ },
+ "bin": {
+ "gonzales": "bin/gonzales.js"
+ },
+ "engines": {
+ "node": ">=0.6.0"
+ }
+ },
"node_modules/gopd": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
@@ -11873,12 +9744,13 @@
"dev": true,
"license": "ISC"
},
- "node_modules/graphemer": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz",
- "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==",
+ "node_modules/growly": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz",
+ "integrity": "sha512-+xGQY0YyAWCnqy7Cd++hc2JqMYzlm0dG30Jd0beaA64sROr8C4nt8Yc9V5Ro3avlSUDTN0ulqP/VBKi1/lLygw==",
"dev": true,
- "license": "MIT"
+ "license": "MIT",
+ "optional": true
},
"node_modules/gzip-size": {
"version": "6.0.0",
@@ -11896,13 +9768,6 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/handle-thing": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz",
- "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/hard-rejection": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz",
@@ -11913,6 +9778,16 @@
"node": ">=6"
}
},
+ "node_modules/has": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.4.tgz",
+ "integrity": "sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4.0"
+ }
+ },
"node_modules/has-bigints": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz",
@@ -11994,23 +9869,78 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/hashery": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/hashery/-/hashery-1.3.0.tgz",
- "integrity": "sha512-fWltioiy5zsSAs9ouEnvhsVJeAXRybGCNNv0lvzpzNOSDbULXRy7ivFWwCCv4I5Am6kSo75hmbsCduOoc2/K4w==",
+ "node_modules/has-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
+ "integrity": "sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "hookified": "^1.13.0"
+ "get-value": "^2.0.6",
+ "has-values": "^1.0.0",
+ "isobject": "^3.0.0"
},
"engines": {
- "node": ">=20"
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/has-values": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
+ "integrity": "sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-number": "^3.0.0",
+ "kind-of": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/has-values/node_modules/is-number": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+ "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "kind-of": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/has-values/node_modules/is-number/node_modules/kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-buffer": "^1.1.5"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/has-values/node_modules/kind-of": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
+ "integrity": "sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-buffer": "^1.1.5"
+ },
+ "engines": {
+ "node": ">=0.10.0"
}
},
"node_modules/hasown": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
- "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.3.tgz",
+ "integrity": "sha512-ej4AhfhfL2Q2zpMmLo7U1Uv9+PyhIZpgQLGT1F9miIGmiCJIoCgSmczFdrc97mWT4kVY72KA+WnnhJ5pghSvSg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -12044,13 +9974,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/hookified": {
- "version": "1.14.0",
- "resolved": "https://registry.npmjs.org/hookified/-/hookified-1.14.0.tgz",
- "integrity": "sha512-pi1ynXIMFx/uIIwpWJ/5CEtOHLGtnUB0WhGeeYT+fKcQ+WCQbm3/rrkAXnpfph++PgepNqPdTC2WTj8A6k6zoQ==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/hosted-git-info": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz",
@@ -12084,88 +10007,59 @@
"dev": true,
"license": "ISC"
},
- "node_modules/hpack.js": {
- "version": "2.1.6",
- "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz",
- "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==",
+ "node_modules/html-element-map": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/html-element-map/-/html-element-map-1.4.0.tgz",
+ "integrity": "sha512-jiTQtpaVnCcT1KDghMcmvbB5Q1AAWyBsGNuJZiHOWwN5GIVZGKqCWj9ddOFxLLz8ELYL2dwv2TaeS4dMdc/Pkw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "inherits": "^2.0.1",
- "obuf": "^1.0.0",
- "readable-stream": "^2.0.1",
- "wbuf": "^1.1.0"
- }
- },
- "node_modules/hpack.js/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,
- "license": "MIT"
- },
- "node_modules/hpack.js/node_modules/readable-stream": {
- "version": "2.3.8",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
- "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
- }
- },
- "node_modules/hpack.js/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==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/hpack.js/node_modules/string_decoder": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
- "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "safe-buffer": "~5.1.0"
+ "array.prototype.filter": "^1.0.4",
+ "es-errors": "^1.3.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/html-encoding-sniffer": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz",
- "integrity": "sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz",
+ "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "whatwg-encoding": "^3.1.1"
+ "whatwg-encoding": "^1.0.5"
},
"engines": {
- "node": ">=18"
+ "node": ">=10"
}
},
- "node_modules/html-entities": {
- "version": "2.5.2",
- "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.5.2.tgz",
- "integrity": "sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA==",
+ "node_modules/html-encoding-sniffer/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,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/mdevils"
- },
- {
- "type": "patreon",
- "url": "https://patreon.com/mdevils"
- }
- ],
- "license": "MIT"
+ "license": "MIT",
+ "dependencies": {
+ "safer-buffer": ">= 2.1.2 < 3"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/html-encoding-sniffer/node_modules/whatwg-encoding": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz",
+ "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==",
+ "deprecated": "Use @exodus/bytes instead for a more spec-conformant and faster implementation",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "iconv-lite": "0.4.24"
+ }
},
"node_modules/html-escaper": {
"version": "2.0.2",
@@ -12187,123 +10081,83 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/http-deceiver": {
- "version": "1.2.7",
- "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz",
- "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==",
+ "node_modules/htmlparser2": {
+ "version": "10.1.0",
+ "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-10.1.0.tgz",
+ "integrity": "sha512-VTZkM9GWRAtEpveh7MSF6SjjrpNVNNVJfFup7xTY3UpFtm67foy9HDVXneLtFVt4pMz5kZtgNcvCniNFb1hlEQ==",
"dev": true,
- "license": "MIT"
- },
- "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,
+ "funding": [
+ "https://github.com/fb55/htmlparser2?sponsor=1",
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/fb55"
+ }
+ ],
"license": "MIT",
"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"
+ "domelementtype": "^2.3.0",
+ "domhandler": "^5.0.3",
+ "domutils": "^3.2.2",
+ "entities": "^7.0.1"
}
},
- "node_modules/http-link-header": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/http-link-header/-/http-link-header-1.1.3.tgz",
- "integrity": "sha512-3cZ0SRL8fb9MUlU3mKM61FcQvPfXx2dBrZW3Vbg5CXa8jFlK8OaEpePenLe1oEXQduhz8b0QjsqfS59QP4AJDQ==",
+ "node_modules/htmlparser2/node_modules/entities": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-7.0.1.tgz",
+ "integrity": "sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==",
"dev": true,
- "license": "MIT",
+ "license": "BSD-2-Clause",
"engines": {
- "node": ">=6.0.0"
+ "node": ">=0.12"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/entities?sponsor=1"
}
},
"node_modules/http-parser-js": {
- "version": "0.5.9",
- "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.9.tgz",
- "integrity": "sha512-n1XsPy3rXVxlqxVioEWdC+0+M+SQw0DpJynwtOPo1X+ZlvdzTLtDBIJJlDQTnwZIFJrZSzSGmIOUdP8tu+SgLw==",
+ "version": "0.5.10",
+ "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.10.tgz",
+ "integrity": "sha512-Pysuw9XpUq5dVc/2SMHpuTY01RFl8fttgcyunjL7eEMhGM3cI4eOmiCycJDVCo/7O7ClfQD3SaI6ftDzqOXYMA==",
"dev": true,
"license": "MIT"
},
- "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,
- "license": "MIT",
- "dependencies": {
- "eventemitter3": "^4.0.0",
- "follow-redirects": "^1.0.0",
- "requires-port": "^1.0.0"
- },
- "engines": {
- "node": ">=8.0.0"
- }
- },
"node_modules/http-proxy-agent": {
- "version": "7.0.2",
- "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz",
- "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==",
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz",
+ "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "agent-base": "^7.1.0",
- "debug": "^4.3.4"
- },
- "engines": {
- "node": ">= 14"
- }
- },
- "node_modules/http-proxy-middleware": {
- "version": "2.0.9",
- "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.9.tgz",
- "integrity": "sha512-c1IyJYLYppU574+YI7R4QyX2ystMtVXZwIdzazUIPIJsHuWNd+mho2j+bKoHftndicGj9yh+xjd+l0yj7VeT1Q==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/http-proxy": "^1.17.8",
- "http-proxy": "^1.18.1",
- "is-glob": "^4.0.1",
- "is-plain-obj": "^3.0.0",
- "micromatch": "^4.0.2"
- },
- "engines": {
- "node": ">=12.0.0"
- },
- "peerDependencies": {
- "@types/express": "^4.17.13"
- },
- "peerDependenciesMeta": {
- "@types/express": {
- "optional": true
- }
- }
- },
- "node_modules/https-proxy-agent": {
- "version": "7.0.6",
- "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz",
- "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "agent-base": "^7.1.2",
+ "@tootallnate/once": "1",
+ "agent-base": "6",
"debug": "4"
},
"engines": {
- "node": ">= 14"
+ "node": ">= 6"
+ }
+ },
+ "node_modules/https-proxy-agent": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz",
+ "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==",
+ "dev": true,
+ "license": "MIT",
+ "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==",
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz",
+ "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==",
"dev": true,
"license": "Apache-2.0",
"engines": {
- "node": ">=10.17.0"
+ "node": ">=8.12.0"
}
},
"node_modules/iconv-lite": {
@@ -12363,54 +10217,10 @@
"node": ">= 4"
}
},
- "node_modules/ignore-walk": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-4.0.1.tgz",
- "integrity": "sha512-rzDQLaW4jQbh2YrOFlJdCtX8qgJTehFRYiUB2r1osqTeDzV/3+Jh8fz1oAPzUThf3iku8Ds4IDqawI5d8mUiQw==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "minimatch": "^3.0.4"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/ignore-walk/node_modules/brace-expansion": {
- "version": "1.1.12",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz",
- "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "node_modules/ignore-walk/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,
- "license": "ISC",
- "dependencies": {
- "brace-expansion": "^1.1.7"
- },
- "engines": {
- "node": "*"
- }
- },
- "node_modules/image-ssim": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/image-ssim/-/image-ssim-0.2.0.tgz",
- "integrity": "sha512-W7+sO6/yhxy83L0G7xR8YAc5Z5QFtYEXXRV6EaE8tuYBZJnA3gVgp3q7X7muhLZVodeb9UfvjSbwt9VJwjIYAg==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/immutable": {
- "version": "5.0.3",
- "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.0.3.tgz",
- "integrity": "sha512-P8IdPQHq3lA1xVeBRi5VPqUm5HDgKnx0Ru51wZz5mjxHr5n3RWhjIpOFU7ybkUxfB+5IToy+OLaHYDBIWsv+uw==",
+ "version": "5.1.5",
+ "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.5.tgz",
+ "integrity": "sha512-t7xcm2siw+hlUM68I+UEOK+z84RzmN59as9DZ7P1l0994DKUWV7UXBMQZVxaoMSRQ+PBZbHCOoBt7a2wxOMt+A==",
"dev": true,
"license": "MIT"
},
@@ -12441,17 +10251,14 @@
"node": ">=4"
}
},
- "node_modules/import-in-the-middle": {
- "version": "1.15.0",
- "resolved": "https://registry.npmjs.org/import-in-the-middle/-/import-in-the-middle-1.15.0.tgz",
- "integrity": "sha512-bpQy+CrsRmYmoPMAE/0G33iwRqwW4ouqdRg8jgbH3aKuCtOc8lxgmYXg2dMM92CRiGP660EtBcymH/eVUpCSaA==",
+ "node_modules/import-lazy": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz",
+ "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==",
"dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "acorn": "^8.14.0",
- "acorn-import-attributes": "^1.9.5",
- "cjs-module-lexer": "^1.2.2",
- "module-details-from-path": "^1.0.3"
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
}
},
"node_modules/import-local": {
@@ -12474,19 +10281,6 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/import-local/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==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "find-up": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/imurmurhash": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
@@ -12549,46 +10343,13 @@
}
},
"node_modules/interpret": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz",
- "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=10.13.0"
- }
- },
- "node_modules/intl-messageformat": {
- "version": "10.7.18",
- "resolved": "https://registry.npmjs.org/intl-messageformat/-/intl-messageformat-10.7.18.tgz",
- "integrity": "sha512-m3Ofv/X/tV8Y3tHXLohcuVuhWKo7BBq62cqY15etqmLxg2DZ34AGGgQDeR+SCta2+zICb1NX83af0GJmbQ1++g==",
- "dev": true,
- "license": "BSD-3-Clause",
- "dependencies": {
- "@formatjs/ecma402-abstract": "2.3.6",
- "@formatjs/fast-memoize": "2.2.7",
- "@formatjs/icu-messageformat-parser": "2.11.4",
- "tslib": "^2.8.0"
- }
- },
- "node_modules/ip-address": {
- "version": "10.0.1",
- "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.0.1.tgz",
- "integrity": "sha512-NWv9YLW4PoW2B7xtzaS3NCot75m6nK7Icdv0o3lfMceJVRfSoQwqD4wEH5rLwoKJwUiZ/rfpiVBhnaF0FK4HoA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 12"
- }
- },
- "node_modules/ipaddr.js": {
"version": "2.2.0",
- "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.2.0.tgz",
- "integrity": "sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==",
+ "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz",
+ "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==",
"dev": true,
"license": "MIT",
"engines": {
- "node": ">= 10"
+ "node": ">= 0.10"
}
},
"node_modules/irregular-plurals": {
@@ -12601,6 +10362,45 @@
"node": ">=8"
}
},
+ "node_modules/is-accessor-descriptor": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.1.tgz",
+ "integrity": "sha512-YBUanLI8Yoihw923YeFUS5fs0fF2f5TSFTNiYAAzhhDscDa3lEqYuz1pDOEP5KvX94I9ey3vsqjJcLVFVU+3QA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "hasown": "^2.0.0"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/is-alphabetical": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz",
+ "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/is-alphanumerical": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz",
+ "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-alphabetical": "^1.0.0",
+ "is-decimal": "^1.0.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
"node_modules/is-array-buffer": {
"version": "3.0.5",
"resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz",
@@ -12662,19 +10462,6 @@
"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,
- "license": "MIT",
- "dependencies": {
- "binary-extensions": "^2.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/is-boolean-object": {
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz",
@@ -12699,45 +10486,6 @@
"dev": true,
"license": "MIT"
},
- "node_modules/is-builtin-module": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz",
- "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "builtin-modules": "^3.3.0"
- },
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/is-bun-module": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-bun-module/-/is-bun-module-2.0.0.tgz",
- "integrity": "sha512-gNCGbnnnnFAUGKeZ9PdbyeGYJqewpmc2aKHUEMO5nQPWU9lOmv7jcmQIv+qHD8fXW6W7qfuCwX4rY9LNRjXrkQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "semver": "^7.7.1"
- }
- },
- "node_modules/is-bun-module/node_modules/semver": {
- "version": "7.7.3",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz",
- "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==",
- "dev": true,
- "license": "ISC",
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
"node_modules/is-callable": {
"version": "1.2.7",
"resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz",
@@ -12751,6 +10499,19 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/is-ci": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz",
+ "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ci-info": "^2.0.0"
+ },
+ "bin": {
+ "is-ci": "bin.js"
+ }
+ },
"node_modules/is-core-module": {
"version": "2.16.1",
"resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz",
@@ -12767,6 +10528,19 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/is-data-descriptor": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.1.tgz",
+ "integrity": "sha512-bc4NlCDiCr28U4aEsQ3Qs2491gVq4V8G7MQyws968ImqjKuYtTJXrl7Vq7jsN7Ly/C3xj5KWFrY7sHNeDkAzXw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "hasown": "^2.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
"node_modules/is-data-view": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz",
@@ -12802,12 +10576,38 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/is-decimal": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz",
+ "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/is-descriptor": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.3.tgz",
+ "integrity": "sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-accessor-descriptor": "^1.0.1",
+ "is-data-descriptor": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
"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,
"license": "MIT",
+ "optional": true,
"bin": {
"is-docker": "cli.js"
},
@@ -12907,6 +10707,17 @@
"node": ">=0.10.0"
}
},
+ "node_modules/is-hexadecimal": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz",
+ "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
"node_modules/is-map": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz",
@@ -12960,27 +10771,50 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/is-path-inside": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
- "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
+ "node_modules/is-path-cwd": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz",
+ "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==",
"dev": true,
"license": "MIT",
"engines": {
- "node": ">=8"
+ "node": ">=6"
+ }
+ },
+ "node_modules/is-path-in-cwd": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz",
+ "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-path-inside": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/is-path-inside": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz",
+ "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "path-is-inside": "^1.0.2"
+ },
+ "engines": {
+ "node": ">=6"
}
},
"node_modules/is-plain-obj": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz",
- "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz",
+ "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==",
"dev": true,
"license": "MIT",
"engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "node": ">=0.10.0"
}
},
"node_modules/is-plain-object": {
@@ -13019,6 +10853,16 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/is-regexp": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-2.1.0.tgz",
+ "integrity": "sha512-OZ4IlER3zmRIoB9AqNhEggVxqIH4ofDns5nRrPS6yQxXE1TPCUpFznBfRQmQa8uC+pXqjMnukiJBxCisIxiLGA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
"node_modules/is-set": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz",
@@ -13078,6 +10922,13 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/is-subset": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/is-subset/-/is-subset-0.1.1.tgz",
+ "integrity": "sha512-6Ybun0IkarhmEqxXCNw/C0bna6Zb/TkfUX9UbwJtK6ObwAVCxmAP308WWTHviM/zAqXk05cdhYsUsZeGQh99iw==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/is-symbol": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz",
@@ -13112,6 +10963,13 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/is-typedarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
+ "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/is-unicode-supported": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz",
@@ -13125,6 +10983,13 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/is-utf8": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
+ "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/is-weakmap": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz",
@@ -13187,6 +11052,7 @@
"integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==",
"dev": true,
"license": "MIT",
+ "optional": true,
"dependencies": {
"is-docker": "^2.0.0"
},
@@ -13260,6 +11126,35 @@
"node": ">=10"
}
},
+ "node_modules/istanbul-lib-report/node_modules/make-dir": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz",
+ "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "semver": "^7.5.3"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/istanbul-lib-report/node_modules/semver": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz",
+ "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==",
+ "dev": true,
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
"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",
@@ -13275,16 +11170,6 @@
"node": ">=10"
}
},
- "node_modules/istanbul-lib-source-maps/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==",
- "dev": true,
- "license": "BSD-3-Clause",
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/istanbul-reports": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.2.0.tgz",
@@ -13318,562 +11203,367 @@
}
},
"node_modules/jest": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz",
- "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==",
+ "version": "26.6.3",
+ "resolved": "https://registry.npmjs.org/jest/-/jest-26.6.3.tgz",
+ "integrity": "sha512-lGS5PXGAzR4RF7V5+XObhqz2KZIDUA1yD0DG6pBVmy10eh0ZIXQImRuzocsI/N2XZ1GrLFwTS27In2i2jlpq1Q==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
- "@jest/core": "^29.7.0",
- "@jest/types": "^29.6.3",
+ "@jest/core": "^26.6.3",
"import-local": "^3.0.2",
- "jest-cli": "^29.7.0"
+ "jest-cli": "^26.6.3"
},
"bin": {
"jest": "bin/jest.js"
},
"engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- },
- "peerDependencies": {
- "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0"
- },
- "peerDependenciesMeta": {
- "node-notifier": {
- "optional": true
- }
+ "node": ">= 10.14.2"
}
},
"node_modules/jest-changed-files": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz",
- "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==",
+ "version": "26.6.2",
+ "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-26.6.2.tgz",
+ "integrity": "sha512-fDS7szLcY9sCtIip8Fjry9oGf3I2ht/QT21bAHm5Dmf0mD4X3ReNUf17y+bO6fR8WgbIZTlbyG1ak/53cbRzKQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "execa": "^5.0.0",
- "jest-util": "^29.7.0",
- "p-limit": "^3.1.0"
+ "@jest/types": "^26.6.2",
+ "execa": "^4.0.0",
+ "throat": "^5.0.0"
},
"engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ "node": ">= 10.14.2"
}
},
"node_modules/jest-circus": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz",
- "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==",
+ "version": "26.6.3",
+ "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-26.6.3.tgz",
+ "integrity": "sha512-ACrpWZGcQMpbv13XbzRzpytEJlilP/Su0JtNCi5r/xLpOUhnaIJr8leYYpLEMgPFURZISEHrnnpmB54Q/UziPw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@jest/environment": "^29.7.0",
- "@jest/expect": "^29.7.0",
- "@jest/test-result": "^29.7.0",
- "@jest/types": "^29.6.3",
+ "@babel/traverse": "^7.1.0",
+ "@jest/environment": "^26.6.2",
+ "@jest/test-result": "^26.6.2",
+ "@jest/types": "^26.6.2",
+ "@types/babel__traverse": "^7.0.4",
"@types/node": "*",
"chalk": "^4.0.0",
"co": "^4.6.0",
- "dedent": "^1.0.0",
+ "dedent": "^0.7.0",
+ "expect": "^26.6.2",
"is-generator-fn": "^2.0.0",
- "jest-each": "^29.7.0",
- "jest-matcher-utils": "^29.7.0",
- "jest-message-util": "^29.7.0",
- "jest-runtime": "^29.7.0",
- "jest-snapshot": "^29.7.0",
- "jest-util": "^29.7.0",
- "p-limit": "^3.1.0",
- "pretty-format": "^29.7.0",
- "pure-rand": "^6.0.0",
- "slash": "^3.0.0",
- "stack-utils": "^2.0.3"
+ "jest-each": "^26.6.2",
+ "jest-matcher-utils": "^26.6.2",
+ "jest-message-util": "^26.6.2",
+ "jest-runner": "^26.6.3",
+ "jest-runtime": "^26.6.3",
+ "jest-snapshot": "^26.6.2",
+ "jest-util": "^26.6.2",
+ "pretty-format": "^26.6.2",
+ "stack-utils": "^2.0.2",
+ "throat": "^5.0.0"
},
"engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ "node": ">= 10.14.2"
}
},
"node_modules/jest-cli": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz",
- "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==",
+ "version": "26.6.3",
+ "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-26.6.3.tgz",
+ "integrity": "sha512-GF9noBSa9t08pSyl3CY4frMrqp+aQXFGFkf5hEPbh/pIUFYWMK6ZLTfbmadxJVcJrdRoChlWQsA2VkJcDFK8hg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@jest/core": "^29.7.0",
- "@jest/test-result": "^29.7.0",
- "@jest/types": "^29.6.3",
+ "@jest/core": "^26.6.3",
+ "@jest/test-result": "^26.6.2",
+ "@jest/types": "^26.6.2",
"chalk": "^4.0.0",
- "create-jest": "^29.7.0",
"exit": "^0.1.2",
+ "graceful-fs": "^4.2.4",
"import-local": "^3.0.2",
- "jest-config": "^29.7.0",
- "jest-util": "^29.7.0",
- "jest-validate": "^29.7.0",
- "yargs": "^17.3.1"
+ "is-ci": "^2.0.0",
+ "jest-config": "^26.6.3",
+ "jest-util": "^26.6.2",
+ "jest-validate": "^26.6.2",
+ "prompts": "^2.0.1",
+ "yargs": "^15.4.1"
},
"bin": {
"jest": "bin/jest.js"
},
"engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- },
- "peerDependencies": {
- "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0"
- },
- "peerDependenciesMeta": {
- "node-notifier": {
- "optional": true
- }
+ "node": ">= 10.14.2"
}
},
"node_modules/jest-config": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz",
- "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==",
+ "version": "26.6.3",
+ "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-26.6.3.tgz",
+ "integrity": "sha512-t5qdIj/bCj2j7NFVHb2nFB4aUdfucDn3JRKgrZnplb8nieAirAzRSHP8uDEd+qV6ygzg9Pz4YG7UTJf94LPSyg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/core": "^7.11.6",
- "@jest/test-sequencer": "^29.7.0",
- "@jest/types": "^29.6.3",
- "babel-jest": "^29.7.0",
+ "@babel/core": "^7.1.0",
+ "@jest/test-sequencer": "^26.6.3",
+ "@jest/types": "^26.6.2",
+ "babel-jest": "^26.6.3",
"chalk": "^4.0.0",
- "ci-info": "^3.2.0",
"deepmerge": "^4.2.2",
- "glob": "^7.1.3",
- "graceful-fs": "^4.2.9",
- "jest-circus": "^29.7.0",
- "jest-environment-node": "^29.7.0",
- "jest-get-type": "^29.6.3",
- "jest-regex-util": "^29.6.3",
- "jest-resolve": "^29.7.0",
- "jest-runner": "^29.7.0",
- "jest-util": "^29.7.0",
- "jest-validate": "^29.7.0",
- "micromatch": "^4.0.4",
- "parse-json": "^5.2.0",
- "pretty-format": "^29.7.0",
- "slash": "^3.0.0",
- "strip-json-comments": "^3.1.1"
+ "glob": "^7.1.1",
+ "graceful-fs": "^4.2.4",
+ "jest-environment-jsdom": "^26.6.2",
+ "jest-environment-node": "^26.6.2",
+ "jest-get-type": "^26.3.0",
+ "jest-jasmine2": "^26.6.3",
+ "jest-regex-util": "^26.0.0",
+ "jest-resolve": "^26.6.2",
+ "jest-util": "^26.6.2",
+ "jest-validate": "^26.6.2",
+ "micromatch": "^4.0.2",
+ "pretty-format": "^26.6.2"
},
"engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ "node": ">= 10.14.2"
},
"peerDependencies": {
- "@types/node": "*",
"ts-node": ">=9.0.0"
},
"peerDependenciesMeta": {
- "@types/node": {
- "optional": true
- },
"ts-node": {
"optional": true
}
}
},
"node_modules/jest-dev-server": {
- "version": "10.1.4",
- "resolved": "https://registry.npmjs.org/jest-dev-server/-/jest-dev-server-10.1.4.tgz",
- "integrity": "sha512-bGQ6sedNGtT6AFHhCVqGTXMPz7UyJi/ZrhNBgyqsP0XU9N8acCEIfqZEA22rOaZ+NdEVsaltk6tL7UT6aXfI7w==",
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/jest-dev-server/-/jest-dev-server-5.0.3.tgz",
+ "integrity": "sha512-aJR3a5KdY18Lsz+VbREKwx2HM3iukiui+J9rlv9o6iYTwZCSsJazSTStcD9K1q0AIF3oA+FqLOKDyo/sc7+fJw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "chalk": "^4.1.2",
+ "chalk": "^4.1.1",
"cwd": "^0.10.0",
- "find-process": "^1.4.7",
- "prompts": "^2.4.2",
- "spawnd": "^10.1.4",
+ "find-process": "^1.4.4",
+ "prompts": "^2.4.1",
+ "spawnd": "^5.0.0",
"tree-kill": "^1.2.2",
- "wait-on": "^8.0.1"
- },
- "engines": {
- "node": ">=16"
+ "wait-on": "^5.3.0"
}
},
"node_modules/jest-diff": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz",
- "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==",
+ "version": "26.6.2",
+ "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-26.6.2.tgz",
+ "integrity": "sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA==",
"dev": true,
"license": "MIT",
"dependencies": {
"chalk": "^4.0.0",
- "diff-sequences": "^29.6.3",
- "jest-get-type": "^29.6.3",
- "pretty-format": "^29.7.0"
+ "diff-sequences": "^26.6.2",
+ "jest-get-type": "^26.3.0",
+ "pretty-format": "^26.6.2"
},
"engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ "node": ">= 10.14.2"
}
},
"node_modules/jest-docblock": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz",
- "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==",
+ "version": "26.0.0",
+ "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-26.0.0.tgz",
+ "integrity": "sha512-RDZ4Iz3QbtRWycd8bUEPxQsTlYazfYn/h5R65Fc6gOfwozFhoImx+affzky/FFBuqISPTqjXomoIGJVKBWoo0w==",
"dev": true,
"license": "MIT",
"dependencies": {
"detect-newline": "^3.0.0"
},
"engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ "node": ">= 10.14.2"
}
},
"node_modules/jest-each": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz",
- "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==",
+ "version": "26.6.2",
+ "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-26.6.2.tgz",
+ "integrity": "sha512-Mer/f0KaATbjl8MCJ+0GEpNdqmnVmDYqCTJYTvoo7rqmRiDllmp2AYN+06F93nXcY3ur9ShIjS+CO/uD+BbH4A==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@jest/types": "^29.6.3",
+ "@jest/types": "^26.6.2",
"chalk": "^4.0.0",
- "jest-get-type": "^29.6.3",
- "jest-util": "^29.7.0",
- "pretty-format": "^29.7.0"
+ "jest-get-type": "^26.3.0",
+ "jest-util": "^26.6.2",
+ "pretty-format": "^26.6.2"
},
"engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ "node": ">= 10.14.2"
}
},
"node_modules/jest-environment-jsdom": {
- "version": "30.2.0",
- "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-30.2.0.tgz",
- "integrity": "sha512-zbBTiqr2Vl78pKp/laGBREYzbZx9ZtqPjOK4++lL4BNDhxRnahg51HtoDrk9/VjIy9IthNEWdKVd7H5bqBhiWQ==",
+ "version": "26.6.2",
+ "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-26.6.2.tgz",
+ "integrity": "sha512-jgPqCruTlt3Kwqg5/WVFyHIOJHsiAvhcp2qiR2QQstuG9yWox5+iHpU3ZrcBxW14T4fe5Z68jAfLRh7joCSP2Q==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@jest/environment": "30.2.0",
- "@jest/environment-jsdom-abstract": "30.2.0",
- "@types/jsdom": "^21.1.7",
+ "@jest/environment": "^26.6.2",
+ "@jest/fake-timers": "^26.6.2",
+ "@jest/types": "^26.6.2",
"@types/node": "*",
- "jsdom": "^26.1.0"
+ "jest-mock": "^26.6.2",
+ "jest-util": "^26.6.2",
+ "jsdom": "^16.4.0"
},
"engines": {
- "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
- },
- "peerDependencies": {
- "canvas": "^3.0.0"
- },
- "peerDependenciesMeta": {
- "canvas": {
- "optional": true
- }
- }
- },
- "node_modules/jest-environment-jsdom/node_modules/@jest/environment": {
- "version": "30.2.0",
- "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-30.2.0.tgz",
- "integrity": "sha512-/QPTL7OBJQ5ac09UDRa3EQes4gt1FTEG/8jZ/4v5IVzx+Cv7dLxlVIvfvSVRiiX2drWyXeBjkMSR8hvOWSog5g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@jest/fake-timers": "30.2.0",
- "@jest/types": "30.2.0",
- "@types/node": "*",
- "jest-mock": "30.2.0"
- },
- "engines": {
- "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
- }
- },
- "node_modules/jest-environment-jsdom/node_modules/@jest/fake-timers": {
- "version": "30.2.0",
- "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-30.2.0.tgz",
- "integrity": "sha512-HI3tRLjRxAbBy0VO8dqqm7Hb2mIa8d5bg/NJkyQcOk7V118ObQML8RC5luTF/Zsg4474a+gDvhce7eTnP4GhYw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@jest/types": "30.2.0",
- "@sinonjs/fake-timers": "^13.0.0",
- "@types/node": "*",
- "jest-message-util": "30.2.0",
- "jest-mock": "30.2.0",
- "jest-util": "30.2.0"
- },
- "engines": {
- "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
- }
- },
- "node_modules/jest-environment-jsdom/node_modules/@jest/schemas": {
- "version": "30.0.5",
- "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.5.tgz",
- "integrity": "sha512-DmdYgtezMkh3cpU8/1uyXakv3tJRcmcXxBOcO0tbaozPwpmh4YMsnWrQm9ZmZMfa5ocbxzbFk6O4bDPEc/iAnA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@sinclair/typebox": "^0.34.0"
- },
- "engines": {
- "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
- }
- },
- "node_modules/jest-environment-jsdom/node_modules/@jest/types": {
- "version": "30.2.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.2.0.tgz",
- "integrity": "sha512-H9xg1/sfVvyfU7o3zMfBEjQ1gcsdeTMgqHoYdN79tuLqfTtuu7WckRA1R5whDwOzxaZAeMKTYWqP+WCAi0CHsg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@jest/pattern": "30.0.1",
- "@jest/schemas": "30.0.5",
- "@types/istanbul-lib-coverage": "^2.0.6",
- "@types/istanbul-reports": "^3.0.4",
- "@types/node": "*",
- "@types/yargs": "^17.0.33",
- "chalk": "^4.1.2"
- },
- "engines": {
- "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
- }
- },
- "node_modules/jest-environment-jsdom/node_modules/@sinclair/typebox": {
- "version": "0.34.41",
- "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.41.tgz",
- "integrity": "sha512-6gS8pZzSXdyRHTIqoqSVknxolr1kzfy4/CeDnrzsVz8TTIWUbOBr6gnzOmTYJ3eXQNh4IYHIGi5aIL7sOZ2G/g==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/jest-environment-jsdom/node_modules/@sinonjs/fake-timers": {
- "version": "13.0.5",
- "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-13.0.5.tgz",
- "integrity": "sha512-36/hTbH2uaWuGVERyC6da9YwGWnzUZXuPro/F2LfsdOsLnCojz/iSH8MxUt/FD2S5XBSVPhmArFUXcpCQ2Hkiw==",
- "dev": true,
- "license": "BSD-3-Clause",
- "dependencies": {
- "@sinonjs/commons": "^3.0.1"
- }
- },
- "node_modules/jest-environment-jsdom/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,
- "license": "MIT",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/jest-environment-jsdom/node_modules/ci-info": {
- "version": "4.3.1",
- "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.3.1.tgz",
- "integrity": "sha512-Wdy2Igu8OcBpI2pZePZ5oWjPC38tmDVx5WKUXKwlLYkA0ozo85sLsLvkBbBn/sZaSCMFOGZJ14fvW9t5/d7kdA==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/sibiraj-s"
- }
- ],
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/jest-environment-jsdom/node_modules/jest-message-util": {
- "version": "30.2.0",
- "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-30.2.0.tgz",
- "integrity": "sha512-y4DKFLZ2y6DxTWD4cDe07RglV88ZiNEdlRfGtqahfbIjfsw1nMCPx49Uev4IA/hWn3sDKyAnSPwoYSsAEdcimw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/code-frame": "^7.27.1",
- "@jest/types": "30.2.0",
- "@types/stack-utils": "^2.0.3",
- "chalk": "^4.1.2",
- "graceful-fs": "^4.2.11",
- "micromatch": "^4.0.8",
- "pretty-format": "30.2.0",
- "slash": "^3.0.0",
- "stack-utils": "^2.0.6"
- },
- "engines": {
- "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
- }
- },
- "node_modules/jest-environment-jsdom/node_modules/jest-mock": {
- "version": "30.2.0",
- "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-30.2.0.tgz",
- "integrity": "sha512-JNNNl2rj4b5ICpmAcq+WbLH83XswjPbjH4T7yvGzfAGCPh1rw+xVNbtk+FnRslvt9lkCcdn9i1oAoKUuFsOxRw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@jest/types": "30.2.0",
- "@types/node": "*",
- "jest-util": "30.2.0"
- },
- "engines": {
- "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
- }
- },
- "node_modules/jest-environment-jsdom/node_modules/jest-util": {
- "version": "30.2.0",
- "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.2.0.tgz",
- "integrity": "sha512-QKNsM0o3Xe6ISQU869e+DhG+4CK/48aHYdJZGlFQVTjnbvgpcKyxpzk29fGiO7i/J8VENZ+d2iGnSsvmuHywlA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@jest/types": "30.2.0",
- "@types/node": "*",
- "chalk": "^4.1.2",
- "ci-info": "^4.2.0",
- "graceful-fs": "^4.2.11",
- "picomatch": "^4.0.2"
- },
- "engines": {
- "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
- }
- },
- "node_modules/jest-environment-jsdom/node_modules/picomatch": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz",
- "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/jonschlinkert"
- }
- },
- "node_modules/jest-environment-jsdom/node_modules/pretty-format": {
- "version": "30.2.0",
- "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.2.0.tgz",
- "integrity": "sha512-9uBdv/B4EefsuAL+pWqueZyZS2Ba+LxfFeQ9DN14HU4bN8bhaxKdkpjpB6fs9+pSjIBu+FXQHImEg8j/Lw0+vA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@jest/schemas": "30.0.5",
- "ansi-styles": "^5.2.0",
- "react-is": "^18.3.1"
- },
- "engines": {
- "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ "node": ">= 10.14.2"
}
},
"node_modules/jest-environment-node": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz",
- "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==",
+ "version": "26.6.2",
+ "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-26.6.2.tgz",
+ "integrity": "sha512-zhtMio3Exty18dy8ee8eJ9kjnRyZC1N4C1Nt/VShN1apyXc8rWGtJ9lI7vqiWcyyXS4BVSEn9lxAM2D+07/Tag==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@jest/environment": "^29.7.0",
- "@jest/fake-timers": "^29.7.0",
- "@jest/types": "^29.6.3",
+ "@jest/environment": "^26.6.2",
+ "@jest/fake-timers": "^26.6.2",
+ "@jest/types": "^26.6.2",
"@types/node": "*",
- "jest-mock": "^29.7.0",
- "jest-util": "^29.7.0"
+ "jest-mock": "^26.6.2",
+ "jest-util": "^26.6.2"
},
"engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ "node": ">= 10.14.2"
}
},
"node_modules/jest-get-type": {
- "version": "29.6.3",
- "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz",
- "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==",
+ "version": "26.3.0",
+ "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-26.3.0.tgz",
+ "integrity": "sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==",
"dev": true,
"license": "MIT",
"engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ "node": ">= 10.14.2"
}
},
"node_modules/jest-haste-map": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz",
- "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==",
+ "version": "26.6.2",
+ "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-26.6.2.tgz",
+ "integrity": "sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@jest/types": "^29.6.3",
- "@types/graceful-fs": "^4.1.3",
+ "@jest/types": "^26.6.2",
+ "@types/graceful-fs": "^4.1.2",
"@types/node": "*",
"anymatch": "^3.0.3",
"fb-watchman": "^2.0.0",
- "graceful-fs": "^4.2.9",
- "jest-regex-util": "^29.6.3",
- "jest-util": "^29.7.0",
- "jest-worker": "^29.7.0",
- "micromatch": "^4.0.4",
- "walker": "^1.0.8"
+ "graceful-fs": "^4.2.4",
+ "jest-regex-util": "^26.0.0",
+ "jest-serializer": "^26.6.2",
+ "jest-util": "^26.6.2",
+ "jest-worker": "^26.6.2",
+ "micromatch": "^4.0.2",
+ "sane": "^4.0.3",
+ "walker": "^1.0.7"
},
"engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ "node": ">= 10.14.2"
},
"optionalDependencies": {
- "fsevents": "^2.3.2"
+ "fsevents": "^2.1.2"
+ }
+ },
+ "node_modules/jest-jasmine2": {
+ "version": "26.6.3",
+ "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-26.6.3.tgz",
+ "integrity": "sha512-kPKUrQtc8aYwBV7CqBg5pu+tmYXlvFlSFYn18ev4gPFtrRzB15N2gW/Roew3187q2w2eHuu0MU9TJz6w0/nPEg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/traverse": "^7.1.0",
+ "@jest/environment": "^26.6.2",
+ "@jest/source-map": "^26.6.2",
+ "@jest/test-result": "^26.6.2",
+ "@jest/types": "^26.6.2",
+ "@types/node": "*",
+ "chalk": "^4.0.0",
+ "co": "^4.6.0",
+ "expect": "^26.6.2",
+ "is-generator-fn": "^2.0.0",
+ "jest-each": "^26.6.2",
+ "jest-matcher-utils": "^26.6.2",
+ "jest-message-util": "^26.6.2",
+ "jest-runtime": "^26.6.3",
+ "jest-snapshot": "^26.6.2",
+ "jest-util": "^26.6.2",
+ "pretty-format": "^26.6.2",
+ "throat": "^5.0.0"
+ },
+ "engines": {
+ "node": ">= 10.14.2"
}
},
"node_modules/jest-leak-detector": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz",
- "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==",
+ "version": "26.6.2",
+ "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-26.6.2.tgz",
+ "integrity": "sha512-i4xlXpsVSMeKvg2cEKdfhh0H39qlJlP5Ex1yQxwF9ubahboQYMgTtz5oML35AVA3B4Eu+YsmwaiKVev9KCvLxg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "jest-get-type": "^29.6.3",
- "pretty-format": "^29.7.0"
+ "jest-get-type": "^26.3.0",
+ "pretty-format": "^26.6.2"
},
"engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ "node": ">= 10.14.2"
}
},
"node_modules/jest-matcher-utils": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz",
- "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==",
+ "version": "26.6.2",
+ "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-26.6.2.tgz",
+ "integrity": "sha512-llnc8vQgYcNqDrqRDXWwMr9i7rS5XFiCwvh6DTP7Jqa2mqpcCBBlpCbn+trkG0KNhPu/h8rzyBkriOtBstvWhw==",
"dev": true,
"license": "MIT",
"dependencies": {
"chalk": "^4.0.0",
- "jest-diff": "^29.7.0",
- "jest-get-type": "^29.6.3",
- "pretty-format": "^29.7.0"
+ "jest-diff": "^26.6.2",
+ "jest-get-type": "^26.3.0",
+ "pretty-format": "^26.6.2"
},
"engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ "node": ">= 10.14.2"
}
},
"node_modules/jest-message-util": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz",
- "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==",
+ "version": "26.6.2",
+ "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-26.6.2.tgz",
+ "integrity": "sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/code-frame": "^7.12.13",
- "@jest/types": "^29.6.3",
+ "@babel/code-frame": "^7.0.0",
+ "@jest/types": "^26.6.2",
"@types/stack-utils": "^2.0.0",
"chalk": "^4.0.0",
- "graceful-fs": "^4.2.9",
- "micromatch": "^4.0.4",
- "pretty-format": "^29.7.0",
+ "graceful-fs": "^4.2.4",
+ "micromatch": "^4.0.2",
+ "pretty-format": "^26.6.2",
"slash": "^3.0.0",
- "stack-utils": "^2.0.3"
+ "stack-utils": "^2.0.2"
},
"engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ "node": ">= 10.14.2"
}
},
"node_modules/jest-mock": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz",
- "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==",
+ "version": "26.6.2",
+ "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-26.6.2.tgz",
+ "integrity": "sha512-YyFjePHHp1LzpzYcmgqkJ0nm0gg/lJx2aZFzFy1S6eUqNjXsOqTK10zNRff2dNfssgokjkG65OlWNcIlgd3zew==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@jest/types": "^29.6.3",
- "@types/node": "*",
- "jest-util": "^29.7.0"
+ "@jest/types": "^26.6.2",
+ "@types/node": "*"
},
"engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ "node": ">= 10.14.2"
}
},
"node_modules/jest-pnp-resolver": {
@@ -13895,153 +11585,244 @@
}
},
"node_modules/jest-regex-util": {
- "version": "29.6.3",
- "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz",
- "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==",
+ "version": "26.0.0",
+ "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-26.0.0.tgz",
+ "integrity": "sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A==",
"dev": true,
"license": "MIT",
"engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ "node": ">= 10.14.2"
}
},
"node_modules/jest-resolve": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz",
- "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==",
+ "version": "26.6.2",
+ "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-26.6.2.tgz",
+ "integrity": "sha512-sOxsZOq25mT1wRsfHcbtkInS+Ek7Q8jCHUB0ZUTP0tc/c41QHriU/NunqMfCUWsL4H3MHpvQD4QR9kSYhS7UvQ==",
"dev": true,
"license": "MIT",
"dependencies": {
+ "@jest/types": "^26.6.2",
"chalk": "^4.0.0",
- "graceful-fs": "^4.2.9",
- "jest-haste-map": "^29.7.0",
+ "graceful-fs": "^4.2.4",
"jest-pnp-resolver": "^1.2.2",
- "jest-util": "^29.7.0",
- "jest-validate": "^29.7.0",
- "resolve": "^1.20.0",
- "resolve.exports": "^2.0.0",
+ "jest-util": "^26.6.2",
+ "read-pkg-up": "^7.0.1",
+ "resolve": "^1.18.1",
"slash": "^3.0.0"
},
"engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ "node": ">= 10.14.2"
}
},
"node_modules/jest-resolve-dependencies": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz",
- "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==",
+ "version": "26.6.3",
+ "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-26.6.3.tgz",
+ "integrity": "sha512-pVwUjJkxbhe4RY8QEWzN3vns2kqyuldKpxlxJlzEYfKSvY6/bMvxoFrYYzUO1Gx28yKWN37qyV7rIoIp2h8fTg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "jest-regex-util": "^29.6.3",
- "jest-snapshot": "^29.7.0"
+ "@jest/types": "^26.6.2",
+ "jest-regex-util": "^26.0.0",
+ "jest-snapshot": "^26.6.2"
},
"engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ "node": ">= 10.14.2"
+ }
+ },
+ "node_modules/jest-resolve/node_modules/hosted-git-info": {
+ "version": "2.8.9",
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz",
+ "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/jest-resolve/node_modules/normalize-package-data": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
+ "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "hosted-git-info": "^2.1.4",
+ "resolve": "^1.10.0",
+ "semver": "2 || 3 || 4 || 5",
+ "validate-npm-package-license": "^3.0.1"
+ }
+ },
+ "node_modules/jest-resolve/node_modules/read-pkg": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz",
+ "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/normalize-package-data": "^2.4.0",
+ "normalize-package-data": "^2.5.0",
+ "parse-json": "^5.0.0",
+ "type-fest": "^0.6.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/jest-resolve/node_modules/read-pkg-up": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz",
+ "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "find-up": "^4.1.0",
+ "read-pkg": "^5.2.0",
+ "type-fest": "^0.8.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/jest-resolve/node_modules/read-pkg/node_modules/type-fest": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz",
+ "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==",
+ "dev": true,
+ "license": "(MIT OR CC0-1.0)",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/jest-resolve/node_modules/semver": {
+ "version": "5.7.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
+ "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
+ "dev": true,
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver"
}
},
"node_modules/jest-runner": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz",
- "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==",
+ "version": "26.6.3",
+ "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-26.6.3.tgz",
+ "integrity": "sha512-atgKpRHnaA2OvByG/HpGA4g6CSPS/1LK0jK3gATJAoptC1ojltpmVlYC3TYgdmGp+GLuhzpH30Gvs36szSL2JQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@jest/console": "^29.7.0",
- "@jest/environment": "^29.7.0",
- "@jest/test-result": "^29.7.0",
- "@jest/transform": "^29.7.0",
- "@jest/types": "^29.6.3",
+ "@jest/console": "^26.6.2",
+ "@jest/environment": "^26.6.2",
+ "@jest/test-result": "^26.6.2",
+ "@jest/types": "^26.6.2",
"@types/node": "*",
"chalk": "^4.0.0",
- "emittery": "^0.13.1",
- "graceful-fs": "^4.2.9",
- "jest-docblock": "^29.7.0",
- "jest-environment-node": "^29.7.0",
- "jest-haste-map": "^29.7.0",
- "jest-leak-detector": "^29.7.0",
- "jest-message-util": "^29.7.0",
- "jest-resolve": "^29.7.0",
- "jest-runtime": "^29.7.0",
- "jest-util": "^29.7.0",
- "jest-watcher": "^29.7.0",
- "jest-worker": "^29.7.0",
- "p-limit": "^3.1.0",
- "source-map-support": "0.5.13"
+ "emittery": "^0.7.1",
+ "exit": "^0.1.2",
+ "graceful-fs": "^4.2.4",
+ "jest-config": "^26.6.3",
+ "jest-docblock": "^26.0.0",
+ "jest-haste-map": "^26.6.2",
+ "jest-leak-detector": "^26.6.2",
+ "jest-message-util": "^26.6.2",
+ "jest-resolve": "^26.6.2",
+ "jest-runtime": "^26.6.3",
+ "jest-util": "^26.6.2",
+ "jest-worker": "^26.6.2",
+ "source-map-support": "^0.5.6",
+ "throat": "^5.0.0"
},
"engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ "node": ">= 10.14.2"
}
},
"node_modules/jest-runtime": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz",
- "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==",
+ "version": "26.6.3",
+ "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-26.6.3.tgz",
+ "integrity": "sha512-lrzyR3N8sacTAMeonbqpnSka1dHNux2uk0qqDXVkMv2c/A3wYnvQ4EXuI013Y6+gSKSCxdaczvf4HF0mVXHRdw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@jest/environment": "^29.7.0",
- "@jest/fake-timers": "^29.7.0",
- "@jest/globals": "^29.7.0",
- "@jest/source-map": "^29.6.3",
- "@jest/test-result": "^29.7.0",
- "@jest/transform": "^29.7.0",
- "@jest/types": "^29.6.3",
- "@types/node": "*",
+ "@jest/console": "^26.6.2",
+ "@jest/environment": "^26.6.2",
+ "@jest/fake-timers": "^26.6.2",
+ "@jest/globals": "^26.6.2",
+ "@jest/source-map": "^26.6.2",
+ "@jest/test-result": "^26.6.2",
+ "@jest/transform": "^26.6.2",
+ "@jest/types": "^26.6.2",
+ "@types/yargs": "^15.0.0",
"chalk": "^4.0.0",
- "cjs-module-lexer": "^1.0.0",
+ "cjs-module-lexer": "^0.6.0",
"collect-v8-coverage": "^1.0.0",
+ "exit": "^0.1.2",
"glob": "^7.1.3",
- "graceful-fs": "^4.2.9",
- "jest-haste-map": "^29.7.0",
- "jest-message-util": "^29.7.0",
- "jest-mock": "^29.7.0",
- "jest-regex-util": "^29.6.3",
- "jest-resolve": "^29.7.0",
- "jest-snapshot": "^29.7.0",
- "jest-util": "^29.7.0",
+ "graceful-fs": "^4.2.4",
+ "jest-config": "^26.6.3",
+ "jest-haste-map": "^26.6.2",
+ "jest-message-util": "^26.6.2",
+ "jest-mock": "^26.6.2",
+ "jest-regex-util": "^26.0.0",
+ "jest-resolve": "^26.6.2",
+ "jest-snapshot": "^26.6.2",
+ "jest-util": "^26.6.2",
+ "jest-validate": "^26.6.2",
"slash": "^3.0.0",
- "strip-bom": "^4.0.0"
+ "strip-bom": "^4.0.0",
+ "yargs": "^15.4.1"
+ },
+ "bin": {
+ "jest-runtime": "bin/jest-runtime.js"
},
"engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ "node": ">= 10.14.2"
+ }
+ },
+ "node_modules/jest-serializer": {
+ "version": "26.6.2",
+ "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-26.6.2.tgz",
+ "integrity": "sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/node": "*",
+ "graceful-fs": "^4.2.4"
+ },
+ "engines": {
+ "node": ">= 10.14.2"
}
},
"node_modules/jest-snapshot": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz",
- "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==",
+ "version": "26.6.2",
+ "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-26.6.2.tgz",
+ "integrity": "sha512-OLhxz05EzUtsAmOMzuupt1lHYXCNib0ECyuZ/PZOx9TrZcC8vL0x+DUG3TL+GLX3yHG45e6YGjIm0XwDc3q3og==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/core": "^7.11.6",
- "@babel/generator": "^7.7.2",
- "@babel/plugin-syntax-jsx": "^7.7.2",
- "@babel/plugin-syntax-typescript": "^7.7.2",
- "@babel/types": "^7.3.3",
- "@jest/expect-utils": "^29.7.0",
- "@jest/transform": "^29.7.0",
- "@jest/types": "^29.6.3",
- "babel-preset-current-node-syntax": "^1.0.0",
+ "@babel/types": "^7.0.0",
+ "@jest/types": "^26.6.2",
+ "@types/babel__traverse": "^7.0.4",
+ "@types/prettier": "^2.0.0",
"chalk": "^4.0.0",
- "expect": "^29.7.0",
- "graceful-fs": "^4.2.9",
- "jest-diff": "^29.7.0",
- "jest-get-type": "^29.6.3",
- "jest-matcher-utils": "^29.7.0",
- "jest-message-util": "^29.7.0",
- "jest-util": "^29.7.0",
+ "expect": "^26.6.2",
+ "graceful-fs": "^4.2.4",
+ "jest-diff": "^26.6.2",
+ "jest-get-type": "^26.3.0",
+ "jest-haste-map": "^26.6.2",
+ "jest-matcher-utils": "^26.6.2",
+ "jest-message-util": "^26.6.2",
+ "jest-resolve": "^26.6.2",
"natural-compare": "^1.4.0",
- "pretty-format": "^29.7.0",
- "semver": "^7.5.3"
+ "pretty-format": "^26.6.2",
+ "semver": "^7.3.2"
},
"engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ "node": ">= 10.14.2"
}
},
"node_modules/jest-snapshot/node_modules/semver": {
- "version": "7.7.3",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz",
- "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==",
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz",
+ "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==",
"dev": true,
"license": "ISC",
"bin": {
@@ -14052,91 +11833,73 @@
}
},
"node_modules/jest-util": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz",
- "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==",
+ "version": "26.6.2",
+ "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz",
+ "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@jest/types": "^29.6.3",
+ "@jest/types": "^26.6.2",
"@types/node": "*",
"chalk": "^4.0.0",
- "ci-info": "^3.2.0",
- "graceful-fs": "^4.2.9",
- "picomatch": "^2.2.3"
+ "graceful-fs": "^4.2.4",
+ "is-ci": "^2.0.0",
+ "micromatch": "^4.0.2"
},
"engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ "node": ">= 10.14.2"
}
},
"node_modules/jest-validate": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz",
- "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==",
+ "version": "26.6.2",
+ "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-26.6.2.tgz",
+ "integrity": "sha512-NEYZ9Aeyj0i5rQqbq+tpIOom0YS1u2MVu6+euBsvpgIme+FOfRmoC4R5p0JiAUpaFvFy24xgrpMknarR/93XjQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@jest/types": "^29.6.3",
- "camelcase": "^6.2.0",
+ "@jest/types": "^26.6.2",
+ "camelcase": "^6.0.0",
"chalk": "^4.0.0",
- "jest-get-type": "^29.6.3",
+ "jest-get-type": "^26.3.0",
"leven": "^3.1.0",
- "pretty-format": "^29.7.0"
+ "pretty-format": "^26.6.2"
},
"engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ "node": ">= 10.14.2"
}
},
"node_modules/jest-watcher": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz",
- "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==",
+ "version": "26.6.2",
+ "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-26.6.2.tgz",
+ "integrity": "sha512-WKJob0P/Em2csiVthsI68p6aGKTIcsfjH9Gsx1f0A3Italz43e3ho0geSAVsmj09RWOELP1AZ/DXyJgOgDKxXQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@jest/test-result": "^29.7.0",
- "@jest/types": "^29.6.3",
+ "@jest/test-result": "^26.6.2",
+ "@jest/types": "^26.6.2",
"@types/node": "*",
"ansi-escapes": "^4.2.1",
"chalk": "^4.0.0",
- "emittery": "^0.13.1",
- "jest-util": "^29.7.0",
+ "jest-util": "^26.6.2",
"string-length": "^4.0.1"
},
"engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ "node": ">= 10.14.2"
}
},
"node_modules/jest-worker": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz",
- "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==",
+ "version": "26.6.2",
+ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz",
+ "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"@types/node": "*",
- "jest-util": "^29.7.0",
"merge-stream": "^2.0.0",
- "supports-color": "^8.0.0"
+ "supports-color": "^7.0.0"
},
"engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.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==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/supports-color?sponsor=1"
+ "node": ">= 10.13.0"
}
},
"node_modules/joi": {
@@ -14153,23 +11916,6 @@
"@sideway/pinpoint": "^2.0.0"
}
},
- "node_modules/jpeg-js": {
- "version": "0.4.4",
- "resolved": "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.4.4.tgz",
- "integrity": "sha512-WZzeDOEtTOBK4Mdsar0IqEU5sMr3vSV2RqkAIzUEV2BHnUfKGyswWFPFwK5EeDo93K3FohSHbLAjj0s1Wzd+dg==",
- "dev": true,
- "license": "BSD-3-Clause"
- },
- "node_modules/js-library-detector": {
- "version": "6.7.0",
- "resolved": "https://registry.npmjs.org/js-library-detector/-/js-library-detector-6.7.0.tgz",
- "integrity": "sha512-c80Qupofp43y4cJ7+8TTDN/AsDwLi5oOm/plBrWI+iQt485vKXCco+yVmOwEgdo9VOdsYTuV0UlTeetVPTriXA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=12"
- }
- },
"node_modules/js-tokens": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
@@ -14192,9 +11938,9 @@
}
},
"node_modules/jsdoc-type-pratt-parser": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-4.0.0.tgz",
- "integrity": "sha512-YtOli5Cmzy3q4dP26GraSOeAhqecewG04hoO8DY56CH4KJ9Fvv5qKWUCCo3HZob7esJQHCv6/+bnTy72xZZaVQ==",
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-1.2.0.tgz",
+ "integrity": "sha512-4STjeF14jp4bqha44nKMY1OUI6d2/g6uclHWUCZ7B4DoLzaB5bmpTkQrpqU+vSVzMD0LsKAOskcnI3I3VfIpmg==",
"dev": true,
"license": "MIT",
"engines": {
@@ -14202,39 +11948,45 @@
}
},
"node_modules/jsdom": {
- "version": "26.1.0",
- "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-26.1.0.tgz",
- "integrity": "sha512-Cvc9WUhxSMEo4McES3P7oK3QaXldCfNWp7pl2NNeiIFlCoLr3kfq9kb1fxftiwk1FLV7CvpvDfonxtzUDeSOPg==",
+ "version": "16.7.0",
+ "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz",
+ "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
- "cssstyle": "^4.2.1",
- "data-urls": "^5.0.0",
- "decimal.js": "^10.5.0",
- "html-encoding-sniffer": "^4.0.0",
- "http-proxy-agent": "^7.0.2",
- "https-proxy-agent": "^7.0.6",
+ "abab": "^2.0.5",
+ "acorn": "^8.2.4",
+ "acorn-globals": "^6.0.0",
+ "cssom": "^0.4.4",
+ "cssstyle": "^2.3.0",
+ "data-urls": "^2.0.0",
+ "decimal.js": "^10.2.1",
+ "domexception": "^2.0.1",
+ "escodegen": "^2.0.0",
+ "form-data": "^3.0.0",
+ "html-encoding-sniffer": "^2.0.1",
+ "http-proxy-agent": "^4.0.1",
+ "https-proxy-agent": "^5.0.0",
"is-potential-custom-element-name": "^1.0.1",
- "nwsapi": "^2.2.16",
- "parse5": "^7.2.1",
- "rrweb-cssom": "^0.8.0",
- "saxes": "^6.0.0",
+ "nwsapi": "^2.2.0",
+ "parse5": "6.0.1",
+ "saxes": "^5.0.1",
"symbol-tree": "^3.2.4",
- "tough-cookie": "^5.1.1",
- "w3c-xmlserializer": "^5.0.0",
- "webidl-conversions": "^7.0.0",
- "whatwg-encoding": "^3.1.1",
- "whatwg-mimetype": "^4.0.0",
- "whatwg-url": "^14.1.1",
- "ws": "^8.18.0",
- "xml-name-validator": "^5.0.0"
+ "tough-cookie": "^4.0.0",
+ "w3c-hr-time": "^1.0.2",
+ "w3c-xmlserializer": "^2.0.0",
+ "webidl-conversions": "^6.1.0",
+ "whatwg-encoding": "^1.0.5",
+ "whatwg-mimetype": "^2.3.0",
+ "whatwg-url": "^8.5.0",
+ "ws": "^7.4.6",
+ "xml-name-validator": "^3.0.0"
},
"engines": {
- "node": ">=18"
+ "node": ">=10"
},
"peerDependencies": {
- "canvas": "^3.0.0"
+ "canvas": "^2.5.0"
},
"peerDependenciesMeta": {
"canvas": {
@@ -14242,6 +11994,44 @@
}
}
},
+ "node_modules/jsdom/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,
+ "license": "MIT",
+ "dependencies": {
+ "safer-buffer": ">= 2.1.2 < 3"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/jsdom/node_modules/parse5": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz",
+ "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/jsdom/node_modules/whatwg-encoding": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz",
+ "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==",
+ "deprecated": "Use @exodus/bytes instead for a more spec-conformant and faster implementation",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "iconv-lite": "0.4.24"
+ }
+ },
+ "node_modules/jsdom/node_modules/whatwg-mimetype": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz",
+ "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/jsesc": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz",
@@ -14284,9 +12074,9 @@
"license": "MIT"
},
"node_modules/json2php": {
- "version": "0.0.9",
- "resolved": "https://registry.npmjs.org/json2php/-/json2php-0.0.9.tgz",
- "integrity": "sha512-fQMYwvPsQt8hxRnCGyg1r2JVi6yL8Um0DIIawiKiMK9yhAAkcRNj5UsBWoaFvFzPpcWbgw9L6wzj+UMYA702Mw==",
+ "version": "0.0.4",
+ "resolved": "https://registry.npmjs.org/json2php/-/json2php-0.0.4.tgz",
+ "integrity": "sha512-hFzejhs28f70sGnutcsRS459MnAsjRVI85RgPAL1KQIZEpjiDitc27CZv4IgOtaR86vrqOVlu9vJNew2XyTH4g==",
"dev": true,
"license": "BSD"
},
@@ -14370,9 +12160,9 @@
}
},
"node_modules/known-css-properties": {
- "version": "0.37.0",
- "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.37.0.tgz",
- "integrity": "sha512-JCDrsP4Z1Sb9JwG0aJ8Eo2r7k4Ou5MwmThS/6lcIe1ICyb7UBJKGRIUUdqc2ASdE/42lgz6zFUnzAIhtXnBVrQ==",
+ "version": "0.21.0",
+ "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.21.0.tgz",
+ "integrity": "sha512-sZLUnTqimCkvkgRS+kbPlYW5o8q5w1cu+uIisKpEWkj31I8mx8kNG162DwRav8Zirkva6N5uoFsm9kzK4mUXjw==",
"dev": true,
"license": "MIT"
},
@@ -14396,17 +12186,6 @@
"node": ">=0.10"
}
},
- "node_modules/launch-editor": {
- "version": "2.9.1",
- "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.9.1.tgz",
- "integrity": "sha512-Gcnl4Bd+hRO9P9icCP/RVVT2o8SFlPXofuCxvA2SaZuH45whSvf5p8x5oih5ftLiVhEI4sp5xDY+R+b3zJBh5w==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "picocolors": "^1.0.0",
- "shell-quote": "^1.8.1"
- }
- },
"node_modules/lazy-cache": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz",
@@ -14417,13 +12196,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/legacy-javascript": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/legacy-javascript/-/legacy-javascript-0.0.1.tgz",
- "integrity": "sha512-lPyntS4/aS7jpuvOlitZDFifBCb4W8L/3QU0PLbUTUj+zYah8rfVjYic88yG7ZKTxhS5h9iz7duT8oUXKszLhg==",
- "dev": true,
- "license": "Apache-2.0"
- },
"node_modules/leven": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz",
@@ -14448,211 +12220,16 @@
"node": ">= 0.8.0"
}
},
- "node_modules/lighthouse": {
- "version": "12.8.2",
- "resolved": "https://registry.npmjs.org/lighthouse/-/lighthouse-12.8.2.tgz",
- "integrity": "sha512-+5SKYzVaTFj22MgoYDPNrP9tlD2/Ay7j3SxPSFD9FpPyVxGr4UtOQGKyrdZ7wCmcnBaFk0mCkPfARU3CsE0nvA==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@paulirish/trace_engine": "0.0.59",
- "@sentry/node": "^9.28.1",
- "axe-core": "^4.10.3",
- "chrome-launcher": "^1.2.0",
- "configstore": "^7.0.0",
- "csp_evaluator": "1.1.5",
- "devtools-protocol": "0.0.1507524",
- "enquirer": "^2.3.6",
- "http-link-header": "^1.1.1",
- "intl-messageformat": "^10.5.3",
- "jpeg-js": "^0.4.4",
- "js-library-detector": "^6.7.0",
- "lighthouse-logger": "^2.0.2",
- "lighthouse-stack-packs": "1.12.2",
- "lodash-es": "^4.17.21",
- "lookup-closest-locale": "6.2.0",
- "metaviewport-parser": "0.3.0",
- "open": "^8.4.0",
- "parse-cache-control": "1.0.1",
- "puppeteer-core": "^24.17.1",
- "robots-parser": "^3.0.1",
- "speedline-core": "^1.4.3",
- "third-party-web": "^0.27.0",
- "tldts-icann": "^7.0.12",
- "ws": "^7.0.0",
- "yargs": "^17.3.1",
- "yargs-parser": "^21.0.0"
- },
- "bin": {
- "chrome-debug": "core/scripts/manual-chrome-launcher.js",
- "lighthouse": "cli/index.js",
- "smokehouse": "cli/test/smokehouse/frontends/smokehouse-bin.js"
- },
- "engines": {
- "node": ">=18.16"
- }
- },
- "node_modules/lighthouse-logger": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/lighthouse-logger/-/lighthouse-logger-2.0.2.tgz",
- "integrity": "sha512-vWl2+u5jgOQuZR55Z1WM0XDdrJT6mzMP8zHUct7xTlWhuQs+eV0g+QL0RQdFjT54zVmbhLCP8vIVpy1wGn/gCg==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "debug": "^4.4.1",
- "marky": "^1.2.2"
- }
- },
- "node_modules/lighthouse-stack-packs": {
- "version": "1.12.2",
- "resolved": "https://registry.npmjs.org/lighthouse-stack-packs/-/lighthouse-stack-packs-1.12.2.tgz",
- "integrity": "sha512-Ug8feS/A+92TMTCK6yHYLwaFMuelK/hAKRMdldYkMNwv+d9PtWxjXEg6rwKtsUXTADajhdrhXyuNCJ5/sfmPFw==",
- "dev": true,
- "license": "Apache-2.0"
- },
- "node_modules/lighthouse/node_modules/@puppeteer/browsers": {
- "version": "2.11.0",
- "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-2.11.0.tgz",
- "integrity": "sha512-n6oQX6mYkG8TRPuPXmbPidkUbsSRalhmaaVAQxvH1IkQy63cwsH+kOjB3e4cpCDHg0aSvsiX9bQ4s2VB6mGWUQ==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "debug": "^4.4.3",
- "extract-zip": "^2.0.1",
- "progress": "^2.0.3",
- "proxy-agent": "^6.5.0",
- "semver": "^7.7.3",
- "tar-fs": "^3.1.1",
- "yargs": "^17.7.2"
- },
- "bin": {
- "browsers": "lib/cjs/main-cli.js"
- },
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/lighthouse/node_modules/puppeteer-core": {
- "version": "24.34.0",
- "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-24.34.0.tgz",
- "integrity": "sha512-24evawO+mUGW4mvS2a2ivwLdX3gk8zRLZr9HP+7+VT2vBQnm0oh9jJEZmUE3ePJhRkYlZ93i7OMpdcoi2qNCLg==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@puppeteer/browsers": "2.11.0",
- "chromium-bidi": "12.0.1",
- "debug": "^4.4.3",
- "devtools-protocol": "0.0.1534754",
- "typed-query-selector": "^2.12.0",
- "webdriver-bidi-protocol": "0.3.10",
- "ws": "^8.18.3"
- },
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/lighthouse/node_modules/puppeteer-core/node_modules/chromium-bidi": {
- "version": "12.0.1",
- "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-12.0.1.tgz",
- "integrity": "sha512-fGg+6jr0xjQhzpy5N4ErZxQ4wF7KLEvhGZXD6EgvZKDhu7iOhZXnZhcDxPJDcwTcrD48NPzOCo84RP2lv3Z+Cg==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "mitt": "^3.0.1",
- "zod": "^3.24.1"
- },
- "peerDependencies": {
- "devtools-protocol": "*"
- }
- },
- "node_modules/lighthouse/node_modules/puppeteer-core/node_modules/devtools-protocol": {
- "version": "0.0.1534754",
- "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1534754.tgz",
- "integrity": "sha512-26T91cV5dbOYnXdJi5qQHoTtUoNEqwkHcAyu/IKtjIAxiEqPMrDiRkDOPWVsGfNZGmlQVHQbZRSjD8sxagWVsQ==",
- "dev": true,
- "license": "BSD-3-Clause",
- "peer": true
- },
- "node_modules/lighthouse/node_modules/puppeteer-core/node_modules/ws": {
- "version": "8.18.3",
- "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz",
- "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==",
+ "node_modules/lilconfig": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz",
+ "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==",
"dev": true,
"license": "MIT",
"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/lighthouse/node_modules/semver": {
- "version": "7.7.3",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz",
- "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==",
- "dev": true,
- "license": "ISC",
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
"node": ">=10"
}
},
- "node_modules/lighthouse/node_modules/ws": {
- "version": "7.5.10",
- "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz",
- "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==",
- "dev": true,
- "license": "MIT",
- "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/lighthouse/node_modules/zod": {
- "version": "3.25.76",
- "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz",
- "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==",
- "dev": true,
- "license": "MIT",
- "funding": {
- "url": "https://github.com/sponsors/colinhacks"
- }
- },
- "node_modules/lilconfig": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz",
- "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=14"
- },
- "funding": {
- "url": "https://github.com/sponsors/antonk52"
- }
- },
"node_modules/lines-and-columns": {
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
@@ -14670,14 +12247,78 @@
"uc.micro": "^1.0.1"
}
},
+ "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,
+ "license": "MIT"
+ },
+ "node_modules/load-json-file": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
+ "integrity": "sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "graceful-fs": "^4.1.2",
+ "parse-json": "^2.2.0",
+ "pify": "^2.0.0",
+ "pinkie-promise": "^2.0.0",
+ "strip-bom": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/load-json-file/node_modules/parse-json": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
+ "integrity": "sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "error-ex": "^1.2.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/load-json-file/node_modules/pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/load-json-file/node_modules/strip-bom": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
+ "integrity": "sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-utf8": "^0.2.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"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==",
+ "version": "4.3.2",
+ "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.2.tgz",
+ "integrity": "sha512-DFEqQ3ihfS9blba08cLfYf1NRAIEm+dDjic073DRDc3/JspI/8wYmtDsHwd3+4hwvdxSK7PGaElfTmm0awWJ4w==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6.11.5"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/webpack"
}
},
"node_modules/loader-utils": {
@@ -14709,16 +12350,9 @@
}
},
"node_modules/lodash": {
- "version": "4.17.21",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
- "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/lodash-es": {
- "version": "4.17.22",
- "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.22.tgz",
- "integrity": "sha512-XEawp1t0gxSi9x01glktRZ5HDy0HXqrM0x5pXQM98EaI0NxO6jVM7omDOxsuEo5UIASAnm2bRp1Jt/e0a2XU8Q==",
+ "version": "4.18.1",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz",
+ "integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==",
"dev": true,
"license": "MIT"
},
@@ -14729,6 +12363,42 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/lodash.differencewith": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/lodash.differencewith/-/lodash.differencewith-4.5.0.tgz",
+ "integrity": "sha512-/8JFjydAS+4bQuo3CpLMBv7WxGFyk7/etOAsrQUCu0a9QVDemxv0YQ0rFyeZvqlUD314SERfNlgnlqqHmaQ0Cg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/lodash.escape": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-4.0.1.tgz",
+ "integrity": "sha512-nXEOnb/jK9g0DYMr1/Xvq6l5xMD7GDG55+GSYIYmS0G4tBk/hURD4JR9WCavs04t33WmJx9kCyp9vJ+mr4BOUw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/lodash.flatten": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz",
+ "integrity": "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/lodash.flattendeep": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz",
+ "integrity": "sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/lodash.isequal": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz",
+ "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==",
+ "deprecated": "This package is deprecated. Use require('node:util').isDeepStrictEqual instead.",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/lodash.memoize": {
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz",
@@ -14788,12 +12458,16 @@
"url": "https://tidelift.com/funding/github/npm/loglevel"
}
},
- "node_modules/lookup-closest-locale": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/lookup-closest-locale/-/lookup-closest-locale-6.2.0.tgz",
- "integrity": "sha512-/c2kL+Vnp1jnV6K6RpDTHK3dgg0Tu2VVp+elEiJpjfS1UyY7AjOYHohRug6wT0OpoX2qFgNORndE9RqesfVxWQ==",
+ "node_modules/longest-streak": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.4.tgz",
+ "integrity": "sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg==",
"dev": true,
- "license": "MIT"
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
},
"node_modules/loose-envify": {
"version": "1.4.0",
@@ -14829,34 +12503,21 @@
}
},
"node_modules/make-dir": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz",
- "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==",
+ "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==",
"dev": true,
"license": "MIT",
"dependencies": {
- "semver": "^7.5.3"
+ "semver": "^6.0.0"
},
"engines": {
- "node": ">=10"
+ "node": ">=8"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/make-dir/node_modules/semver": {
- "version": "7.7.3",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz",
- "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==",
- "dev": true,
- "license": "ISC",
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
"node_modules/makeerror": {
"version": "1.0.12",
"resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz",
@@ -14867,6 +12528,16 @@
"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==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/map-obj": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz",
@@ -14887,10 +12558,23 @@
"dev": true,
"license": "Public Domain"
},
+ "node_modules/map-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
+ "integrity": "sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "object-visit": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/markdown-it": {
- "version": "12.3.2",
- "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.3.2.tgz",
- "integrity": "sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==",
+ "version": "12.0.4",
+ "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.0.4.tgz",
+ "integrity": "sha512-34RwOXZT8kyuOJy25oJNJoulO8L0bTHYWXcdZBYZqFnjIy3NgjeoM3FmPXIOFQ26/lSHYMr8oc62B6adxXcb3Q==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -14922,41 +12606,45 @@
}
},
"node_modules/markdownlint": {
- "version": "0.25.1",
- "resolved": "https://registry.npmjs.org/markdownlint/-/markdownlint-0.25.1.tgz",
- "integrity": "sha512-AG7UkLzNa1fxiOv5B+owPsPhtM4D6DoODhsJgiaNg1xowXovrYgOnLqAgOOFQpWOlHFVQUzjMY5ypNNTeov92g==",
+ "version": "0.23.1",
+ "resolved": "https://registry.npmjs.org/markdownlint/-/markdownlint-0.23.1.tgz",
+ "integrity": "sha512-iOEwhDfNmq2IJlaA8mzEkHYUi/Hwoa6Ss+HO5jkwUR6wQ4quFr0WzSx+Z9rsWZKUaPbyirIdL1zGmJRkWawr4Q==",
"dev": true,
"license": "MIT",
"dependencies": {
- "markdown-it": "12.3.2"
+ "markdown-it": "12.0.4"
},
"engines": {
- "node": ">=12"
+ "node": ">=10"
}
},
"node_modules/markdownlint-cli": {
- "version": "0.31.1",
- "resolved": "https://registry.npmjs.org/markdownlint-cli/-/markdownlint-cli-0.31.1.tgz",
- "integrity": "sha512-keIOMwQn+Ch7MoBwA+TdkyVMuxAeZFEGmIIlvwgV0Z1TGS5MxPnRr29XCLhkNzCHU+uNKGjU+VEjLX+Z9kli6g==",
+ "version": "0.27.1",
+ "resolved": "https://registry.npmjs.org/markdownlint-cli/-/markdownlint-cli-0.27.1.tgz",
+ "integrity": "sha512-p1VV6aSbGrDlpUWzHizAnSNEQAweVR3qUI/AIUubxW7BGPXziSXkIED+uRtSohUlRS/jmqp3Wi4es5j6fIrdeQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "commander": "~9.0.0",
- "get-stdin": "~9.0.0",
- "glob": "~7.2.0",
- "ignore": "~5.2.0",
- "js-yaml": "^4.1.0",
+ "commander": "~7.1.0",
+ "deep-extend": "~0.6.0",
+ "get-stdin": "~8.0.0",
+ "glob": "~7.1.6",
+ "ignore": "~5.1.8",
+ "js-yaml": "^4.0.0",
"jsonc-parser": "~3.0.0",
- "markdownlint": "~0.25.1",
- "markdownlint-rule-helpers": "~0.16.0",
- "minimatch": "~3.0.5",
- "run-con": "~1.2.10"
+ "lodash.differencewith": "~4.5.0",
+ "lodash.flatten": "~4.4.0",
+ "markdownlint": "~0.23.1",
+ "markdownlint-rule-helpers": "~0.14.0",
+ "minimatch": "~3.0.4",
+ "minimist": "~1.2.5",
+ "rc": "~1.2.8"
},
"bin": {
"markdownlint": "markdownlint.js"
},
"engines": {
- "node": ">=12"
+ "node": ">=10"
}
},
"node_modules/markdownlint-cli/node_modules/argparse": {
@@ -14966,31 +12654,42 @@
"dev": true,
"license": "Python-2.0"
},
- "node_modules/markdownlint-cli/node_modules/brace-expansion": {
- "version": "1.1.12",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz",
- "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
"node_modules/markdownlint-cli/node_modules/commander": {
- "version": "9.0.0",
- "resolved": "https://registry.npmjs.org/commander/-/commander-9.0.0.tgz",
- "integrity": "sha512-JJfP2saEKbQqvW+FI93OYUB4ByV5cizMpFMiiJI8xDbBvQvSkIk0VvQdn1CZ8mqAO8Loq2h0gYTYtDFUZUeERw==",
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-7.1.0.tgz",
+ "integrity": "sha512-pRxBna3MJe6HKnBGsDyMv8ETbptw3axEdYHoqNh7gu5oDcew8fs0xnivZGm06Ogk8zGAJ9VX+OPEr2GXEQK4dg==",
"dev": true,
"license": "MIT",
"engines": {
- "node": "^12.20.0 || >=14"
+ "node": ">= 10"
+ }
+ },
+ "node_modules/markdownlint-cli/node_modules/glob": {
+ "version": "7.1.7",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz",
+ "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==",
+ "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me",
+ "dev": true,
+ "license": "ISC",
+ "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/markdownlint-cli/node_modules/ignore": {
- "version": "5.2.4",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz",
- "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==",
+ "version": "5.1.9",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.9.tgz",
+ "integrity": "sha512-2zeMQpbKz5dhZ9IwL0gbxSW5w0NK/MSAMtNuhgIHEPmaU3vPdKPL0UdvUCXs5SS4JAwsBxysK5sFMW8ocFiVjQ==",
"dev": true,
"license": "MIT",
"engines": {
@@ -15024,19 +12723,12 @@
}
},
"node_modules/markdownlint-rule-helpers": {
- "version": "0.16.0",
- "resolved": "https://registry.npmjs.org/markdownlint-rule-helpers/-/markdownlint-rule-helpers-0.16.0.tgz",
- "integrity": "sha512-oEacRUVeTJ5D5hW1UYd2qExYI0oELdYK72k1TKGvIeYJIbqQWAz476NAc7LNixSySUhcNl++d02DvX0ccDk9/w==",
+ "version": "0.14.0",
+ "resolved": "https://registry.npmjs.org/markdownlint-rule-helpers/-/markdownlint-rule-helpers-0.14.0.tgz",
+ "integrity": "sha512-vRTPqSU4JK8vVXmjICHSBhwXUvbfh/VJo+j7hvxqe15tLJyomv3FLgFdFgb8kpj0Fe8SsJa/TZUAXv7/sN+N7A==",
"dev": true,
"license": "MIT"
},
- "node_modules/marky": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/marky/-/marky-1.3.0.tgz",
- "integrity": "sha512-ocnPZQLNpvbedwTy9kNrQEsknEfgvcLMvOtz3sFeWApDq1MXH1TqkCIx58xlpESsfwQOnuBO9beyQuNGzVvuhQ==",
- "dev": true,
- "license": "Apache-2.0"
- },
"node_modules/math-intrinsics": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
@@ -15058,10 +12750,58 @@
"url": "https://github.com/sponsors/wooorm"
}
},
+ "node_modules/mdast-util-from-markdown": {
+ "version": "0.8.5",
+ "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-0.8.5.tgz",
+ "integrity": "sha512-2hkTXtYYnr+NubD/g6KGBS/0mFmBcifAsI0yIWRiRo0PjVs6SSOSOdtzbp6kSGnShDN6G5aWZpKQ2lWRy27mWQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/mdast": "^3.0.0",
+ "mdast-util-to-string": "^2.0.0",
+ "micromark": "~2.11.0",
+ "parse-entities": "^2.0.0",
+ "unist-util-stringify-position": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-to-markdown": {
+ "version": "0.6.5",
+ "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-0.6.5.tgz",
+ "integrity": "sha512-XeV9sDE7ZlOQvs45C9UKMtfTcctcaj/pGwH8YLbMHoMOXNNCn2LsqVQOqrF1+/NU8lKDAqozme9SCXWyo9oAcQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "^2.0.0",
+ "longest-streak": "^2.0.0",
+ "mdast-util-to-string": "^2.0.0",
+ "parse-entities": "^2.0.0",
+ "repeat-string": "^1.0.0",
+ "zwitch": "^1.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-to-string": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz",
+ "integrity": "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
"node_modules/mdn-data": {
- "version": "2.12.2",
- "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.12.2.tgz",
- "integrity": "sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==",
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz",
+ "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==",
"dev": true,
"license": "CC0-1.0"
},
@@ -15072,29 +12812,6 @@
"dev": true,
"license": "MIT"
},
- "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,
- "license": "MIT",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/memfs": {
- "version": "3.5.3",
- "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz",
- "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==",
- "dev": true,
- "license": "Unlicense",
- "dependencies": {
- "fs-monkey": "^1.0.4"
- },
- "engines": {
- "node": ">= 4.0.0"
- }
- },
"node_modules/meow": {
"version": "9.0.0",
"resolved": "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz",
@@ -15122,6 +12839,90 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/meow/node_modules/hosted-git-info": {
+ "version": "2.8.9",
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz",
+ "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/meow/node_modules/read-pkg": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz",
+ "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/normalize-package-data": "^2.4.0",
+ "normalize-package-data": "^2.5.0",
+ "parse-json": "^5.0.0",
+ "type-fest": "^0.6.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/meow/node_modules/read-pkg-up": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz",
+ "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "find-up": "^4.1.0",
+ "read-pkg": "^5.2.0",
+ "type-fest": "^0.8.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/meow/node_modules/read-pkg-up/node_modules/type-fest": {
+ "version": "0.8.1",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
+ "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==",
+ "dev": true,
+ "license": "(MIT OR CC0-1.0)",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/meow/node_modules/read-pkg/node_modules/normalize-package-data": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
+ "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "hosted-git-info": "^2.1.4",
+ "resolve": "^1.10.0",
+ "semver": "2 || 3 || 4 || 5",
+ "validate-npm-package-license": "^3.0.1"
+ }
+ },
+ "node_modules/meow/node_modules/read-pkg/node_modules/type-fest": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz",
+ "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==",
+ "dev": true,
+ "license": "(MIT OR CC0-1.0)",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/meow/node_modules/semver": {
+ "version": "5.7.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
+ "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
+ "dev": true,
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver"
+ }
+ },
"node_modules/meow/node_modules/type-fest": {
"version": "0.18.1",
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz",
@@ -15135,16 +12936,6 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/meow/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,
- "license": "ISC",
- "engines": {
- "node": ">=10"
- }
- },
"node_modules/merge-deep": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/merge-deep/-/merge-deep-3.0.3.tgz",
@@ -15160,16 +12951,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/merge-descriptors": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz",
- "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==",
- "dev": true,
- "license": "MIT",
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/merge-stream": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
@@ -15187,21 +12968,25 @@
"node": ">= 8"
}
},
- "node_modules/metaviewport-parser": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/metaviewport-parser/-/metaviewport-parser-0.3.0.tgz",
- "integrity": "sha512-EoYJ8xfjQ6kpe9VbVHvZTZHiOl4HL1Z18CrZ+qahvLXT7ZO4YTC2JMyt5FaUp9JJp6J4Ybb/z7IsCXZt86/QkQ==",
+ "node_modules/micromark": {
+ "version": "2.11.4",
+ "resolved": "https://registry.npmjs.org/micromark/-/micromark-2.11.4.tgz",
+ "integrity": "sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA==",
"dev": true,
- "license": "MIT"
- },
- "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,
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
"license": "MIT",
- "engines": {
- "node": ">= 0.6"
+ "dependencies": {
+ "debug": "^4.0.0",
+ "parse-entities": "^2.0.0"
}
},
"node_modules/micromatch": {
@@ -15218,19 +13003,6 @@
"node": ">=8.6"
}
},
- "node_modules/mime": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz",
- "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==",
- "dev": true,
- "license": "MIT",
- "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",
@@ -15295,27 +13067,17 @@
"webpack": "^5.0.0"
}
},
- "node_modules/minimalistic-assert": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",
- "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==",
- "dev": true,
- "license": "ISC"
- },
"node_modules/minimatch": {
- "version": "9.0.3",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz",
- "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==",
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz",
+ "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==",
"dev": true,
"license": "ISC",
"dependencies": {
- "brace-expansion": "^2.0.1"
+ "brace-expansion": "^1.1.7"
},
"engines": {
- "node": ">=16 || 14 >=14.17"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
+ "node": "*"
}
},
"node_modules/minimist": {
@@ -15343,16 +13105,6 @@
"node": ">= 6"
}
},
- "node_modules/minimist-options/node_modules/is-plain-obj": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz",
- "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/minimist-options/node_modules/kind-of": {
"version": "6.0.3",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
@@ -15363,12 +13115,45 @@
"node": ">=0.10.0"
}
},
- "node_modules/mitt": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz",
- "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==",
+ "node_modules/mixin-deep": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz",
+ "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==",
"dev": true,
- "license": "MIT"
+ "license": "MIT",
+ "dependencies": {
+ "for-in": "^1.0.2",
+ "is-extendable": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/mixin-deep/node_modules/is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-plain-object": "^2.0.4"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/mixin-deep/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==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "isobject": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
},
"node_modules/mixin-object": {
"version": "2.0.1",
@@ -15394,12 +13179,25 @@
"node": ">=0.10.0"
}
},
- "node_modules/module-details-from-path": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/module-details-from-path/-/module-details-from-path-1.0.4.tgz",
- "integrity": "sha512-EGWKgxALGMgzvxYF1UyGTy0HXX/2vHLkw6+NvDKW2jypWbHpjQuj4UMcqQWXHERJhVGKikolT06G3bcKe4fi7w==",
+ "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,
- "license": "MIT"
+ "license": "MIT",
+ "dependencies": {
+ "minimist": "^1.2.6"
+ },
+ "bin": {
+ "mkdirp": "bin/cmd.js"
+ }
+ },
+ "node_modules/moo": {
+ "version": "0.5.3",
+ "resolved": "https://registry.npmjs.org/moo/-/moo-0.5.3.tgz",
+ "integrity": "sha512-m2fmM2dDm7GZQsY7KK2cme8agi+AAljILjQnof7p1ZMDe6dQ4bdnSMx0cPppudoeNv5hEFQirN6u+O4fDE0IWA==",
+ "dev": true,
+ "license": "BSD-3-Clause"
},
"node_modules/mrmime": {
"version": "2.0.0",
@@ -15418,20 +13216,6 @@
"dev": true,
"license": "MIT"
},
- "node_modules/multicast-dns": {
- "version": "7.2.5",
- "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz",
- "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "dns-packet": "^5.2.2",
- "thunky": "^1.0.2"
- },
- "bin": {
- "multicast-dns": "cli.js"
- }
- },
"node_modules/nanoid": {
"version": "3.3.11",
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz",
@@ -15451,20 +13235,47 @@
"node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
}
},
- "node_modules/napi-postinstall": {
- "version": "0.3.4",
- "resolved": "https://registry.npmjs.org/napi-postinstall/-/napi-postinstall-0.3.4.tgz",
- "integrity": "sha512-PHI5f1O0EP5xJ9gQmFGMS6IZcrVvTjpXjz7Na41gTE7eE2hK11lg04CECCYEEjdc17EV4DO+fkGEtt7TpTaTiQ==",
+ "node_modules/nanomatch": {
+ "version": "1.2.13",
+ "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz",
+ "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==",
"dev": true,
"license": "MIT",
- "bin": {
- "napi-postinstall": "lib/cli.js"
+ "dependencies": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "fragment-cache": "^0.2.1",
+ "is-windows": "^1.0.2",
+ "kind-of": "^6.0.2",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
},
"engines": {
- "node": "^12.20.0 || ^14.18.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/napi-postinstall"
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/nanomatch/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==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/nanomatch/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==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
}
},
"node_modules/natural-compare": {
@@ -15474,16 +13285,36 @@
"dev": true,
"license": "MIT"
},
- "node_modules/negotiator": {
- "version": "0.6.4",
- "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz",
- "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==",
+ "node_modules/nearley": {
+ "version": "2.20.1",
+ "resolved": "https://registry.npmjs.org/nearley/-/nearley-2.20.1.tgz",
+ "integrity": "sha512-+Mc8UaAebFzgV+KpI5n7DasuuQCHA89dmwm7JXw3TV43ukfNQ9DnBH3Mdb2g/I4Fdxc26pwimBWvjIw0UAILSQ==",
"dev": true,
"license": "MIT",
- "engines": {
- "node": ">= 0.6"
+ "dependencies": {
+ "commander": "^2.19.0",
+ "moo": "^0.5.0",
+ "railroad-diagrams": "^1.0.0",
+ "randexp": "0.4.6"
+ },
+ "bin": {
+ "nearley-railroad": "bin/nearley-railroad.js",
+ "nearley-test": "bin/nearley-test.js",
+ "nearley-unparse": "bin/nearley-unparse.js",
+ "nearleyc": "bin/nearleyc.js"
+ },
+ "funding": {
+ "type": "individual",
+ "url": "https://nearley.js.org/#give-to-nearley"
}
},
+ "node_modules/nearley/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,
+ "license": "MIT"
+ },
"node_modules/neo-async": {
"version": "2.6.2",
"resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
@@ -15491,15 +13322,12 @@
"dev": true,
"license": "MIT"
},
- "node_modules/netmask": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz",
- "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==",
+ "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,
- "license": "MIT",
- "engines": {
- "node": ">= 0.4.0"
- }
+ "license": "MIT"
},
"node_modules/no-case": {
"version": "3.0.4",
@@ -15520,14 +13348,33 @@
"license": "MIT",
"optional": true
},
- "node_modules/node-forge": {
- "version": "1.3.3",
- "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.3.tgz",
- "integrity": "sha512-rLvcdSyRCyouf6jcOIPe/BgwG/d7hKjzMKOas33/pHEr6gbq18IK9zV7DiPvzsz0oBJPme6qr6H6kGZuI9/DZg==",
+ "node_modules/node-exports-info": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/node-exports-info/-/node-exports-info-1.6.0.tgz",
+ "integrity": "sha512-pyFS63ptit/P5WqUkt+UUfe+4oevH+bFeIiPPdfb0pFeYEu/1ELnJu5l+5EcTKYL5M7zaAa7S8ddywgXypqKCw==",
"dev": true,
- "license": "(BSD-3-Clause OR GPL-2.0)",
+ "license": "MIT",
+ "dependencies": {
+ "array.prototype.flatmap": "^1.3.3",
+ "es-errors": "^1.3.0",
+ "object.entries": "^1.1.9",
+ "semver": "^6.3.1"
+ },
"engines": {
- "node": ">= 6.13.0"
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/node-fetch": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz",
+ "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "4.x || >=6.0.0"
}
},
"node_modules/node-int64": {
@@ -15537,10 +13384,57 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/node-notifier": {
+ "version": "8.0.2",
+ "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-8.0.2.tgz",
+ "integrity": "sha512-oJP/9NAdd9+x2Q+rfphB2RJCHjod70RcRLjosiPMMu5gjIfwVnOUGq2nbTjTUbmy0DJ/tFIVT30+Qe3nzl4TJg==",
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "growly": "^1.3.0",
+ "is-wsl": "^2.2.0",
+ "semver": "^7.3.2",
+ "shellwords": "^0.1.1",
+ "uuid": "^8.3.0",
+ "which": "^2.0.2"
+ }
+ },
+ "node_modules/node-notifier/node_modules/semver": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz",
+ "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==",
+ "dev": true,
+ "license": "ISC",
+ "optional": true,
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/node-notifier/node_modules/which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "dev": true,
+ "license": "ISC",
+ "optional": true,
+ "dependencies": {
+ "isexe": "^2.0.0"
+ },
+ "bin": {
+ "node-which": "bin/node-which"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
"node_modules/node-releases": {
- "version": "2.0.27",
- "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz",
- "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==",
+ "version": "2.0.38",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.38.tgz",
+ "integrity": "sha512-3qT/88Y3FbH/Kx4szpQQ4HzUbVrHPKTLVpVocKiLfoYvw9XSGOX2FmD2d6DrXbVYyAQTF2HeF6My8jmzx7/CRw==",
"dev": true,
"license": "MIT"
},
@@ -15561,9 +13455,9 @@
}
},
"node_modules/normalize-package-data/node_modules/semver": {
- "version": "7.7.3",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz",
- "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==",
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz",
+ "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==",
"dev": true,
"license": "ISC",
"bin": {
@@ -15583,55 +13477,158 @@
"node": ">=0.10.0"
}
},
- "node_modules/npm-bundled": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.2.tgz",
- "integrity": "sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==",
+ "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,
- "license": "ISC",
- "dependencies": {
- "npm-normalize-package-bin": "^1.0.1"
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "node_modules/npm-normalize-package-bin": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz",
- "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==",
+ "node_modules/normalize-selector": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/normalize-selector/-/normalize-selector-0.2.0.tgz",
+ "integrity": "sha512-dxvWdI8gw6eAvk9BlPffgEoGfM7AdijoCwOEJge3e3ulT2XLgmU7KvvxprOaCu05Q1uGRHmOhHe1r6emZoKyFw==",
"dev": true,
- "license": "ISC"
+ "license": "MIT"
+ },
+ "node_modules/normalize-url": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz",
+ "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
},
"node_modules/npm-package-json-lint": {
- "version": "6.4.0",
- "resolved": "https://registry.npmjs.org/npm-package-json-lint/-/npm-package-json-lint-6.4.0.tgz",
- "integrity": "sha512-cuXAJJB1Rdqz0UO6w524matlBqDBjcNt7Ru+RDIu4y6RI1gVqiWBnylrK8sPRk81gGBA0X8hJbDXolVOoTc+sA==",
+ "version": "10.3.0",
+ "resolved": "https://registry.npmjs.org/npm-package-json-lint/-/npm-package-json-lint-10.3.0.tgz",
+ "integrity": "sha512-oM4GDYuJXEJ8QXDj+I8XRX5mI3VYvb/5YgJxIGqTvUc0dEMxAs48btt4hTfo8zze7sKVuiWe/1y/ZiP6tezf4g==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
- "ajv": "^6.12.6",
- "ajv-errors": "^1.0.1",
- "chalk": "^4.1.2",
- "cosmiconfig": "^8.0.0",
- "debug": "^4.3.4",
- "globby": "^11.1.0",
- "ignore": "^5.2.0",
- "is-plain-obj": "^3.0.0",
- "jsonc-parser": "^3.2.0",
- "log-symbols": "^4.1.0",
- "meow": "^9.0.0",
- "plur": "^4.0.0",
- "semver": "^7.3.8",
- "slash": "^3.0.0",
- "strip-json-comments": "^3.1.1",
- "type-fest": "^3.2.0",
- "validate-npm-package-name": "^5.0.0"
+ "ajv": "6.14.0",
+ "ajv-errors": "1.0.1",
+ "chalk": "4.1.2",
+ "cosmiconfig": "8.3.6",
+ "debug": "4.4.3",
+ "globby": "11.1.0",
+ "ignore": "5.3.2",
+ "jsonc-parser": "3.3.1",
+ "meow": "9.0.0",
+ "minimatch": "10.2.4",
+ "semver": "7.7.4",
+ "strip-json-comments": "3.1.1",
+ "type-fest": "5.6.0",
+ "validate-npm-package-name": "6.0.0"
},
"bin": {
"npmPkgJsonLint": "dist/cli.js"
},
"engines": {
- "node": ">=14.0.0",
- "npm": ">=6.0.0"
+ "node": ">=22.0.0",
+ "npm": ">=10.0.0"
+ }
+ },
+ "node_modules/npm-package-json-lint/node_modules/ajv": {
+ "version": "6.14.0",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz",
+ "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==",
+ "dev": true,
+ "license": "MIT",
+ "peer": 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/npm-package-json-lint/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,
+ "license": "Python-2.0",
+ "peer": true
+ },
+ "node_modules/npm-package-json-lint/node_modules/balanced-match": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz",
+ "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": "18 || 20 || >=22"
+ }
+ },
+ "node_modules/npm-package-json-lint/node_modules/brace-expansion": {
+ "version": "5.0.5",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.5.tgz",
+ "integrity": "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "balanced-match": "^4.0.2"
+ },
+ "engines": {
+ "node": "18 || 20 || >=22"
+ }
+ },
+ "node_modules/npm-package-json-lint/node_modules/cosmiconfig": {
+ "version": "8.3.6",
+ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz",
+ "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "import-fresh": "^3.3.0",
+ "js-yaml": "^4.1.0",
+ "parse-json": "^5.2.0",
+ "path-type": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/d-fischer"
+ },
+ "peerDependencies": {
+ "typescript": ">=4.9.5"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/npm-package-json-lint/node_modules/js-yaml": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz",
+ "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "argparse": "^2.0.1"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
}
},
"node_modules/npm-package-json-lint/node_modules/jsonc-parser": {
@@ -15639,14 +13636,33 @@
"resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz",
"integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==",
"dev": true,
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/npm-package-json-lint/node_modules/minimatch": {
+ "version": "10.2.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.4.tgz",
+ "integrity": "sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==",
+ "dev": true,
+ "license": "BlueOak-1.0.0",
+ "peer": true,
+ "dependencies": {
+ "brace-expansion": "^5.0.2"
+ },
+ "engines": {
+ "node": "18 || 20 || >=22"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
},
"node_modules/npm-package-json-lint/node_modules/semver": {
- "version": "7.7.3",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz",
- "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==",
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz",
+ "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==",
"dev": true,
"license": "ISC",
+ "peer": true,
"bin": {
"semver": "bin/semver.js"
},
@@ -15655,37 +13671,22 @@
}
},
"node_modules/npm-package-json-lint/node_modules/type-fest": {
- "version": "3.13.1",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.13.1.tgz",
- "integrity": "sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==",
+ "version": "5.6.0",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-5.6.0.tgz",
+ "integrity": "sha512-8ZiHFm91orbSAe2PSAiSVBVko18pbhbiB3U9GglSzF/zCGkR+rxpHx6sEMCUm4kxY4LjDIUGgCfUMtwfZfjfUA==",
"dev": true,
"license": "(MIT OR CC0-1.0)",
+ "peer": true,
+ "dependencies": {
+ "tagged-tag": "^1.0.0"
+ },
"engines": {
- "node": ">=14.16"
+ "node": ">=20"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/npm-packlist": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-3.0.0.tgz",
- "integrity": "sha512-L/cbzmutAwII5glUcf2DBRNY/d0TFd4e/FnaZigJV6JD85RHZXJFGwCndjMWiiViiWSsWt3tiOLpI3ByTnIdFQ==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "glob": "^7.1.6",
- "ignore-walk": "^4.0.1",
- "npm-bundled": "^1.1.1",
- "npm-normalize-package-bin": "^1.0.1"
- },
- "bin": {
- "npm-packlist": "bin/index.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
"node_modules/npm-run-path": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
@@ -15712,6 +13713,13 @@
"url": "https://github.com/fb55/nth-check?sponsor=1"
}
},
+ "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,
+ "license": "MIT"
+ },
"node_modules/nwsapi": {
"version": "2.2.23",
"resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.23.tgz",
@@ -15729,6 +13737,48 @@
"node": ">=0.10.0"
}
},
+ "node_modules/object-copy": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
+ "integrity": "sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "copy-descriptor": "^0.1.0",
+ "define-property": "^0.2.5",
+ "kind-of": "^3.0.3"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/object-copy/node_modules/define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-descriptor": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/object-copy/node_modules/is-descriptor": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz",
+ "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-accessor-descriptor": "^1.0.1",
+ "is-data-descriptor": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
"node_modules/object-filter": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/object-filter/-/object-filter-1.0.2.tgz",
@@ -15749,6 +13799,23 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/object-is": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.6.tgz",
+ "integrity": "sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "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",
@@ -15759,6 +13826,19 @@
"node": ">= 0.4"
}
},
+ "node_modules/object-visit": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
+ "integrity": "sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "isobject": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/object.assign": {
"version": "4.1.7",
"resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz",
@@ -15815,6 +13895,28 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/object.getownpropertydescriptors": {
+ "version": "2.1.9",
+ "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.9.tgz",
+ "integrity": "sha512-mt8YM6XwsTTovI+kdZdHSxoyF2DI59up034orlC9NfweclcWOt7CVascNNLp6U+bjFVCVCIh9PwS76tDM/rH8g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "array.prototype.reduce": "^1.0.8",
+ "call-bind": "^1.0.8",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.24.0",
+ "es-object-atoms": "^1.1.1",
+ "gopd": "^1.2.0",
+ "safe-array-concat": "^1.1.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/object.groupby": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz",
@@ -15830,6 +13932,19 @@
"node": ">= 0.4"
}
},
+ "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==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "isobject": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/object.values": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz",
@@ -15849,36 +13964,6 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/obuf": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz",
- "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==",
- "dev": true,
- "license": "MIT"
- },
- "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,
- "license": "MIT",
- "dependencies": {
- "ee-first": "1.1.1"
- },
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/on-headers": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.1.0.tgz",
- "integrity": "sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.8"
- }
- },
"node_modules/once": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
@@ -15905,24 +13990,6 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/open": {
- "version": "8.4.2",
- "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz",
- "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==",
- "dev": true,
- "license": "MIT",
- "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/opener": {
"version": "1.5.2",
"resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz",
@@ -15979,17 +14046,40 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "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,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/p-finally": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
+ "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
"node_modules/p-limit": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
- "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
"dev": true,
"license": "MIT",
"dependencies": {
- "yocto-queue": "^0.1.0"
+ "p-try": "^2.0.0"
},
"engines": {
- "node": ">=10"
+ "node": ">=6"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
@@ -16008,34 +14098,14 @@
"node": ">=8"
}
},
- "node_modules/p-locate/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==",
+ "node_modules/p-map": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz",
+ "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==",
"dev": true,
"license": "MIT",
- "dependencies": {
- "p-try": "^2.0.0"
- },
"engines": {
"node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/p-retry": {
- "version": "4.6.2",
- "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz",
- "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/retry": "0.12.0",
- "retry": "^0.13.1"
- },
- "engines": {
- "node": ">=8"
}
},
"node_modules/p-try": {
@@ -16048,40 +14118,6 @@
"node": ">=6"
}
},
- "node_modules/pac-proxy-agent": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-7.2.0.tgz",
- "integrity": "sha512-TEB8ESquiLMc0lV8vcd5Ql/JAKAoyzHFXaStwjkzpOpC5Yv+pIzLfHvjTSdf3vpa2bMiUQrg9i6276yn8666aA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@tootallnate/quickjs-emscripten": "^0.23.0",
- "agent-base": "^7.1.2",
- "debug": "^4.3.4",
- "get-uri": "^6.0.1",
- "http-proxy-agent": "^7.0.0",
- "https-proxy-agent": "^7.0.6",
- "pac-resolver": "^7.0.1",
- "socks-proxy-agent": "^8.0.5"
- },
- "engines": {
- "node": ">= 14"
- }
- },
- "node_modules/pac-resolver": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-7.0.1.tgz",
- "integrity": "sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "degenerator": "^5.0.0",
- "netmask": "^2.0.2"
- },
- "engines": {
- "node": ">= 14"
- }
- },
"node_modules/param-case": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz",
@@ -16106,11 +14142,24 @@
"node": ">=6"
}
},
- "node_modules/parse-cache-control": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/parse-cache-control/-/parse-cache-control-1.0.1.tgz",
- "integrity": "sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg==",
- "dev": true
+ "node_modules/parse-entities": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz",
+ "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "character-entities": "^1.0.0",
+ "character-entities-legacy": "^1.0.0",
+ "character-reference-invalid": "^1.0.0",
+ "is-alphanumerical": "^1.0.0",
+ "is-decimal": "^1.0.0",
+ "is-hexadecimal": "^1.0.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
},
"node_modules/parse-json": {
"version": "5.2.0",
@@ -16154,6 +14203,33 @@
"url": "https://github.com/inikulin/parse5?sponsor=1"
}
},
+ "node_modules/parse5-htmlparser2-tree-adapter": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.1.0.tgz",
+ "integrity": "sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "domhandler": "^5.0.3",
+ "parse5": "^7.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/inikulin/parse5?sponsor=1"
+ }
+ },
+ "node_modules/parse5-parser-stream": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/parse5-parser-stream/-/parse5-parser-stream-7.1.2.tgz",
+ "integrity": "sha512-JyeQc9iwFLn5TbvvqACIF/VXG6abODeB3Fwmv/TGdLk2LfbWkaySGY72at4+Ty7EkPZj854u4CrICqNk2qIbow==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "parse5": "^7.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/inikulin/parse5?sponsor=1"
+ }
+ },
"node_modules/parse5/node_modules/entities": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz",
@@ -16167,16 +14243,6 @@
"url": "https://github.com/fb55/entities?sponsor=1"
}
},
- "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,
- "license": "MIT",
- "engines": {
- "node": ">= 0.8"
- }
- },
"node_modules/pascal-case": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz",
@@ -16188,6 +14254,16 @@
"tslib": "^2.0.3"
}
},
+ "node_modules/pascalcase": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
+ "integrity": "sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/path-case": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/path-case/-/path-case-3.0.4.tgz",
@@ -16219,6 +14295,13 @@
"node": ">=0.10.0"
}
},
+ "node_modules/path-is-inside": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz",
+ "integrity": "sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==",
+ "dev": true,
+ "license": "(WTFPL OR MIT)"
+ },
"node_modules/path-key": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
@@ -16236,13 +14319,6 @@
"dev": true,
"license": "MIT"
},
- "node_modules/path-to-regexp": {
- "version": "0.1.12",
- "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz",
- "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/path-type": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
@@ -16260,40 +14336,13 @@
"dev": true,
"license": "MIT"
},
- "node_modules/pg-int8": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz",
- "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==",
- "dev": true,
- "license": "ISC",
- "engines": {
- "node": ">=4.0.0"
- }
- },
- "node_modules/pg-protocol": {
- "version": "1.10.3",
- "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.10.3.tgz",
- "integrity": "sha512-6DIBgBQaTKDJyxnXaLiLR8wBpQQcGWuAESkRBX/t6OwA8YsqP+iVSiond2EDy6Y/dsGk8rh/jtax3js5NeV7JQ==",
+ "node_modules/performance-now": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
+ "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==",
"dev": true,
"license": "MIT"
},
- "node_modules/pg-types": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz",
- "integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "pg-int8": "1.0.1",
- "postgres-array": "~2.0.0",
- "postgres-bytea": "~1.0.0",
- "postgres-date": "~1.0.4",
- "postgres-interval": "^1.1.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
"node_modules/picocolors": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
@@ -16302,9 +14351,9 @@
"license": "ISC"
},
"node_modules/picomatch": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
- "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz",
+ "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==",
"dev": true,
"license": "MIT",
"engines": {
@@ -16315,12 +14364,35 @@
}
},
"node_modules/pify": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
- "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
+ "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
"dev": true,
"license": "MIT",
"engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/pinkie": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
+ "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/pinkie-promise": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
+ "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "pinkie": "^2.0.0"
+ },
+ "engines": {
"node": ">=0.10.0"
}
},
@@ -16335,154 +14407,16 @@
}
},
"node_modules/pkg-dir": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-7.0.0.tgz",
- "integrity": "sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==",
+ "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==",
"dev": true,
"license": "MIT",
"dependencies": {
- "find-up": "^6.3.0"
+ "find-up": "^4.0.0"
},
"engines": {
- "node": ">=14.16"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/pkg-dir/node_modules/find-up": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz",
- "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "locate-path": "^7.1.0",
- "path-exists": "^5.0.0"
- },
- "engines": {
- "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/pkg-dir/node_modules/locate-path": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz",
- "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "p-locate": "^6.0.0"
- },
- "engines": {
- "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/pkg-dir/node_modules/p-limit": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz",
- "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "yocto-queue": "^1.0.0"
- },
- "engines": {
- "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/pkg-dir/node_modules/p-locate": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz",
- "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "p-limit": "^4.0.0"
- },
- "engines": {
- "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/pkg-dir/node_modules/path-exists": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz",
- "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
- }
- },
- "node_modules/pkg-dir/node_modules/yocto-queue": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.1.1.tgz",
- "integrity": "sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=12.20"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/playwright": {
- "version": "1.57.0",
- "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.57.0.tgz",
- "integrity": "sha512-ilYQj1s8sr2ppEJ2YVadYBN0Mb3mdo9J0wQ+UuDhzYqURwSoW4n1Xs5vs7ORwgDGmyEh33tRMeS8KhdkMoLXQw==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "playwright-core": "1.57.0"
- },
- "bin": {
- "playwright": "cli.js"
- },
- "engines": {
- "node": ">=18"
- },
- "optionalDependencies": {
- "fsevents": "2.3.2"
- }
- },
- "node_modules/playwright-core": {
- "version": "1.57.0",
- "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.57.0.tgz",
- "integrity": "sha512-agTcKlMw/mjBWOnD6kFZttAAGHgi/Nw0CZ2o6JqWSbMlI219lAFLZZCyqByTsvVAJq5XA5H8cA6PrvBRpBWEuQ==",
- "dev": true,
- "license": "Apache-2.0",
- "bin": {
- "playwright-core": "cli.js"
- },
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/playwright/node_modules/fsevents": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
- "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
- "dev": true,
- "hasInstallScript": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+ "node": ">=8"
}
},
"node_modules/plur": {
@@ -16501,6 +14435,30 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/portfinder": {
+ "version": "1.0.38",
+ "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.38.tgz",
+ "integrity": "sha512-rEwq/ZHlJIKw++XtLAO8PPuOQA/zaPJOZJ37BVuN97nLpMJeuDVLVGRwbFoBgLudgdTMP2hdRJP++H+8QOA3vg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "async": "^3.2.6",
+ "debug": "^4.3.6"
+ },
+ "engines": {
+ "node": ">= 10.12"
+ }
+ },
+ "node_modules/posix-character-classes": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
+ "integrity": "sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/possible-typed-array-names": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz",
@@ -16531,7 +14489,6 @@
}
],
"license": "MIT",
- "peer": true,
"dependencies": {
"nanoid": "^3.3.11",
"picocolors": "^1.1.1",
@@ -16542,126 +14499,241 @@
}
},
"node_modules/postcss-calc": {
- "version": "9.0.1",
- "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-9.0.1.tgz",
- "integrity": "sha512-TipgjGyzP5QzEhsOZUaIkeO5mKeMFpebWzRogWG/ysonUlnHcq5aJe0jOjpfzUU8PeSaBQnrE8ehR0QA5vs8PQ==",
+ "version": "8.2.4",
+ "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz",
+ "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==",
"dev": true,
"license": "MIT",
"dependencies": {
- "postcss-selector-parser": "^6.0.11",
+ "postcss-selector-parser": "^6.0.9",
"postcss-value-parser": "^4.2.0"
},
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
"peerDependencies": {
"postcss": "^8.2.2"
}
},
"node_modules/postcss-colormin": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-6.1.0.tgz",
- "integrity": "sha512-x9yX7DOxeMAR+BgGVnNSAxmAj98NX/YxEMNFP+SDCEeNLb2r3i6Hh1ksMsnW8Ub5SLCpbescQqn9YEbE9554Sw==",
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.1.tgz",
+ "integrity": "sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "browserslist": "^4.23.0",
+ "browserslist": "^4.21.4",
"caniuse-api": "^3.0.0",
- "colord": "^2.9.3",
+ "colord": "^2.9.1",
"postcss-value-parser": "^4.2.0"
},
"engines": {
- "node": "^14 || ^16 || >=18.0"
+ "node": "^10 || ^12 || >=14.0"
},
"peerDependencies": {
- "postcss": "^8.4.31"
+ "postcss": "^8.2.15"
}
},
"node_modules/postcss-convert-values": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-6.1.0.tgz",
- "integrity": "sha512-zx8IwP/ts9WvUM6NkVSkiU902QZL1bwPhaVaLynPtCsOTqp+ZKbNi+s6XJg3rfqpKGA/oc7Oxk5t8pOQJcwl/w==",
+ "version": "5.1.3",
+ "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz",
+ "integrity": "sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "browserslist": "^4.23.0",
+ "browserslist": "^4.21.4",
"postcss-value-parser": "^4.2.0"
},
"engines": {
- "node": "^14 || ^16 || >=18.0"
+ "node": "^10 || ^12 || >=14.0"
},
"peerDependencies": {
- "postcss": "^8.4.31"
+ "postcss": "^8.2.15"
}
},
"node_modules/postcss-discard-comments": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-6.0.2.tgz",
- "integrity": "sha512-65w/uIqhSBBfQmYnG92FO1mWZjJ4GL5b8atm5Yw2UgrwD7HiNiSSNwJor1eCFGzUgYnN/iIknhNRVqjrrpuglw==",
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz",
+ "integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==",
"dev": true,
"license": "MIT",
"engines": {
- "node": "^14 || ^16 || >=18.0"
+ "node": "^10 || ^12 || >=14.0"
},
"peerDependencies": {
- "postcss": "^8.4.31"
+ "postcss": "^8.2.15"
}
},
"node_modules/postcss-discard-duplicates": {
- "version": "6.0.3",
- "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-6.0.3.tgz",
- "integrity": "sha512-+JA0DCvc5XvFAxwx6f/e68gQu/7Z9ud584VLmcgto28eB8FqSFZwtrLwB5Kcp70eIoWP/HXqz4wpo8rD8gpsTw==",
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz",
+ "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==",
"dev": true,
"license": "MIT",
"engines": {
- "node": "^14 || ^16 || >=18.0"
+ "node": "^10 || ^12 || >=14.0"
},
"peerDependencies": {
- "postcss": "^8.4.31"
+ "postcss": "^8.2.15"
}
},
"node_modules/postcss-discard-empty": {
- "version": "6.0.3",
- "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-6.0.3.tgz",
- "integrity": "sha512-znyno9cHKQsK6PtxL5D19Fj9uwSzC2mB74cpT66fhgOadEUPyXFkbgwm5tvc3bt3NAy8ltE5MrghxovZRVnOjQ==",
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz",
+ "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==",
"dev": true,
"license": "MIT",
"engines": {
- "node": "^14 || ^16 || >=18.0"
+ "node": "^10 || ^12 || >=14.0"
},
"peerDependencies": {
- "postcss": "^8.4.31"
+ "postcss": "^8.2.15"
}
},
"node_modules/postcss-discard-overridden": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-6.0.2.tgz",
- "integrity": "sha512-j87xzI4LUggC5zND7KdjsI25APtyMuynXZSujByMaav2roV6OZX+8AaCUcZSWqckZpjAjRyFDdpqybgjFO0HJQ==",
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz",
+ "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==",
"dev": true,
"license": "MIT",
"engines": {
- "node": "^14 || ^16 || >=18.0"
+ "node": "^10 || ^12 || >=14.0"
},
"peerDependencies": {
- "postcss": "^8.4.31"
+ "postcss": "^8.2.15"
}
},
- "node_modules/postcss-import": {
- "version": "16.1.1",
- "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-16.1.1.tgz",
- "integrity": "sha512-2xVS1NCZAfjtVdvXiyegxzJ447GyqCeEI5V7ApgQVOWnros1p5lGNovJNapwPpMombyFBfqDwt7AD3n2l0KOfQ==",
+ "node_modules/postcss-html": {
+ "version": "0.36.0",
+ "resolved": "https://registry.npmjs.org/postcss-html/-/postcss-html-0.36.0.tgz",
+ "integrity": "sha512-HeiOxGcuwID0AFsNAL0ox3mW6MHH5cstWN1Z3Y+n6H+g12ih7LHdYxWwEA/QmrebctLjo79xz9ouK3MroHwOJw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "postcss-value-parser": "^4.0.0",
- "read-cache": "^1.0.0",
- "resolve": "^1.1.7"
- },
- "engines": {
- "node": ">=18.0.0"
+ "htmlparser2": "^3.10.0"
},
"peerDependencies": {
- "postcss": "^8.0.0"
+ "postcss": ">=5.0.0",
+ "postcss-syntax": ">=0.36.0"
+ }
+ },
+ "node_modules/postcss-html/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,
+ "license": "MIT",
+ "dependencies": {
+ "domelementtype": "^2.0.1",
+ "entities": "^2.0.0"
+ }
+ },
+ "node_modules/postcss-html/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"
+ }
+ ],
+ "license": "BSD-2-Clause"
+ },
+ "node_modules/postcss-html/node_modules/dom-serializer/node_modules/entities": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz",
+ "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "funding": {
+ "url": "https://github.com/fb55/entities?sponsor=1"
+ }
+ },
+ "node_modules/postcss-html/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,
+ "license": "BSD-2-Clause"
+ },
+ "node_modules/postcss-html/node_modules/domhandler": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz",
+ "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "domelementtype": "1"
+ }
+ },
+ "node_modules/postcss-html/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,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "dom-serializer": "0",
+ "domelementtype": "1"
+ }
+ },
+ "node_modules/postcss-html/node_modules/entities": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz",
+ "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==",
+ "dev": true,
+ "license": "BSD-2-Clause"
+ },
+ "node_modules/postcss-html/node_modules/htmlparser2": {
+ "version": "3.10.1",
+ "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz",
+ "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "domelementtype": "^1.3.1",
+ "domhandler": "^2.3.0",
+ "domutils": "^1.5.1",
+ "entities": "^1.1.1",
+ "inherits": "^2.0.1",
+ "readable-stream": "^3.1.1"
+ }
+ },
+ "node_modules/postcss-less": {
+ "version": "3.1.4",
+ "resolved": "https://registry.npmjs.org/postcss-less/-/postcss-less-3.1.4.tgz",
+ "integrity": "sha512-7TvleQWNM2QLcHqvudt3VYjULVB49uiW6XzEUFmvwHzvsOEF5MwBrIXZDJQvJNFGjJQTzSzZnDoCJ8h/ljyGXA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "postcss": "^7.0.14"
+ },
+ "engines": {
+ "node": ">=6.14.4"
+ }
+ },
+ "node_modules/postcss-less/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,
+ "license": "ISC"
+ },
+ "node_modules/postcss-less/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,
+ "license": "MIT",
+ "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-loader": {
@@ -16687,23 +14759,6 @@
"webpack": "^5.0.0"
}
},
- "node_modules/postcss-loader/node_modules/cosmiconfig": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz",
- "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==",
- "dev": true,
- "license": "MIT",
- "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/postcss-loader/node_modules/semver": {
"version": "7.7.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz",
@@ -16725,107 +14780,107 @@
"license": "MIT"
},
"node_modules/postcss-merge-longhand": {
- "version": "6.0.5",
- "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-6.0.5.tgz",
- "integrity": "sha512-5LOiordeTfi64QhICp07nzzuTDjNSO8g5Ksdibt44d+uvIIAE1oZdRn8y/W5ZtYgRH/lnLDlvi9F8btZcVzu3w==",
+ "version": "5.1.7",
+ "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz",
+ "integrity": "sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"postcss-value-parser": "^4.2.0",
- "stylehacks": "^6.1.1"
+ "stylehacks": "^5.1.1"
},
"engines": {
- "node": "^14 || ^16 || >=18.0"
+ "node": "^10 || ^12 || >=14.0"
},
"peerDependencies": {
- "postcss": "^8.4.31"
+ "postcss": "^8.2.15"
}
},
"node_modules/postcss-merge-rules": {
- "version": "6.1.1",
- "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-6.1.1.tgz",
- "integrity": "sha512-KOdWF0gju31AQPZiD+2Ar9Qjowz1LTChSjFFbS+e2sFgc4uHOp3ZvVX4sNeTlk0w2O31ecFGgrFzhO0RSWbWwQ==",
+ "version": "5.1.4",
+ "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.4.tgz",
+ "integrity": "sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==",
"dev": true,
"license": "MIT",
"dependencies": {
- "browserslist": "^4.23.0",
+ "browserslist": "^4.21.4",
"caniuse-api": "^3.0.0",
- "cssnano-utils": "^4.0.2",
- "postcss-selector-parser": "^6.0.16"
+ "cssnano-utils": "^3.1.0",
+ "postcss-selector-parser": "^6.0.5"
},
"engines": {
- "node": "^14 || ^16 || >=18.0"
+ "node": "^10 || ^12 || >=14.0"
},
"peerDependencies": {
- "postcss": "^8.4.31"
+ "postcss": "^8.2.15"
}
},
"node_modules/postcss-minify-font-values": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-6.1.0.tgz",
- "integrity": "sha512-gklfI/n+9rTh8nYaSJXlCo3nOKqMNkxuGpTn/Qm0gstL3ywTr9/WRKznE+oy6fvfolH6dF+QM4nCo8yPLdvGJg==",
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz",
+ "integrity": "sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==",
"dev": true,
"license": "MIT",
"dependencies": {
"postcss-value-parser": "^4.2.0"
},
"engines": {
- "node": "^14 || ^16 || >=18.0"
+ "node": "^10 || ^12 || >=14.0"
},
"peerDependencies": {
- "postcss": "^8.4.31"
+ "postcss": "^8.2.15"
}
},
"node_modules/postcss-minify-gradients": {
- "version": "6.0.3",
- "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-6.0.3.tgz",
- "integrity": "sha512-4KXAHrYlzF0Rr7uc4VrfwDJ2ajrtNEpNEuLxFgwkhFZ56/7gaE4Nr49nLsQDZyUe+ds+kEhf+YAUolJiYXF8+Q==",
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz",
+ "integrity": "sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "colord": "^2.9.3",
- "cssnano-utils": "^4.0.2",
+ "colord": "^2.9.1",
+ "cssnano-utils": "^3.1.0",
"postcss-value-parser": "^4.2.0"
},
"engines": {
- "node": "^14 || ^16 || >=18.0"
+ "node": "^10 || ^12 || >=14.0"
},
"peerDependencies": {
- "postcss": "^8.4.31"
+ "postcss": "^8.2.15"
}
},
"node_modules/postcss-minify-params": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-6.1.0.tgz",
- "integrity": "sha512-bmSKnDtyyE8ujHQK0RQJDIKhQ20Jq1LYiez54WiaOoBtcSuflfK3Nm596LvbtlFcpipMjgClQGyGr7GAs+H1uA==",
+ "version": "5.1.4",
+ "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz",
+ "integrity": "sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "browserslist": "^4.23.0",
- "cssnano-utils": "^4.0.2",
+ "browserslist": "^4.21.4",
+ "cssnano-utils": "^3.1.0",
"postcss-value-parser": "^4.2.0"
},
"engines": {
- "node": "^14 || ^16 || >=18.0"
+ "node": "^10 || ^12 || >=14.0"
},
"peerDependencies": {
- "postcss": "^8.4.31"
+ "postcss": "^8.2.15"
}
},
"node_modules/postcss-minify-selectors": {
- "version": "6.0.4",
- "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-6.0.4.tgz",
- "integrity": "sha512-L8dZSwNLgK7pjTto9PzWRoMbnLq5vsZSTu8+j1P/2GB8qdtGQfn+K1uSvFgYvgh83cbyxT5m43ZZhUMTJDSClQ==",
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz",
+ "integrity": "sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "postcss-selector-parser": "^6.0.16"
+ "postcss-selector-parser": "^6.0.5"
},
"engines": {
- "node": "^14 || ^16 || >=18.0"
+ "node": "^10 || ^12 || >=14.0"
},
"peerDependencies": {
- "postcss": "^8.4.31"
+ "postcss": "^8.2.15"
}
},
"node_modules/postcss-modules-extract-imports": {
@@ -16920,195 +14975,196 @@
}
},
"node_modules/postcss-normalize-charset": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-6.0.2.tgz",
- "integrity": "sha512-a8N9czmdnrjPHa3DeFlwqst5eaL5W8jYu3EBbTTkI5FHkfMhFZh1EGbku6jhHhIzTA6tquI2P42NtZ59M/H/kQ==",
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz",
+ "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==",
"dev": true,
"license": "MIT",
"engines": {
- "node": "^14 || ^16 || >=18.0"
+ "node": "^10 || ^12 || >=14.0"
},
"peerDependencies": {
- "postcss": "^8.4.31"
+ "postcss": "^8.2.15"
}
},
"node_modules/postcss-normalize-display-values": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-6.0.2.tgz",
- "integrity": "sha512-8H04Mxsb82ON/aAkPeq8kcBbAtI5Q2a64X/mnRRfPXBq7XeogoQvReqxEfc0B4WPq1KimjezNC8flUtC3Qz6jg==",
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz",
+ "integrity": "sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==",
"dev": true,
"license": "MIT",
"dependencies": {
"postcss-value-parser": "^4.2.0"
},
"engines": {
- "node": "^14 || ^16 || >=18.0"
+ "node": "^10 || ^12 || >=14.0"
},
"peerDependencies": {
- "postcss": "^8.4.31"
+ "postcss": "^8.2.15"
}
},
"node_modules/postcss-normalize-positions": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-6.0.2.tgz",
- "integrity": "sha512-/JFzI441OAB9O7VnLA+RtSNZvQ0NCFZDOtp6QPFo1iIyawyXg0YI3CYM9HBy1WvwCRHnPep/BvI1+dGPKoXx/Q==",
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz",
+ "integrity": "sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==",
"dev": true,
"license": "MIT",
"dependencies": {
"postcss-value-parser": "^4.2.0"
},
"engines": {
- "node": "^14 || ^16 || >=18.0"
+ "node": "^10 || ^12 || >=14.0"
},
"peerDependencies": {
- "postcss": "^8.4.31"
+ "postcss": "^8.2.15"
}
},
"node_modules/postcss-normalize-repeat-style": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-6.0.2.tgz",
- "integrity": "sha512-YdCgsfHkJ2jEXwR4RR3Tm/iOxSfdRt7jplS6XRh9Js9PyCR/aka/FCb6TuHT2U8gQubbm/mPmF6L7FY9d79VwQ==",
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz",
+ "integrity": "sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==",
"dev": true,
"license": "MIT",
"dependencies": {
"postcss-value-parser": "^4.2.0"
},
"engines": {
- "node": "^14 || ^16 || >=18.0"
+ "node": "^10 || ^12 || >=14.0"
},
"peerDependencies": {
- "postcss": "^8.4.31"
+ "postcss": "^8.2.15"
}
},
"node_modules/postcss-normalize-string": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-6.0.2.tgz",
- "integrity": "sha512-vQZIivlxlfqqMp4L9PZsFE4YUkWniziKjQWUtsxUiVsSSPelQydwS8Wwcuw0+83ZjPWNTl02oxlIvXsmmG+CiQ==",
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz",
+ "integrity": "sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==",
"dev": true,
"license": "MIT",
"dependencies": {
"postcss-value-parser": "^4.2.0"
},
"engines": {
- "node": "^14 || ^16 || >=18.0"
+ "node": "^10 || ^12 || >=14.0"
},
"peerDependencies": {
- "postcss": "^8.4.31"
+ "postcss": "^8.2.15"
}
},
"node_modules/postcss-normalize-timing-functions": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-6.0.2.tgz",
- "integrity": "sha512-a+YrtMox4TBtId/AEwbA03VcJgtyW4dGBizPl7e88cTFULYsprgHWTbfyjSLyHeBcK/Q9JhXkt2ZXiwaVHoMzA==",
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz",
+ "integrity": "sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==",
"dev": true,
"license": "MIT",
"dependencies": {
"postcss-value-parser": "^4.2.0"
},
"engines": {
- "node": "^14 || ^16 || >=18.0"
+ "node": "^10 || ^12 || >=14.0"
},
"peerDependencies": {
- "postcss": "^8.4.31"
+ "postcss": "^8.2.15"
}
},
"node_modules/postcss-normalize-unicode": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-6.1.0.tgz",
- "integrity": "sha512-QVC5TQHsVj33otj8/JD869Ndr5Xcc/+fwRh4HAsFsAeygQQXm+0PySrKbr/8tkDKzW+EVT3QkqZMfFrGiossDg==",
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz",
+ "integrity": "sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "browserslist": "^4.23.0",
+ "browserslist": "^4.21.4",
"postcss-value-parser": "^4.2.0"
},
"engines": {
- "node": "^14 || ^16 || >=18.0"
+ "node": "^10 || ^12 || >=14.0"
},
"peerDependencies": {
- "postcss": "^8.4.31"
+ "postcss": "^8.2.15"
}
},
"node_modules/postcss-normalize-url": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-6.0.2.tgz",
- "integrity": "sha512-kVNcWhCeKAzZ8B4pv/DnrU1wNh458zBNp8dh4y5hhxih5RZQ12QWMuQrDgPRw3LRl8mN9vOVfHl7uhvHYMoXsQ==",
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz",
+ "integrity": "sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==",
"dev": true,
"license": "MIT",
"dependencies": {
+ "normalize-url": "^6.0.1",
"postcss-value-parser": "^4.2.0"
},
"engines": {
- "node": "^14 || ^16 || >=18.0"
+ "node": "^10 || ^12 || >=14.0"
},
"peerDependencies": {
- "postcss": "^8.4.31"
+ "postcss": "^8.2.15"
}
},
"node_modules/postcss-normalize-whitespace": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-6.0.2.tgz",
- "integrity": "sha512-sXZ2Nj1icbJOKmdjXVT9pnyHQKiSAyuNQHSgRCUgThn2388Y9cGVDR+E9J9iAYbSbLHI+UUwLVl1Wzco/zgv0Q==",
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz",
+ "integrity": "sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==",
"dev": true,
"license": "MIT",
"dependencies": {
"postcss-value-parser": "^4.2.0"
},
"engines": {
- "node": "^14 || ^16 || >=18.0"
+ "node": "^10 || ^12 || >=14.0"
},
"peerDependencies": {
- "postcss": "^8.4.31"
+ "postcss": "^8.2.15"
}
},
"node_modules/postcss-ordered-values": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-6.0.2.tgz",
- "integrity": "sha512-VRZSOB+JU32RsEAQrO94QPkClGPKJEL/Z9PCBImXMhIeK5KAYo6slP/hBYlLgrCjFxyqvn5VC81tycFEDBLG1Q==",
+ "version": "5.1.3",
+ "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz",
+ "integrity": "sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "cssnano-utils": "^4.0.2",
+ "cssnano-utils": "^3.1.0",
"postcss-value-parser": "^4.2.0"
},
"engines": {
- "node": "^14 || ^16 || >=18.0"
+ "node": "^10 || ^12 || >=14.0"
},
"peerDependencies": {
- "postcss": "^8.4.31"
+ "postcss": "^8.2.15"
}
},
"node_modules/postcss-reduce-initial": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-6.1.0.tgz",
- "integrity": "sha512-RarLgBK/CrL1qZags04oKbVbrrVK2wcxhvta3GCxrZO4zveibqbRPmm2VI8sSgCXwoUHEliRSbOfpR0b/VIoiw==",
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.2.tgz",
+ "integrity": "sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "browserslist": "^4.23.0",
+ "browserslist": "^4.21.4",
"caniuse-api": "^3.0.0"
},
"engines": {
- "node": "^14 || ^16 || >=18.0"
+ "node": "^10 || ^12 || >=14.0"
},
"peerDependencies": {
- "postcss": "^8.4.31"
+ "postcss": "^8.2.15"
}
},
"node_modules/postcss-reduce-transforms": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-6.0.2.tgz",
- "integrity": "sha512-sB+Ya++3Xj1WaT9+5LOOdirAxP7dJZms3GRcYheSPi1PiTMigsxHAdkrbItHxwYHr4kt1zL7mmcHstgMYT+aiA==",
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz",
+ "integrity": "sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"postcss-value-parser": "^4.2.0"
},
"engines": {
- "node": "^14 || ^16 || >=18.0"
+ "node": "^10 || ^12 || >=14.0"
},
"peerDependencies": {
- "postcss": "^8.4.31"
+ "postcss": "^8.2.15"
}
},
"node_modules/postcss-resolve-nested-selector": {
@@ -17119,57 +15175,115 @@
"license": "MIT"
},
"node_modules/postcss-safe-parser": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-7.0.1.tgz",
- "integrity": "sha512-0AioNCJZ2DPYz5ABT6bddIqlhgwhpHZ/l65YAYo0BCIn0xiDpsnTHz0gnoTGk0OXZW0JRs+cDwL8u/teRdz+8A==",
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-4.0.2.tgz",
+ "integrity": "sha512-Uw6ekxSWNLCPesSv/cmqf2bY/77z11O7jZGPax3ycZMFU/oi2DMH9i89AdHc1tRwFg/arFoEwX0IS3LCUxJh1g==",
"dev": true,
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/postcss-safe-parser"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
"license": "MIT",
- "engines": {
- "node": ">=18.0"
+ "dependencies": {
+ "postcss": "^7.0.26"
},
- "peerDependencies": {
- "postcss": "^8.4.31"
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/postcss-safe-parser/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,
+ "license": "ISC"
+ },
+ "node_modules/postcss-safe-parser/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,
+ "license": "MIT",
+ "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-sass": {
+ "version": "0.4.4",
+ "resolved": "https://registry.npmjs.org/postcss-sass/-/postcss-sass-0.4.4.tgz",
+ "integrity": "sha512-BYxnVYx4mQooOhr+zer0qWbSPYnarAy8ZT7hAQtbxtgVf8gy+LSLT/hHGe35h14/pZDTw1DsxdbrwxBN++H+fg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "gonzales-pe": "^4.3.0",
+ "postcss": "^7.0.21"
+ }
+ },
+ "node_modules/postcss-sass/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,
+ "license": "ISC"
+ },
+ "node_modules/postcss-sass/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,
+ "license": "MIT",
+ "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-scss": {
- "version": "4.0.9",
- "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-4.0.9.tgz",
- "integrity": "sha512-AjKOeiwAitL/MXxQW2DliT28EKukvvbEWx3LBmJIRN8KfBGZbRTxNYW0kSqi1COiTZ57nZ9NW06S6ux//N1c9A==",
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-2.1.1.tgz",
+ "integrity": "sha512-jQmGnj0hSGLd9RscFw9LyuSVAa5Bl1/KBPqG1NQw9w8ND55nY4ZEsdlVuYJvLPpV+y0nwTV5v/4rHPzZRihQbA==",
"dev": true,
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/postcss-scss"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
"license": "MIT",
- "engines": {
- "node": ">=12.0"
+ "dependencies": {
+ "postcss": "^7.0.6"
},
- "peerDependencies": {
- "postcss": "^8.4.29"
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/postcss-scss/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,
+ "license": "ISC"
+ },
+ "node_modules/postcss-scss/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,
+ "license": "MIT",
+ "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": {
@@ -17187,36 +15301,182 @@
}
},
"node_modules/postcss-svgo": {
- "version": "6.0.3",
- "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-6.0.3.tgz",
- "integrity": "sha512-dlrahRmxP22bX6iKEjOM+c8/1p+81asjKT+V5lrgOH944ryx/OHpclnIbGsKVd3uWOXFLYJwCVf0eEkJGvO96g==",
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.1.0.tgz",
+ "integrity": "sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==",
"dev": true,
"license": "MIT",
"dependencies": {
"postcss-value-parser": "^4.2.0",
- "svgo": "^3.2.0"
+ "svgo": "^2.7.0"
},
"engines": {
- "node": "^14 || ^16 || >= 18"
+ "node": "^10 || ^12 || >=14.0"
},
"peerDependencies": {
- "postcss": "^8.4.31"
+ "postcss": "^8.2.15"
}
},
- "node_modules/postcss-unique-selectors": {
- "version": "6.0.4",
- "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-6.0.4.tgz",
- "integrity": "sha512-K38OCaIrO8+PzpArzkLKB42dSARtC2tmG6PvD4b1o1Q2E9Os8jzfWFfSy/rixsHwohtsDdFtAWGjFVFUdwYaMg==",
+ "node_modules/postcss-svgo/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,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/postcss-svgo/node_modules/css-select": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz",
+ "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "boolbase": "^1.0.0",
+ "css-what": "^6.0.1",
+ "domhandler": "^4.3.1",
+ "domutils": "^2.8.0",
+ "nth-check": "^2.0.1"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/fb55"
+ }
+ },
+ "node_modules/postcss-svgo/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,
"license": "MIT",
"dependencies": {
- "postcss-selector-parser": "^6.0.16"
+ "mdn-data": "2.0.14",
+ "source-map": "^0.6.1"
},
"engines": {
- "node": "^14 || ^16 || >=18.0"
+ "node": ">=8.0.0"
+ }
+ },
+ "node_modules/postcss-svgo/node_modules/dom-serializer": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz",
+ "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "domelementtype": "^2.0.1",
+ "domhandler": "^4.2.0",
+ "entities": "^2.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1"
+ }
+ },
+ "node_modules/postcss-svgo/node_modules/domhandler": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz",
+ "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "domelementtype": "^2.2.0"
+ },
+ "engines": {
+ "node": ">= 4"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/domhandler?sponsor=1"
+ }
+ },
+ "node_modules/postcss-svgo/node_modules/domutils": {
+ "version": "2.8.0",
+ "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz",
+ "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "dom-serializer": "^1.0.1",
+ "domelementtype": "^2.2.0",
+ "domhandler": "^4.2.0"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/domutils?sponsor=1"
+ }
+ },
+ "node_modules/postcss-svgo/node_modules/entities": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz",
+ "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "funding": {
+ "url": "https://github.com/fb55/entities?sponsor=1"
+ }
+ },
+ "node_modules/postcss-svgo/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,
+ "license": "CC0-1.0"
+ },
+ "node_modules/postcss-svgo/node_modules/sax": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/sax/-/sax-1.6.0.tgz",
+ "integrity": "sha512-6R3J5M4AcbtLUdZmRv2SygeVaM7IhrLXu9BmnOGmmACak8fiUtOsYNWUS4uK7upbmHIBbLBeFeI//477BKLBzA==",
+ "dev": true,
+ "license": "BlueOak-1.0.0",
+ "engines": {
+ "node": ">=11.0.0"
+ }
+ },
+ "node_modules/postcss-svgo/node_modules/svgo": {
+ "version": "2.8.2",
+ "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.2.tgz",
+ "integrity": "sha512-TyzE4NVGLUFy+H/Uy4N6c3G0HEeprsVfge6Lmq+0FdQQ/zqoVYB62IsBZORsiL+o96s6ff/V6/3UQo/C0cgCAA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "commander": "^7.2.0",
+ "css-select": "^4.1.3",
+ "css-tree": "^1.1.3",
+ "csso": "^4.2.0",
+ "picocolors": "^1.0.0",
+ "sax": "^1.5.0",
+ "stable": "^0.1.8"
+ },
+ "bin": {
+ "svgo": "bin/svgo"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/postcss-syntax": {
+ "version": "0.36.2",
+ "resolved": "https://registry.npmjs.org/postcss-syntax/-/postcss-syntax-0.36.2.tgz",
+ "integrity": "sha512-nBRg/i7E3SOHWxF3PpF5WnJM/jQ1YpY9000OaVXlAQj6Zp/kIqJxEDWIZ67tAd7NLuk7zqN4yqe9nc0oNAOs1w==",
+ "dev": true,
+ "license": "MIT",
+ "peerDependencies": {
+ "postcss": ">=5.0.0"
+ }
+ },
+ "node_modules/postcss-unique-selectors": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz",
+ "integrity": "sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "postcss-selector-parser": "^6.0.5"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14.0"
},
"peerDependencies": {
- "postcss": "^8.4.31"
+ "postcss": "^8.2.15"
}
},
"node_modules/postcss-value-parser": {
@@ -17226,49 +15486,6 @@
"dev": true,
"license": "MIT"
},
- "node_modules/postgres-array": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz",
- "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/postgres-bytea": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.1.tgz",
- "integrity": "sha512-5+5HqXnsZPE65IJZSMkZtURARZelel2oXUEO8rH83VS/hxH5vv1uHquPg5wZs8yMAfdv971IU+kcPUczi7NVBQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/postgres-date": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz",
- "integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/postgres-interval": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz",
- "integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "xtend": "^4.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/prelude-ls": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
@@ -17280,10 +15497,9 @@
}
},
"node_modules/prettier": {
- "name": "wp-prettier",
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/wp-prettier/-/wp-prettier-3.0.3.tgz",
- "integrity": "sha512-X4UlrxDTH8oom9qXlcjnydsjAOD2BmB6yFmvS4Z2zdTzqqpRWb+fbqrH412+l+OUXmbzJlSXjlMFYPgYG12IAA==",
+ "version": "3.8.3",
+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.8.3.tgz",
+ "integrity": "sha512-7igPTM53cGHMW8xWuVTydi2KO233VFiTNyF5hLJqpilHfmn8C8gPf+PS7dUT64YcXFbiMGZxS9pCSxL/Dxm/Jw==",
"dev": true,
"license": "MIT",
"peer": true,
@@ -17298,9 +15514,9 @@
}
},
"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==",
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.1.tgz",
+ "integrity": "sha512-SxToR7P8Y2lWmv/kTzVLC1t/GDI2WGjMwNhLLE9qtH8Q13C+aEmuRlzDst4Up4s0Wc8sF2M+J57iB3cMLqftfg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -17311,40 +15527,21 @@
}
},
"node_modules/pretty-format": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz",
- "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==",
+ "version": "26.6.2",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz",
+ "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@jest/schemas": "^29.6.3",
- "ansi-styles": "^5.0.0",
- "react-is": "^18.0.0"
+ "@jest/types": "^26.6.2",
+ "ansi-regex": "^5.0.0",
+ "ansi-styles": "^4.0.0",
+ "react-is": "^17.0.1"
},
"engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ "node": ">= 10"
}
},
- "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==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/process-nextick-args": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
- "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/progress": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
@@ -17388,60 +15585,6 @@
"dev": true,
"license": "MIT"
},
- "node_modules/proxy-addr": {
- "version": "2.0.7",
- "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
- "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "forwarded": "0.2.0",
- "ipaddr.js": "1.9.1"
- },
- "engines": {
- "node": ">= 0.10"
- }
- },
- "node_modules/proxy-addr/node_modules/ipaddr.js": {
- "version": "1.9.1",
- "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
- "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.10"
- }
- },
- "node_modules/proxy-agent": {
- "version": "6.5.0",
- "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.5.0.tgz",
- "integrity": "sha512-TmatMXdr2KlRiA2CyDu8GqR8EjahTG3aY3nXjdzFyoZbmB8hrBsTyMezhULIXKnC0jpfjlmiZ3+EaCzoInSu/A==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "agent-base": "^7.1.2",
- "debug": "^4.3.4",
- "http-proxy-agent": "^7.0.1",
- "https-proxy-agent": "^7.0.6",
- "lru-cache": "^7.14.1",
- "pac-proxy-agent": "^7.1.0",
- "proxy-from-env": "^1.1.0",
- "socks-proxy-agent": "^8.0.5"
- },
- "engines": {
- "node": ">= 14"
- }
- },
- "node_modules/proxy-agent/node_modules/lru-cache": {
- "version": "7.18.3",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz",
- "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==",
- "dev": true,
- "license": "ISC",
- "engines": {
- "node": ">=12"
- }
- },
"node_modules/proxy-from-env": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
@@ -17449,10 +15592,30 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/pseudomap": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
+ "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/psl": {
+ "version": "1.15.0",
+ "resolved": "https://registry.npmjs.org/psl/-/psl-1.15.0.tgz",
+ "integrity": "sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "punycode": "^2.3.1"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/lupomontero"
+ }
+ },
"node_modules/pump": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.3.tgz",
- "integrity": "sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==",
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.4.tgz",
+ "integrity": "sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -17471,68 +15634,137 @@
}
},
"node_modules/puppeteer-core": {
- "version": "23.11.1",
- "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-23.11.1.tgz",
- "integrity": "sha512-3HZ2/7hdDKZvZQ7dhhITOUg4/wOrDRjyK2ZBllRB0ZCOi9u0cwq1ACHDjBB+nX+7+kltHjQvBRdeY7+W0T+7Gg==",
+ "version": "10.4.0",
+ "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-10.4.0.tgz",
+ "integrity": "sha512-KU8zyb7AIOqNjLCN3wkrFXxh+EVaG+zrs2P03ATNjc3iwSxHsu5/EvZiREpQ/IJiT9xfQbDVgKcsvRuzLCxglQ==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
- "@puppeteer/browsers": "2.6.1",
- "chromium-bidi": "0.11.0",
- "debug": "^4.4.0",
- "devtools-protocol": "0.0.1367902",
- "typed-query-selector": "^2.12.0",
- "ws": "^8.18.0"
+ "debug": "4.3.1",
+ "devtools-protocol": "0.0.901419",
+ "extract-zip": "2.0.1",
+ "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.4.6"
},
"engines": {
- "node": ">=18"
+ "node": ">=10.18.1"
}
},
- "node_modules/puppeteer-core/node_modules/devtools-protocol": {
- "version": "0.0.1367902",
- "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1367902.tgz",
- "integrity": "sha512-XxtPuC3PGakY6PD7dG66/o8KwJ/LkH2/EKe19Dcw58w53dv4/vSQEkn/SzuyhHE2q4zPgCkxQBxus3VV4ql+Pg==",
- "dev": true,
- "license": "BSD-3-Clause"
- },
- "node_modules/pure-rand": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz",
- "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==",
- "dev": true,
- "funding": [
- {
- "type": "individual",
- "url": "https://github.com/sponsors/dubzzz"
- },
- {
- "type": "opencollective",
- "url": "https://opencollective.com/fast-check"
- }
- ],
- "license": "MIT"
- },
- "node_modules/qified": {
- "version": "0.5.3",
- "resolved": "https://registry.npmjs.org/qified/-/qified-0.5.3.tgz",
- "integrity": "sha512-kXuQdQTB6oN3KhI6V4acnBSZx8D2I4xzZvn9+wFLLFCoBNQY/sFnCW6c43OL7pOQ2HvGV4lnWIXNmgfp7cTWhQ==",
+ "node_modules/puppeteer-core/node_modules/debug": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz",
+ "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "hookified": "^1.13.0"
+ "ms": "2.1.2"
},
"engines": {
- "node": ">=20"
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/puppeteer-core/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,
+ "license": "MIT",
+ "dependencies": {
+ "agent-base": "6",
+ "debug": "4"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/puppeteer-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,
+ "license": "MIT"
+ },
+ "node_modules/puppeteer-core/node_modules/progress": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.1.tgz",
+ "integrity": "sha512-OE+a6vzqazc+K6LxJrX5UPyKFvGnL5CYmq2jFGNIBWHpc4QyE49/YOumcrpQFJpfejmvRtbJzgO1zPmMCqlbBg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/puppeteer-core/node_modules/rimraf": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+ "deprecated": "Rimraf versions prior to v4 are no longer supported",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "glob": "^7.1.3"
+ },
+ "bin": {
+ "rimraf": "bin.js"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/puppeteer-core/node_modules/ws": {
+ "version": "7.4.6",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz",
+ "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==",
+ "dev": true,
+ "license": "MIT",
+ "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==",
+ "deprecated": "You or someone you depend on is using Q, the JavaScript Promise library that gave JavaScript developers strong feelings about promises. They can almost certainly migrate to the native JavaScript promise now. Thank you literally everyone for joining me in this bet against the odds. Be excellent to each other.\n\n(For a CapTP with native promises, see @endo/eventual-send and @endo/captp)",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.6.0",
+ "teleport": ">=0.2.0"
}
},
"node_modules/qs": {
- "version": "6.13.0",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz",
- "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==",
+ "version": "6.15.1",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.1.tgz",
+ "integrity": "sha512-6YHEFRL9mfgcAvql/XhwTvf5jKcOiiupt2FiJxHkiX1z4j7WL8J/jRHYLluORvc1XxB5rV20KoeK00gVJamspg==",
"dev": true,
"license": "BSD-3-Clause",
"dependencies": {
- "side-channel": "^1.0.6"
+ "side-channel": "^1.1.0"
},
"engines": {
"node": ">=0.6"
@@ -17541,6 +15773,13 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/querystringify": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz",
+ "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/queue-microtask": {
"version": "1.2.3",
"resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
@@ -17572,154 +15811,205 @@
"node": ">=8"
}
},
- "node_modules/randombytes": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
- "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
+ "node_modules/raf": {
+ "version": "3.4.1",
+ "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz",
+ "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "safe-buffer": "^5.1.0"
+ "performance-now": "^2.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==",
+ "node_modules/railroad-diagrams": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/railroad-diagrams/-/railroad-diagrams-1.0.0.tgz",
+ "integrity": "sha512-cz93DjNeLY0idrCNOH6PviZGRN9GJhsdm9hpn1YCS879fj4W+x5IFJhhkRZcwVgMmFF7R82UA/7Oh+R8lLZg6A==",
+ "dev": true,
+ "license": "CC0-1.0"
+ },
+ "node_modules/randexp": {
+ "version": "0.4.6",
+ "resolved": "https://registry.npmjs.org/randexp/-/randexp-0.4.6.tgz",
+ "integrity": "sha512-80WNmd9DA0tmZrw9qQa62GPPWfuXJknrmVmLcxvq4uZBdYqb1wYoKTmnlGUchvVWe0XiLupYkBoXVOxz3C8DYQ==",
"dev": true,
"license": "MIT",
+ "dependencies": {
+ "discontinuous-range": "1.0.0",
+ "ret": "~0.1.10"
+ },
"engines": {
- "node": ">= 0.6"
+ "node": ">=0.12"
}
},
"node_modules/raw-body": {
- "version": "2.5.2",
- "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz",
- "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==",
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-1.1.7.tgz",
+ "integrity": "sha512-WmJJU2e9Y6M5UzTOkHaM7xJGAPQD8PNzx3bAd2+uhZAim6wDk6dAZxPVYLF67XhbR4hmKGh33Lpmh4XWrCH5Mg==",
+ "deprecated": "No longer maintained. Please upgrade to a stable version.",
"dev": true,
"license": "MIT",
"dependencies": {
- "bytes": "3.1.2",
- "http-errors": "2.0.0",
- "iconv-lite": "0.4.24",
- "unpipe": "1.0.0"
+ "bytes": "1",
+ "string_decoder": "0.10"
},
"engines": {
- "node": ">= 0.8"
+ "node": ">= 0.8.0"
}
},
- "node_modules/raw-body/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==",
+ "node_modules/raw-body/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,
+ "license": "MIT"
+ },
+ "node_modules/rc": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
+ "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
+ "dev": true,
+ "license": "(BSD-2-Clause OR MIT OR Apache-2.0)",
+ "dependencies": {
+ "deep-extend": "^0.6.0",
+ "ini": "~1.3.0",
+ "minimist": "^1.2.0",
+ "strip-json-comments": "~2.0.1"
+ },
+ "bin": {
+ "rc": "cli.js"
+ }
+ },
+ "node_modules/rc/node_modules/strip-json-comments": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
+ "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==",
"dev": true,
"license": "MIT",
- "dependencies": {
- "safer-buffer": ">= 2.1.2 < 3"
- },
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/react": {
- "version": "18.3.1",
- "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz",
- "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==",
+ "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,
"license": "MIT",
- "peer": true,
"dependencies": {
- "loose-envify": "^1.1.0"
+ "loose-envify": "^1.1.0",
+ "object-assign": "^4.1.1"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/react-dom": {
- "version": "18.3.1",
- "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz",
- "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==",
+ "version": "17.0.2",
+ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz",
+ "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"loose-envify": "^1.1.0",
- "scheduler": "^0.23.2"
+ "object-assign": "^4.1.1",
+ "scheduler": "^0.20.2"
},
"peerDependencies": {
- "react": "^18.3.1"
+ "react": "17.0.2"
}
},
"node_modules/react-is": {
- "version": "18.3.1",
- "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz",
- "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==",
+ "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,
"license": "MIT"
},
- "node_modules/react-refresh": {
- "version": "0.14.2",
- "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.2.tgz",
- "integrity": "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==",
+ "node_modules/react-shallow-renderer": {
+ "version": "16.15.0",
+ "resolved": "https://registry.npmjs.org/react-shallow-renderer/-/react-shallow-renderer-16.15.0.tgz",
+ "integrity": "sha512-oScf2FqQ9LFVQgA73vr86xl2NaOIX73rh+YFqcOp68CWj56tSfgtGKrEbyhCj0rSijyG9M1CYprTh39fBi5hzA==",
"dev": true,
"license": "MIT",
- "peer": true,
+ "dependencies": {
+ "object-assign": "^4.1.1",
+ "react-is": "^16.12.0 || ^17.0.0 || ^18.0.0"
+ },
+ "peerDependencies": {
+ "react": "^16.0.0 || ^17.0.0 || ^18.0.0"
+ }
+ },
+ "node_modules/react-test-renderer": {
+ "version": "17.0.2",
+ "resolved": "https://registry.npmjs.org/react-test-renderer/-/react-test-renderer-17.0.2.tgz",
+ "integrity": "sha512-yaQ9cB89c17PUb0x6UfWRs7kQCorVdHlutU1boVPEsB8IDZH6n9tHxMacc3y0JoXOJUsZb/t/Mb8FUWMKaM7iQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "object-assign": "^4.1.1",
+ "react-is": "^17.0.2",
+ "react-shallow-renderer": "^16.13.1",
+ "scheduler": "^0.20.2"
+ },
+ "peerDependencies": {
+ "react": "17.0.2"
+ }
+ },
+ "node_modules/read-pkg": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
+ "integrity": "sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "load-json-file": "^1.0.0",
+ "normalize-package-data": "^2.3.2",
+ "path-type": "^1.0.0"
+ },
"engines": {
"node": ">=0.10.0"
}
},
- "node_modules/read-cache": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
- "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "pify": "^2.3.0"
- }
- },
- "node_modules/read-pkg": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz",
- "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/normalize-package-data": "^2.4.0",
- "normalize-package-data": "^2.5.0",
- "parse-json": "^5.0.0",
- "type-fest": "^0.6.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/read-pkg-up": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz",
- "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==",
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz",
+ "integrity": "sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A==",
"dev": true,
"license": "MIT",
"dependencies": {
- "find-up": "^4.1.0",
- "read-pkg": "^5.2.0",
- "type-fest": "^0.8.1"
+ "find-up": "^1.0.0",
+ "read-pkg": "^1.0.0"
},
"engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "node": ">=0.10.0"
}
},
- "node_modules/read-pkg-up/node_modules/type-fest": {
- "version": "0.8.1",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
- "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==",
+ "node_modules/read-pkg-up/node_modules/find-up": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
+ "integrity": "sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==",
"dev": true,
- "license": "(MIT OR CC0-1.0)",
+ "license": "MIT",
+ "dependencies": {
+ "path-exists": "^2.0.0",
+ "pinkie-promise": "^2.0.0"
+ },
"engines": {
- "node": ">=8"
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/read-pkg-up/node_modules/path-exists": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
+ "integrity": "sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "pinkie-promise": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
}
},
"node_modules/read-pkg/node_modules/hosted-git-info": {
@@ -17742,6 +16032,31 @@
"validate-npm-package-license": "^3.0.1"
}
},
+ "node_modules/read-pkg/node_modules/path-type": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz",
+ "integrity": "sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "graceful-fs": "^4.1.2",
+ "pify": "^2.0.0",
+ "pinkie-promise": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/read-pkg/node_modules/pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/read-pkg/node_modules/semver": {
"version": "5.7.2",
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
@@ -17752,16 +16067,6 @@
"semver": "bin/semver"
}
},
- "node_modules/read-pkg/node_modules/type-fest": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz",
- "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==",
- "dev": true,
- "license": "(MIT OR CC0-1.0)",
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/readable-stream": {
"version": "3.6.2",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
@@ -17778,9 +16083,9 @@
}
},
"node_modules/readdirp": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.1.tgz",
- "integrity": "sha512-h80JrZu/MHUZCyHu5ciuoI0+WxsCxzxJTILn6Fs8rxSnFPh+UVHYfeIxK1nVGugMqkfC4vJcBOYbkfkwYK0+gw==",
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz",
+ "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==",
"dev": true,
"license": "MIT",
"engines": {
@@ -17792,16 +16097,16 @@
}
},
"node_modules/rechoir": {
- "version": "0.8.0",
- "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz",
- "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==",
+ "version": "0.7.1",
+ "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.1.tgz",
+ "integrity": "sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "resolve": "^1.20.0"
+ "resolve": "^1.9.0"
},
"engines": {
- "node": ">= 10.13.0"
+ "node": ">= 0.10"
}
},
"node_modules/redent": {
@@ -17849,9 +16154,9 @@
"license": "MIT"
},
"node_modules/regenerate-unicode-properties": {
- "version": "10.2.0",
- "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.0.tgz",
- "integrity": "sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==",
+ "version": "10.2.2",
+ "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.2.tgz",
+ "integrity": "sha512-m03P+zhBeQd1RGnYxrGyDAPpWX/epKirLrp8e3qevZdVkKtnCrjjWczIbYc8+xd6vcTStVlqfycTx1KR4LOr0g==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -17861,14 +16166,18 @@
"node": ">=4"
}
},
- "node_modules/regenerator-transform": {
- "version": "0.15.2",
- "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz",
- "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==",
+ "node_modules/regex-not": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
+ "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/runtime": "^7.8.4"
+ "extend-shallow": "^3.0.2",
+ "safe-regex": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
}
},
"node_modules/regexp.prototype.flags": {
@@ -17892,24 +16201,47 @@
"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,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/mysticatea"
+ }
+ },
"node_modules/regexpu-core": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.2.0.tgz",
- "integrity": "sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA==",
+ "version": "6.4.0",
+ "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.4.0.tgz",
+ "integrity": "sha512-0ghuzq67LI9bLXpOX/ISfve/Mq33a4aFRzoQYhnnok1JOFpmE/A2TBGkNVenOGEeSBCjIiWcc6MVOG5HEQv0sA==",
"dev": true,
"license": "MIT",
"dependencies": {
"regenerate": "^1.4.2",
- "regenerate-unicode-properties": "^10.2.0",
+ "regenerate-unicode-properties": "^10.2.2",
"regjsgen": "^0.8.0",
- "regjsparser": "^0.12.0",
+ "regjsparser": "^0.13.0",
"unicode-match-property-ecmascript": "^2.0.0",
- "unicode-match-property-value-ecmascript": "^2.1.0"
+ "unicode-match-property-value-ecmascript": "^2.2.1"
},
"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,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.1.14"
+ }
+ },
"node_modules/regjsgen": {
"version": "0.8.0",
"resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.8.0.tgz",
@@ -17918,29 +16250,87 @@
"license": "MIT"
},
"node_modules/regjsparser": {
- "version": "0.12.0",
- "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.12.0.tgz",
- "integrity": "sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ==",
+ "version": "0.13.1",
+ "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.13.1.tgz",
+ "integrity": "sha512-dLsljMd9sqwRkby8zhO1gSg3PnJIBFid8f4CQj/sXx+7cKx+E7u0PKhZ+U4wmhx7EfmtvnA318oVaIkAB1lRJw==",
"dev": true,
"license": "BSD-2-Clause",
"dependencies": {
- "jsesc": "~3.0.2"
+ "jsesc": "~3.1.0"
},
"bin": {
"regjsparser": "bin/parser"
}
},
- "node_modules/regjsparser/node_modules/jsesc": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz",
- "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==",
+ "node_modules/remark": {
+ "version": "13.0.0",
+ "resolved": "https://registry.npmjs.org/remark/-/remark-13.0.0.tgz",
+ "integrity": "sha512-HDz1+IKGtOyWN+QgBiAT0kn+2s6ovOxHyPAFGKVE81VSzJ+mq7RwHFledEvB5F1p4iJvOah/LOKdFuzvRnNLCA==",
"dev": true,
"license": "MIT",
- "bin": {
- "jsesc": "bin/jsesc"
+ "dependencies": {
+ "remark-parse": "^9.0.0",
+ "remark-stringify": "^9.0.0",
+ "unified": "^9.1.0"
},
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/remark-parse": {
+ "version": "9.0.0",
+ "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-9.0.0.tgz",
+ "integrity": "sha512-geKatMwSzEXKHuzBNU1z676sGcDcFoChMK38TgdHJNAYfFtsfHDQG7MoJAjs6sgYMqyLduCYWDIWZIxiPeafEw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "mdast-util-from-markdown": "^0.8.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/remark-stringify": {
+ "version": "9.0.1",
+ "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-9.0.1.tgz",
+ "integrity": "sha512-mWmNg3ZtESvZS8fv5PTvaPckdL4iNlCHTt8/e/8oN08nArHRHjNZMKzA/YW3+p7/lYqIw4nx1XsjCBo/AxNChg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "mdast-util-to-markdown": "^0.6.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/remove-trailing-separator": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
+ "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/repeat-element": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz",
+ "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==",
+ "dev": true,
+ "license": "MIT",
"engines": {
- "node": ">=6"
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/repeat-string": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
+ "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10"
}
},
"node_modules/require-directory": {
@@ -17963,20 +16353,12 @@
"node": ">=0.10.0"
}
},
- "node_modules/require-in-the-middle": {
- "version": "7.5.2",
- "resolved": "https://registry.npmjs.org/require-in-the-middle/-/require-in-the-middle-7.5.2.tgz",
- "integrity": "sha512-gAZ+kLqBdHarXB64XpAe2VCjB7rIRv+mU8tfRWziHRJ5umKsIHN2tLLv6EtMw7WCdP19S0ERVMldNvxYCHnhSQ==",
+ "node_modules/require-main-filename": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
+ "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==",
"dev": true,
- "license": "MIT",
- "dependencies": {
- "debug": "^4.3.5",
- "module-details-from-path": "^1.0.3",
- "resolve": "^1.22.8"
- },
- "engines": {
- "node": ">=8.6.0"
- }
+ "license": "ISC"
},
"node_modules/requireindex": {
"version": "1.2.0",
@@ -17996,13 +16378,14 @@
"license": "MIT"
},
"node_modules/resolve": {
- "version": "1.22.10",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz",
- "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==",
+ "version": "1.22.12",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.12.tgz",
+ "integrity": "sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "is-core-module": "^2.16.0",
+ "es-errors": "^1.3.0",
+ "is-core-module": "^2.16.1",
"path-parse": "^1.0.7",
"supports-preserve-symlinks-flag": "^1.0.0"
},
@@ -18063,40 +16446,28 @@
"node": ">=8"
}
},
- "node_modules/resolve-pkg-maps": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz",
- "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==",
+ "node_modules/resolve-url": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
+ "integrity": "sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==",
+ "deprecated": "https://github.com/lydell/resolve-url#deprecated",
"dev": true,
- "license": "MIT",
- "funding": {
- "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1"
- }
+ "license": "MIT"
},
- "node_modules/resolve.exports": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.3.tgz",
- "integrity": "sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==",
+ "node_modules/ret": {
+ "version": "0.1.15",
+ "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
+ "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==",
"dev": true,
"license": "MIT",
"engines": {
- "node": ">=10"
- }
- },
- "node_modules/retry": {
- "version": "0.13.1",
- "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz",
- "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 4"
+ "node": ">=0.12"
}
},
"node_modules/reusify": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
- "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz",
+ "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==",
"dev": true,
"license": "MIT",
"engines": {
@@ -18105,9 +16476,9 @@
}
},
"node_modules/rimraf": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
- "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+ "version": "2.7.1",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
+ "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
"deprecated": "Rimraf versions prior to v4 are no longer supported",
"dev": true,
"license": "ISC",
@@ -18116,71 +16487,27 @@
},
"bin": {
"rimraf": "bin.js"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
}
},
- "node_modules/robots-parser": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/robots-parser/-/robots-parser-3.0.1.tgz",
- "integrity": "sha512-s+pyvQeIKIZ0dx5iJiQk1tPLJAWln39+MI5jtM8wnyws+G5azk+dMnMX0qfbqNetKKNgcWWOdi0sfm+FbQbgdQ==",
+ "node_modules/rst-selector-parser": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/rst-selector-parser/-/rst-selector-parser-2.2.3.tgz",
+ "integrity": "sha512-nDG1rZeP6oFTLN6yNDV/uiAvs1+FS/KlrEwh7+y7dpuApDBy6bI2HTBcc0/V8lv9OTqfyD34eF7au2pm8aBbhA==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "lodash.flattendeep": "^4.4.0",
+ "nearley": "^2.7.10"
+ }
+ },
+ "node_modules/rsvp": {
+ "version": "4.8.5",
+ "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz",
+ "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==",
"dev": true,
"license": "MIT",
"engines": {
- "node": ">=10.0.0"
- }
- },
- "node_modules/rrweb-cssom": {
- "version": "0.8.0",
- "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.8.0.tgz",
- "integrity": "sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/rtlcss": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/rtlcss/-/rtlcss-4.3.0.tgz",
- "integrity": "sha512-FI+pHEn7Wc4NqKXMXFM+VAYKEj/mRIcW4h24YVwVtyjI+EqGrLc2Hx/Ny0lrZ21cBWU2goLy36eqMcNj3AQJig==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "escalade": "^3.1.1",
- "picocolors": "^1.0.0",
- "postcss": "^8.4.21",
- "strip-json-comments": "^3.1.1"
- },
- "bin": {
- "rtlcss": "bin/rtlcss.js"
- },
- "engines": {
- "node": ">=12.0.0"
- }
- },
- "node_modules/run-con": {
- "version": "1.2.12",
- "resolved": "https://registry.npmjs.org/run-con/-/run-con-1.2.12.tgz",
- "integrity": "sha512-5257ILMYIF4RztL9uoZ7V9Q97zHtNHn5bN3NobeAnzB1P3ASLgg8qocM2u+R18ttp+VEM78N2LK8XcNVtnSRrg==",
- "dev": true,
- "license": "(BSD-2-Clause OR MIT OR Apache-2.0)",
- "dependencies": {
- "deep-extend": "^0.6.0",
- "ini": "~3.0.0",
- "minimist": "^1.2.8",
- "strip-json-comments": "~3.1.1"
- },
- "bin": {
- "run-con": "cli.js"
- }
- },
- "node_modules/run-con/node_modules/ini": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/ini/-/ini-3.0.1.tgz",
- "integrity": "sha512-it4HyVAUTKBc6m8e1iXWvXSTdndF7HbdN713+kvLrymxTaU4AUBWrJ4vEooP+V7fexnVD3LKcBshjGGPefSMUQ==",
- "dev": true,
- "license": "ISC",
- "engines": {
- "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
+ "node": "6.* || >= 7.*"
}
},
"node_modules/run-parallel": {
@@ -18208,25 +16535,35 @@
}
},
"node_modules/rxjs": {
- "version": "7.8.1",
- "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz",
- "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==",
+ "version": "6.6.7",
+ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz",
+ "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
- "tslib": "^2.1.0"
+ "tslib": "^1.9.0"
+ },
+ "engines": {
+ "npm": ">=2.0.0"
}
},
+ "node_modules/rxjs/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,
+ "license": "0BSD"
+ },
"node_modules/safe-array-concat": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz",
- "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==",
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.4.tgz",
+ "integrity": "sha512-wtZlHyOje6OZTGqAoaDKxFkgRtkF9CnHAVnCHKfuj200wAgL+bSJhdsCD2l0Qx/2ekEXjPWcyKkfGb5CPboslg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "call-bind": "^1.0.8",
- "call-bound": "^1.0.2",
- "get-intrinsic": "^1.2.6",
+ "call-bind": "^1.0.9",
+ "call-bound": "^1.0.4",
+ "get-intrinsic": "^1.3.0",
"has-symbols": "^1.1.0",
"isarray": "^2.0.5"
},
@@ -18258,6 +16595,12 @@
],
"license": "MIT"
},
+ "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/safe-push-apply": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz",
@@ -18275,6 +16618,16 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/safe-regex": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
+ "integrity": "sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ret": "~0.1.10"
+ }
+ },
"node_modules/safe-regex-test": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz",
@@ -18300,16 +16653,295 @@
"dev": true,
"license": "MIT"
},
- "node_modules/sass": {
- "version": "1.83.4",
- "resolved": "https://registry.npmjs.org/sass/-/sass-1.83.4.tgz",
- "integrity": "sha512-B1bozCeNQiOgDcLd33e2Cs2U60wZwjUUXzh900ZyQF5qUasvMdDZYbQ566LJu7cqR+sAHlAfO6RMkaID5s6qpA==",
+ "node_modules/sane": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz",
+ "integrity": "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==",
+ "deprecated": "some dependency vulnerabilities fixed, support for node < 10 dropped, and newer ECMAScript syntax/features added",
"dev": true,
"license": "MIT",
- "peer": true,
+ "dependencies": {
+ "@cnakazawa/watch": "^1.0.3",
+ "anymatch": "^2.0.0",
+ "capture-exit": "^2.0.0",
+ "exec-sh": "^0.3.2",
+ "execa": "^1.0.0",
+ "fb-watchman": "^2.0.0",
+ "micromatch": "^3.1.4",
+ "minimist": "^1.1.1",
+ "walker": "~1.0.5"
+ },
+ "bin": {
+ "sane": "src/cli.js"
+ },
+ "engines": {
+ "node": "6.* || 8.* || >= 10.*"
+ }
+ },
+ "node_modules/sane/node_modules/anymatch": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz",
+ "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "micromatch": "^3.1.4",
+ "normalize-path": "^2.1.1"
+ }
+ },
+ "node_modules/sane/node_modules/braces": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
+ "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "arr-flatten": "^1.1.0",
+ "array-unique": "^0.3.2",
+ "extend-shallow": "^2.0.1",
+ "fill-range": "^4.0.0",
+ "isobject": "^3.0.1",
+ "repeat-element": "^1.1.2",
+ "snapdragon": "^0.8.1",
+ "snapdragon-node": "^2.0.1",
+ "split-string": "^3.0.2",
+ "to-regex": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/sane/node_modules/braces/node_modules/extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-extendable": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/sane/node_modules/cross-spawn": {
+ "version": "6.0.6",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.6.tgz",
+ "integrity": "sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==",
+ "dev": true,
+ "license": "MIT",
+ "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/sane/node_modules/execa": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz",
+ "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "cross-spawn": "^6.0.0",
+ "get-stream": "^4.0.0",
+ "is-stream": "^1.1.0",
+ "npm-run-path": "^2.0.0",
+ "p-finally": "^1.0.0",
+ "signal-exit": "^3.0.0",
+ "strip-eof": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/sane/node_modules/fill-range": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
+ "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "extend-shallow": "^2.0.1",
+ "is-number": "^3.0.0",
+ "repeat-string": "^1.6.1",
+ "to-regex-range": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/sane/node_modules/fill-range/node_modules/extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-extendable": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/sane/node_modules/get-stream": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
+ "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "pump": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/sane/node_modules/is-number": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+ "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "kind-of": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/sane/node_modules/is-number/node_modules/kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-buffer": "^1.1.5"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/sane/node_modules/is-stream": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
+ "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/sane/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==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/sane/node_modules/micromatch": {
+ "version": "3.1.10",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "braces": "^2.3.1",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "extglob": "^2.0.4",
+ "fragment-cache": "^0.2.1",
+ "kind-of": "^6.0.2",
+ "nanomatch": "^1.2.9",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/sane/node_modules/normalize-path": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
+ "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "remove-trailing-separator": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/sane/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,
+ "license": "MIT",
+ "dependencies": {
+ "path-key": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/sane/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,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/sane/node_modules/semver": {
+ "version": "5.7.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
+ "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
+ "dev": true,
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver"
+ }
+ },
+ "node_modules/sane/node_modules/to-regex-range": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
+ "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-number": "^3.0.0",
+ "repeat-string": "^1.6.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/sass": {
+ "version": "1.99.0",
+ "resolved": "https://registry.npmjs.org/sass/-/sass-1.99.0.tgz",
+ "integrity": "sha512-kgW13M54DUB7IsIRM5LvJkNlpH+WhMpooUcaWGFARkF1Tc82v9mIWkCbCYf+MBvpIUBSeSOTilpZjEPr2VYE6Q==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
"chokidar": "^4.0.0",
- "immutable": "^5.0.2",
+ "immutable": "^5.1.5",
"source-map-js": ">=0.6.2 <2.0.0"
},
"bin": {
@@ -18323,30 +16955,31 @@
}
},
"node_modules/sass-loader": {
- "version": "16.0.4",
- "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-16.0.4.tgz",
- "integrity": "sha512-LavLbgbBGUt3wCiYzhuLLu65+fWXaXLmq7YxivLhEqmiupCFZ5sKUAipK3do6V80YSU0jvSxNhEdT13IXNr3rg==",
+ "version": "12.6.0",
+ "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-12.6.0.tgz",
+ "integrity": "sha512-oLTaH0YCtX4cfnJZxKSLAyglED0naiYfNG1iXfU5w1LNZ+ukoA5DtyDIN5zmKVZwYNJP4KRc5Y3hkWga+7tYfA==",
"dev": true,
"license": "MIT",
"dependencies": {
+ "klona": "^2.0.4",
"neo-async": "^2.6.2"
},
"engines": {
- "node": ">= 18.12.0"
+ "node": ">= 12.13.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/webpack"
},
"peerDependencies": {
- "@rspack/core": "0.x || 1.x",
- "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0",
+ "fibers": ">= 3.1.0",
+ "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0",
"sass": "^1.3.0",
"sass-embedded": "*",
"webpack": "^5.0.0"
},
"peerDependenciesMeta": {
- "@rspack/core": {
+ "fibers": {
"optional": true
},
"node-sass": {
@@ -18357,39 +16990,44 @@
},
"sass-embedded": {
"optional": true
- },
- "webpack": {
- "optional": true
}
}
},
+ "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,
+ "license": "ISC"
+ },
"node_modules/saxes": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz",
- "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==",
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz",
+ "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==",
"dev": true,
"license": "ISC",
"dependencies": {
"xmlchars": "^2.2.0"
},
"engines": {
- "node": ">=v12.22.7"
+ "node": ">=10"
}
},
"node_modules/scheduler": {
- "version": "0.23.2",
- "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz",
- "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==",
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz",
+ "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "loose-envify": "^1.1.0"
+ "loose-envify": "^1.1.0",
+ "object-assign": "^4.1.1"
}
},
"node_modules/schema-utils": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.0.tgz",
- "integrity": "sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g==",
+ "version": "4.3.3",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.3.tgz",
+ "integrity": "sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -18407,12 +17045,11 @@
}
},
"node_modules/schema-utils/node_modules/ajv": {
- "version": "8.17.1",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz",
- "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
+ "version": "8.20.0",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.20.0.tgz",
+ "integrity": "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"fast-deep-equal": "^3.1.3",
"fast-uri": "^3.0.1",
@@ -18444,27 +17081,6 @@
"dev": true,
"license": "MIT"
},
- "node_modules/select-hose": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz",
- "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/selfsigned": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz",
- "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/node-forge": "^1.3.0",
- "node-forge": "^1"
- },
- "engines": {
- "node": ">=10"
- }
- },
"node_modules/semver": {
"version": "6.3.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
@@ -18475,71 +17091,6 @@
"semver": "bin/semver.js"
}
},
- "node_modules/send": {
- "version": "0.19.0",
- "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz",
- "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "debug": "2.6.9",
- "depd": "2.0.0",
- "destroy": "1.2.0",
- "encodeurl": "~1.0.2",
- "escape-html": "~1.0.3",
- "etag": "~1.8.1",
- "fresh": "0.5.2",
- "http-errors": "2.0.0",
- "mime": "1.6.0",
- "ms": "2.1.3",
- "on-finished": "2.4.1",
- "range-parser": "~1.2.1",
- "statuses": "2.0.1"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/send/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,
- "license": "MIT",
- "dependencies": {
- "ms": "2.0.0"
- }
- },
- "node_modules/send/node_modules/debug/node_modules/ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/send/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,
- "license": "MIT",
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/send/node_modules/mime": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
- "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
- "dev": true,
- "license": "MIT",
- "bin": {
- "mime": "cli.js"
- },
- "engines": {
- "node": ">=4"
- }
- },
"node_modules/sentence-case": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/sentence-case/-/sentence-case-3.0.4.tgz",
@@ -18552,118 +17103,13 @@
"upper-case-first": "^2.0.2"
}
},
- "node_modules/serialize-javascript": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz",
- "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==",
- "dev": true,
- "license": "BSD-3-Clause",
- "dependencies": {
- "randombytes": "^2.1.0"
- }
- },
- "node_modules/serve-index": {
- "version": "1.9.1",
- "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz",
- "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "accepts": "~1.3.4",
- "batch": "0.6.1",
- "debug": "2.6.9",
- "escape-html": "~1.0.3",
- "http-errors": "~1.6.2",
- "mime-types": "~2.1.17",
- "parseurl": "~1.3.2"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/serve-index/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,
- "license": "MIT",
- "dependencies": {
- "ms": "2.0.0"
- }
- },
- "node_modules/serve-index/node_modules/depd": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
- "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/serve-index/node_modules/http-errors": {
- "version": "1.6.3",
- "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz",
- "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "depd": "~1.1.2",
- "inherits": "2.0.3",
- "setprototypeof": "1.1.0",
- "statuses": ">= 1.4.0 < 2"
- },
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/serve-index/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,
- "license": "ISC"
- },
- "node_modules/serve-index/node_modules/ms": {
+ "node_modules/set-blocking": {
"version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/serve-index/node_modules/setprototypeof": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz",
- "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==",
+ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
+ "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==",
"dev": true,
"license": "ISC"
},
- "node_modules/serve-index/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,
- "license": "MIT",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/serve-static": {
- "version": "1.16.2",
- "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz",
- "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "encodeurl": "~2.0.0",
- "escape-html": "~1.0.3",
- "parseurl": "~1.3.3",
- "send": "0.19.0"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
"node_modules/set-function-length": {
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz",
@@ -18713,12 +17159,47 @@
"node": ">= 0.4"
}
},
- "node_modules/setprototypeof": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
- "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==",
+ "node_modules/set-value": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz",
+ "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==",
"dev": true,
- "license": "ISC"
+ "license": "MIT",
+ "dependencies": {
+ "extend-shallow": "^2.0.1",
+ "is-extendable": "^0.1.1",
+ "is-plain-object": "^2.0.3",
+ "split-string": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/set-value/node_modules/extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-extendable": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/set-value/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==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "isobject": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
},
"node_modules/shallow-clone": {
"version": "0.1.2",
@@ -18760,47 +17241,35 @@
}
},
"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==",
+ "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,
"license": "MIT",
"dependencies": {
- "shebang-regex": "^3.0.0"
+ "shebang-regex": "^1.0.0"
},
"engines": {
- "node": ">=8"
+ "node": ">=0.10.0"
}
},
"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==",
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
+ "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==",
"dev": true,
"license": "MIT",
"engines": {
- "node": ">=8"
+ "node": ">=0.10.0"
}
},
- "node_modules/shell-quote": {
- "version": "1.8.2",
- "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.2.tgz",
- "integrity": "sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA==",
+ "node_modules/shellwords": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz",
+ "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==",
"dev": true,
"license": "MIT",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/shimmer": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/shimmer/-/shimmer-1.2.1.tgz",
- "integrity": "sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw==",
- "dev": true,
- "license": "BSD-2-Clause"
+ "optional": true
},
"node_modules/side-channel": {
"version": "1.1.0",
@@ -18823,14 +17292,14 @@
}
},
"node_modules/side-channel-list": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz",
- "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==",
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.1.tgz",
+ "integrity": "sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==",
"dev": true,
"license": "MIT",
"dependencies": {
"es-errors": "^1.3.0",
- "object-inspect": "^1.13.3"
+ "object-inspect": "^1.13.4"
},
"engines": {
"node": ">= 0.4"
@@ -18935,17 +17404,6 @@
"url": "https://github.com/chalk/slice-ansi?sponsor=1"
}
},
- "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,
- "license": "MIT",
- "engines": {
- "node": ">= 6.0.0",
- "npm": ">= 3.0.0"
- }
- },
"node_modules/snake-case": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz",
@@ -18957,56 +17415,142 @@
"tslib": "^2.0.3"
}
},
- "node_modules/sockjs": {
- "version": "0.3.24",
- "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz",
- "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==",
+ "node_modules/snapdragon": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
+ "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "faye-websocket": "^0.11.3",
- "uuid": "^8.3.2",
- "websocket-driver": "^0.7.4"
- }
- },
- "node_modules/socks": {
- "version": "2.8.7",
- "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.7.tgz",
- "integrity": "sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ip-address": "^10.0.1",
- "smart-buffer": "^4.2.0"
+ "base": "^0.11.1",
+ "debug": "^2.2.0",
+ "define-property": "^0.2.5",
+ "extend-shallow": "^2.0.1",
+ "map-cache": "^0.2.2",
+ "source-map": "^0.5.6",
+ "source-map-resolve": "^0.5.0",
+ "use": "^3.1.0"
},
"engines": {
- "node": ">= 10.0.0",
- "npm": ">= 3.0.0"
+ "node": ">=0.10.0"
}
},
- "node_modules/socks-proxy-agent": {
- "version": "8.0.5",
- "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz",
- "integrity": "sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==",
+ "node_modules/snapdragon-node": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
+ "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "agent-base": "^7.1.2",
- "debug": "^4.3.4",
- "socks": "^2.8.3"
+ "define-property": "^1.0.0",
+ "isobject": "^3.0.0",
+ "snapdragon-util": "^3.0.1"
},
"engines": {
- "node": ">= 14"
+ "node": ">=0.10.0"
}
},
- "node_modules/source-map": {
- "version": "0.7.4",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz",
- "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==",
+ "node_modules/snapdragon-node/node_modules/define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-descriptor": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/snapdragon-util": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
+ "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "kind-of": "^3.2.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/snapdragon/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,
+ "license": "MIT",
+ "dependencies": {
+ "ms": "2.0.0"
+ }
+ },
+ "node_modules/snapdragon/node_modules/define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-descriptor": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/snapdragon/node_modules/extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-extendable": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/snapdragon/node_modules/is-descriptor": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz",
+ "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-accessor-descriptor": "^1.0.1",
+ "is-data-descriptor": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/snapdragon/node_modules/ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/snapdragon/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,
"license": "BSD-3-Clause",
"engines": {
- "node": ">= 8"
+ "node": ">=0.10.0"
+ }
+ },
+ "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==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=0.10.0"
}
},
"node_modules/source-map-js": {
@@ -19041,10 +17585,25 @@
"webpack": "^5.0.0"
}
},
+ "node_modules/source-map-resolve": {
+ "version": "0.5.3",
+ "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz",
+ "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==",
+ "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "atob": "^2.1.2",
+ "decode-uri-component": "^0.2.0",
+ "resolve-url": "^0.2.1",
+ "source-map-url": "^0.4.0",
+ "urix": "^0.1.0"
+ }
+ },
"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==",
+ "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,
"license": "MIT",
"dependencies": {
@@ -19052,41 +17611,25 @@
"source-map": "^0.6.0"
}
},
- "node_modules/source-map-support/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==",
+ "node_modules/source-map-url": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz",
+ "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==",
+ "deprecated": "See https://github.com/lydell/source-map-url#deprecated",
"dev": true,
- "license": "BSD-3-Clause",
- "engines": {
- "node": ">=0.10.0"
- }
+ "license": "MIT"
},
"node_modules/spawnd": {
- "version": "10.1.4",
- "resolved": "https://registry.npmjs.org/spawnd/-/spawnd-10.1.4.tgz",
- "integrity": "sha512-drqHc0mKJmtMsiGMOCwzlc5eZ0RPtRvT7tQAluW2A0qUc0G7TQ8KLcn3E6K5qzkLkH2UkS3nYQiVGULvvsD9dw==",
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/spawnd/-/spawnd-5.0.0.tgz",
+ "integrity": "sha512-28+AJr82moMVWolQvlAIv3JcYDkjkFTEmfDc503wxrF5l2rQ3dFz6DpbXp3kD4zmgGGldfM4xM4v1sFj/ZaIOA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "signal-exit": "^4.1.0",
- "tree-kill": "^1.2.2"
- },
- "engines": {
- "node": ">=16"
- }
- },
- "node_modules/spawnd/node_modules/signal-exit": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
- "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
- "dev": true,
- "license": "ISC",
- "engines": {
- "node": ">=14"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
+ "exit": "^0.1.2",
+ "signal-exit": "^3.0.3",
+ "tree-kill": "^1.2.2",
+ "wait-port": "^0.2.9"
}
},
"node_modules/spdx-correct": {
@@ -19100,7 +17643,14 @@
"spdx-license-ids": "^3.0.0"
}
},
- "node_modules/spdx-correct/node_modules/spdx-expression-parse": {
+ "node_modules/spdx-exceptions": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz",
+ "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==",
+ "dev": true,
+ "license": "CC-BY-3.0"
+ },
+ "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==",
@@ -19111,76 +17661,34 @@
"spdx-license-ids": "^3.0.0"
}
},
- "node_modules/spdx-exceptions": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz",
- "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==",
- "dev": true,
- "license": "CC-BY-3.0"
- },
- "node_modules/spdx-expression-parse": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-4.0.0.tgz",
- "integrity": "sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "spdx-exceptions": "^2.1.0",
- "spdx-license-ids": "^3.0.0"
- }
- },
"node_modules/spdx-license-ids": {
- "version": "3.0.22",
- "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.22.tgz",
- "integrity": "sha512-4PRT4nh1EImPbt2jASOKHX7PB7I+e4IWNLvkKFDxNhJlfjbYlleYQh285Z/3mPTHSAK/AvdMmw5BNNuYH8ShgQ==",
+ "version": "3.0.23",
+ "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.23.tgz",
+ "integrity": "sha512-CWLcCCH7VLu13TgOH+r8p1O/Znwhqv/dbb6lqWy67G+pT1kHmeD/+V36AVb/vq8QMIQwVShJ6Ssl5FPh0fuSdw==",
"dev": true,
"license": "CC0-1.0"
},
- "node_modules/spdy": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz",
- "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==",
+ "node_modules/specificity": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/specificity/-/specificity-0.4.1.tgz",
+ "integrity": "sha512-1klA3Gi5PD1Wv9Q0wUoOQN1IWAuPu0D1U03ThXTr0cJ20+/iq2tHSDnK7Kk/0LXJ1ztUB2/1Os0wKmfyNgUQfg==",
"dev": true,
"license": "MIT",
- "dependencies": {
- "debug": "^4.1.0",
- "handle-thing": "^2.0.0",
- "http-deceiver": "^1.2.7",
- "select-hose": "^2.0.0",
- "spdy-transport": "^3.0.0"
- },
- "engines": {
- "node": ">=6.0.0"
+ "bin": {
+ "specificity": "bin/specificity"
}
},
- "node_modules/spdy-transport": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz",
- "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==",
+ "node_modules/split-string": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
+ "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "debug": "^4.1.0",
- "detect-node": "^2.0.4",
- "hpack.js": "^2.1.6",
- "obuf": "^1.1.2",
- "readable-stream": "^3.0.6",
- "wbuf": "^1.7.3"
- }
- },
- "node_modules/speedline-core": {
- "version": "1.4.3",
- "resolved": "https://registry.npmjs.org/speedline-core/-/speedline-core-1.4.3.tgz",
- "integrity": "sha512-DI7/OuAUD+GMpR6dmu8lliO2Wg5zfeh+/xsdyJZCzd8o5JgFUjCeLsBDuZjIQJdwXS3J0L/uZYrELKYqx+PXog==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/node": "*",
- "image-ssim": "^0.2.0",
- "jpeg-js": "^0.4.1"
+ "extend-shallow": "^3.0.0"
},
"engines": {
- "node": ">=8.0"
+ "node": ">=0.10.0"
}
},
"node_modules/sprintf-js": {
@@ -19190,15 +17698,13 @@
"dev": true,
"license": "BSD-3-Clause"
},
- "node_modules/stable-hash-x": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/stable-hash-x/-/stable-hash-x-0.2.0.tgz",
- "integrity": "sha512-o3yWv49B/o4QZk5ZcsALc6t0+eCelPc44zZsLtCQnZPDwFpDYSWcDnrv2TtMmMbQ7uKo3J0HTURCqckw23czNQ==",
+ "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,
- "license": "MIT",
- "engines": {
- "node": ">=12.0.0"
- }
+ "license": "MIT"
},
"node_modules/stack-utils": {
"version": "2.0.6",
@@ -19223,21 +17729,45 @@
"node": ">=8"
}
},
- "node_modules/stackframe": {
- "version": "1.3.4",
- "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz",
- "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/statuses": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
- "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
+ "node_modules/static-extend": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
+ "integrity": "sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==",
"dev": true,
"license": "MIT",
+ "dependencies": {
+ "define-property": "^0.2.5",
+ "object-copy": "^0.1.0"
+ },
"engines": {
- "node": ">= 0.8"
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/static-extend/node_modules/define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-descriptor": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/static-extend/node_modules/is-descriptor": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz",
+ "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-accessor-descriptor": "^1.0.1",
+ "is-data-descriptor": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
}
},
"node_modules/stop-iteration-iterator": {
@@ -19254,18 +17784,6 @@
"node": ">= 0.4"
}
},
- "node_modules/streamx": {
- "version": "2.23.0",
- "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.23.0.tgz",
- "integrity": "sha512-kn+e44esVfn2Fa/O0CPFcex27fjIL6MkVae0Mm6q+E6f0hWv578YCERbv+4m02cjxvDsPKLnmxral/rR6lBMAg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "events-universal": "^1.0.0",
- "fast-fifo": "^1.3.2",
- "text-decoder": "^1.1.0"
- }
- },
"node_modules/string_decoder": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
@@ -19290,6 +17808,12 @@
"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",
@@ -19448,6 +17972,16 @@
"node": ">=8"
}
},
+ "node_modules/strip-eof": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
+ "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/strip-final-newline": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
@@ -19507,23 +18041,6 @@
"node": ">=0.8.0"
}
},
- "node_modules/stubborn-fs": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/stubborn-fs/-/stubborn-fs-2.0.0.tgz",
- "integrity": "sha512-Y0AvSwDw8y+nlSNFXMm2g6L51rBGdAQT20J3YSOqxC53Lo3bjWRtr2BKcfYoAf352WYpsZSTURrA0tqhfgudPA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "stubborn-utils": "^1.0.1"
- }
- },
- "node_modules/stubborn-utils": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/stubborn-utils/-/stubborn-utils-1.0.2.tgz",
- "integrity": "sha512-zOh9jPYI+xrNOyisSelgym4tolKTJCQd5GBhK0+0xJvcYDcwlOoxF/rnFKQ2KRZknXSG9jWAp66fwP6AxN9STg==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/style-search": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/style-search/-/style-search-0.1.0.tgz",
@@ -19532,232 +18049,166 @@
"license": "ISC"
},
"node_modules/stylehacks": {
- "version": "6.1.1",
- "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-6.1.1.tgz",
- "integrity": "sha512-gSTTEQ670cJNoaeIp9KX6lZmm8LJ3jPB5yJmX8Zq/wQxOsAFXV3qjWzHas3YYk1qesuVIyYWWUpZ0vSE/dTSGg==",
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.1.tgz",
+ "integrity": "sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "browserslist": "^4.23.0",
- "postcss-selector-parser": "^6.0.16"
+ "browserslist": "^4.21.4",
+ "postcss-selector-parser": "^6.0.4"
},
"engines": {
- "node": "^14 || ^16 || >=18.0"
+ "node": "^10 || ^12 || >=14.0"
},
"peerDependencies": {
- "postcss": "^8.4.31"
+ "postcss": "^8.2.15"
}
},
"node_modules/stylelint": {
- "version": "16.26.1",
- "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.26.1.tgz",
- "integrity": "sha512-v20V59/crfc8sVTAtge0mdafI3AdnzQ2KsWe6v523L4OA1bJO02S7MO2oyXDCS6iWb9ckIPnqAFVItqSBQr7jw==",
+ "version": "13.13.1",
+ "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-13.13.1.tgz",
+ "integrity": "sha512-Mv+BQr5XTUrKqAXmpqm6Ddli6Ief+AiPZkRsIrAoUKFuq/ElkUh9ZMYxXD0iQNZ5ADghZKLOWz1h7hTClB7zgQ==",
"dev": true,
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/stylelint"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/stylelint"
- }
- ],
"license": "MIT",
- "peer": true,
"dependencies": {
- "@csstools/css-parser-algorithms": "^3.0.5",
- "@csstools/css-syntax-patches-for-csstree": "^1.0.19",
- "@csstools/css-tokenizer": "^3.0.4",
- "@csstools/media-query-list-parser": "^4.0.3",
- "@csstools/selector-specificity": "^5.0.0",
- "@dual-bundle/import-meta-resolve": "^4.2.1",
+ "@stylelint/postcss-css-in-js": "^0.37.2",
+ "@stylelint/postcss-markdown": "^0.36.2",
+ "autoprefixer": "^9.8.6",
"balanced-match": "^2.0.0",
- "colord": "^2.9.3",
- "cosmiconfig": "^9.0.0",
- "css-functions-list": "^3.2.3",
- "css-tree": "^3.1.0",
- "debug": "^4.4.3",
- "fast-glob": "^3.3.3",
- "fastest-levenshtein": "^1.0.16",
- "file-entry-cache": "^11.1.1",
+ "chalk": "^4.1.1",
+ "cosmiconfig": "^7.0.0",
+ "debug": "^4.3.1",
+ "execall": "^2.0.0",
+ "fast-glob": "^3.2.5",
+ "fastest-levenshtein": "^1.0.12",
+ "file-entry-cache": "^6.0.1",
+ "get-stdin": "^8.0.0",
"global-modules": "^2.0.0",
- "globby": "^11.1.0",
+ "globby": "^11.0.3",
"globjoin": "^0.1.4",
- "html-tags": "^3.3.1",
- "ignore": "^7.0.5",
+ "html-tags": "^3.1.0",
+ "ignore": "^5.1.8",
+ "import-lazy": "^4.0.0",
"imurmurhash": "^0.1.4",
- "is-plain-object": "^5.0.0",
- "known-css-properties": "^0.37.0",
+ "known-css-properties": "^0.21.0",
+ "lodash": "^4.17.21",
+ "log-symbols": "^4.1.0",
"mathml-tag-names": "^2.1.3",
- "meow": "^13.2.0",
- "micromatch": "^4.0.8",
- "normalize-path": "^3.0.0",
- "picocolors": "^1.1.1",
- "postcss": "^8.5.6",
- "postcss-resolve-nested-selector": "^0.1.6",
- "postcss-safe-parser": "^7.0.1",
- "postcss-selector-parser": "^7.1.0",
- "postcss-value-parser": "^4.2.0",
+ "meow": "^9.0.0",
+ "micromatch": "^4.0.4",
+ "normalize-selector": "^0.2.0",
+ "postcss": "^7.0.35",
+ "postcss-html": "^0.36.0",
+ "postcss-less": "^3.1.4",
+ "postcss-media-query-parser": "^0.2.3",
+ "postcss-resolve-nested-selector": "^0.1.1",
+ "postcss-safe-parser": "^4.0.2",
+ "postcss-sass": "^0.4.4",
+ "postcss-scss": "^2.1.1",
+ "postcss-selector-parser": "^6.0.5",
+ "postcss-syntax": "^0.36.2",
+ "postcss-value-parser": "^4.1.0",
"resolve-from": "^5.0.0",
- "string-width": "^4.2.3",
- "supports-hyperlinks": "^3.2.0",
+ "slash": "^3.0.0",
+ "specificity": "^0.4.1",
+ "string-width": "^4.2.2",
+ "strip-ansi": "^6.0.0",
+ "style-search": "^0.1.0",
+ "sugarss": "^2.0.0",
"svg-tags": "^1.0.0",
- "table": "^6.9.0",
- "write-file-atomic": "^5.0.1"
+ "table": "^6.6.0",
+ "v8-compile-cache": "^2.3.0",
+ "write-file-atomic": "^3.0.3"
},
"bin": {
- "stylelint": "bin/stylelint.mjs"
+ "stylelint": "bin/stylelint.js"
},
"engines": {
- "node": ">=18.12.0"
+ "node": ">=10.13.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/stylelint"
}
},
"node_modules/stylelint-config-recommended": {
- "version": "14.0.1",
- "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-14.0.1.tgz",
- "integrity": "sha512-bLvc1WOz/14aPImu/cufKAZYfXs/A/owZfSMZ4N+16WGXLoX5lOir53M6odBxvhgmgdxCVnNySJmZKx73T93cg==",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-3.0.0.tgz",
+ "integrity": "sha512-F6yTRuc06xr1h5Qw/ykb2LuFynJ2IxkKfCMf+1xqPffkxh0S09Zc902XCffcsw/XMFq/OzQ1w54fLIDtmRNHnQ==",
"dev": true,
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/stylelint"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/stylelint"
- }
- ],
"license": "MIT",
- "engines": {
- "node": ">=18.12.0"
- },
"peerDependencies": {
- "stylelint": "^16.1.0"
+ "stylelint": ">=10.1.0"
}
},
"node_modules/stylelint-config-recommended-scss": {
- "version": "14.1.0",
- "resolved": "https://registry.npmjs.org/stylelint-config-recommended-scss/-/stylelint-config-recommended-scss-14.1.0.tgz",
- "integrity": "sha512-bhaMhh1u5dQqSsf6ri2GVWWQW5iUjBYgcHkh7SgDDn92ijoItC/cfO/W+fpXshgTQWhwFkP1rVcewcv4jaftRg==",
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/stylelint-config-recommended-scss/-/stylelint-config-recommended-scss-4.3.0.tgz",
+ "integrity": "sha512-/noGjXlO8pJTr/Z3qGMoaRFK8n1BFfOqmAbX1RjTIcl4Yalr+LUb1zb9iQ7pRx1GsEBXOAm4g2z5/jou/pfMPg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "postcss-scss": "^4.0.9",
- "stylelint-config-recommended": "^14.0.1",
- "stylelint-scss": "^6.4.0"
- },
- "engines": {
- "node": ">=18.12.0"
+ "stylelint-config-recommended": "^5.0.0"
},
"peerDependencies": {
- "postcss": "^8.3.3",
- "stylelint": "^16.6.1"
- },
- "peerDependenciesMeta": {
- "postcss": {
- "optional": true
- }
+ "stylelint": "^10.1.0 || ^11.0.0 || ^12.0.0 || ^13.0.0",
+ "stylelint-scss": "^3.0.0"
+ }
+ },
+ "node_modules/stylelint-config-recommended-scss/node_modules/stylelint-config-recommended": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-5.0.0.tgz",
+ "integrity": "sha512-c8aubuARSu5A3vEHLBeOSJt1udOdS+1iue7BmJDTSXoCBmfEQmmWX+59vYIj3NQdJBY6a/QRv1ozVFpaB9jaqA==",
+ "dev": true,
+ "license": "MIT",
+ "peerDependencies": {
+ "stylelint": "^13.13.0"
}
},
"node_modules/stylelint-scss": {
- "version": "6.13.0",
- "resolved": "https://registry.npmjs.org/stylelint-scss/-/stylelint-scss-6.13.0.tgz",
- "integrity": "sha512-kZPwFUJkfup2gP1enlrS2h9U5+T5wFoqzJ1n/56AlpwSj28kmFe7ww/QFydvPsg5gLjWchAwWWBLtterynZrOw==",
+ "version": "3.21.0",
+ "resolved": "https://registry.npmjs.org/stylelint-scss/-/stylelint-scss-3.21.0.tgz",
+ "integrity": "sha512-CMI2wSHL+XVlNExpauy/+DbUcB/oUZLARDtMIXkpV/5yd8nthzylYd1cdHeDMJVBXeYHldsnebUX6MoV5zPW4A==",
"dev": true,
"license": "MIT",
"dependencies": {
- "css-tree": "^3.0.1",
- "is-plain-object": "^5.0.0",
- "known-css-properties": "^0.37.0",
- "mdn-data": "^2.25.0",
+ "lodash": "^4.17.15",
"postcss-media-query-parser": "^0.2.3",
- "postcss-resolve-nested-selector": "^0.1.6",
- "postcss-selector-parser": "^7.1.1",
- "postcss-value-parser": "^4.2.0"
+ "postcss-resolve-nested-selector": "^0.1.1",
+ "postcss-selector-parser": "^6.0.2",
+ "postcss-value-parser": "^4.1.0"
},
"engines": {
- "node": ">=18.12.0"
+ "node": ">=8"
},
"peerDependencies": {
- "stylelint": "^16.8.2"
+ "stylelint": "^8.0.0 || ^9.0.0 || ^10.0.0 || ^11.0.0 || ^12.0.0 || ^13.0.0"
}
},
- "node_modules/stylelint-scss/node_modules/mdn-data": {
- "version": "2.25.0",
- "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.25.0.tgz",
- "integrity": "sha512-T2LPsjgUE/tgMmRXREVmwsux89DwWfNjiynOeXuLd2mX6jphGQ2YE3Ukz7LQ2VOFKiVZU/Ee1GqzHiipZCjymw==",
- "dev": true,
- "license": "CC0-1.0"
- },
- "node_modules/stylelint-scss/node_modules/postcss-selector-parser": {
- "version": "7.1.1",
- "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz",
- "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==",
+ "node_modules/stylelint/node_modules/autoprefixer": {
+ "version": "9.8.8",
+ "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.8.tgz",
+ "integrity": "sha512-eM9d/swFopRt5gdJ7jrpCwgvEMIayITpojhkkSMRsFHYuH5bkSQ4p/9qTEHtmNudUZh22Tehu7I6CxAW0IXTKA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "cssesc": "^3.0.0",
- "util-deprecate": "^1.0.2"
+ "browserslist": "^4.12.0",
+ "caniuse-lite": "^1.0.30001109",
+ "normalize-range": "^0.1.2",
+ "num2fraction": "^1.2.2",
+ "picocolors": "^0.2.1",
+ "postcss": "^7.0.32",
+ "postcss-value-parser": "^4.1.0"
},
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/stylelint/node_modules/@csstools/media-query-list-parser": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-4.0.3.tgz",
- "integrity": "sha512-HAYH7d3TLRHDOUQK4mZKf9k9Ph/m8Akstg66ywKR4SFAigjs3yBiUeZtFxywiTm5moZMAp/5W/ZuFnNXXYLuuQ==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/csstools"
- },
- {
- "type": "opencollective",
- "url": "https://opencollective.com/csstools"
- }
- ],
- "license": "MIT",
- "engines": {
- "node": ">=18"
+ "bin": {
+ "autoprefixer": "bin/autoprefixer"
},
- "peerDependencies": {
- "@csstools/css-parser-algorithms": "^3.0.5",
- "@csstools/css-tokenizer": "^3.0.4"
+ "funding": {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/autoprefixer"
}
},
- "node_modules/stylelint/node_modules/@csstools/selector-specificity": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-5.0.0.tgz",
- "integrity": "sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/csstools"
- },
- {
- "type": "opencollective",
- "url": "https://opencollective.com/csstools"
- }
- ],
- "license": "MIT-0",
- "engines": {
- "node": ">=18"
- },
- "peerDependencies": {
- "postcss-selector-parser": "^7.0.0"
- }
- },
- "node_modules/stylelint/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,
- "license": "Python-2.0"
- },
"node_modules/stylelint/node_modules/balanced-match": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz",
@@ -19765,55 +18216,6 @@
"dev": true,
"license": "MIT"
},
- "node_modules/stylelint/node_modules/cosmiconfig": {
- "version": "9.0.0",
- "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz",
- "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "env-paths": "^2.2.1",
- "import-fresh": "^3.3.0",
- "js-yaml": "^4.1.0",
- "parse-json": "^5.2.0"
- },
- "engines": {
- "node": ">=14"
- },
- "funding": {
- "url": "https://github.com/sponsors/d-fischer"
- },
- "peerDependencies": {
- "typescript": ">=4.9.5"
- },
- "peerDependenciesMeta": {
- "typescript": {
- "optional": true
- }
- }
- },
- "node_modules/stylelint/node_modules/file-entry-cache": {
- "version": "11.1.1",
- "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-11.1.1.tgz",
- "integrity": "sha512-TPVFSDE7q91Dlk1xpFLvFllf8r0HyOMOlnWy7Z2HBku5H3KhIeOGInexrIeg2D64DosVB/JXkrrk6N/7Wriq4A==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "flat-cache": "^6.1.19"
- }
- },
- "node_modules/stylelint/node_modules/flat-cache": {
- "version": "6.1.19",
- "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-6.1.19.tgz",
- "integrity": "sha512-l/K33newPTZMTGAnnzaiqSl6NnH7Namh8jBNjrgjprWxGmZUuxx/sJNIRaijOh3n7q7ESbhNZC+pvVZMFdeU4A==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "cacheable": "^2.2.0",
- "flatted": "^3.3.3",
- "hookified": "^1.13.0"
- }
- },
"node_modules/stylelint/node_modules/global-modules": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz",
@@ -19842,29 +18244,6 @@
"node": ">=6"
}
},
- "node_modules/stylelint/node_modules/ignore": {
- "version": "7.0.5",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz",
- "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 4"
- }
- },
- "node_modules/stylelint/node_modules/js-yaml": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz",
- "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "argparse": "^2.0.1"
- },
- "bin": {
- "js-yaml": "bin/js-yaml.js"
- }
- },
"node_modules/stylelint/node_modules/kind-of": {
"version": "6.0.3",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
@@ -19875,72 +18254,64 @@
"node": ">=0.10.0"
}
},
- "node_modules/stylelint/node_modules/meow": {
- "version": "13.2.0",
- "resolved": "https://registry.npmjs.org/meow/-/meow-13.2.0.tgz",
- "integrity": "sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==",
+ "node_modules/stylelint/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,
+ "license": "ISC"
+ },
+ "node_modules/stylelint/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,
"license": "MIT",
+ "dependencies": {
+ "picocolors": "^0.2.1",
+ "source-map": "^0.6.1"
+ },
"engines": {
- "node": ">=18"
+ "node": ">=6.0.0"
},
"funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
}
},
- "node_modules/stylelint/node_modules/postcss-selector-parser": {
- "version": "7.1.1",
- "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz",
- "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==",
+ "node_modules/sugarss": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/sugarss/-/sugarss-2.0.0.tgz",
+ "integrity": "sha512-WfxjozUk0UVA4jm+U1d736AUpzSrNsQcIbyOkoE364GrtWmIrFdk5lksEupgWMD4VaT/0kVx1dobpiDumSgmJQ==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
- "cssesc": "^3.0.0",
- "util-deprecate": "^1.0.2"
- },
- "engines": {
- "node": ">=4"
+ "postcss": "^7.0.2"
}
},
- "node_modules/stylelint/node_modules/signal-exit": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
- "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
+ "node_modules/sugarss/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,
- "license": "ISC",
+ "license": "ISC"
+ },
+ "node_modules/sugarss/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,
+ "license": "MIT",
+ "dependencies": {
+ "picocolors": "^0.2.1",
+ "source-map": "^0.6.1"
+ },
"engines": {
- "node": ">=14"
+ "node": ">=6.0.0"
},
"funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/stylelint/node_modules/which": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
- "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "isexe": "^2.0.0"
- },
- "bin": {
- "which": "bin/which"
- }
- },
- "node_modules/stylelint/node_modules/write-file-atomic": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz",
- "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "imurmurhash": "^0.1.4",
- "signal-exit": "^4.0.1"
- },
- "engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
}
},
"node_modules/supports-color": {
@@ -19957,9 +18328,9 @@
}
},
"node_modules/supports-hyperlinks": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-3.2.0.tgz",
- "integrity": "sha512-zFObLMyZeEwzAoKCyu1B91U79K2t7ApXuQfo8OuxwXLDgcKxuwM+YvcbIhm6QWqz7mHUH1TVytR1PwVVjEuMig==",
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz",
+ "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -19967,10 +18338,7 @@
"supports-color": "^7.0.0"
},
"engines": {
- "node": ">=14.18"
- },
- "funding": {
- "url": "https://github.com/chalk/supports-hyperlinks?sponsor=1"
+ "node": ">=8"
}
},
"node_modules/supports-preserve-symlinks-flag": {
@@ -20000,61 +18368,186 @@
"dev": true
},
"node_modules/svgo": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.3.2.tgz",
- "integrity": "sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw==",
+ "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,
"license": "MIT",
"dependencies": {
- "@trysound/sax": "0.2.0",
- "commander": "^7.2.0",
- "css-select": "^5.1.0",
- "css-tree": "^2.3.1",
- "css-what": "^6.1.0",
- "csso": "^5.0.5",
- "picocolors": "^1.0.0"
+ "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": ">=14.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/svgo"
+ "node": ">=4.0.0"
}
},
- "node_modules/svgo/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,
- "license": "MIT",
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/svgo/node_modules/css-tree": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz",
- "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==",
+ "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,
"license": "MIT",
"dependencies": {
- "mdn-data": "2.0.30",
- "source-map-js": "^1.0.1"
+ "color-convert": "^1.9.0"
},
"engines": {
- "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0"
+ "node": ">=4"
}
},
- "node_modules/svgo/node_modules/mdn-data": {
- "version": "2.0.30",
- "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz",
- "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==",
+ "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,
- "license": "CC0-1.0"
+ "license": "MIT",
+ "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,
+ "license": "MIT",
+ "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,
+ "license": "MIT"
+ },
+ "node_modules/svgo/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,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "boolbase": "^1.0.0",
+ "css-what": "^3.2.1",
+ "domutils": "^1.7.0",
+ "nth-check": "^1.0.2"
+ }
+ },
+ "node_modules/svgo/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,
+ "license": "BSD-2-Clause",
+ "engines": {
+ "node": ">= 6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/fb55"
+ }
+ },
+ "node_modules/svgo/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,
+ "license": "MIT",
+ "dependencies": {
+ "domelementtype": "^2.0.1",
+ "entities": "^2.0.0"
+ }
+ },
+ "node_modules/svgo/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,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "dom-serializer": "0",
+ "domelementtype": "1"
+ }
+ },
+ "node_modules/svgo/node_modules/domutils/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,
+ "license": "BSD-2-Clause"
+ },
+ "node_modules/svgo/node_modules/entities": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz",
+ "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "funding": {
+ "url": "https://github.com/fb55/entities?sponsor=1"
+ }
+ },
+ "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,
+ "license": "MIT",
+ "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,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/svgo/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,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "boolbase": "~1.0.0"
+ }
+ },
+ "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,
+ "license": "MIT",
+ "dependencies": {
+ "has-flag": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
},
"node_modules/symbol-tree": {
"version": "3.2.4",
@@ -20063,22 +18556,6 @@
"dev": true,
"license": "MIT"
},
- "node_modules/synckit": {
- "version": "0.11.11",
- "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.11.tgz",
- "integrity": "sha512-MeQTA1r0litLUf0Rp/iisCaL8761lKAZHaimlbGK4j0HysC4PLfqygQj9srcs0m2RdtDYnF8UuYyKpbjHYp7Jw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@pkgr/core": "^0.2.9"
- },
- "engines": {
- "node": "^14.18.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/synckit"
- }
- },
"node_modules/table": {
"version": "6.9.0",
"resolved": "https://registry.npmjs.org/table/-/table-6.9.0.tgz",
@@ -20097,9 +18574,9 @@
}
},
"node_modules/table/node_modules/ajv": {
- "version": "8.17.1",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz",
- "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
+ "version": "8.20.0",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.20.0.tgz",
+ "integrity": "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -20120,56 +18597,79 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/tagged-tag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/tagged-tag/-/tagged-tag-1.0.0.tgz",
+ "integrity": "sha512-yEFYrVhod+hdNyx7g5Bnkkb0G6si8HJurOoOEgC8B/O0uXLHlaey/65KRv6cuWBNhBgHKAROVpc7QyYqE5gFng==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=20"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/tapable": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz",
- "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==",
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.3.tgz",
+ "integrity": "sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/webpack"
}
},
"node_modules/tar-fs": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.1.1.tgz",
- "integrity": "sha512-LZA0oaPOc2fVo82Txf3gw+AkEd38szODlptMYejQUhndHMLQ9M059uXR+AfS7DNo0NpINvSqDsvyaCrBVkptWg==",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.0.0.tgz",
+ "integrity": "sha512-vaY0obB6Om/fso8a8vakQBzwholQ7v5+uy+tF3Ozvxv1KNezmVQAiWtcNmMHFSFPqL3dJA8ha6gdtFbfX9mcxA==",
"dev": true,
"license": "MIT",
"dependencies": {
+ "chownr": "^1.1.1",
+ "mkdirp": "^0.5.1",
"pump": "^3.0.0",
- "tar-stream": "^3.1.5"
- },
- "optionalDependencies": {
- "bare-fs": "^4.0.1",
- "bare-path": "^3.0.0"
+ "tar-stream": "^2.0.0"
}
},
"node_modules/tar-stream": {
- "version": "3.1.7",
- "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.7.tgz",
- "integrity": "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==",
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz",
+ "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "b4a": "^1.6.4",
- "fast-fifo": "^1.2.0",
- "streamx": "^2.15.0"
+ "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/b4a": {
- "version": "1.7.3",
- "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.7.3.tgz",
- "integrity": "sha512-5Q2mfq2WfGuFp3uS//0s6baOJLMoVduPYVeNmDYxu5OUA1/cBfvr2RIS7vi62LdNj/urk1hfmj867I3qt6uZ7Q==",
+ "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==",
"dev": true,
- "license": "Apache-2.0",
- "peerDependencies": {
- "react-native-b4a": "*"
+ "license": "MIT",
+ "dependencies": {
+ "ansi-escapes": "^4.2.1",
+ "supports-hyperlinks": "^2.0.0"
},
- "peerDependenciesMeta": {
- "react-native-b4a": {
- "optional": true
- }
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/terser": {
@@ -20192,16 +18692,15 @@
}
},
"node_modules/terser-webpack-plugin": {
- "version": "5.3.11",
- "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.11.tgz",
- "integrity": "sha512-RVCsMfuD0+cTt3EwX8hSl2Ks56EbFHWmhluwcqoPKtBnfjiT6olaq7PRIRfhyU8nnC2MrnDrBLfrD/RGE+cVXQ==",
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.5.0.tgz",
+ "integrity": "sha512-UYhptBwhWvfIjKd/UuFo6D8uq9xpGLDK+z8EDsj/zWhrTaH34cKEbrkMKfV5YWqGBvAYA3tlzZbs2R+qYrbQJA==",
"dev": true,
"license": "MIT",
"dependencies": {
"@jridgewell/trace-mapping": "^0.3.25",
"jest-worker": "^27.4.5",
"schema-utils": "^4.3.0",
- "serialize-javascript": "^6.0.2",
"terser": "^5.31.1"
},
"engines": {
@@ -20264,27 +18763,6 @@
"dev": true,
"license": "MIT"
},
- "node_modules/terser/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==",
- "dev": true,
- "license": "BSD-3-Clause",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "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,
- "license": "MIT",
- "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",
@@ -20300,55 +18778,6 @@
"node": ">=8"
}
},
- "node_modules/test-exclude/node_modules/brace-expansion": {
- "version": "1.1.12",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz",
- "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "node_modules/test-exclude/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,
- "license": "ISC",
- "dependencies": {
- "brace-expansion": "^1.1.7"
- },
- "engines": {
- "node": "*"
- }
- },
- "node_modules/text-decoder": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.3.tgz",
- "integrity": "sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "b4a": "^1.6.4"
- }
- },
- "node_modules/text-decoder/node_modules/b4a": {
- "version": "1.7.3",
- "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.7.3.tgz",
- "integrity": "sha512-5Q2mfq2WfGuFp3uS//0s6baOJLMoVduPYVeNmDYxu5OUA1/cBfvr2RIS7vi62LdNj/urk1hfmj867I3qt6uZ7Q==",
- "dev": true,
- "license": "Apache-2.0",
- "peerDependencies": {
- "react-native-b4a": "*"
- },
- "peerDependenciesMeta": {
- "react-native-b4a": {
- "optional": true
- }
- }
- },
"node_modules/text-table": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
@@ -20356,10 +18785,10 @@
"dev": true,
"license": "MIT"
},
- "node_modules/third-party-web": {
- "version": "0.27.0",
- "resolved": "https://registry.npmjs.org/third-party-web/-/third-party-web-0.27.0.tgz",
- "integrity": "sha512-h0JYX+dO2Zr3abCQpS6/uFjujaOjA1DyDzGQ41+oFn9VW/ARiq9g5ln7qEP9+BTzDpOMyIfsfj4OvfgXAsMUSA==",
+ "node_modules/throat": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz",
+ "integrity": "sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==",
"dev": true,
"license": "MIT"
},
@@ -20370,99 +18799,31 @@
"dev": true,
"license": "MIT"
},
- "node_modules/thunky": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz",
- "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/tinyglobby": {
- "version": "0.2.15",
- "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz",
- "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==",
+ "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,
"license": "MIT",
"dependencies": {
- "fdir": "^6.5.0",
- "picomatch": "^4.0.3"
- },
- "engines": {
- "node": ">=12.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/SuperchupuDev"
+ "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/tinyglobby/node_modules/fdir": {
- "version": "6.5.0",
- "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz",
- "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=12.0.0"
- },
- "peerDependencies": {
- "picomatch": "^3 || ^4"
- },
- "peerDependenciesMeta": {
- "picomatch": {
- "optional": true
- }
- }
- },
- "node_modules/tinyglobby/node_modules/picomatch": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz",
- "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/jonschlinkert"
- }
- },
- "node_modules/tldts": {
- "version": "6.1.86",
- "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.86.tgz",
- "integrity": "sha512-WMi/OQ2axVTf/ykqCQgXiIct+mSQDFdH2fkwhPwgEwvJ1kSzZRiinb0zF2Xb8u4+OqPChmyI6MEu4EezNJz+FQ==",
+ "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,
"license": "MIT",
"dependencies": {
- "tldts-core": "^6.1.86"
- },
- "bin": {
- "tldts": "bin/cli.js"
+ "ms": "^2.1.1"
}
},
- "node_modules/tldts-core": {
- "version": "7.0.19",
- "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-7.0.19.tgz",
- "integrity": "sha512-lJX2dEWx0SGH4O6p+7FPwYmJ/bu1JbcGJ8RLaG9b7liIgZ85itUVEPbMtWRVrde/0fnDPEPHW10ZsKW3kVsE9A==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/tldts-icann": {
- "version": "7.0.19",
- "resolved": "https://registry.npmjs.org/tldts-icann/-/tldts-icann-7.0.19.tgz",
- "integrity": "sha512-PZgda8E2cXMNa7QlBbiZh3vcS8UaPTDRIBmcGPDlujSMtQLrzjvikeJxzQSqWxn3muaMJ7BsC+aL464Yl2I6cA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "tldts-core": "^7.0.19"
- }
- },
- "node_modules/tldts/node_modules/tldts-core": {
- "version": "6.1.86",
- "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.86.tgz",
- "integrity": "sha512-Je6p7pkk+KMzMv2XXKmAE3McmolOQFdxkKw0R8EYNr7sELW46JqnNeTX8ybPiQgvg1ymCoF8LXs5fzFaZvJPTA==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/tmpl": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz",
@@ -20470,6 +18831,35 @@
"dev": true,
"license": "BSD-3-Clause"
},
+ "node_modules/to-object-path": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
+ "integrity": "sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "kind-of": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/to-regex": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
+ "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "regex-not": "^1.0.2",
+ "safe-regex": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/to-regex-range": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
@@ -20483,16 +18873,6 @@
"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,
- "license": "MIT",
- "engines": {
- "node": ">=0.6"
- }
- },
"node_modules/totalist": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz",
@@ -20504,29 +18884,32 @@
}
},
"node_modules/tough-cookie": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.1.2.tgz",
- "integrity": "sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==",
+ "version": "4.1.4",
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz",
+ "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==",
"dev": true,
"license": "BSD-3-Clause",
"dependencies": {
- "tldts": "^6.1.32"
+ "psl": "^1.1.33",
+ "punycode": "^2.1.1",
+ "universalify": "^0.2.0",
+ "url-parse": "^1.5.3"
},
"engines": {
- "node": ">=16"
+ "node": ">=6"
}
},
"node_modules/tr46": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.1.1.tgz",
- "integrity": "sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw==",
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz",
+ "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "punycode": "^2.3.1"
+ "punycode": "^2.1.1"
},
"engines": {
- "node": ">=18"
+ "node": ">=8"
}
},
"node_modules/tree-kill": {
@@ -20572,17 +18955,15 @@
"node": ">=0.8.0"
}
},
- "node_modules/ts-api-utils": {
- "version": "1.4.3",
- "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.3.tgz",
- "integrity": "sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==",
+ "node_modules/trough": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz",
+ "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==",
"dev": true,
"license": "MIT",
- "engines": {
- "node": ">=16"
- },
- "peerDependencies": {
- "typescript": ">=4.2.0"
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
}
},
"node_modules/tsconfig-paths": {
@@ -20675,31 +19056,13 @@
}
},
"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==",
+ "version": "0.8.1",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
+ "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==",
"dev": true,
"license": "(MIT OR CC0-1.0)",
- "peer": true,
"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,
- "license": "MIT",
- "dependencies": {
- "media-typer": "0.3.0",
- "mime-types": "~2.1.24"
- },
- "engines": {
- "node": ">= 0.6"
+ "node": ">=8"
}
},
"node_modules/typed-array-buffer": {
@@ -20780,17 +19143,20 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/typed-query-selector": {
- "version": "2.12.0",
- "resolved": "https://registry.npmjs.org/typed-query-selector/-/typed-query-selector-2.12.0.tgz",
- "integrity": "sha512-SbklCd1F0EiZOyPiW192rrHZzZ5sBijB6xM+cpmrwDqObvdtunOHHIk9fCGsoK5JVIYXoyEp4iEdE3upFH3PAg==",
+ "node_modules/typedarray-to-buffer": {
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz",
+ "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==",
"dev": true,
- "license": "MIT"
+ "license": "MIT",
+ "dependencies": {
+ "is-typedarray": "^1.0.0"
+ }
},
"node_modules/typescript": {
- "version": "5.7.3",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.3.tgz",
- "integrity": "sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==",
+ "version": "4.9.5",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz",
+ "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==",
"dev": true,
"license": "Apache-2.0",
"peer": true,
@@ -20799,7 +19165,7 @@
"tsserver": "bin/tsserver"
},
"engines": {
- "node": ">=14.17"
+ "node": ">=4.2.0"
}
},
"node_modules/uc.micro": {
@@ -20829,9 +19195,9 @@
}
},
"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==",
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.3.3.tgz",
+ "integrity": "sha512-fUlAF7U9Ah1Q6EieQ4x4zLNejrRvDWUYmxXUpN3uziFYCHapjWFaCAnreY9bGgxzaMCFAPPpYNng57CypwJVhg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -20839,10 +19205,20 @@
"through": "^2.3.8"
}
},
+ "node_modules/undici": {
+ "version": "7.25.0",
+ "resolved": "https://registry.npmjs.org/undici/-/undici-7.25.0.tgz",
+ "integrity": "sha512-xXnp4kTyor2Zq+J1FfPI6Eq3ew5h6Vl0F/8d9XU5zZQf1tX9s2Su1/3PiMmUANFULpmksxkClamIZcaUqryHsQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=20.18.1"
+ }
+ },
"node_modules/undici-types": {
- "version": "6.20.0",
- "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz",
- "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==",
+ "version": "6.21.0",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz",
+ "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==",
"dev": true,
"license": "MIT"
},
@@ -20871,9 +19247,9 @@
}
},
"node_modules/unicode-match-property-value-ecmascript": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.0.tgz",
- "integrity": "sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==",
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.1.tgz",
+ "integrity": "sha512-JQ84qTuMg4nVkx8ga4A16a1epI9H6uTXAknqxkGF/aFfRLw1xC/Bp24HNLaZhHSkWd3+84t8iXnp1J0kYcZHhg==",
"dev": true,
"license": "MIT",
"engines": {
@@ -20881,61 +19257,199 @@
}
},
"node_modules/unicode-property-aliases-ecmascript": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz",
- "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==",
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.2.0.tgz",
+ "integrity": "sha512-hpbDzxUY9BFwX+UeBnxv3Sh1q7HFxj48DTmXchNgRa46lO8uj3/1iEn3MiNUYTg1g9ctIqXCCERn8gYZhHC5lQ==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=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==",
+ "node_modules/unified": {
+ "version": "9.2.2",
+ "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.2.tgz",
+ "integrity": "sha512-Sg7j110mtefBD+qunSLO1lqOEKdrwBFBrR6Qd8f4uwkhWNlbkaqwHse6e7QvD3AP/MNoJdEDLaf8OxYyoWgorQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "bail": "^1.0.0",
+ "extend": "^3.0.0",
+ "is-buffer": "^2.0.0",
+ "is-plain-obj": "^2.0.0",
+ "trough": "^1.0.0",
+ "vfile": "^4.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/unified/node_modules/is-buffer": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz",
+ "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==",
+ "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"
+ }
+ ],
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/unified/node_modules/is-plain-obj": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz",
+ "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==",
"dev": true,
"license": "MIT",
"engines": {
- "node": ">= 0.8"
+ "node": ">=8"
}
},
- "node_modules/unrs-resolver": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/unrs-resolver/-/unrs-resolver-1.11.1.tgz",
- "integrity": "sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg==",
+ "node_modules/union-value": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz",
+ "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==",
"dev": true,
- "hasInstallScript": true,
"license": "MIT",
- "peer": true,
"dependencies": {
- "napi-postinstall": "^0.3.0"
+ "arr-union": "^3.1.0",
+ "get-value": "^2.0.6",
+ "is-extendable": "^0.1.1",
+ "set-value": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/unist-util-find-all-after": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/unist-util-find-all-after/-/unist-util-find-all-after-3.0.2.tgz",
+ "integrity": "sha512-xaTC/AGZ0rIM2gM28YVRAFPIZpzbpDtU3dRmp7EXlNVA8ziQc4hY3H7BHXM1J49nEmiqc3svnqMReW+PGqbZKQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "unist-util-is": "^4.0.0"
},
"funding": {
- "url": "https://opencollective.com/unrs-resolver"
- },
- "optionalDependencies": {
- "@unrs/resolver-binding-android-arm-eabi": "1.11.1",
- "@unrs/resolver-binding-android-arm64": "1.11.1",
- "@unrs/resolver-binding-darwin-arm64": "1.11.1",
- "@unrs/resolver-binding-darwin-x64": "1.11.1",
- "@unrs/resolver-binding-freebsd-x64": "1.11.1",
- "@unrs/resolver-binding-linux-arm-gnueabihf": "1.11.1",
- "@unrs/resolver-binding-linux-arm-musleabihf": "1.11.1",
- "@unrs/resolver-binding-linux-arm64-gnu": "1.11.1",
- "@unrs/resolver-binding-linux-arm64-musl": "1.11.1",
- "@unrs/resolver-binding-linux-ppc64-gnu": "1.11.1",
- "@unrs/resolver-binding-linux-riscv64-gnu": "1.11.1",
- "@unrs/resolver-binding-linux-riscv64-musl": "1.11.1",
- "@unrs/resolver-binding-linux-s390x-gnu": "1.11.1",
- "@unrs/resolver-binding-linux-x64-gnu": "1.11.1",
- "@unrs/resolver-binding-linux-x64-musl": "1.11.1",
- "@unrs/resolver-binding-wasm32-wasi": "1.11.1",
- "@unrs/resolver-binding-win32-arm64-msvc": "1.11.1",
- "@unrs/resolver-binding-win32-ia32-msvc": "1.11.1",
- "@unrs/resolver-binding-win32-x64-msvc": "1.11.1"
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
}
},
+ "node_modules/unist-util-is": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz",
+ "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/unist-util-stringify-position": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz",
+ "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "^2.0.2"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/universalify": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz",
+ "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 4.0.0"
+ }
+ },
+ "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,
+ "license": "MIT"
+ },
+ "node_modules/unset-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
+ "integrity": "sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "has-value": "^0.3.1",
+ "isobject": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/unset-value/node_modules/has-value": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
+ "integrity": "sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "get-value": "^2.0.3",
+ "has-values": "^0.1.4",
+ "isobject": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/unset-value/node_modules/has-value/node_modules/isobject": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+ "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "isarray": "1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/unset-value/node_modules/has-values": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
+ "integrity": "sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/unset-value/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,
+ "license": "MIT"
+ },
"node_modules/update-browserslist-db": {
"version": "1.2.3",
"resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz",
@@ -20997,6 +19511,14 @@
"punycode": "^2.1.0"
}
},
+ "node_modules/urix": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
+ "integrity": "sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==",
+ "deprecated": "Please see https://github.com/lydell/urix#deprecated",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/url-loader": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/url-loader/-/url-loader-4.1.1.tgz",
@@ -21044,6 +19566,27 @@
"url": "https://opencollective.com/webpack"
}
},
+ "node_modules/url-parse": {
+ "version": "1.5.10",
+ "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz",
+ "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "querystringify": "^2.1.1",
+ "requires-port": "^1.0.0"
+ }
+ },
+ "node_modules/use": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz",
+ "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/util-deprecate": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
@@ -21051,14 +19594,20 @@
"dev": true,
"license": "MIT"
},
- "node_modules/utils-merge": {
+ "node_modules/util.promisify": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
- "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==",
+ "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz",
+ "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==",
"dev": true,
"license": "MIT",
- "engines": {
- "node": ">= 0.4.0"
+ "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/uuid": {
@@ -21067,23 +19616,48 @@
"integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
"dev": true,
"license": "MIT",
+ "optional": true,
"bin": {
"uuid": "dist/bin/uuid"
}
},
+ "node_modules/v8-compile-cache": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.4.0.tgz",
+ "integrity": "sha512-ocyWc3bAHBB/guyqJQVI5o4BZkPhznPYUG2ea80Gond/BgNWpap8TOmLSeeQG7bnh2KMISxskdADG59j7zruhw==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/v8-to-istanbul": {
- "version": "9.3.0",
- "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz",
- "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==",
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-7.1.2.tgz",
+ "integrity": "sha512-TxNb7YEUwkLXCQYeudi6lgQ/SZrzNO4kMdlqVxaZPUIUjCv6iSSypUQX70kNBSERpQ8fk48+d61FXk+tgqcWow==",
"dev": true,
"license": "ISC",
"dependencies": {
- "@jridgewell/trace-mapping": "^0.3.12",
"@types/istanbul-lib-coverage": "^2.0.1",
- "convert-source-map": "^2.0.0"
+ "convert-source-map": "^1.6.0",
+ "source-map": "^0.7.3"
},
"engines": {
- "node": ">=10.12.0"
+ "node": ">=10.10.0"
+ }
+ },
+ "node_modules/v8-to-istanbul/node_modules/convert-source-map": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz",
+ "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/v8-to-istanbul/node_modules/source-map": {
+ "version": "0.7.6",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz",
+ "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">= 12"
}
},
"node_modules/validate-npm-package-license": {
@@ -21097,68 +19671,218 @@
"spdx-expression-parse": "^3.0.0"
}
},
- "node_modules/validate-npm-package-license/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==",
+ "node_modules/validate-npm-package-name": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-6.0.0.tgz",
+ "integrity": "sha512-d7KLgL1LD3U3fgnvWEY1cQXoO/q6EQ1BSz48Sa149V/5zVTAbgmZIpyI8TRi6U9/JNyeYLlTKsEMPtLC27RFUg==",
+ "dev": true,
+ "license": "ISC",
+ "peer": true,
+ "engines": {
+ "node": "^18.17.0 || >=20.5.0"
+ }
+ },
+ "node_modules/vfile": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz",
+ "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "spdx-exceptions": "^2.1.0",
- "spdx-license-ids": "^3.0.0"
+ "@types/unist": "^2.0.0",
+ "is-buffer": "^2.0.0",
+ "unist-util-stringify-position": "^2.0.0",
+ "vfile-message": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
}
},
- "node_modules/validate-npm-package-name": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.1.tgz",
- "integrity": "sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==",
- "dev": true,
- "license": "ISC",
- "engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
- }
- },
- "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==",
+ "node_modules/vfile-message": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz",
+ "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==",
"dev": true,
"license": "MIT",
+ "dependencies": {
+ "@types/unist": "^2.0.0",
+ "unist-util-stringify-position": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/vfile/node_modules/is-buffer": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz",
+ "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==",
+ "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"
+ }
+ ],
+ "license": "MIT",
"engines": {
- "node": ">= 0.8"
+ "node": ">=4"
+ }
+ },
+ "node_modules/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==",
+ "deprecated": "Use your platform's native performance.now() and performance.timeOrigin.",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "browser-process-hrtime": "^1.0.0"
}
},
"node_modules/w3c-xmlserializer": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz",
- "integrity": "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz",
+ "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "xml-name-validator": "^5.0.0"
+ "xml-name-validator": "^3.0.0"
},
"engines": {
- "node": ">=18"
+ "node": ">=10"
}
},
"node_modules/wait-on": {
- "version": "8.0.2",
- "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-8.0.2.tgz",
- "integrity": "sha512-qHlU6AawrgAIHlueGQHQ+ETcPLAauXbnoTKl3RKq20W0T8x0DKVAo5xWIYjHSyvHxQlcYbFdR0jp4T9bDVITFA==",
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-5.3.0.tgz",
+ "integrity": "sha512-DwrHrnTK+/0QFaB9a8Ol5Lna3k7WvUR4jzSKmz0YaPBpuN2sACyiPVKVfj6ejnjcajAcvn3wlbTyMIn9AZouOg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "axios": "^1.7.9",
- "joi": "^17.13.3",
+ "axios": "^0.21.1",
+ "joi": "^17.3.0",
"lodash": "^4.17.21",
- "minimist": "^1.2.8",
- "rxjs": "^7.8.1"
+ "minimist": "^1.2.5",
+ "rxjs": "^6.6.3"
},
"bin": {
"wait-on": "bin/wait-on"
},
"engines": {
- "node": ">=12.0.0"
+ "node": ">=8.9.0"
+ }
+ },
+ "node_modules/wait-port": {
+ "version": "0.2.14",
+ "resolved": "https://registry.npmjs.org/wait-port/-/wait-port-0.2.14.tgz",
+ "integrity": "sha512-kIzjWcr6ykl7WFbZd0TMae8xovwqcqbx6FM9l+7agOgUByhzdjfzZBPK2CPufldTOMxbUivss//Sh9MFawmPRQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "chalk": "^2.4.2",
+ "commander": "^3.0.2",
+ "debug": "^4.1.1"
+ },
+ "bin": {
+ "wait-port": "bin/wait-port.js"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/wait-port/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,
+ "license": "MIT",
+ "dependencies": {
+ "color-convert": "^1.9.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/wait-port/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,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/wait-port/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,
+ "license": "MIT",
+ "dependencies": {
+ "color-name": "1.1.3"
+ }
+ },
+ "node_modules/wait-port/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,
+ "license": "MIT"
+ },
+ "node_modules/wait-port/node_modules/commander": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-3.0.2.tgz",
+ "integrity": "sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/wait-port/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,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/wait-port/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,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/wait-port/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,
+ "license": "MIT",
+ "dependencies": {
+ "has-flag": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
}
},
"node_modules/walker": {
@@ -21172,9 +19896,9 @@
}
},
"node_modules/watchpack": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz",
- "integrity": "sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==",
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.5.1.tgz",
+ "integrity": "sha512-Zn5uXdcFNIA1+1Ei5McRd+iRzfhENPCe7LeABkJtNulSxjma+l7ltNx55BWZkRlwRnpOgHqxnjyaDgJnNXnqzg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -21185,71 +19909,47 @@
"node": ">=10.13.0"
}
},
- "node_modules/wbuf": {
- "version": "1.7.3",
- "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz",
- "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "minimalistic-assert": "^1.0.0"
- }
- },
- "node_modules/web-vitals": {
- "version": "4.2.4",
- "resolved": "https://registry.npmjs.org/web-vitals/-/web-vitals-4.2.4.tgz",
- "integrity": "sha512-r4DIlprAGwJ7YM11VZp4R884m0Vmgr6EAKe3P+kO0PPj3Unqyvv59rczf6UiGcb9Z8QxZVcqKNwv/g0WNdWwsw==",
- "dev": true,
- "license": "Apache-2.0"
- },
- "node_modules/webdriver-bidi-protocol": {
- "version": "0.3.10",
- "resolved": "https://registry.npmjs.org/webdriver-bidi-protocol/-/webdriver-bidi-protocol-0.3.10.tgz",
- "integrity": "sha512-5LAE43jAVLOhB/QqX4bwSiv0Hg1HBfMmOuwBSXHdvg4GMGu9Y0lIq7p4R/yySu6w74WmaR4GM4H9t2IwLW7hgw==",
- "dev": true,
- "license": "Apache-2.0"
- },
"node_modules/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==",
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz",
+ "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==",
"dev": true,
"license": "BSD-2-Clause",
"engines": {
- "node": ">=12"
+ "node": ">=10.4"
}
},
"node_modules/webpack": {
- "version": "5.97.1",
- "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.97.1.tgz",
- "integrity": "sha512-EksG6gFY3L1eFMROS/7Wzgrii5mBAFe4rIr3r2BTfo7bcc+DWwFZ4OJ/miOuHJO/A85HwyI4eQ0F6IKXesO7Fg==",
+ "version": "5.106.2",
+ "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.106.2.tgz",
+ "integrity": "sha512-wGN3qcrBQIFmQ/c0AiOAQBvrZ5lmY8vbbMv4Mxfgzqd/B6+9pXtLo73WuS1dSGXM5QYY3hZnIbvx+K1xxe6FyA==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"@types/eslint-scope": "^3.7.7",
- "@types/estree": "^1.0.6",
+ "@types/estree": "^1.0.8",
+ "@types/json-schema": "^7.0.15",
"@webassemblyjs/ast": "^1.14.1",
"@webassemblyjs/wasm-edit": "^1.14.1",
"@webassemblyjs/wasm-parser": "^1.14.1",
- "acorn": "^8.14.0",
- "browserslist": "^4.24.0",
+ "acorn": "^8.16.0",
+ "acorn-import-phases": "^1.0.3",
+ "browserslist": "^4.28.1",
"chrome-trace-event": "^1.0.2",
- "enhanced-resolve": "^5.17.1",
- "es-module-lexer": "^1.2.1",
+ "enhanced-resolve": "^5.20.0",
+ "es-module-lexer": "^2.0.0",
"eslint-scope": "5.1.1",
"events": "^3.2.0",
"glob-to-regexp": "^0.4.1",
"graceful-fs": "^4.2.11",
- "json-parse-even-better-errors": "^2.3.1",
- "loader-runner": "^4.2.0",
- "mime-types": "^2.1.27",
+ "loader-runner": "^4.3.1",
+ "mime-db": "^1.54.0",
"neo-async": "^2.6.2",
- "schema-utils": "^3.2.0",
- "tapable": "^2.1.1",
- "terser-webpack-plugin": "^5.3.10",
- "watchpack": "^2.4.1",
- "webpack-sources": "^3.2.3"
+ "schema-utils": "^4.3.3",
+ "tapable": "^2.3.0",
+ "terser-webpack-plugin": "^5.3.17",
+ "watchpack": "^2.5.1",
+ "webpack-sources": "^3.3.4"
},
"bin": {
"webpack": "bin/webpack.js"
@@ -21304,67 +20004,46 @@
"node": ">= 10"
}
},
- "node_modules/webpack-bundle-analyzer/node_modules/ws": {
- "version": "7.5.10",
- "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz",
- "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==",
- "dev": true,
- "license": "MIT",
- "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/webpack-cli": {
- "version": "5.1.4",
- "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-5.1.4.tgz",
- "integrity": "sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg==",
+ "version": "4.10.0",
+ "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.10.0.tgz",
+ "integrity": "sha512-NLhDfH/h4O6UOy+0LSso42xvYypClINuMNBVVzX4vX98TmTaTUxwRbXdhucbFMd2qLaCTcLq/PdYrvi8onw90w==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"@discoveryjs/json-ext": "^0.5.0",
- "@webpack-cli/configtest": "^2.1.1",
- "@webpack-cli/info": "^2.0.2",
- "@webpack-cli/serve": "^2.0.5",
+ "@webpack-cli/configtest": "^1.2.0",
+ "@webpack-cli/info": "^1.5.0",
+ "@webpack-cli/serve": "^1.7.0",
"colorette": "^2.0.14",
- "commander": "^10.0.1",
+ "commander": "^7.0.0",
"cross-spawn": "^7.0.3",
- "envinfo": "^7.7.3",
"fastest-levenshtein": "^1.0.12",
"import-local": "^3.0.2",
- "interpret": "^3.1.1",
- "rechoir": "^0.8.0",
+ "interpret": "^2.2.0",
+ "rechoir": "^0.7.0",
"webpack-merge": "^5.7.3"
},
"bin": {
"webpack-cli": "bin/cli.js"
},
"engines": {
- "node": ">=14.15.0"
+ "node": ">=10.13.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/webpack"
},
"peerDependencies": {
- "webpack": "5.x.x"
+ "webpack": "4.x.x || 5.x.x"
},
"peerDependenciesMeta": {
"@webpack-cli/generators": {
"optional": true
},
+ "@webpack-cli/migrate": {
+ "optional": true
+ },
"webpack-bundle-analyzer": {
"optional": true
},
@@ -21374,149 +20053,86 @@
}
},
"node_modules/webpack-cli/node_modules/commander": {
- "version": "10.0.1",
- "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz",
- "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==",
+ "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,
"license": "MIT",
"engines": {
- "node": ">=14"
+ "node": ">= 10"
}
},
- "node_modules/webpack-dev-middleware": {
- "version": "5.3.4",
- "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.4.tgz",
- "integrity": "sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q==",
+ "node_modules/webpack-cli/node_modules/cross-spawn": {
+ "version": "7.0.6",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
+ "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "colorette": "^2.0.10",
- "memfs": "^3.4.3",
- "mime-types": "^2.1.31",
- "range-parser": "^1.2.1",
- "schema-utils": "^4.0.0"
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
},
"engines": {
- "node": ">= 12.13.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/webpack"
- },
- "peerDependencies": {
- "webpack": "^4.0.0 || ^5.0.0"
+ "node": ">= 8"
}
},
- "node_modules/webpack-dev-server": {
- "version": "4.15.2",
- "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.2.tgz",
- "integrity": "sha512-0XavAZbNJ5sDrCbkpWL8mia0o5WPOd2YGtxrEiZkBK9FjLppIUK2TgxK6qGD2P3hUXTJNNPVibrerKcx5WkR1g==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "@types/bonjour": "^3.5.9",
- "@types/connect-history-api-fallback": "^1.3.5",
- "@types/express": "^4.17.13",
- "@types/serve-index": "^1.9.1",
- "@types/serve-static": "^1.13.10",
- "@types/sockjs": "^0.3.33",
- "@types/ws": "^8.5.5",
- "ansi-html-community": "^0.0.8",
- "bonjour-service": "^1.0.11",
- "chokidar": "^3.5.3",
- "colorette": "^2.0.10",
- "compression": "^1.7.4",
- "connect-history-api-fallback": "^2.0.0",
- "default-gateway": "^6.0.3",
- "express": "^4.17.3",
- "graceful-fs": "^4.2.6",
- "html-entities": "^2.3.2",
- "http-proxy-middleware": "^2.0.3",
- "ipaddr.js": "^2.0.1",
- "launch-editor": "^2.6.0",
- "open": "^8.0.9",
- "p-retry": "^4.5.0",
- "rimraf": "^3.0.2",
- "schema-utils": "^4.0.0",
- "selfsigned": "^2.1.1",
- "serve-index": "^1.9.1",
- "sockjs": "^0.3.24",
- "spdy": "^4.0.2",
- "webpack-dev-middleware": "^5.3.4",
- "ws": "^8.13.0"
- },
- "bin": {
- "webpack-dev-server": "bin/webpack-dev-server.js"
- },
- "engines": {
- "node": ">= 12.13.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/webpack"
- },
- "peerDependencies": {
- "webpack": "^4.37.0 || ^5.0.0"
- },
- "peerDependenciesMeta": {
- "webpack": {
- "optional": true
- },
- "webpack-cli": {
- "optional": true
- }
- }
- },
- "node_modules/webpack-dev-server/node_modules/chokidar": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
- "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
+ "node_modules/webpack-cli/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==",
"dev": true,
"license": "MIT",
"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"
+ "shebang-regex": "^3.0.0"
},
"engines": {
- "node": ">= 8.10.0"
- },
- "funding": {
- "url": "https://paulmillr.com/funding/"
- },
- "optionalDependencies": {
- "fsevents": "~2.3.2"
+ "node": ">=8"
}
},
- "node_modules/webpack-dev-server/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==",
+ "node_modules/webpack-cli/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==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/webpack-cli/node_modules/which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
"dev": true,
"license": "ISC",
"dependencies": {
- "is-glob": "^4.0.1"
+ "isexe": "^2.0.0"
+ },
+ "bin": {
+ "node-which": "bin/node-which"
},
"engines": {
- "node": ">= 6"
+ "node": ">= 8"
}
},
- "node_modules/webpack-dev-server/node_modules/readdirp": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
- "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
+ "node_modules/webpack-livereload-plugin": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/webpack-livereload-plugin/-/webpack-livereload-plugin-3.0.2.tgz",
+ "integrity": "sha512-5JeZ2dgsvSNG+clrkD/u2sEiPcNk4qwCVZZmW8KpqKcNlkGv7IJjdVrq13+etAmMZYaCF1EGXdHkVFuLgP4zfw==",
"dev": true,
- "license": "MIT",
+ "license": "ISC",
"dependencies": {
- "picomatch": "^2.2.1"
+ "anymatch": "^3.1.1",
+ "portfinder": "^1.0.17",
+ "schema-utils": ">1.0.0",
+ "tiny-lr": "^1.1.1"
},
"engines": {
- "node": ">=8.10.0"
+ "node": ">= 10.18.0"
+ },
+ "peerDependencies": {
+ "webpack": "^4.0.0 || ^5.0.0"
}
},
"node_modules/webpack-merge": {
@@ -21586,32 +20202,23 @@
}
},
"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==",
+ "version": "3.4.1",
+ "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.4.1.tgz",
+ "integrity": "sha512-eACpxRN02yaawnt+uUNIF7Qje6A9zArxBbcAJjK1PK3S9Ycg5jIuJ8pW4q8EMnwNZCEGltcjkRx1QzOxOkKD8A==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=10.13.0"
}
},
- "node_modules/webpack/node_modules/schema-utils": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz",
- "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==",
+ "node_modules/webpack/node_modules/mime-db": {
+ "version": "1.54.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz",
+ "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==",
"dev": true,
"license": "MIT",
- "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": ">= 0.6"
}
},
"node_modules/websocket-driver": {
@@ -21643,6 +20250,7 @@
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz",
"integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==",
+ "deprecated": "Use @exodus/bytes instead for a more spec-conformant and faster implementation",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -21663,40 +20271,31 @@
}
},
"node_modules/whatwg-url": {
- "version": "14.2.0",
- "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.2.0.tgz",
- "integrity": "sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==",
+ "version": "8.7.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz",
+ "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "tr46": "^5.1.0",
- "webidl-conversions": "^7.0.0"
+ "lodash": "^4.7.0",
+ "tr46": "^2.1.0",
+ "webidl-conversions": "^6.1.0"
},
"engines": {
- "node": ">=18"
+ "node": ">=10"
}
},
- "node_modules/when-exit": {
- "version": "2.1.5",
- "resolved": "https://registry.npmjs.org/when-exit/-/when-exit-2.1.5.tgz",
- "integrity": "sha512-VGkKJ564kzt6Ms1dbgPP/yuIoQCrsFAnRbptpC5wOEsDaNsbCB2bnfnaA8i/vRs5tjUSEOtIuvl9/MyVsvQZCg==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/which": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
- "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+ "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
"dev": true,
"license": "ISC",
"dependencies": {
"isexe": "^2.0.0"
},
"bin": {
- "node-which": "bin/node-which"
- },
- "engines": {
- "node": ">= 8"
+ "which": "bin/which"
}
},
"node_modules/which-boxed-primitive": {
@@ -21766,10 +20365,17 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/which-module": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz",
+ "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==",
+ "dev": true,
+ "license": "ISC"
+ },
"node_modules/which-typed-array": {
- "version": "1.1.19",
- "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz",
- "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==",
+ "version": "1.1.20",
+ "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.20.tgz",
+ "integrity": "sha512-LYfpUkmqwl0h9A2HL09Mms427Q1RZWuOHsukfVcKRq9q95iQxdw0ix1JQrqbcDR9PH1QDwf5Qo8OZb5lksZ8Xg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -21806,9 +20412,9 @@
}
},
"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==",
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
+ "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -21817,10 +20423,7 @@
"strip-ansi": "^6.0.0"
},
"engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ "node": ">=8"
}
},
"node_modules/wrappy": {
@@ -21831,31 +20434,30 @@
"license": "ISC"
},
"node_modules/write-file-atomic": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz",
- "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==",
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz",
+ "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==",
"dev": true,
"license": "ISC",
"dependencies": {
"imurmurhash": "^0.1.4",
- "signal-exit": "^3.0.7"
- },
- "engines": {
- "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
+ "is-typedarray": "^1.0.0",
+ "signal-exit": "^3.0.2",
+ "typedarray-to-buffer": "^3.1.5"
}
},
"node_modules/ws": {
- "version": "8.18.0",
- "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz",
- "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==",
+ "version": "7.5.10",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz",
+ "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==",
"dev": true,
"license": "MIT",
"engines": {
- "node": ">=10.0.0"
+ "node": ">=8.3.0"
},
"peerDependencies": {
"bufferutil": "^4.0.1",
- "utf-8-validate": ">=5.0.2"
+ "utf-8-validate": "^5.0.2"
},
"peerDependenciesMeta": {
"bufferutil": {
@@ -21866,28 +20468,12 @@
}
}
},
- "node_modules/xdg-basedir": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-5.1.0.tgz",
- "integrity": "sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/xml-name-validator": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz",
- "integrity": "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz",
+ "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==",
"dev": true,
- "license": "Apache-2.0",
- "engines": {
- "node": ">=18"
- }
+ "license": "Apache-2.0"
},
"node_modules/xmlchars": {
"version": "2.2.0",
@@ -21896,25 +20482,12 @@
"dev": true,
"license": "MIT"
},
- "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,
- "license": "MIT",
- "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==",
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz",
+ "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==",
"dev": true,
- "license": "ISC",
- "engines": {
- "node": ">=10"
- }
+ "license": "ISC"
},
"node_modules/yallist": {
"version": "3.1.1",
@@ -21924,9 +20497,9 @@
"license": "ISC"
},
"node_modules/yaml": {
- "version": "1.10.2",
- "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz",
- "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==",
+ "version": "1.10.3",
+ "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.3.tgz",
+ "integrity": "sha512-vIYeF1u3CjlhAFekPPAk2h/Kv4T3mAkMox5OymRiJQB0spDP10LHvt+K7G9Ny6NuuMAb25/6n1qyUjAcGNf/AA==",
"dev": true,
"license": "ISC",
"engines": {
@@ -21934,32 +20507,60 @@
}
},
"node_modules/yargs": {
- "version": "17.7.2",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz",
- "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==",
+ "version": "15.4.1",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz",
+ "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==",
"dev": true,
"license": "MIT",
"dependencies": {
- "cliui": "^8.0.1",
- "escalade": "^3.1.1",
- "get-caller-file": "^2.0.5",
+ "cliui": "^6.0.0",
+ "decamelize": "^1.2.0",
+ "find-up": "^4.1.0",
+ "get-caller-file": "^2.0.1",
"require-directory": "^2.1.1",
- "string-width": "^4.2.3",
- "y18n": "^5.0.5",
- "yargs-parser": "^21.1.1"
+ "require-main-filename": "^2.0.0",
+ "set-blocking": "^2.0.0",
+ "string-width": "^4.2.0",
+ "which-module": "^2.0.0",
+ "y18n": "^4.0.0",
+ "yargs-parser": "^18.1.2"
},
"engines": {
- "node": ">=12"
+ "node": ">=8"
}
},
"node_modules/yargs-parser": {
- "version": "21.1.1",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
- "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
+ "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,
"license": "ISC",
"engines": {
- "node": ">=12"
+ "node": ">=10"
+ }
+ },
+ "node_modules/yargs/node_modules/camelcase": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
+ "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/yargs/node_modules/yargs-parser": {
+ "version": "18.1.3",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz",
+ "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "camelcase": "^5.0.0",
+ "decamelize": "^1.2.0"
+ },
+ "engines": {
+ "node": ">=6"
}
},
"node_modules/yauzl": {
@@ -21973,27 +20574,15 @@
"fd-slicer": "~1.1.0"
}
},
- "node_modules/yocto-queue": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
- "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/zod": {
- "version": "3.23.8",
- "resolved": "https://registry.npmjs.org/zod/-/zod-3.23.8.tgz",
- "integrity": "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==",
+ "node_modules/zwitch": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz",
+ "integrity": "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==",
"dev": true,
"license": "MIT",
"funding": {
- "url": "https://github.com/sponsors/colinhacks"
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
}
}
}
diff --git a/package.json b/package.json
index 705c424..37ffb77 100644
--- a/package.json
+++ b/package.json
@@ -16,6 +16,6 @@
"start": "wp-scripts start"
},
"devDependencies": {
- "@wordpress/scripts": "^31.2.0"
+ "@wordpress/scripts": "^19.2.4"
}
}
--
Gitblit v1.10.0