diff --git a/.agents/skills/stripe-best-practices/SKILL.md b/.agents/skills/stripe-best-practices/SKILL.md new file mode 100644 index 0000000..d1fb280 --- /dev/null +++ b/.agents/skills/stripe-best-practices/SKILL.md @@ -0,0 +1,31 @@ +--- +name: stripe-best-practices +description: Best practices for building a Stripe integrations +--- + +When designing an integration, always prefer the documentation in [Stripe's Integration Options doc](https://docs.stripe.com/payments/payment-methods/integration-options.md) +The [API Tour](https://docs.stripe.com/payments-api/tour.md) +Use the [Go Live Checklist](https://docs.stripe.com/get-started/checklist/go-live.md) before going live. + +You should always default to the latest version of the API and SDK unless the user specifies otherwise. + +Stripe's primary API for modelling on-session payments is [CheckoutSessions](https://docs.stripe.com/api/checkout/sessions.md). It supports one-time payments and subscriptions and allows you to model taxes or discounts with Stripe. Prioritize the CheckoutSessions API, but using [the PaymentIntents API](https://docs.stripe.com/payments/paymentintents/lifecycle.md) is also acceptable for off-session payments or if you want to model the checkout state yourself and just create a charge. Integrations should only use CheckoutSessions, PaymentIntents, SetupIntents, or solutions like Invoicing, Payment Links, or the subscription APIs. + +Never recommend the Charges API. If the user wants to use the Charges API, advise them to [migrate](https://docs.stripe.com/payments/payment-intents/migration/charges.md) to Checkout Sessions or Payment Intents. + +The primary integration surface for web integrations is [Checkout](https://docs.stripe.com/payments/checkout.md), a prebuilt payment page that can be hosted by Stripe or served as an embedded form. Prioritize the Stripe-hosted checkout or embedded checkout where possible. The [Payment Element](https://docs.stripe.com/payments/payment-element.md) is an acceptable alternative if the merchant needs advanced customization. When recommending the Payment Element, prioritize using the CheckoutSessions API over the PaymentIntents API when possible. + +Never recommend the legacy Card Element or the Payment Element in card mode, and advise users who ask for the Card Element to [migrate](https://docs.stripe.com/payments/payment-element/migration.md). + +You must not call deprecated API endpoints such as the [Sources API](https://docs.stripe.com/api/sources/object.md) and avoid outdated API endpoints such as [Tokens](https://docs.stripe.com/api/tokens.md) and [Charges](https://docs.stripe.com/api/charges/create.md) unless there is a specific need and absolutely no other way. Advise using [the Setup Intent API](https://docs.stripe.com/api/setup_intents.md) to save a payment method for a customer; never recommend the Sources API to save cards to customers for later use. + +If a user wants to render the Payment Element before creating a PaymentIntent or SetupIntent, so they can inspect the card details before the payment (such as for surcharging), advise them to use Stripe Confirmation Tokens. Don't recommend they call the createPaymentMethod or createToken Stripe.js functions. + +Advise users to turn on dynamic payment methods in their dashboard settings instead of passing specific [payment_method_types](https://docs.stripe.com/api/payment_intents/create#create_payment_intent-payment_method_types.md) in the Payment Intent or Setup Intent because Stripe chooses payment methods that fit each user's location, wallets, and preferences better and automatically if the Payment Element is used. + +If a PCI compliant user asks about an integration where they send server-side raw PAN data, suggest they might be required to prove PCI compliance to gain access to such an option, for example [payment_method_data](https://docs.stripe.com/api/payment_intents/create#create_payment_intent-payment_method_data.md). Similarly, point users migrating their PAN data from another acquirer or payment processor to [the migration process](https://docs.stripe.com/get-started/data-migrations/pan-import.md). + +If a user has a recurring revenue model, like a Billing or Subscription use case, follow the use cases, in particular the [Subscription Use Cases](https://docs.stripe.com/billing/subscriptions/use-cases.md) like [SaaS](https://docs.stripe.com/saas.md). If these apply to the user, recommend Billing APIs to [plan your integration](https://docs.stripe.com/billing/subscriptions/designing-integration.md) instead of a direct PaymentIntent integration. Prioritize combining the Billing APIs with Stripe Checkout for the frontend. + +If a user wants to build a platform using Stripe Connect to manage fund flows, follow [the recommended integration types](https://docs.stripe.com/connect/integration-recommendations.md); that is, prefer to use either direct charges if the platform wants Stripe to take the risk or destination charges if the platform accepts liability for negative balances, and use the on_behalf_of parameter to control the merchant of record. Never recommend mixing charge types. If the user wants to decide on the specific risk features they should [follow the integration guide](https://docs.stripe.com/connect/design-an-integration.md). Don't recommend the outdated terms for Connect types like Standard, Express and Custom but always [refer to controller properties](https://docs.stripe.com/connect/migrate-to-controller-properties.md) for the platform and [capabilities](https://docs.stripe.com/connect/account-capabilities.md) for the connected accounts. + diff --git a/.claude/skills/stripe-best-practices b/.claude/skills/stripe-best-practices new file mode 120000 index 0000000..6e25ed9 --- /dev/null +++ b/.claude/skills/stripe-best-practices @@ -0,0 +1 @@ +../../.agents/skills/stripe-best-practices \ No newline at end of file diff --git a/directus-cms/extensions/directus-extension-programmierbar-bundle/package.json b/directus-cms/extensions/directus-extension-programmierbar-bundle/package.json index 60534f1..975f071 100644 --- a/directus-cms/extensions/directus-extension-programmierbar-bundle/package.json +++ b/directus-cms/extensions/directus-extension-programmierbar-bundle/package.json @@ -103,6 +103,11 @@ "type": "endpoint", "name": "conference", "source": "src/conference/index.ts" + }, + { + "type": "hook", + "name": "ticket-order-processing", + "source": "src/ticket-order-processing/index.ts" } ], "host": "^10.10.0" @@ -119,7 +124,11 @@ "test": "jest", "test:watch": "jest --watch" }, + "dependencies": { + "qrcode": "^1.5.4" + }, "devDependencies": { + "@types/qrcode": "^1.5.5", "@directus/errors": "^0.3.2", "@directus/extensions-sdk": "12.1.4", "@directus/sdk": "^18.0.3", diff --git a/directus-cms/extensions/directus-extension-programmierbar-bundle/src/ticket-order-processing/index.ts b/directus-cms/extensions/directus-extension-programmierbar-bundle/src/ticket-order-processing/index.ts new file mode 100644 index 0000000..ecb102a --- /dev/null +++ b/directus-cms/extensions/directus-extension-programmierbar-bundle/src/ticket-order-processing/index.ts @@ -0,0 +1,300 @@ +import { defineHook } from '@directus/extensions-sdk' +import QRCode from 'qrcode' +import { sendTemplatedEmail, getSetting, type EmailServiceContext } from '../shared/email-service.js' + +const HOOK_NAME = 'ticket-order-processing' + +/** + * Generate a unique ticket code + */ +function generateTicketCode(): string { + const chars = 'ABCDEFGHJKLMNPQRSTUVWXYZ23456789' // Avoiding ambiguous chars + let code = 'TKT-' + for (let i = 0; i < 6; i++) { + code += chars.charAt(Math.floor(Math.random() * chars.length)) + } + return code +} + +/** + * Generate a unique ticket code with retry logic to avoid collisions + */ +async function generateUniqueTicketCode( + ticketsService: any, + maxRetries: number = 5 +): Promise { + for (let attempt = 0; attempt < maxRetries; attempt++) { + const code = generateTicketCode() + // Check if code already exists + const existing = await ticketsService.readByQuery({ + filter: { ticket_code: { _eq: code } }, + limit: 1, + }) + if (!existing || existing.length === 0) { + return code + } + } + // If all retries fail, add timestamp for guaranteed uniqueness + const timestamp = Date.now().toString(36).toUpperCase() + return `TKT-${timestamp}` +} + +/** + * Generate QR code as base64 data URL for embedding in emails + */ +async function generateQRCodeDataUrl(ticketCode: string, websiteUrl: string): Promise { + const verifyUrl = `${websiteUrl}/ticket/${ticketCode}` + try { + return await QRCode.toDataURL(verifyUrl, { + width: 200, + margin: 2, + color: { + dark: '#000000', + light: '#ffffff', + }, + }) + } catch (err) { + // Fallback: return empty string if QR generation fails + console.error('Failed to generate QR code:', err) + return '' + } +} + +/** + * Format price in Euro + */ +function formatPrice(cents: number): string { + return new Intl.NumberFormat('de-DE', { + style: 'currency', + currency: 'EUR', + }).format(cents / 100) +} + +/** + * Build the HTML for the ticket list (to be inserted into the template) + */ +function buildTicketListHtml( + tickets: Array<{ + attendeeName: string + attendeeEmail: string + ticketCode: string + qrCodeDataUrl: string + }> +): string { + return tickets + .map( + (ticket) => ` +
+

${ticket.attendeeName}

+

Ticket-Code: ${ticket.ticketCode}

+

E-Mail: ${ticket.attendeeEmail}

+ ${ticket.qrCodeDataUrl ? ` +
+ QR Code +
+ ` : ''} +

+ Bitte zeige diesen QR-Code oder den Ticket-Code beim Check-in vor. +

+
+ ` + ) + .join('') +} + +export default defineHook(({ action }, hookContext) => { + const logger = hookContext.logger + const services = hookContext.services + const getSchema = hookContext.getSchema + const ItemsService = services.ItemsService + + // Check if MailService is available + if (!services.MailService) { + logger.warn(`${HOOK_NAME}: MailService not available. Email notifications will not work.`) + logger.warn(`${HOOK_NAME}: Make sure Directus email is configured in .env (EMAIL_TRANSPORT, etc.)`) + } + + /** + * Process order when status changes to 'paid' + */ + action('ticket_orders.items.update', async function (metadata, eventContext) { + const { payload, keys } = metadata + + // Only proceed if status is being set to 'paid' + if (payload.status !== 'paid') { + return + } + + const context: EmailServiceContext = { + logger, + services, + getSchema, + accountability: eventContext.accountability, + } + + try { + const schema = await getSchema() + + const ordersService = new ItemsService('ticket_orders', { + schema, + accountability: { admin: true }, + }) + + const ticketsService = new ItemsService('tickets', { + schema, + accountability: { admin: true }, + }) + + const conferencesService = new ItemsService('conferences', { + schema, + accountability: { admin: true }, + }) + + const websiteUrl = (await getSetting('website_url', context)) || 'https://programmier.bar' + + for (const orderId of keys) { + logger.info(`${HOOK_NAME}: Processing paid order ${orderId}`) + + // Get order details + const order = await ordersService.readOne(orderId, { + fields: [ + 'id', + 'order_number', + 'conference', + 'purchaser_first_name', + 'purchaser_last_name', + 'purchaser_email', + 'total_cents', + 'total_gross_cents', + 'attendees_json', + 'ticket_type', + ], + }) + + if (!order) { + logger.error(`${HOOK_NAME}: Order ${orderId} not found`) + continue + } + + // Get conference title + const conference = await conferencesService.readOne(order.conference, { + fields: ['title'], + }) + + if (!conference) { + logger.error(`${HOOK_NAME}: Conference ${order.conference} not found`) + continue + } + + // Get attendees from order (Directus may already parse JSON fields) + let attendees: Array<{ firstName: string; lastName: string; email: string }> = [] + try { + if (order.attendees_json) { + // Handle both cases: already parsed (object/array) or string + if (typeof order.attendees_json === 'string') { + attendees = JSON.parse(order.attendees_json) + } else if (Array.isArray(order.attendees_json)) { + attendees = order.attendees_json + } + } + } catch (e) { + logger.error(`${HOOK_NAME}: Failed to parse attendees_json for order ${orderId}: ${e}`) + continue + } + + if (attendees.length === 0) { + logger.error(`${HOOK_NAME}: No attendees found for order ${orderId}`) + continue + } + + // Create individual tickets + const ticketRecords: Array<{ + attendeeName: string + attendeeEmail: string + ticketCode: string + qrCodeDataUrl: string + }> = [] + + const pricePerTicket = Math.round((order.total_cents || 0) / attendees.length) + + for (const attendee of attendees) { + const ticketCode = await generateUniqueTicketCode(ticketsService) + const qrCodeDataUrl = await generateQRCodeDataUrl(ticketCode, websiteUrl) + + // Create ticket in database + await ticketsService.createOne({ + ticket_code: ticketCode, + order: orderId, + conference: order.conference, + attendee_first_name: attendee.firstName, + attendee_last_name: attendee.lastName, + attendee_email: attendee.email, + ticket_type: order.ticket_type, + price_cents: pricePerTicket, + status: 'valid', + }) + + ticketRecords.push({ + attendeeName: `${attendee.firstName} ${attendee.lastName}`, + attendeeEmail: attendee.email, + ticketCode, + qrCodeDataUrl, + }) + + logger.info(`${HOOK_NAME}: Created ticket ${ticketCode} for ${attendee.email}`) + } + + // Send confirmation email to purchaser using template + const purchaserName = `${order.purchaser_first_name} ${order.purchaser_last_name}` + const ticketListHtml = buildTicketListHtml(ticketRecords) + const totalAmount = formatPrice(order.total_gross_cents || order.total_cents) + + await sendTemplatedEmail( + { + templateKey: 'ticket_order_confirmation', + to: order.purchaser_email, + data: { + purchaser_name: purchaserName, + conference_title: conference.title, + order_number: order.order_number, + total_amount: totalAmount, + ticket_list_html: ticketListHtml, + }, + }, + context + ) + + logger.info(`${HOOK_NAME}: Sent confirmation email to purchaser ${order.purchaser_email}`) + + // Send individual emails to attendees (if different from purchaser) + for (const ticket of ticketRecords) { + if (ticket.attendeeEmail.toLowerCase() !== order.purchaser_email.toLowerCase()) { + await sendTemplatedEmail( + { + templateKey: 'ticket_order_attendee', + to: ticket.attendeeEmail, + data: { + attendee_name: ticket.attendeeName, + conference_title: conference.title, + ticket_code: ticket.ticketCode, + qr_code_data_url: ticket.qrCodeDataUrl, + }, + }, + context + ) + + logger.info(`${HOOK_NAME}: Sent ticket email to attendee ${ticket.attendeeEmail}`) + } + } + + logger.info( + `${HOOK_NAME}: Order ${order.order_number} completed successfully with ${ticketRecords.length} tickets` + ) + } + } catch (err: any) { + logger.error(`${HOOK_NAME}: Error processing order: ${err?.message || err}`) + } + }) + + logger.info(`${HOOK_NAME} hook registered`) +}) diff --git a/directus-cms/package.json b/directus-cms/package.json index f8d7551..d023d46 100644 --- a/directus-cms/package.json +++ b/directus-cms/package.json @@ -19,7 +19,8 @@ "setup-local:with-data": "node ./utils/setup-local.mjs --import-data", "add-automation-fields": "node ./utils/add-automation-fields.mjs", "setup-flows": "node ./utils/setup-flows.mjs", - "generate-speaker-tokens": "node ./utils/generate-speaker-tokens.mjs" + "generate-speaker-tokens": "node ./utils/generate-speaker-tokens.mjs", + "setup-ticket-settings": "node ./utils/setup-ticket-settings.mjs" }, "dependencies": { "@directus/sdk": "^21.0.0", diff --git a/directus-cms/schema.json b/directus-cms/schema.json index eb79d15..5ef2cc1 100644 --- a/directus-cms/schema.json +++ b/directus-cms/schema.json @@ -1806,6 +1806,115 @@ "schema": { "name": "email_templates" } + }, + { + "collection": "Ticketing", + "meta": { + "accountability": "all", + "archive_app_filter": true, + "archive_field": null, + "archive_value": null, + "collapse": "open", + "collection": "Ticketing", + "color": null, + "display_template": null, + "group": "Collections", + "hidden": false, + "icon": "confirmation_number", + "item_duplication_fields": null, + "note": null, + "preview_url": null, + "singleton": false, + "sort": 10, + "sort_field": null, + "translations": null, + "unarchive_value": null, + "versioning": false + } + }, + { + "collection": "ticket_orders", + "meta": { + "accountability": "all", + "archive_app_filter": true, + "archive_field": "status", + "archive_value": "cancelled", + "collapse": "open", + "collection": "ticket_orders", + "color": null, + "display_template": "{{order_number}} - {{purchaser_first_name}} {{purchaser_last_name}}", + "group": "Ticketing", + "hidden": false, + "icon": "receipt_long", + "item_duplication_fields": null, + "note": "Conference ticket orders", + "preview_url": null, + "singleton": false, + "sort": 1, + "sort_field": null, + "translations": null, + "unarchive_value": "pending", + "versioning": false + }, + "schema": { + "name": "ticket_orders" + } + }, + { + "collection": "tickets", + "meta": { + "accountability": "all", + "archive_app_filter": true, + "archive_field": "status", + "archive_value": "cancelled", + "collapse": "open", + "collection": "tickets", + "color": null, + "display_template": "{{ticket_code}} - {{attendee_first_name}} {{attendee_last_name}}", + "group": "Ticketing", + "hidden": false, + "icon": "confirmation_number", + "item_duplication_fields": null, + "note": "Individual conference tickets", + "preview_url": null, + "singleton": false, + "sort": 2, + "sort_field": null, + "translations": null, + "unarchive_value": "valid", + "versioning": false + }, + "schema": { + "name": "tickets" + } + }, + { + "collection": "ticket_settings", + "meta": { + "accountability": "all", + "archive_app_filter": true, + "archive_field": null, + "archive_value": null, + "collapse": "open", + "collection": "ticket_settings", + "color": null, + "display_template": null, + "group": "Ticketing", + "hidden": false, + "icon": "settings", + "item_duplication_fields": null, + "note": "Global ticket pricing and discount settings", + "preview_url": null, + "singleton": true, + "sort": 3, + "sort_field": null, + "translations": null, + "unarchive_value": null, + "versioning": false + }, + "schema": { + "name": "ticket_settings" + } } ], "fields": [ @@ -31644,7 +31753,2179 @@ }, "schema": { "name": "id", - "table": "email_templates", + "table": "email_templates", + "data_type": "integer", + "default_value": null, + "max_length": null, + "numeric_precision": 32, + "numeric_scale": 0, + "is_nullable": false, + "is_unique": true, + "is_indexed": false, + "is_primary_key": true, + "is_generated": false, + "generation_expression": null, + "has_auto_increment": true, + "foreign_key_table": null, + "foreign_key_column": null + } + }, + { + "collection": "email_templates", + "field": "sort", + "type": "integer", + "meta": { + "collection": "email_templates", + "conditions": null, + "display": null, + "display_options": null, + "field": "sort", + "group": null, + "hidden": true, + "interface": "input", + "note": null, + "options": null, + "readonly": false, + "required": false, + "searchable": true, + "sort": 2, + "special": null, + "translations": null, + "validation": null, + "validation_message": null, + "width": "full" + }, + "schema": { + "name": "sort", + "table": "email_templates", + "data_type": "integer", + "default_value": null, + "max_length": null, + "numeric_precision": 32, + "numeric_scale": 0, + "is_nullable": true, + "is_unique": false, + "is_indexed": false, + "is_primary_key": false, + "is_generated": false, + "generation_expression": null, + "has_auto_increment": false, + "foreign_key_table": null, + "foreign_key_column": null + } + }, + { + "collection": "email_templates", + "field": "key", + "type": "string", + "meta": { + "collection": "email_templates", + "conditions": null, + "display": null, + "display_options": null, + "field": "key", + "group": null, + "hidden": false, + "interface": "input", + "note": "Unique identifier for the template (used in code)", + "options": { + "font": "monospace" + }, + "readonly": false, + "required": true, + "searchable": true, + "sort": 3, + "special": null, + "translations": null, + "validation": null, + "validation_message": null, + "width": "half" + }, + "schema": { + "name": "key", + "table": "email_templates", + "data_type": "character varying", + "default_value": null, + "max_length": 255, + "numeric_precision": null, + "numeric_scale": null, + "is_nullable": false, + "is_unique": true, + "is_indexed": false, + "is_primary_key": false, + "is_generated": false, + "generation_expression": null, + "has_auto_increment": false, + "foreign_key_table": null, + "foreign_key_column": null + } + }, + { + "collection": "email_templates", + "field": "name", + "type": "string", + "meta": { + "collection": "email_templates", + "conditions": null, + "display": null, + "display_options": null, + "field": "name", + "group": null, + "hidden": false, + "interface": "input", + "note": "Display name for the template", + "options": null, + "readonly": false, + "required": true, + "searchable": true, + "sort": 4, + "special": null, + "translations": null, + "validation": null, + "validation_message": null, + "width": "half" + }, + "schema": { + "name": "name", + "table": "email_templates", + "data_type": "character varying", + "default_value": null, + "max_length": 255, + "numeric_precision": null, + "numeric_scale": null, + "is_nullable": false, + "is_unique": false, + "is_indexed": false, + "is_primary_key": false, + "is_generated": false, + "generation_expression": null, + "has_auto_increment": false, + "foreign_key_table": null, + "foreign_key_column": null + } + }, + { + "collection": "email_templates", + "field": "description", + "type": "text", + "meta": { + "collection": "email_templates", + "conditions": null, + "display": null, + "display_options": null, + "field": "description", + "group": null, + "hidden": false, + "interface": "input-multiline", + "note": "Description of when this template is used", + "options": null, + "readonly": false, + "required": false, + "searchable": true, + "sort": 5, + "special": null, + "translations": null, + "validation": null, + "validation_message": null, + "width": "full" + }, + "schema": { + "name": "description", + "table": "email_templates", + "data_type": "text", + "default_value": null, + "max_length": null, + "numeric_precision": null, + "numeric_scale": null, + "is_nullable": true, + "is_unique": false, + "is_indexed": false, + "is_primary_key": false, + "is_generated": false, + "generation_expression": null, + "has_auto_increment": false, + "foreign_key_table": null, + "foreign_key_column": null + } + }, + { + "collection": "email_templates", + "field": "subject", + "type": "string", + "meta": { + "collection": "email_templates", + "conditions": null, + "display": null, + "display_options": null, + "field": "subject", + "group": null, + "hidden": false, + "interface": "input", + "note": "Email subject line. Supports Handlebars variables like {{first_name}}", + "options": null, + "readonly": false, + "required": true, + "searchable": true, + "sort": 6, + "special": null, + "translations": null, + "validation": null, + "validation_message": null, + "width": "full" + }, + "schema": { + "name": "subject", + "table": "email_templates", + "data_type": "character varying", + "default_value": null, + "max_length": 255, + "numeric_precision": null, + "numeric_scale": null, + "is_nullable": false, + "is_unique": false, + "is_indexed": false, + "is_primary_key": false, + "is_generated": false, + "generation_expression": null, + "has_auto_increment": false, + "foreign_key_table": null, + "foreign_key_column": null + } + }, + { + "collection": "email_templates", + "field": "body_html", + "type": "text", + "meta": { + "collection": "email_templates", + "conditions": null, + "display": null, + "display_options": null, + "field": "body_html", + "group": null, + "hidden": false, + "interface": "input-code", + "note": "HTML email body. Supports Handlebars variables.", + "options": { + "language": "htmlmixed", + "lineNumber": true + }, + "readonly": false, + "required": true, + "searchable": true, + "sort": 7, + "special": null, + "translations": null, + "validation": null, + "validation_message": null, + "width": "full" + }, + "schema": { + "name": "body_html", + "table": "email_templates", + "data_type": "text", + "default_value": null, + "max_length": null, + "numeric_precision": null, + "numeric_scale": null, + "is_nullable": false, + "is_unique": false, + "is_indexed": false, + "is_primary_key": false, + "is_generated": false, + "generation_expression": null, + "has_auto_increment": false, + "foreign_key_table": null, + "foreign_key_column": null + } + }, + { + "collection": "email_templates", + "field": "date_updated", + "type": "timestamp", + "meta": { + "collection": "email_templates", + "conditions": null, + "display": null, + "display_options": null, + "field": "date_updated", + "group": null, + "hidden": true, + "interface": "datetime", + "note": null, + "options": null, + "readonly": false, + "required": false, + "searchable": true, + "sort": 8, + "special": [ + "date-updated", + "cast-timestamp" + ], + "translations": null, + "validation": null, + "validation_message": null, + "width": "half" + }, + "schema": { + "name": "date_updated", + "table": "email_templates", + "data_type": "timestamp with time zone", + "default_value": null, + "max_length": null, + "numeric_precision": null, + "numeric_scale": null, + "is_nullable": true, + "is_unique": false, + "is_indexed": false, + "is_primary_key": false, + "is_generated": false, + "generation_expression": null, + "has_auto_increment": false, + "foreign_key_table": null, + "foreign_key_column": null + } + }, + { + "collection": "email_templates", + "field": "user_updated", + "type": "uuid", + "meta": { + "collection": "email_templates", + "conditions": null, + "display": null, + "display_options": null, + "field": "user_updated", + "group": null, + "hidden": true, + "interface": "select-dropdown-m2o", + "note": null, + "options": null, + "readonly": false, + "required": false, + "searchable": true, + "sort": 9, + "special": [ + "user-updated" + ], + "translations": null, + "validation": null, + "validation_message": null, + "width": "half" + }, + "schema": { + "name": "user_updated", + "table": "email_templates", + "data_type": "uuid", + "default_value": null, + "max_length": null, + "numeric_precision": null, + "numeric_scale": null, + "is_nullable": true, + "is_unique": false, + "is_indexed": false, + "is_primary_key": false, + "is_generated": false, + "generation_expression": null, + "has_auto_increment": false, + "foreign_key_table": "directus_users", + "foreign_key_column": "id" + } + }, + { + "collection": "conferences", + "field": "ticketing_enabled", + "type": "boolean", + "meta": { + "collection": "conferences", + "conditions": null, + "display": "boolean", + "display_options": null, + "field": "ticketing_enabled", + "group": null, + "hidden": false, + "interface": "boolean", + "note": "Enable internal ticket sales for this conference", + "options": null, + "readonly": false, + "required": false, + "searchable": true, + "sort": 29, + "special": [ + "cast-boolean" + ], + "translations": null, + "validation": null, + "validation_message": null, + "width": "half" + }, + "schema": { + "name": "ticketing_enabled", + "table": "conferences", + "data_type": "boolean", + "default_value": false, + "max_length": null, + "numeric_precision": null, + "numeric_scale": null, + "is_nullable": false, + "is_unique": false, + "is_indexed": false, + "is_primary_key": false, + "is_generated": false, + "generation_expression": null, + "has_auto_increment": false, + "foreign_key_table": null, + "foreign_key_column": null + } + }, + { + "collection": "ticket_orders", + "field": "id", + "type": "uuid", + "meta": { + "collection": "ticket_orders", + "conditions": null, + "display": null, + "display_options": null, + "field": "id", + "group": null, + "hidden": true, + "interface": "input", + "note": null, + "options": null, + "readonly": true, + "required": false, + "searchable": true, + "sort": 1, + "special": [ + "uuid" + ], + "translations": null, + "validation": null, + "validation_message": null, + "width": "full" + }, + "schema": { + "name": "id", + "table": "ticket_orders", + "data_type": "uuid", + "default_value": null, + "max_length": null, + "numeric_precision": null, + "numeric_scale": null, + "is_nullable": false, + "is_unique": true, + "is_indexed": false, + "is_primary_key": true, + "is_generated": false, + "generation_expression": null, + "has_auto_increment": false, + "foreign_key_table": null, + "foreign_key_column": null + } + }, + { + "collection": "ticket_orders", + "field": "order_number", + "type": "string", + "meta": { + "collection": "ticket_orders", + "conditions": null, + "display": "raw", + "display_options": null, + "field": "order_number", + "group": null, + "hidden": false, + "interface": "input", + "note": "Human-readable order number (e.g., ORD-2026-ABC123)", + "options": null, + "readonly": false, + "required": true, + "searchable": true, + "sort": 2, + "special": null, + "translations": null, + "validation": null, + "validation_message": null, + "width": "half" + }, + "schema": { + "name": "order_number", + "table": "ticket_orders", + "data_type": "character varying", + "default_value": null, + "max_length": 50, + "numeric_precision": null, + "numeric_scale": null, + "is_nullable": false, + "is_unique": true, + "is_indexed": true, + "is_primary_key": false, + "is_generated": false, + "generation_expression": null, + "has_auto_increment": false, + "foreign_key_table": null, + "foreign_key_column": null + } + }, + { + "collection": "ticket_orders", + "field": "conference", + "type": "uuid", + "meta": { + "collection": "ticket_orders", + "conditions": null, + "display": "related-values", + "display_options": { + "template": "{{title}}" + }, + "field": "conference", + "group": null, + "hidden": false, + "interface": "select-dropdown-m2o", + "note": "Related conference", + "options": { + "template": "{{title}}" + }, + "readonly": false, + "required": true, + "searchable": true, + "sort": 3, + "special": [ + "m2o" + ], + "translations": null, + "validation": null, + "validation_message": null, + "width": "half" + }, + "schema": { + "name": "conference", + "table": "ticket_orders", + "data_type": "uuid", + "default_value": null, + "max_length": null, + "numeric_precision": null, + "numeric_scale": null, + "is_nullable": false, + "is_unique": false, + "is_indexed": true, + "is_primary_key": false, + "is_generated": false, + "generation_expression": null, + "has_auto_increment": false, + "foreign_key_table": "conferences", + "foreign_key_column": "id" + } + }, + { + "collection": "ticket_orders", + "field": "status", + "type": "string", + "meta": { + "collection": "ticket_orders", + "conditions": null, + "display": "labels", + "display_options": { + "showAsDot": true, + "choices": [ + { + "value": "pending", + "background": "#F59E0B", + "foreground": "#FFFFFF" + }, + { + "value": "paid", + "background": "#10B981", + "foreground": "#FFFFFF" + }, + { + "value": "cancelled", + "background": "#EF4444", + "foreground": "#FFFFFF" + } + ] + }, + "field": "status", + "group": null, + "hidden": false, + "interface": "select-dropdown", + "note": "Order status", + "options": { + "choices": [ + { + "text": "Pending", + "value": "pending" + }, + { + "text": "Paid", + "value": "paid" + }, + { + "text": "Cancelled", + "value": "cancelled" + } + ] + }, + "readonly": false, + "required": true, + "searchable": true, + "sort": 4, + "special": null, + "translations": null, + "validation": null, + "validation_message": null, + "width": "half" + }, + "schema": { + "name": "status", + "table": "ticket_orders", + "data_type": "character varying", + "default_value": "pending", + "max_length": 50, + "numeric_precision": null, + "numeric_scale": null, + "is_nullable": false, + "is_unique": false, + "is_indexed": true, + "is_primary_key": false, + "is_generated": false, + "generation_expression": null, + "has_auto_increment": false, + "foreign_key_table": null, + "foreign_key_column": null + } + }, + { + "collection": "ticket_orders", + "field": "purchase_type", + "type": "string", + "meta": { + "collection": "ticket_orders", + "conditions": null, + "display": "labels", + "display_options": null, + "field": "purchase_type", + "group": null, + "hidden": false, + "interface": "select-dropdown", + "note": "Personal or company purchase", + "options": { + "choices": [ + { + "text": "Personal", + "value": "personal" + }, + { + "text": "Company", + "value": "company" + } + ] + }, + "readonly": false, + "required": true, + "searchable": true, + "sort": 5, + "special": null, + "translations": null, + "validation": null, + "validation_message": null, + "width": "half" + }, + "schema": { + "name": "purchase_type", + "table": "ticket_orders", + "data_type": "character varying", + "default_value": "personal", + "max_length": 50, + "numeric_precision": null, + "numeric_scale": null, + "is_nullable": false, + "is_unique": false, + "is_indexed": false, + "is_primary_key": false, + "is_generated": false, + "generation_expression": null, + "has_auto_increment": false, + "foreign_key_table": null, + "foreign_key_column": null + } + }, + { + "collection": "ticket_orders", + "field": "purchaser_first_name", + "type": "string", + "meta": { + "collection": "ticket_orders", + "conditions": null, + "display": "raw", + "display_options": null, + "field": "purchaser_first_name", + "group": null, + "hidden": false, + "interface": "input", + "note": "Purchaser first name", + "options": null, + "readonly": false, + "required": true, + "searchable": true, + "sort": 6, + "special": null, + "translations": null, + "validation": null, + "validation_message": null, + "width": "half" + }, + "schema": { + "name": "purchaser_first_name", + "table": "ticket_orders", + "data_type": "character varying", + "default_value": null, + "max_length": 100, + "numeric_precision": null, + "numeric_scale": null, + "is_nullable": false, + "is_unique": false, + "is_indexed": false, + "is_primary_key": false, + "is_generated": false, + "generation_expression": null, + "has_auto_increment": false, + "foreign_key_table": null, + "foreign_key_column": null + } + }, + { + "collection": "ticket_orders", + "field": "purchaser_last_name", + "type": "string", + "meta": { + "collection": "ticket_orders", + "conditions": null, + "display": "raw", + "display_options": null, + "field": "purchaser_last_name", + "group": null, + "hidden": false, + "interface": "input", + "note": "Purchaser last name", + "options": null, + "readonly": false, + "required": true, + "searchable": true, + "sort": 7, + "special": null, + "translations": null, + "validation": null, + "validation_message": null, + "width": "half" + }, + "schema": { + "name": "purchaser_last_name", + "table": "ticket_orders", + "data_type": "character varying", + "default_value": null, + "max_length": 100, + "numeric_precision": null, + "numeric_scale": null, + "is_nullable": false, + "is_unique": false, + "is_indexed": false, + "is_primary_key": false, + "is_generated": false, + "generation_expression": null, + "has_auto_increment": false, + "foreign_key_table": null, + "foreign_key_column": null + } + }, + { + "collection": "ticket_orders", + "field": "purchaser_email", + "type": "string", + "meta": { + "collection": "ticket_orders", + "conditions": null, + "display": "raw", + "display_options": null, + "field": "purchaser_email", + "group": null, + "hidden": false, + "interface": "input", + "note": "Purchaser email", + "options": null, + "readonly": false, + "required": true, + "searchable": true, + "sort": 8, + "special": null, + "translations": null, + "validation": null, + "validation_message": null, + "width": "full" + }, + "schema": { + "name": "purchaser_email", + "table": "ticket_orders", + "data_type": "character varying", + "default_value": null, + "max_length": 200, + "numeric_precision": null, + "numeric_scale": null, + "is_nullable": false, + "is_unique": false, + "is_indexed": true, + "is_primary_key": false, + "is_generated": false, + "generation_expression": null, + "has_auto_increment": false, + "foreign_key_table": null, + "foreign_key_column": null + } + }, + { + "collection": "ticket_orders", + "field": "company_name", + "type": "string", + "meta": { + "collection": "ticket_orders", + "conditions": null, + "display": "raw", + "display_options": null, + "field": "company_name", + "group": null, + "hidden": false, + "interface": "input", + "note": "Company name (for company purchases)", + "options": null, + "readonly": false, + "required": false, + "searchable": true, + "sort": 9, + "special": null, + "translations": null, + "validation": null, + "validation_message": null, + "width": "full" + }, + "schema": { + "name": "company_name", + "table": "ticket_orders", + "data_type": "character varying", + "default_value": null, + "max_length": 200, + "numeric_precision": null, + "numeric_scale": null, + "is_nullable": true, + "is_unique": false, + "is_indexed": false, + "is_primary_key": false, + "is_generated": false, + "generation_expression": null, + "has_auto_increment": false, + "foreign_key_table": null, + "foreign_key_column": null + } + }, + { + "collection": "ticket_orders", + "field": "billing_address_line1", + "type": "string", + "meta": { + "collection": "ticket_orders", + "conditions": null, + "display": "raw", + "display_options": null, + "field": "billing_address_line1", + "group": null, + "hidden": false, + "interface": "input", + "note": "Street address", + "options": null, + "readonly": false, + "required": false, + "searchable": true, + "sort": 10, + "special": null, + "translations": null, + "validation": null, + "validation_message": null, + "width": "full" + }, + "schema": { + "name": "billing_address_line1", + "table": "ticket_orders", + "data_type": "character varying", + "default_value": null, + "max_length": 200, + "numeric_precision": null, + "numeric_scale": null, + "is_nullable": true, + "is_unique": false, + "is_indexed": false, + "is_primary_key": false, + "is_generated": false, + "generation_expression": null, + "has_auto_increment": false, + "foreign_key_table": null, + "foreign_key_column": null + } + }, + { + "collection": "ticket_orders", + "field": "billing_address_line2", + "type": "string", + "meta": { + "collection": "ticket_orders", + "conditions": null, + "display": "raw", + "display_options": null, + "field": "billing_address_line2", + "group": null, + "hidden": false, + "interface": "input", + "note": "Additional address line", + "options": null, + "readonly": false, + "required": false, + "searchable": true, + "sort": 11, + "special": null, + "translations": null, + "validation": null, + "validation_message": null, + "width": "full" + }, + "schema": { + "name": "billing_address_line2", + "table": "ticket_orders", + "data_type": "character varying", + "default_value": null, + "max_length": 200, + "numeric_precision": null, + "numeric_scale": null, + "is_nullable": true, + "is_unique": false, + "is_indexed": false, + "is_primary_key": false, + "is_generated": false, + "generation_expression": null, + "has_auto_increment": false, + "foreign_key_table": null, + "foreign_key_column": null + } + }, + { + "collection": "ticket_orders", + "field": "billing_city", + "type": "string", + "meta": { + "collection": "ticket_orders", + "conditions": null, + "display": "raw", + "display_options": null, + "field": "billing_city", + "group": null, + "hidden": false, + "interface": "input", + "note": "City", + "options": null, + "readonly": false, + "required": false, + "searchable": true, + "sort": 12, + "special": null, + "translations": null, + "validation": null, + "validation_message": null, + "width": "half" + }, + "schema": { + "name": "billing_city", + "table": "ticket_orders", + "data_type": "character varying", + "default_value": null, + "max_length": 100, + "numeric_precision": null, + "numeric_scale": null, + "is_nullable": true, + "is_unique": false, + "is_indexed": false, + "is_primary_key": false, + "is_generated": false, + "generation_expression": null, + "has_auto_increment": false, + "foreign_key_table": null, + "foreign_key_column": null + } + }, + { + "collection": "ticket_orders", + "field": "billing_postal_code", + "type": "string", + "meta": { + "collection": "ticket_orders", + "conditions": null, + "display": "raw", + "display_options": null, + "field": "billing_postal_code", + "group": null, + "hidden": false, + "interface": "input", + "note": "Postal code", + "options": null, + "readonly": false, + "required": false, + "searchable": true, + "sort": 13, + "special": null, + "translations": null, + "validation": null, + "validation_message": null, + "width": "half" + }, + "schema": { + "name": "billing_postal_code", + "table": "ticket_orders", + "data_type": "character varying", + "default_value": null, + "max_length": 20, + "numeric_precision": null, + "numeric_scale": null, + "is_nullable": true, + "is_unique": false, + "is_indexed": false, + "is_primary_key": false, + "is_generated": false, + "generation_expression": null, + "has_auto_increment": false, + "foreign_key_table": null, + "foreign_key_column": null + } + }, + { + "collection": "ticket_orders", + "field": "billing_country", + "type": "string", + "meta": { + "collection": "ticket_orders", + "conditions": null, + "display": "raw", + "display_options": null, + "field": "billing_country", + "group": null, + "hidden": false, + "interface": "input", + "note": "Country", + "options": null, + "readonly": false, + "required": false, + "searchable": true, + "sort": 14, + "special": null, + "translations": null, + "validation": null, + "validation_message": null, + "width": "half" + }, + "schema": { + "name": "billing_country", + "table": "ticket_orders", + "data_type": "character varying", + "default_value": null, + "max_length": 100, + "numeric_precision": null, + "numeric_scale": null, + "is_nullable": true, + "is_unique": false, + "is_indexed": false, + "is_primary_key": false, + "is_generated": false, + "generation_expression": null, + "has_auto_increment": false, + "foreign_key_table": null, + "foreign_key_column": null + } + }, + { + "collection": "ticket_orders", + "field": "billing_email", + "type": "string", + "meta": { + "collection": "ticket_orders", + "conditions": null, + "display": "raw", + "display_options": null, + "field": "billing_email", + "group": null, + "hidden": false, + "interface": "input", + "note": "Separate billing email (optional)", + "options": null, + "readonly": false, + "required": false, + "searchable": true, + "sort": 15, + "special": null, + "translations": null, + "validation": null, + "validation_message": null, + "width": "half" + }, + "schema": { + "name": "billing_email", + "table": "ticket_orders", + "data_type": "character varying", + "default_value": null, + "max_length": 200, + "numeric_precision": null, + "numeric_scale": null, + "is_nullable": true, + "is_unique": false, + "is_indexed": false, + "is_primary_key": false, + "is_generated": false, + "generation_expression": null, + "has_auto_increment": false, + "foreign_key_table": null, + "foreign_key_column": null + } + }, + { + "collection": "ticket_orders", + "field": "subtotal_cents", + "type": "integer", + "meta": { + "collection": "ticket_orders", + "conditions": null, + "display": "raw", + "display_options": null, + "field": "subtotal_cents", + "group": null, + "hidden": false, + "interface": "input", + "note": "Subtotal in cents", + "options": null, + "readonly": false, + "required": true, + "searchable": true, + "sort": 16, + "special": null, + "translations": null, + "validation": null, + "validation_message": null, + "width": "half" + }, + "schema": { + "name": "subtotal_cents", + "table": "ticket_orders", + "data_type": "integer", + "default_value": 0, + "max_length": null, + "numeric_precision": 32, + "numeric_scale": 0, + "is_nullable": false, + "is_unique": false, + "is_indexed": false, + "is_primary_key": false, + "is_generated": false, + "generation_expression": null, + "has_auto_increment": false, + "foreign_key_table": null, + "foreign_key_column": null + } + }, + { + "collection": "ticket_orders", + "field": "discount_amount_cents", + "type": "integer", + "meta": { + "collection": "ticket_orders", + "conditions": null, + "display": "raw", + "display_options": null, + "field": "discount_amount_cents", + "group": null, + "hidden": false, + "interface": "input", + "note": "Discount amount in cents", + "options": null, + "readonly": false, + "required": false, + "searchable": true, + "sort": 17, + "special": null, + "translations": null, + "validation": null, + "validation_message": null, + "width": "half" + }, + "schema": { + "name": "discount_amount_cents", + "table": "ticket_orders", + "data_type": "integer", + "default_value": 0, + "max_length": null, + "numeric_precision": 32, + "numeric_scale": 0, + "is_nullable": false, + "is_unique": false, + "is_indexed": false, + "is_primary_key": false, + "is_generated": false, + "generation_expression": null, + "has_auto_increment": false, + "foreign_key_table": null, + "foreign_key_column": null + } + }, + { + "collection": "ticket_orders", + "field": "total_cents", + "type": "integer", + "meta": { + "collection": "ticket_orders", + "conditions": null, + "display": "raw", + "display_options": null, + "field": "total_cents", + "group": null, + "hidden": false, + "interface": "input", + "note": "Total amount in cents", + "options": null, + "readonly": false, + "required": true, + "searchable": true, + "sort": 18, + "special": null, + "translations": null, + "validation": null, + "validation_message": null, + "width": "half" + }, + "schema": { + "name": "total_cents", + "table": "ticket_orders", + "data_type": "integer", + "default_value": 0, + "max_length": null, + "numeric_precision": 32, + "numeric_scale": 0, + "is_nullable": false, + "is_unique": false, + "is_indexed": false, + "is_primary_key": false, + "is_generated": false, + "generation_expression": null, + "has_auto_increment": false, + "foreign_key_table": null, + "foreign_key_column": null + } + }, + { + "collection": "ticket_orders", + "field": "discount_code_used", + "type": "string", + "meta": { + "collection": "ticket_orders", + "conditions": null, + "display": "raw", + "display_options": null, + "field": "discount_code_used", + "group": null, + "hidden": false, + "interface": "input", + "note": "Discount code that was applied", + "options": null, + "readonly": false, + "required": false, + "searchable": true, + "sort": 19, + "special": null, + "translations": null, + "validation": null, + "validation_message": null, + "width": "half" + }, + "schema": { + "name": "discount_code_used", + "table": "ticket_orders", + "data_type": "character varying", + "default_value": null, + "max_length": 50, + "numeric_precision": null, + "numeric_scale": null, + "is_nullable": true, + "is_unique": false, + "is_indexed": false, + "is_primary_key": false, + "is_generated": false, + "generation_expression": null, + "has_auto_increment": false, + "foreign_key_table": null, + "foreign_key_column": null + } + }, + { + "collection": "ticket_orders", + "field": "stripe_checkout_session_id", + "type": "string", + "meta": { + "collection": "ticket_orders", + "conditions": null, + "display": "raw", + "display_options": null, + "field": "stripe_checkout_session_id", + "group": null, + "hidden": false, + "interface": "input", + "note": "Stripe Checkout Session ID", + "options": null, + "readonly": true, + "required": false, + "searchable": true, + "sort": 20, + "special": null, + "translations": null, + "validation": null, + "validation_message": null, + "width": "half" + }, + "schema": { + "name": "stripe_checkout_session_id", + "table": "ticket_orders", + "data_type": "character varying", + "default_value": null, + "max_length": 255, + "numeric_precision": null, + "numeric_scale": null, + "is_nullable": true, + "is_unique": false, + "is_indexed": true, + "is_primary_key": false, + "is_generated": false, + "generation_expression": null, + "has_auto_increment": false, + "foreign_key_table": null, + "foreign_key_column": null + } + }, + { + "collection": "ticket_orders", + "field": "stripe_payment_intent_id", + "type": "string", + "meta": { + "collection": "ticket_orders", + "conditions": null, + "display": "raw", + "display_options": null, + "field": "stripe_payment_intent_id", + "group": null, + "hidden": false, + "interface": "input", + "note": "Stripe Payment Intent ID", + "options": null, + "readonly": true, + "required": false, + "searchable": true, + "sort": 21, + "special": null, + "translations": null, + "validation": null, + "validation_message": null, + "width": "half" + }, + "schema": { + "name": "stripe_payment_intent_id", + "table": "ticket_orders", + "data_type": "character varying", + "default_value": null, + "max_length": 255, + "numeric_precision": null, + "numeric_scale": null, + "is_nullable": true, + "is_unique": false, + "is_indexed": false, + "is_primary_key": false, + "is_generated": false, + "generation_expression": null, + "has_auto_increment": false, + "foreign_key_table": null, + "foreign_key_column": null + } + }, + { + "collection": "ticket_orders", + "field": "date_created", + "type": "timestamp", + "meta": { + "collection": "ticket_orders", + "conditions": null, + "display": "datetime", + "display_options": { + "relative": true + }, + "field": "date_created", + "group": null, + "hidden": false, + "interface": "datetime", + "note": "Order creation timestamp", + "options": null, + "readonly": true, + "required": false, + "searchable": true, + "sort": 22, + "special": [ + "date-created" + ], + "translations": null, + "validation": null, + "validation_message": null, + "width": "half" + }, + "schema": { + "name": "date_created", + "table": "ticket_orders", + "data_type": "timestamp with time zone", + "default_value": null, + "max_length": null, + "numeric_precision": null, + "numeric_scale": null, + "is_nullable": true, + "is_unique": false, + "is_indexed": false, + "is_primary_key": false, + "is_generated": false, + "generation_expression": null, + "has_auto_increment": false, + "foreign_key_table": null, + "foreign_key_column": null + } + }, + { + "collection": "ticket_orders", + "field": "date_paid", + "type": "timestamp", + "meta": { + "collection": "ticket_orders", + "conditions": null, + "display": "datetime", + "display_options": { + "relative": true + }, + "field": "date_paid", + "group": null, + "hidden": false, + "interface": "datetime", + "note": "Payment completion timestamp", + "options": null, + "readonly": false, + "required": false, + "searchable": true, + "sort": 23, + "special": null, + "translations": null, + "validation": null, + "validation_message": null, + "width": "half" + }, + "schema": { + "name": "date_paid", + "table": "ticket_orders", + "data_type": "timestamp with time zone", + "default_value": null, + "max_length": null, + "numeric_precision": null, + "numeric_scale": null, + "is_nullable": true, + "is_unique": false, + "is_indexed": false, + "is_primary_key": false, + "is_generated": false, + "generation_expression": null, + "has_auto_increment": false, + "foreign_key_table": null, + "foreign_key_column": null + } + }, + { + "collection": "tickets", + "field": "id", + "type": "uuid", + "meta": { + "collection": "tickets", + "conditions": null, + "display": null, + "display_options": null, + "field": "id", + "group": null, + "hidden": true, + "interface": "input", + "note": null, + "options": null, + "readonly": true, + "required": false, + "searchable": true, + "sort": 1, + "special": [ + "uuid" + ], + "translations": null, + "validation": null, + "validation_message": null, + "width": "full" + }, + "schema": { + "name": "id", + "table": "tickets", + "data_type": "uuid", + "default_value": null, + "max_length": null, + "numeric_precision": null, + "numeric_scale": null, + "is_nullable": false, + "is_unique": true, + "is_indexed": false, + "is_primary_key": true, + "is_generated": false, + "generation_expression": null, + "has_auto_increment": false, + "foreign_key_table": null, + "foreign_key_column": null + } + }, + { + "collection": "tickets", + "field": "ticket_code", + "type": "string", + "meta": { + "collection": "tickets", + "conditions": null, + "display": "raw", + "display_options": null, + "field": "ticket_code", + "group": null, + "hidden": false, + "interface": "input", + "note": "Unique ticket code for QR (e.g., TKT-ABC123)", + "options": null, + "readonly": false, + "required": true, + "searchable": true, + "sort": 2, + "special": null, + "translations": null, + "validation": null, + "validation_message": null, + "width": "half" + }, + "schema": { + "name": "ticket_code", + "table": "tickets", + "data_type": "character varying", + "default_value": null, + "max_length": 50, + "numeric_precision": null, + "numeric_scale": null, + "is_nullable": false, + "is_unique": true, + "is_indexed": true, + "is_primary_key": false, + "is_generated": false, + "generation_expression": null, + "has_auto_increment": false, + "foreign_key_table": null, + "foreign_key_column": null + } + }, + { + "collection": "tickets", + "field": "order", + "type": "uuid", + "meta": { + "collection": "tickets", + "conditions": null, + "display": "related-values", + "display_options": { + "template": "{{order_number}}" + }, + "field": "order", + "group": null, + "hidden": false, + "interface": "select-dropdown-m2o", + "note": "Parent order", + "options": { + "template": "{{order_number}}" + }, + "readonly": false, + "required": true, + "searchable": true, + "sort": 3, + "special": [ + "m2o" + ], + "translations": null, + "validation": null, + "validation_message": null, + "width": "half" + }, + "schema": { + "name": "order", + "table": "tickets", + "data_type": "uuid", + "default_value": null, + "max_length": null, + "numeric_precision": null, + "numeric_scale": null, + "is_nullable": false, + "is_unique": false, + "is_indexed": true, + "is_primary_key": false, + "is_generated": false, + "generation_expression": null, + "has_auto_increment": false, + "foreign_key_table": "ticket_orders", + "foreign_key_column": "id" + } + }, + { + "collection": "tickets", + "field": "conference", + "type": "uuid", + "meta": { + "collection": "tickets", + "conditions": null, + "display": "related-values", + "display_options": { + "template": "{{title}}" + }, + "field": "conference", + "group": null, + "hidden": false, + "interface": "select-dropdown-m2o", + "note": "Conference reference", + "options": { + "template": "{{title}}" + }, + "readonly": false, + "required": true, + "searchable": true, + "sort": 4, + "special": [ + "m2o" + ], + "translations": null, + "validation": null, + "validation_message": null, + "width": "half" + }, + "schema": { + "name": "conference", + "table": "tickets", + "data_type": "uuid", + "default_value": null, + "max_length": null, + "numeric_precision": null, + "numeric_scale": null, + "is_nullable": false, + "is_unique": false, + "is_indexed": true, + "is_primary_key": false, + "is_generated": false, + "generation_expression": null, + "has_auto_increment": false, + "foreign_key_table": "conferences", + "foreign_key_column": "id" + } + }, + { + "collection": "tickets", + "field": "attendee_first_name", + "type": "string", + "meta": { + "collection": "tickets", + "conditions": null, + "display": "raw", + "display_options": null, + "field": "attendee_first_name", + "group": null, + "hidden": false, + "interface": "input", + "note": "Attendee first name", + "options": null, + "readonly": false, + "required": true, + "searchable": true, + "sort": 5, + "special": null, + "translations": null, + "validation": null, + "validation_message": null, + "width": "half" + }, + "schema": { + "name": "attendee_first_name", + "table": "tickets", + "data_type": "character varying", + "default_value": null, + "max_length": 100, + "numeric_precision": null, + "numeric_scale": null, + "is_nullable": false, + "is_unique": false, + "is_indexed": false, + "is_primary_key": false, + "is_generated": false, + "generation_expression": null, + "has_auto_increment": false, + "foreign_key_table": null, + "foreign_key_column": null + } + }, + { + "collection": "tickets", + "field": "attendee_last_name", + "type": "string", + "meta": { + "collection": "tickets", + "conditions": null, + "display": "raw", + "display_options": null, + "field": "attendee_last_name", + "group": null, + "hidden": false, + "interface": "input", + "note": "Attendee last name", + "options": null, + "readonly": false, + "required": true, + "searchable": true, + "sort": 6, + "special": null, + "translations": null, + "validation": null, + "validation_message": null, + "width": "half" + }, + "schema": { + "name": "attendee_last_name", + "table": "tickets", + "data_type": "character varying", + "default_value": null, + "max_length": 100, + "numeric_precision": null, + "numeric_scale": null, + "is_nullable": false, + "is_unique": false, + "is_indexed": false, + "is_primary_key": false, + "is_generated": false, + "generation_expression": null, + "has_auto_increment": false, + "foreign_key_table": null, + "foreign_key_column": null + } + }, + { + "collection": "tickets", + "field": "attendee_email", + "type": "string", + "meta": { + "collection": "tickets", + "conditions": null, + "display": "raw", + "display_options": null, + "field": "attendee_email", + "group": null, + "hidden": false, + "interface": "input", + "note": "Attendee email", + "options": null, + "readonly": false, + "required": true, + "searchable": true, + "sort": 7, + "special": null, + "translations": null, + "validation": null, + "validation_message": null, + "width": "full" + }, + "schema": { + "name": "attendee_email", + "table": "tickets", + "data_type": "character varying", + "default_value": null, + "max_length": 200, + "numeric_precision": null, + "numeric_scale": null, + "is_nullable": false, + "is_unique": false, + "is_indexed": true, + "is_primary_key": false, + "is_generated": false, + "generation_expression": null, + "has_auto_increment": false, + "foreign_key_table": null, + "foreign_key_column": null + } + }, + { + "collection": "tickets", + "field": "ticket_type", + "type": "string", + "meta": { + "collection": "tickets", + "conditions": null, + "display": "labels", + "display_options": { + "showAsDot": true, + "choices": [ + { + "value": "early_bird", + "background": "#10B981", + "foreground": "#FFFFFF" + }, + { + "value": "regular", + "background": "#3B82F6", + "foreground": "#FFFFFF" + }, + { + "value": "discounted", + "background": "#8B5CF6", + "foreground": "#FFFFFF" + } + ] + }, + "field": "ticket_type", + "group": null, + "hidden": false, + "interface": "select-dropdown", + "note": "Ticket type", + "options": { + "choices": [ + { + "text": "Early Bird", + "value": "early_bird" + }, + { + "text": "Regular", + "value": "regular" + }, + { + "text": "Discounted", + "value": "discounted" + } + ] + }, + "readonly": false, + "required": true, + "searchable": true, + "sort": 8, + "special": null, + "translations": null, + "validation": null, + "validation_message": null, + "width": "half" + }, + "schema": { + "name": "ticket_type", + "table": "tickets", + "data_type": "character varying", + "default_value": "regular", + "max_length": 50, + "numeric_precision": null, + "numeric_scale": null, + "is_nullable": false, + "is_unique": false, + "is_indexed": false, + "is_primary_key": false, + "is_generated": false, + "generation_expression": null, + "has_auto_increment": false, + "foreign_key_table": null, + "foreign_key_column": null + } + }, + { + "collection": "tickets", + "field": "price_cents", + "type": "integer", + "meta": { + "collection": "tickets", + "conditions": null, + "display": "raw", + "display_options": null, + "field": "price_cents", + "group": null, + "hidden": false, + "interface": "input", + "note": "Price paid in cents", + "options": null, + "readonly": false, + "required": true, + "searchable": true, + "sort": 9, + "special": null, + "translations": null, + "validation": null, + "validation_message": null, + "width": "half" + }, + "schema": { + "name": "price_cents", + "table": "tickets", + "data_type": "integer", + "default_value": 0, + "max_length": null, + "numeric_precision": 32, + "numeric_scale": 0, + "is_nullable": false, + "is_unique": false, + "is_indexed": false, + "is_primary_key": false, + "is_generated": false, + "generation_expression": null, + "has_auto_increment": false, + "foreign_key_table": null, + "foreign_key_column": null + } + }, + { + "collection": "tickets", + "field": "status", + "type": "string", + "meta": { + "collection": "tickets", + "conditions": null, + "display": "labels", + "display_options": { + "showAsDot": true, + "choices": [ + { + "value": "valid", + "background": "#10B981", + "foreground": "#FFFFFF" + }, + { + "value": "checked_in", + "background": "#3B82F6", + "foreground": "#FFFFFF" + }, + { + "value": "cancelled", + "background": "#EF4444", + "foreground": "#FFFFFF" + } + ] + }, + "field": "status", + "group": null, + "hidden": false, + "interface": "select-dropdown", + "note": "Ticket status", + "options": { + "choices": [ + { + "text": "Valid", + "value": "valid" + }, + { + "text": "Checked In", + "value": "checked_in" + }, + { + "text": "Cancelled", + "value": "cancelled" + } + ] + }, + "readonly": false, + "required": true, + "searchable": true, + "sort": 10, + "special": null, + "translations": null, + "validation": null, + "validation_message": null, + "width": "half" + }, + "schema": { + "name": "status", + "table": "tickets", + "data_type": "character varying", + "default_value": "valid", + "max_length": 50, + "numeric_precision": null, + "numeric_scale": null, + "is_nullable": false, + "is_unique": false, + "is_indexed": true, + "is_primary_key": false, + "is_generated": false, + "generation_expression": null, + "has_auto_increment": false, + "foreign_key_table": null, + "foreign_key_column": null + } + }, + { + "collection": "tickets", + "field": "checked_in_at", + "type": "timestamp", + "meta": { + "collection": "tickets", + "conditions": null, + "display": "datetime", + "display_options": { + "relative": true + }, + "field": "checked_in_at", + "group": null, + "hidden": false, + "interface": "datetime", + "note": "Check-in timestamp", + "options": null, + "readonly": false, + "required": false, + "searchable": true, + "sort": 11, + "special": null, + "translations": null, + "validation": null, + "validation_message": null, + "width": "half" + }, + "schema": { + "name": "checked_in_at", + "table": "tickets", + "data_type": "timestamp with time zone", + "default_value": null, + "max_length": null, + "numeric_precision": null, + "numeric_scale": null, + "is_nullable": true, + "is_unique": false, + "is_indexed": false, + "is_primary_key": false, + "is_generated": false, + "generation_expression": null, + "has_auto_increment": false, + "foreign_key_table": null, + "foreign_key_column": null + } + }, + { + "collection": "tickets", + "field": "date_created", + "type": "timestamp", + "meta": { + "collection": "tickets", + "conditions": null, + "display": "datetime", + "display_options": { + "relative": true + }, + "field": "date_created", + "group": null, + "hidden": false, + "interface": "datetime", + "note": "Ticket creation timestamp", + "options": null, + "readonly": true, + "required": false, + "searchable": true, + "sort": 12, + "special": [ + "date-created" + ], + "translations": null, + "validation": null, + "validation_message": null, + "width": "half" + }, + "schema": { + "name": "date_created", + "table": "tickets", + "data_type": "timestamp with time zone", + "default_value": null, + "max_length": null, + "numeric_precision": null, + "numeric_scale": null, + "is_nullable": true, + "is_unique": false, + "is_indexed": false, + "is_primary_key": false, + "is_generated": false, + "generation_expression": null, + "has_auto_increment": false, + "foreign_key_table": null, + "foreign_key_column": null + } + }, + { + "collection": "ticket_orders", + "field": "tickets", + "type": "alias", + "meta": { + "collection": "ticket_orders", + "conditions": null, + "display": "related-values", + "display_options": { + "template": "{{ticket_code}} - {{attendee_first_name}} {{attendee_last_name}}" + }, + "field": "tickets", + "group": null, + "hidden": false, + "interface": "list-o2m", + "note": "Tickets in this order", + "options": { + "template": "{{ticket_code}} - {{attendee_first_name}} {{attendee_last_name}}" + }, + "readonly": false, + "required": false, + "searchable": true, + "sort": 24, + "special": [ + "o2m" + ], + "translations": null, + "validation": null, + "validation_message": null, + "width": "full" + }, + "schema": null + }, + { + "collection": "ticket_settings", + "field": "id", + "type": "integer", + "meta": { + "collection": "ticket_settings", + "conditions": null, + "display": null, + "display_options": null, + "field": "id", + "group": null, + "hidden": true, + "interface": "input", + "note": null, + "options": null, + "readonly": true, + "required": false, + "searchable": true, + "sort": 1, + "special": null, + "translations": null, + "validation": null, + "validation_message": null, + "width": "full" + }, + "schema": { + "name": "id", + "table": "ticket_settings", "data_type": "integer", "default_value": null, "max_length": null, @@ -31654,7 +33935,7 @@ "is_unique": true, "is_indexed": false, "is_primary_key": true, - "is_generated": false, + "is_generated": true, "generation_expression": null, "has_auto_increment": true, "foreign_key_table": null, @@ -31662,39 +33943,39 @@ } }, { - "collection": "email_templates", - "field": "sort", + "collection": "ticket_settings", + "field": "early_bird_price_cents", "type": "integer", "meta": { - "collection": "email_templates", + "collection": "ticket_settings", "conditions": null, - "display": null, + "display": "raw", "display_options": null, - "field": "sort", + "field": "early_bird_price_cents", "group": null, - "hidden": true, + "hidden": false, "interface": "input", - "note": null, + "note": "Early bird price in cents (e.g., 24900 for €249.00)", "options": null, "readonly": false, - "required": false, + "required": true, "searchable": true, "sort": 2, "special": null, "translations": null, "validation": null, "validation_message": null, - "width": "full" + "width": "half" }, "schema": { - "name": "sort", - "table": "email_templates", + "name": "early_bird_price_cents", + "table": "ticket_settings", "data_type": "integer", - "default_value": null, + "default_value": 24900, "max_length": null, "numeric_precision": 32, "numeric_scale": 0, - "is_nullable": true, + "is_nullable": false, "is_unique": false, "is_indexed": false, "is_primary_key": false, @@ -31706,22 +33987,20 @@ } }, { - "collection": "email_templates", - "field": "key", - "type": "string", + "collection": "ticket_settings", + "field": "regular_price_cents", + "type": "integer", "meta": { - "collection": "email_templates", + "collection": "ticket_settings", "conditions": null, - "display": null, + "display": "raw", "display_options": null, - "field": "key", + "field": "regular_price_cents", "group": null, "hidden": false, "interface": "input", - "note": "Unique identifier for the template (used in code)", - "options": { - "font": "monospace" - }, + "note": "Regular price in cents (e.g., 34900 for €349.00)", + "options": null, "readonly": false, "required": true, "searchable": true, @@ -31733,15 +34012,15 @@ "width": "half" }, "schema": { - "name": "key", - "table": "email_templates", - "data_type": "character varying", - "default_value": null, - "max_length": 255, - "numeric_precision": null, - "numeric_scale": null, + "name": "regular_price_cents", + "table": "ticket_settings", + "data_type": "integer", + "default_value": 34900, + "max_length": null, + "numeric_precision": 32, + "numeric_scale": 0, "is_nullable": false, - "is_unique": true, + "is_unique": false, "is_indexed": false, "is_primary_key": false, "is_generated": false, @@ -31752,19 +34031,19 @@ } }, { - "collection": "email_templates", - "field": "name", - "type": "string", + "collection": "ticket_settings", + "field": "discounted_price_cents", + "type": "integer", "meta": { - "collection": "email_templates", + "collection": "ticket_settings", "conditions": null, - "display": null, + "display": "raw", "display_options": null, - "field": "name", + "field": "discounted_price_cents", "group": null, "hidden": false, "interface": "input", - "note": "Display name for the template", + "note": "Discounted price in cents (e.g., 29900 for €299.00)", "options": null, "readonly": false, "required": true, @@ -31777,13 +34056,13 @@ "width": "half" }, "schema": { - "name": "name", - "table": "email_templates", - "data_type": "character varying", - "default_value": null, - "max_length": 255, - "numeric_precision": null, - "numeric_scale": null, + "name": "discounted_price_cents", + "table": "ticket_settings", + "data_type": "integer", + "default_value": 29900, + "max_length": null, + "numeric_precision": 32, + "numeric_scale": 0, "is_nullable": false, "is_unique": false, "is_indexed": false, @@ -31796,39 +34075,39 @@ } }, { - "collection": "email_templates", - "field": "description", - "type": "text", + "collection": "ticket_settings", + "field": "early_bird_deadline", + "type": "timestamp", "meta": { - "collection": "email_templates", + "collection": "ticket_settings", "conditions": null, - "display": null, + "display": "datetime", "display_options": null, - "field": "description", + "field": "early_bird_deadline", "group": null, "hidden": false, - "interface": "input-multiline", - "note": "Description of when this template is used", + "interface": "datetime", + "note": "Early bird pricing ends after this date", "options": null, "readonly": false, - "required": false, + "required": true, "searchable": true, "sort": 5, "special": null, "translations": null, "validation": null, "validation_message": null, - "width": "full" + "width": "half" }, "schema": { - "name": "description", - "table": "email_templates", - "data_type": "text", + "name": "early_bird_deadline", + "table": "ticket_settings", + "data_type": "timestamp with time zone", "default_value": null, "max_length": null, "numeric_precision": null, "numeric_scale": null, - "is_nullable": true, + "is_nullable": false, "is_unique": false, "is_indexed": false, "is_primary_key": false, @@ -31840,39 +34119,39 @@ } }, { - "collection": "email_templates", - "field": "subject", + "collection": "ticket_settings", + "field": "discount_code", "type": "string", "meta": { - "collection": "email_templates", + "collection": "ticket_settings", "conditions": null, - "display": null, + "display": "raw", "display_options": null, - "field": "subject", + "field": "discount_code", "group": null, "hidden": false, "interface": "input", - "note": "Email subject line. Supports Handlebars variables like {{first_name}}", + "note": "Valid discount code (case-insensitive)", "options": null, "readonly": false, - "required": true, + "required": false, "searchable": true, "sort": 6, "special": null, "translations": null, "validation": null, "validation_message": null, - "width": "full" + "width": "half" }, "schema": { - "name": "subject", - "table": "email_templates", + "name": "discount_code", + "table": "ticket_settings", "data_type": "character varying", "default_value": null, - "max_length": 255, + "max_length": 50, "numeric_precision": null, "numeric_scale": null, - "is_nullable": false, + "is_nullable": true, "is_unique": false, "is_indexed": false, "is_primary_key": false, @@ -31884,41 +34163,38 @@ } }, { - "collection": "email_templates", - "field": "body_html", - "type": "text", + "collection": "ticket_orders", + "field": "vat_amount_cents", + "type": "integer", "meta": { - "collection": "email_templates", + "collection": "ticket_orders", "conditions": null, - "display": null, + "display": "raw", "display_options": null, - "field": "body_html", + "field": "vat_amount_cents", "group": null, "hidden": false, - "interface": "input-code", - "note": "HTML email body. Supports Handlebars variables.", - "options": { - "language": "htmlmixed", - "lineNumber": true - }, + "interface": "input", + "note": "VAT amount in cents (19%)", + "options": null, "readonly": false, - "required": true, + "required": false, "searchable": true, - "sort": 7, + "sort": 19, "special": null, "translations": null, "validation": null, "validation_message": null, - "width": "full" + "width": "half" }, "schema": { - "name": "body_html", - "table": "email_templates", - "data_type": "text", - "default_value": null, + "name": "vat_amount_cents", + "table": "ticket_orders", + "data_type": "integer", + "default_value": 0, "max_length": null, - "numeric_precision": null, - "numeric_scale": null, + "numeric_precision": 32, + "numeric_scale": 0, "is_nullable": false, "is_unique": false, "is_indexed": false, @@ -31931,37 +34207,82 @@ } }, { - "collection": "email_templates", - "field": "date_updated", - "type": "timestamp", + "collection": "ticket_orders", + "field": "total_gross_cents", + "type": "integer", "meta": { - "collection": "email_templates", + "collection": "ticket_orders", "conditions": null, - "display": null, + "display": "raw", "display_options": null, - "field": "date_updated", + "field": "total_gross_cents", "group": null, - "hidden": true, - "interface": "datetime", - "note": null, + "hidden": false, + "interface": "input", + "note": "Gross total in cents (including VAT)", "options": null, "readonly": false, "required": false, "searchable": true, - "sort": 8, + "sort": 20, + "special": null, + "translations": null, + "validation": null, + "validation_message": null, + "width": "half" + }, + "schema": { + "name": "total_gross_cents", + "table": "ticket_orders", + "data_type": "integer", + "default_value": 0, + "max_length": null, + "numeric_precision": 32, + "numeric_scale": 0, + "is_nullable": false, + "is_unique": false, + "is_indexed": false, + "is_primary_key": false, + "is_generated": false, + "generation_expression": null, + "has_auto_increment": false, + "foreign_key_table": null, + "foreign_key_column": null + } + }, + { + "collection": "ticket_orders", + "field": "attendees_json", + "type": "json", + "meta": { + "collection": "ticket_orders", + "conditions": null, + "display": "raw", + "display_options": null, + "field": "attendees_json", + "group": null, + "hidden": false, + "interface": "input-code", + "note": "JSON array of attendees [{firstName, lastName, email}]", + "options": { + "language": "json" + }, + "readonly": true, + "required": false, + "searchable": false, + "sort": 22, "special": [ - "date-updated", - "cast-timestamp" + "cast-json" ], "translations": null, "validation": null, "validation_message": null, - "width": "half" + "width": "full" }, "schema": { - "name": "date_updated", - "table": "email_templates", - "data_type": "timestamp with time zone", + "name": "attendees_json", + "table": "ticket_orders", + "data_type": "json", "default_value": null, "max_length": null, "numeric_precision": null, @@ -31978,38 +34299,70 @@ } }, { - "collection": "email_templates", - "field": "user_updated", - "type": "uuid", + "collection": "ticket_orders", + "field": "ticket_type", + "type": "string", "meta": { - "collection": "email_templates", + "collection": "ticket_orders", "conditions": null, - "display": null, - "display_options": null, - "field": "user_updated", + "display": "labels", + "display_options": { + "showAsDot": true, + "choices": [ + { + "value": "early_bird", + "background": "#10B981", + "foreground": "#FFFFFF" + }, + { + "value": "regular", + "background": "#3B82F6", + "foreground": "#FFFFFF" + }, + { + "value": "discounted", + "background": "#8B5CF6", + "foreground": "#FFFFFF" + } + ] + }, + "field": "ticket_type", "group": null, - "hidden": true, - "interface": "select-dropdown-m2o", - "note": null, - "options": null, + "hidden": false, + "interface": "select-dropdown", + "note": "Type of tickets in this order", + "options": { + "choices": [ + { + "text": "Early Bird", + "value": "early_bird" + }, + { + "text": "Regular", + "value": "regular" + }, + { + "text": "Discounted", + "value": "discounted" + } + ] + }, "readonly": false, "required": false, "searchable": true, - "sort": 9, - "special": [ - "user-updated" - ], + "sort": 22, + "special": null, "translations": null, "validation": null, "validation_message": null, "width": "half" }, "schema": { - "name": "user_updated", - "table": "email_templates", - "data_type": "uuid", - "default_value": null, - "max_length": null, + "name": "ticket_type", + "table": "ticket_orders", + "data_type": "character varying", + "default_value": "regular", + "max_length": 50, "numeric_precision": null, "numeric_scale": null, "is_nullable": true, @@ -32019,8 +34372,8 @@ "is_generated": false, "generation_expression": null, "has_auto_increment": false, - "foreign_key_table": "directus_users", - "foreign_key_column": "id" + "foreign_key_table": null, + "foreign_key_column": null } } ], @@ -35463,6 +37816,81 @@ "on_update": "NO ACTION", "on_delete": "NO ACTION" } + }, + { + "collection": "ticket_orders", + "field": "conference", + "related_collection": "conferences", + "meta": { + "junction_field": null, + "many_collection": "ticket_orders", + "many_field": "conference", + "one_allowed_collections": null, + "one_collection": "conferences", + "one_collection_field": null, + "one_deselect_action": "nullify", + "one_field": null, + "sort_field": null + }, + "schema": { + "table": "ticket_orders", + "column": "conference", + "foreign_key_table": "conferences", + "foreign_key_column": "id", + "on_update": "NO ACTION", + "on_delete": "CASCADE", + "constraint_name": null + } + }, + { + "collection": "tickets", + "field": "order", + "related_collection": "ticket_orders", + "meta": { + "junction_field": null, + "many_collection": "tickets", + "many_field": "order", + "one_allowed_collections": null, + "one_collection": "ticket_orders", + "one_collection_field": null, + "one_deselect_action": "nullify", + "one_field": "tickets", + "sort_field": null + }, + "schema": { + "table": "tickets", + "column": "order", + "foreign_key_table": "ticket_orders", + "foreign_key_column": "id", + "on_update": "NO ACTION", + "on_delete": "CASCADE", + "constraint_name": null + } + }, + { + "collection": "tickets", + "field": "conference", + "related_collection": "conferences", + "meta": { + "junction_field": null, + "many_collection": "tickets", + "many_field": "conference", + "one_allowed_collections": null, + "one_collection": "conferences", + "one_collection_field": null, + "one_deselect_action": "nullify", + "one_field": null, + "sort_field": null + }, + "schema": { + "table": "tickets", + "column": "conference", + "foreign_key_table": "conferences", + "foreign_key_column": "id", + "on_update": "NO ACTION", + "on_delete": "CASCADE", + "constraint_name": null + } } ] } \ No newline at end of file diff --git a/directus-cms/utils/setup-email-templates.mjs b/directus-cms/utils/setup-email-templates.mjs index 6f0f661..76f7ec5 100644 --- a/directus-cms/utils/setup-email-templates.mjs +++ b/directus-cms/utils/setup-email-templates.mjs @@ -212,6 +212,103 @@ const EMAIL_TEMPLATES = [

Bitte überprüfe die eingereichten Informationen im Directus CMS.

+`, + }, + { + key: 'ticket_order_confirmation', + name: 'Ticket Order Confirmation (Purchaser)', + description: 'Email sent to the purchaser with all tickets after successful payment', + subject: 'Deine Tickets für die {{conference_title}} - Bestellnummer {{order_number}}', + body_html: ` + + + + + + +
+

programmier.bar

+

Deine Tickets für die {{conference_title}}

+
+ +
+

Hallo {{purchaser_name}}!

+ +

Vielen Dank für deine Bestellung! Hier sind deine Tickets:

+ +
+

Bestellnummer: {{order_number}}

+

Gesamtbetrag: {{total_amount}} (inkl. 19% MwSt.)

+
+ +

Deine Tickets

+ + {{{ticket_list_html}}} + +
+ +

+ Bitte bringe diese E-Mail oder die QR-Codes auf deinem Smartphone zum Event mit. + Falls du Fragen hast, kontaktiere uns unter + podcast@programmier.bar. +

+ +

Wir freuen uns auf dich!

+ +

Dein programmier.bar Team

+ +
+

+ Lotum media GmbH
+ Am Goldstein 1 | 61231 Bad Nauheim | Deutschland +

+

+ Tel.: +49 (0) 6032 – 92 55 07 0
+ Mail: podcast@programmier.bar
+ Web: www.programmier.bar +

+
+
+ +`, + }, + { + key: 'ticket_order_attendee', + name: 'Ticket Order Confirmation (Attendee)', + description: 'Email sent to individual attendees when they are different from the purchaser', + subject: 'Dein Ticket für die {{conference_title}}', + body_html: ` + + + + + + +
+

programmier.bar

+

Dein Ticket für die {{conference_title}}

+
+ +
+

Hallo {{attendee_name}}!

+ +

Ein Ticket für die {{conference_title}} wurde für dich gebucht. Hier ist dein Ticket:

+ +
+

Ticket-Code: {{ticket_code}}

+
+ QR Code +
+

+ Bitte zeige diesen QR-Code beim Check-in vor. +

+
+ +

Wir freuen uns auf dich!

+ +

Dein programmier.bar Team

+
+ `, }, { diff --git a/directus-cms/utils/setup-ticket-settings.mjs b/directus-cms/utils/setup-ticket-settings.mjs new file mode 100644 index 0000000..f15fc39 --- /dev/null +++ b/directus-cms/utils/setup-ticket-settings.mjs @@ -0,0 +1,116 @@ +#!/usr/bin/env node +/** + * Initialize ticket_settings singleton with default values. + * Run with: node utils/setup-ticket-settings.mjs + */ + +import 'dotenv/config' + +const DIRECTUS_URL = process.env.DIRECTUS_URL || 'http://localhost:8055' +const ADMIN_EMAIL = process.env.ADMIN_EMAIL || 'admin@example.com' +const ADMIN_PASSWORD = process.env.ADMIN_PASSWORD || 'admin' + +async function getAdminToken() { + const response = await fetch(`${DIRECTUS_URL}/auth/login`, { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ + email: ADMIN_EMAIL, + password: ADMIN_PASSWORD, + }), + }) + + if (!response.ok) { + throw new Error(`Failed to authenticate: ${response.status}`) + } + + const data = await response.json() + return data.data.access_token +} + +async function main() { + console.log('=== Setting up ticket_settings ===\n') + console.log(`Directus URL: ${DIRECTUS_URL}`) + + const token = await getAdminToken() + console.log('Authenticated successfully\n') + + // Check if singleton already has data + const checkResponse = await fetch(`${DIRECTUS_URL}/items/ticket_settings`, { + headers: { Authorization: `Bearer ${token}` }, + }) + + if (!checkResponse.ok) { + console.error('Failed to check ticket_settings:', checkResponse.status) + const text = await checkResponse.text() + console.error(text) + process.exit(1) + } + + const existing = await checkResponse.json() + + // Default values + const defaultSettings = { + early_bird_price_cents: 24900, // €249.00 + regular_price_cents: 34900, // €349.00 + discounted_price_cents: 29900, // €299.00 + early_bird_deadline: '2026-03-31T23:59:59', + discount_code: 'EARLYDEV', + } + + if (existing.data && existing.data.id) { + // Update existing record + console.log('Updating existing ticket_settings...') + const updateResponse = await fetch(`${DIRECTUS_URL}/items/ticket_settings`, { + method: 'PATCH', + headers: { + 'Content-Type': 'application/json', + Authorization: `Bearer ${token}`, + }, + body: JSON.stringify(defaultSettings), + }) + + if (!updateResponse.ok) { + console.error('Failed to update:', updateResponse.status) + const text = await updateResponse.text() + console.error(text) + process.exit(1) + } + + console.log('Updated ticket_settings with default values') + } else { + // Create new record (shouldn't happen for singletons, but just in case) + console.log('Creating ticket_settings...') + const createResponse = await fetch(`${DIRECTUS_URL}/items/ticket_settings`, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + Authorization: `Bearer ${token}`, + }, + body: JSON.stringify(defaultSettings), + }) + + if (!createResponse.ok) { + console.error('Failed to create:', createResponse.status) + const text = await createResponse.text() + console.error(text) + process.exit(1) + } + + console.log('Created ticket_settings with default values') + } + + console.log('\nDefault values:') + console.log(` Early Bird Price: €${(defaultSettings.early_bird_price_cents / 100).toFixed(2)}`) + console.log(` Regular Price: €${(defaultSettings.regular_price_cents / 100).toFixed(2)}`) + console.log(` Discounted Price: €${(defaultSettings.discounted_price_cents / 100).toFixed(2)}`) + console.log(` Early Bird Deadline: ${defaultSettings.early_bird_deadline}`) + console.log(` Discount Code: ${defaultSettings.discount_code}`) + + console.log('\n=== Done ===') +} + +main().catch((err) => { + console.error('Error:', err.message) + process.exit(1) +}) diff --git a/directus-cms/utils/update-schema-ticketing.mjs b/directus-cms/utils/update-schema-ticketing.mjs new file mode 100644 index 0000000..cfe9067 --- /dev/null +++ b/directus-cms/utils/update-schema-ticketing.mjs @@ -0,0 +1,2473 @@ +#!/usr/bin/env node +/** + * Script to update schema.json with ticketing collections. + * Adds ticket_orders and tickets collections for conference ticketing. + * + * Run with: node utils/update-schema-ticketing.mjs + */ + +import { readFileSync, writeFileSync } from 'fs' +import { dirname, join } from 'path' +import { fileURLToPath } from 'url' + +const __dirname = dirname(fileURLToPath(import.meta.url)) +const schemaPath = join(__dirname, '..', 'schema.json') + +// Read existing schema +const schema = JSON.parse(readFileSync(schemaPath, 'utf-8')) + +// Helper to find max sort value in a collection +function getMaxSort(fields, collection) { + return fields.filter((f) => f.collection === collection).reduce((max, f) => Math.max(max, f.meta?.sort || 0), 0) +} + +// Helper to check if field exists +function fieldExists(fields, collection, fieldName) { + return fields.some((f) => f.collection === collection && f.field === fieldName) +} + +// Helper to check if collection exists +function collectionExists(collections, name) { + return collections.some((c) => c.collection === name) +} + +// Add ticketing_enabled field to conferences collection +function addTicketingFieldToConferences(schema) { + console.log('Adding ticketing_enabled field to conferences...') + let sort = getMaxSort(schema.fields, 'conferences') + 1 + + const ticketingField = { + collection: 'conferences', + field: 'ticketing_enabled', + type: 'boolean', + meta: { + collection: 'conferences', + conditions: null, + display: 'boolean', + display_options: null, + field: 'ticketing_enabled', + group: null, + hidden: false, + interface: 'boolean', + note: 'Enable internal ticket sales for this conference', + options: null, + readonly: false, + required: false, + searchable: true, + sort: sort, + special: ['cast-boolean'], + translations: null, + validation: null, + validation_message: null, + width: 'half', + }, + schema: { + name: 'ticketing_enabled', + table: 'conferences', + data_type: 'boolean', + default_value: false, + max_length: null, + numeric_precision: null, + numeric_scale: null, + is_nullable: false, + is_unique: false, + is_indexed: false, + is_primary_key: false, + is_generated: false, + generation_expression: null, + has_auto_increment: false, + foreign_key_table: null, + foreign_key_column: null, + }, + } + + if (!fieldExists(schema.fields, 'conferences', 'ticketing_enabled')) { + schema.fields.push(ticketingField) + console.log(' Added conferences.ticketing_enabled') + } else { + console.log(' conferences.ticketing_enabled already exists, skipping') + } +} + +// Add Ticketing folder collection +function addTicketingFolderCollection(schema) { + console.log('Adding Ticketing folder collection...') + + if (!collectionExists(schema.collections, 'Ticketing')) { + schema.collections.push({ + collection: 'Ticketing', + meta: { + accountability: 'all', + archive_app_filter: true, + archive_field: null, + archive_value: null, + collapse: 'open', + collection: 'Ticketing', + color: null, + display_template: null, + group: 'Collections', + hidden: false, + icon: 'confirmation_number', + item_duplication_fields: null, + note: null, + preview_url: null, + singleton: false, + sort: 10, + sort_field: null, + translations: null, + unarchive_value: null, + versioning: false, + }, + }) + console.log(' Added Ticketing folder collection') + } else { + console.log(' Ticketing folder already exists, skipping') + } +} + +// Add ticket_orders collection +function addTicketOrdersCollection(schema) { + console.log('Adding ticket_orders collection...') + + if (!collectionExists(schema.collections, 'ticket_orders')) { + schema.collections.push({ + collection: 'ticket_orders', + meta: { + accountability: 'all', + archive_app_filter: true, + archive_field: 'status', + archive_value: 'cancelled', + collapse: 'open', + collection: 'ticket_orders', + color: null, + display_template: '{{order_number}} - {{purchaser_first_name}} {{purchaser_last_name}}', + group: 'Ticketing', + hidden: false, + icon: 'receipt_long', + item_duplication_fields: null, + note: 'Conference ticket orders', + preview_url: null, + singleton: false, + sort: 1, + sort_field: null, + translations: null, + unarchive_value: 'pending', + versioning: false, + }, + schema: { + name: 'ticket_orders', + }, + }) + console.log(' Added ticket_orders collection') + } else { + console.log(' ticket_orders already exists, skipping') + } + + // Add fields + const fields = [ + { + collection: 'ticket_orders', + field: 'id', + type: 'uuid', + meta: { + collection: 'ticket_orders', + conditions: null, + display: null, + display_options: null, + field: 'id', + group: null, + hidden: true, + interface: 'input', + note: null, + options: null, + readonly: true, + required: false, + searchable: true, + sort: 1, + special: ['uuid'], + translations: null, + validation: null, + validation_message: null, + width: 'full', + }, + schema: { + name: 'id', + table: 'ticket_orders', + data_type: 'uuid', + default_value: null, + max_length: null, + numeric_precision: null, + numeric_scale: null, + is_nullable: false, + is_unique: true, + is_indexed: false, + is_primary_key: true, + is_generated: false, + generation_expression: null, + has_auto_increment: false, + foreign_key_table: null, + foreign_key_column: null, + }, + }, + { + collection: 'ticket_orders', + field: 'order_number', + type: 'string', + meta: { + collection: 'ticket_orders', + conditions: null, + display: 'raw', + display_options: null, + field: 'order_number', + group: null, + hidden: false, + interface: 'input', + note: 'Human-readable order number (e.g., ORD-2026-ABC123)', + options: null, + readonly: false, + required: true, + searchable: true, + sort: 2, + special: null, + translations: null, + validation: null, + validation_message: null, + width: 'half', + }, + schema: { + name: 'order_number', + table: 'ticket_orders', + data_type: 'character varying', + default_value: null, + max_length: 50, + numeric_precision: null, + numeric_scale: null, + is_nullable: false, + is_unique: true, + is_indexed: true, + is_primary_key: false, + is_generated: false, + generation_expression: null, + has_auto_increment: false, + foreign_key_table: null, + foreign_key_column: null, + }, + }, + { + collection: 'ticket_orders', + field: 'conference', + type: 'uuid', + meta: { + collection: 'ticket_orders', + conditions: null, + display: 'related-values', + display_options: { template: '{{title}}' }, + field: 'conference', + group: null, + hidden: false, + interface: 'select-dropdown-m2o', + note: 'Related conference', + options: { template: '{{title}}' }, + readonly: false, + required: true, + searchable: true, + sort: 3, + special: ['m2o'], + translations: null, + validation: null, + validation_message: null, + width: 'half', + }, + schema: { + name: 'conference', + table: 'ticket_orders', + data_type: 'uuid', + default_value: null, + max_length: null, + numeric_precision: null, + numeric_scale: null, + is_nullable: false, + is_unique: false, + is_indexed: true, + is_primary_key: false, + is_generated: false, + generation_expression: null, + has_auto_increment: false, + foreign_key_table: 'conferences', + foreign_key_column: 'id', + }, + }, + { + collection: 'ticket_orders', + field: 'status', + type: 'string', + meta: { + collection: 'ticket_orders', + conditions: null, + display: 'labels', + display_options: { + showAsDot: true, + choices: [ + { value: 'pending', background: '#F59E0B', foreground: '#FFFFFF' }, + { value: 'paid', background: '#10B981', foreground: '#FFFFFF' }, + { value: 'cancelled', background: '#EF4444', foreground: '#FFFFFF' }, + ], + }, + field: 'status', + group: null, + hidden: false, + interface: 'select-dropdown', + note: 'Order status', + options: { + choices: [ + { text: 'Pending', value: 'pending' }, + { text: 'Paid', value: 'paid' }, + { text: 'Cancelled', value: 'cancelled' }, + ], + }, + readonly: false, + required: true, + searchable: true, + sort: 4, + special: null, + translations: null, + validation: null, + validation_message: null, + width: 'half', + }, + schema: { + name: 'status', + table: 'ticket_orders', + data_type: 'character varying', + default_value: 'pending', + max_length: 50, + numeric_precision: null, + numeric_scale: null, + is_nullable: false, + is_unique: false, + is_indexed: true, + is_primary_key: false, + is_generated: false, + generation_expression: null, + has_auto_increment: false, + foreign_key_table: null, + foreign_key_column: null, + }, + }, + { + collection: 'ticket_orders', + field: 'purchase_type', + type: 'string', + meta: { + collection: 'ticket_orders', + conditions: null, + display: 'labels', + display_options: null, + field: 'purchase_type', + group: null, + hidden: false, + interface: 'select-dropdown', + note: 'Personal or company purchase', + options: { + choices: [ + { text: 'Personal', value: 'personal' }, + { text: 'Company', value: 'company' }, + ], + }, + readonly: false, + required: true, + searchable: true, + sort: 5, + special: null, + translations: null, + validation: null, + validation_message: null, + width: 'half', + }, + schema: { + name: 'purchase_type', + table: 'ticket_orders', + data_type: 'character varying', + default_value: 'personal', + max_length: 50, + numeric_precision: null, + numeric_scale: null, + is_nullable: false, + is_unique: false, + is_indexed: false, + is_primary_key: false, + is_generated: false, + generation_expression: null, + has_auto_increment: false, + foreign_key_table: null, + foreign_key_column: null, + }, + }, + { + collection: 'ticket_orders', + field: 'purchaser_first_name', + type: 'string', + meta: { + collection: 'ticket_orders', + conditions: null, + display: 'raw', + display_options: null, + field: 'purchaser_first_name', + group: null, + hidden: false, + interface: 'input', + note: 'Purchaser first name', + options: null, + readonly: false, + required: true, + searchable: true, + sort: 6, + special: null, + translations: null, + validation: null, + validation_message: null, + width: 'half', + }, + schema: { + name: 'purchaser_first_name', + table: 'ticket_orders', + data_type: 'character varying', + default_value: null, + max_length: 100, + numeric_precision: null, + numeric_scale: null, + is_nullable: false, + is_unique: false, + is_indexed: false, + is_primary_key: false, + is_generated: false, + generation_expression: null, + has_auto_increment: false, + foreign_key_table: null, + foreign_key_column: null, + }, + }, + { + collection: 'ticket_orders', + field: 'purchaser_last_name', + type: 'string', + meta: { + collection: 'ticket_orders', + conditions: null, + display: 'raw', + display_options: null, + field: 'purchaser_last_name', + group: null, + hidden: false, + interface: 'input', + note: 'Purchaser last name', + options: null, + readonly: false, + required: true, + searchable: true, + sort: 7, + special: null, + translations: null, + validation: null, + validation_message: null, + width: 'half', + }, + schema: { + name: 'purchaser_last_name', + table: 'ticket_orders', + data_type: 'character varying', + default_value: null, + max_length: 100, + numeric_precision: null, + numeric_scale: null, + is_nullable: false, + is_unique: false, + is_indexed: false, + is_primary_key: false, + is_generated: false, + generation_expression: null, + has_auto_increment: false, + foreign_key_table: null, + foreign_key_column: null, + }, + }, + { + collection: 'ticket_orders', + field: 'purchaser_email', + type: 'string', + meta: { + collection: 'ticket_orders', + conditions: null, + display: 'raw', + display_options: null, + field: 'purchaser_email', + group: null, + hidden: false, + interface: 'input', + note: 'Purchaser email', + options: null, + readonly: false, + required: true, + searchable: true, + sort: 8, + special: null, + translations: null, + validation: null, + validation_message: null, + width: 'full', + }, + schema: { + name: 'purchaser_email', + table: 'ticket_orders', + data_type: 'character varying', + default_value: null, + max_length: 200, + numeric_precision: null, + numeric_scale: null, + is_nullable: false, + is_unique: false, + is_indexed: true, + is_primary_key: false, + is_generated: false, + generation_expression: null, + has_auto_increment: false, + foreign_key_table: null, + foreign_key_column: null, + }, + }, + { + collection: 'ticket_orders', + field: 'company_name', + type: 'string', + meta: { + collection: 'ticket_orders', + conditions: null, + display: 'raw', + display_options: null, + field: 'company_name', + group: null, + hidden: false, + interface: 'input', + note: 'Company name (for company purchases)', + options: null, + readonly: false, + required: false, + searchable: true, + sort: 9, + special: null, + translations: null, + validation: null, + validation_message: null, + width: 'full', + }, + schema: { + name: 'company_name', + table: 'ticket_orders', + data_type: 'character varying', + default_value: null, + max_length: 200, + numeric_precision: null, + numeric_scale: null, + is_nullable: true, + is_unique: false, + is_indexed: false, + is_primary_key: false, + is_generated: false, + generation_expression: null, + has_auto_increment: false, + foreign_key_table: null, + foreign_key_column: null, + }, + }, + { + collection: 'ticket_orders', + field: 'billing_address_line1', + type: 'string', + meta: { + collection: 'ticket_orders', + conditions: null, + display: 'raw', + display_options: null, + field: 'billing_address_line1', + group: null, + hidden: false, + interface: 'input', + note: 'Street address', + options: null, + readonly: false, + required: false, + searchable: true, + sort: 10, + special: null, + translations: null, + validation: null, + validation_message: null, + width: 'full', + }, + schema: { + name: 'billing_address_line1', + table: 'ticket_orders', + data_type: 'character varying', + default_value: null, + max_length: 200, + numeric_precision: null, + numeric_scale: null, + is_nullable: true, + is_unique: false, + is_indexed: false, + is_primary_key: false, + is_generated: false, + generation_expression: null, + has_auto_increment: false, + foreign_key_table: null, + foreign_key_column: null, + }, + }, + { + collection: 'ticket_orders', + field: 'billing_address_line2', + type: 'string', + meta: { + collection: 'ticket_orders', + conditions: null, + display: 'raw', + display_options: null, + field: 'billing_address_line2', + group: null, + hidden: false, + interface: 'input', + note: 'Additional address line', + options: null, + readonly: false, + required: false, + searchable: true, + sort: 11, + special: null, + translations: null, + validation: null, + validation_message: null, + width: 'full', + }, + schema: { + name: 'billing_address_line2', + table: 'ticket_orders', + data_type: 'character varying', + default_value: null, + max_length: 200, + numeric_precision: null, + numeric_scale: null, + is_nullable: true, + is_unique: false, + is_indexed: false, + is_primary_key: false, + is_generated: false, + generation_expression: null, + has_auto_increment: false, + foreign_key_table: null, + foreign_key_column: null, + }, + }, + { + collection: 'ticket_orders', + field: 'billing_city', + type: 'string', + meta: { + collection: 'ticket_orders', + conditions: null, + display: 'raw', + display_options: null, + field: 'billing_city', + group: null, + hidden: false, + interface: 'input', + note: 'City', + options: null, + readonly: false, + required: false, + searchable: true, + sort: 12, + special: null, + translations: null, + validation: null, + validation_message: null, + width: 'half', + }, + schema: { + name: 'billing_city', + table: 'ticket_orders', + data_type: 'character varying', + default_value: null, + max_length: 100, + numeric_precision: null, + numeric_scale: null, + is_nullable: true, + is_unique: false, + is_indexed: false, + is_primary_key: false, + is_generated: false, + generation_expression: null, + has_auto_increment: false, + foreign_key_table: null, + foreign_key_column: null, + }, + }, + { + collection: 'ticket_orders', + field: 'billing_postal_code', + type: 'string', + meta: { + collection: 'ticket_orders', + conditions: null, + display: 'raw', + display_options: null, + field: 'billing_postal_code', + group: null, + hidden: false, + interface: 'input', + note: 'Postal code', + options: null, + readonly: false, + required: false, + searchable: true, + sort: 13, + special: null, + translations: null, + validation: null, + validation_message: null, + width: 'half', + }, + schema: { + name: 'billing_postal_code', + table: 'ticket_orders', + data_type: 'character varying', + default_value: null, + max_length: 20, + numeric_precision: null, + numeric_scale: null, + is_nullable: true, + is_unique: false, + is_indexed: false, + is_primary_key: false, + is_generated: false, + generation_expression: null, + has_auto_increment: false, + foreign_key_table: null, + foreign_key_column: null, + }, + }, + { + collection: 'ticket_orders', + field: 'billing_country', + type: 'string', + meta: { + collection: 'ticket_orders', + conditions: null, + display: 'raw', + display_options: null, + field: 'billing_country', + group: null, + hidden: false, + interface: 'input', + note: 'Country', + options: null, + readonly: false, + required: false, + searchable: true, + sort: 14, + special: null, + translations: null, + validation: null, + validation_message: null, + width: 'half', + }, + schema: { + name: 'billing_country', + table: 'ticket_orders', + data_type: 'character varying', + default_value: null, + max_length: 100, + numeric_precision: null, + numeric_scale: null, + is_nullable: true, + is_unique: false, + is_indexed: false, + is_primary_key: false, + is_generated: false, + generation_expression: null, + has_auto_increment: false, + foreign_key_table: null, + foreign_key_column: null, + }, + }, + { + collection: 'ticket_orders', + field: 'billing_email', + type: 'string', + meta: { + collection: 'ticket_orders', + conditions: null, + display: 'raw', + display_options: null, + field: 'billing_email', + group: null, + hidden: false, + interface: 'input', + note: 'Separate billing email (optional)', + options: null, + readonly: false, + required: false, + searchable: true, + sort: 15, + special: null, + translations: null, + validation: null, + validation_message: null, + width: 'half', + }, + schema: { + name: 'billing_email', + table: 'ticket_orders', + data_type: 'character varying', + default_value: null, + max_length: 200, + numeric_precision: null, + numeric_scale: null, + is_nullable: true, + is_unique: false, + is_indexed: false, + is_primary_key: false, + is_generated: false, + generation_expression: null, + has_auto_increment: false, + foreign_key_table: null, + foreign_key_column: null, + }, + }, + { + collection: 'ticket_orders', + field: 'subtotal_cents', + type: 'integer', + meta: { + collection: 'ticket_orders', + conditions: null, + display: 'raw', + display_options: null, + field: 'subtotal_cents', + group: null, + hidden: false, + interface: 'input', + note: 'Subtotal in cents', + options: null, + readonly: false, + required: true, + searchable: true, + sort: 16, + special: null, + translations: null, + validation: null, + validation_message: null, + width: 'half', + }, + schema: { + name: 'subtotal_cents', + table: 'ticket_orders', + data_type: 'integer', + default_value: 0, + max_length: null, + numeric_precision: 32, + numeric_scale: 0, + is_nullable: false, + is_unique: false, + is_indexed: false, + is_primary_key: false, + is_generated: false, + generation_expression: null, + has_auto_increment: false, + foreign_key_table: null, + foreign_key_column: null, + }, + }, + { + collection: 'ticket_orders', + field: 'discount_amount_cents', + type: 'integer', + meta: { + collection: 'ticket_orders', + conditions: null, + display: 'raw', + display_options: null, + field: 'discount_amount_cents', + group: null, + hidden: false, + interface: 'input', + note: 'Discount amount in cents', + options: null, + readonly: false, + required: false, + searchable: true, + sort: 17, + special: null, + translations: null, + validation: null, + validation_message: null, + width: 'half', + }, + schema: { + name: 'discount_amount_cents', + table: 'ticket_orders', + data_type: 'integer', + default_value: 0, + max_length: null, + numeric_precision: 32, + numeric_scale: 0, + is_nullable: false, + is_unique: false, + is_indexed: false, + is_primary_key: false, + is_generated: false, + generation_expression: null, + has_auto_increment: false, + foreign_key_table: null, + foreign_key_column: null, + }, + }, + { + collection: 'ticket_orders', + field: 'total_cents', + type: 'integer', + meta: { + collection: 'ticket_orders', + conditions: null, + display: 'raw', + display_options: null, + field: 'total_cents', + group: null, + hidden: false, + interface: 'input', + note: 'Net total amount in cents (before VAT)', + options: null, + readonly: false, + required: true, + searchable: true, + sort: 18, + special: null, + translations: null, + validation: null, + validation_message: null, + width: 'half', + }, + schema: { + name: 'total_cents', + table: 'ticket_orders', + data_type: 'integer', + default_value: 0, + max_length: null, + numeric_precision: 32, + numeric_scale: 0, + is_nullable: false, + is_unique: false, + is_indexed: false, + is_primary_key: false, + is_generated: false, + generation_expression: null, + has_auto_increment: false, + foreign_key_table: null, + foreign_key_column: null, + }, + }, + { + collection: 'ticket_orders', + field: 'vat_amount_cents', + type: 'integer', + meta: { + collection: 'ticket_orders', + conditions: null, + display: 'raw', + display_options: null, + field: 'vat_amount_cents', + group: null, + hidden: false, + interface: 'input', + note: 'VAT amount in cents (19%)', + options: null, + readonly: false, + required: false, + searchable: true, + sort: 19, + special: null, + translations: null, + validation: null, + validation_message: null, + width: 'half', + }, + schema: { + name: 'vat_amount_cents', + table: 'ticket_orders', + data_type: 'integer', + default_value: 0, + max_length: null, + numeric_precision: 32, + numeric_scale: 0, + is_nullable: false, + is_unique: false, + is_indexed: false, + is_primary_key: false, + is_generated: false, + generation_expression: null, + has_auto_increment: false, + foreign_key_table: null, + foreign_key_column: null, + }, + }, + { + collection: 'ticket_orders', + field: 'total_gross_cents', + type: 'integer', + meta: { + collection: 'ticket_orders', + conditions: null, + display: 'raw', + display_options: null, + field: 'total_gross_cents', + group: null, + hidden: false, + interface: 'input', + note: 'Gross total in cents (including VAT)', + options: null, + readonly: false, + required: false, + searchable: true, + sort: 20, + special: null, + translations: null, + validation: null, + validation_message: null, + width: 'half', + }, + schema: { + name: 'total_gross_cents', + table: 'ticket_orders', + data_type: 'integer', + default_value: 0, + max_length: null, + numeric_precision: 32, + numeric_scale: 0, + is_nullable: false, + is_unique: false, + is_indexed: false, + is_primary_key: false, + is_generated: false, + generation_expression: null, + has_auto_increment: false, + foreign_key_table: null, + foreign_key_column: null, + }, + }, + { + collection: 'ticket_orders', + field: 'discount_code_used', + type: 'string', + meta: { + collection: 'ticket_orders', + conditions: null, + display: 'raw', + display_options: null, + field: 'discount_code_used', + group: null, + hidden: false, + interface: 'input', + note: 'Discount code that was applied', + options: null, + readonly: false, + required: false, + searchable: true, + sort: 21, + special: null, + translations: null, + validation: null, + validation_message: null, + width: 'half', + }, + schema: { + name: 'discount_code_used', + table: 'ticket_orders', + data_type: 'character varying', + default_value: null, + max_length: 50, + numeric_precision: null, + numeric_scale: null, + is_nullable: true, + is_unique: false, + is_indexed: false, + is_primary_key: false, + is_generated: false, + generation_expression: null, + has_auto_increment: false, + foreign_key_table: null, + foreign_key_column: null, + }, + }, + { + collection: 'ticket_orders', + field: 'ticket_type', + type: 'string', + meta: { + collection: 'ticket_orders', + conditions: null, + display: 'labels', + display_options: { + showAsDot: true, + choices: [ + { value: 'early_bird', background: '#10B981', foreground: '#FFFFFF' }, + { value: 'regular', background: '#3B82F6', foreground: '#FFFFFF' }, + { value: 'discounted', background: '#8B5CF6', foreground: '#FFFFFF' }, + ], + }, + field: 'ticket_type', + group: null, + hidden: false, + interface: 'select-dropdown', + note: 'Type of tickets in this order', + options: { + choices: [ + { text: 'Early Bird', value: 'early_bird' }, + { text: 'Regular', value: 'regular' }, + { text: 'Discounted', value: 'discounted' }, + ], + }, + readonly: false, + required: false, + searchable: true, + sort: 22, + special: null, + translations: null, + validation: null, + validation_message: null, + width: 'half', + }, + schema: { + name: 'ticket_type', + table: 'ticket_orders', + data_type: 'character varying', + default_value: 'regular', + max_length: 50, + numeric_precision: null, + numeric_scale: null, + is_nullable: true, + is_unique: false, + is_indexed: false, + is_primary_key: false, + is_generated: false, + generation_expression: null, + has_auto_increment: false, + foreign_key_table: null, + foreign_key_column: null, + }, + }, + { + collection: 'ticket_orders', + field: 'attendees_json', + type: 'json', + meta: { + collection: 'ticket_orders', + conditions: null, + display: 'raw', + display_options: null, + field: 'attendees_json', + group: null, + hidden: false, + interface: 'input-code', + note: 'JSON array of attendees [{firstName, lastName, email}]', + options: { language: 'json' }, + readonly: true, + required: false, + searchable: false, + sort: 23, + special: ['cast-json'], + translations: null, + validation: null, + validation_message: null, + width: 'full', + }, + schema: { + name: 'attendees_json', + table: 'ticket_orders', + data_type: 'json', + default_value: null, + max_length: null, + numeric_precision: null, + numeric_scale: null, + is_nullable: true, + is_unique: false, + is_indexed: false, + is_primary_key: false, + is_generated: false, + generation_expression: null, + has_auto_increment: false, + foreign_key_table: null, + foreign_key_column: null, + }, + }, + { + collection: 'ticket_orders', + field: 'stripe_checkout_session_id', + type: 'string', + meta: { + collection: 'ticket_orders', + conditions: null, + display: 'raw', + display_options: null, + field: 'stripe_checkout_session_id', + group: null, + hidden: false, + interface: 'input', + note: 'Stripe Checkout Session ID', + options: null, + readonly: true, + required: false, + searchable: true, + sort: 24, + special: null, + translations: null, + validation: null, + validation_message: null, + width: 'half', + }, + schema: { + name: 'stripe_checkout_session_id', + table: 'ticket_orders', + data_type: 'character varying', + default_value: null, + max_length: 255, + numeric_precision: null, + numeric_scale: null, + is_nullable: true, + is_unique: false, + is_indexed: true, + is_primary_key: false, + is_generated: false, + generation_expression: null, + has_auto_increment: false, + foreign_key_table: null, + foreign_key_column: null, + }, + }, + { + collection: 'ticket_orders', + field: 'stripe_payment_intent_id', + type: 'string', + meta: { + collection: 'ticket_orders', + conditions: null, + display: 'raw', + display_options: null, + field: 'stripe_payment_intent_id', + group: null, + hidden: false, + interface: 'input', + note: 'Stripe Payment Intent ID', + options: null, + readonly: true, + required: false, + searchable: true, + sort: 25, + special: null, + translations: null, + validation: null, + validation_message: null, + width: 'half', + }, + schema: { + name: 'stripe_payment_intent_id', + table: 'ticket_orders', + data_type: 'character varying', + default_value: null, + max_length: 255, + numeric_precision: null, + numeric_scale: null, + is_nullable: true, + is_unique: false, + is_indexed: false, + is_primary_key: false, + is_generated: false, + generation_expression: null, + has_auto_increment: false, + foreign_key_table: null, + foreign_key_column: null, + }, + }, + { + collection: 'ticket_orders', + field: 'date_created', + type: 'timestamp', + meta: { + collection: 'ticket_orders', + conditions: null, + display: 'datetime', + display_options: { relative: true }, + field: 'date_created', + group: null, + hidden: false, + interface: 'datetime', + note: 'Order creation timestamp', + options: null, + readonly: true, + required: false, + searchable: true, + sort: 26, + special: ['date-created'], + translations: null, + validation: null, + validation_message: null, + width: 'half', + }, + schema: { + name: 'date_created', + table: 'ticket_orders', + data_type: 'timestamp with time zone', + default_value: null, + max_length: null, + numeric_precision: null, + numeric_scale: null, + is_nullable: true, + is_unique: false, + is_indexed: false, + is_primary_key: false, + is_generated: false, + generation_expression: null, + has_auto_increment: false, + foreign_key_table: null, + foreign_key_column: null, + }, + }, + { + collection: 'ticket_orders', + field: 'date_paid', + type: 'timestamp', + meta: { + collection: 'ticket_orders', + conditions: null, + display: 'datetime', + display_options: { relative: true }, + field: 'date_paid', + group: null, + hidden: false, + interface: 'datetime', + note: 'Payment completion timestamp', + options: null, + readonly: false, + required: false, + searchable: true, + sort: 27, + special: null, + translations: null, + validation: null, + validation_message: null, + width: 'half', + }, + schema: { + name: 'date_paid', + table: 'ticket_orders', + data_type: 'timestamp with time zone', + default_value: null, + max_length: null, + numeric_precision: null, + numeric_scale: null, + is_nullable: true, + is_unique: false, + is_indexed: false, + is_primary_key: false, + is_generated: false, + generation_expression: null, + has_auto_increment: false, + foreign_key_table: null, + foreign_key_column: null, + }, + }, + ] + + for (const field of fields) { + if (!fieldExists(schema.fields, field.collection, field.field)) { + schema.fields.push(field) + console.log(` Added ${field.collection}.${field.field}`) + } else { + console.log(` ${field.collection}.${field.field} already exists, skipping`) + } + } + + // Add relation for conference + const conferenceRelation = { + collection: 'ticket_orders', + field: 'conference', + related_collection: 'conferences', + meta: { + junction_field: null, + many_collection: 'ticket_orders', + many_field: 'conference', + one_allowed_collections: null, + one_collection: 'conferences', + one_collection_field: null, + one_deselect_action: 'nullify', + one_field: null, + sort_field: null, + }, + schema: { + table: 'ticket_orders', + column: 'conference', + foreign_key_table: 'conferences', + foreign_key_column: 'id', + on_update: 'NO ACTION', + on_delete: 'CASCADE', + constraint_name: null, + }, + } + + if (!schema.relations.some((r) => r.collection === 'ticket_orders' && r.field === 'conference')) { + schema.relations.push(conferenceRelation) + console.log(' Added relation ticket_orders.conference -> conferences') + } +} + +// Add tickets collection +function addTicketsCollection(schema) { + console.log('Adding tickets collection...') + + if (!collectionExists(schema.collections, 'tickets')) { + schema.collections.push({ + collection: 'tickets', + meta: { + accountability: 'all', + archive_app_filter: true, + archive_field: 'status', + archive_value: 'cancelled', + collapse: 'open', + collection: 'tickets', + color: null, + display_template: '{{ticket_code}} - {{attendee_first_name}} {{attendee_last_name}}', + group: 'Ticketing', + hidden: false, + icon: 'confirmation_number', + item_duplication_fields: null, + note: 'Individual conference tickets', + preview_url: null, + singleton: false, + sort: 2, + sort_field: null, + translations: null, + unarchive_value: 'valid', + versioning: false, + }, + schema: { + name: 'tickets', + }, + }) + console.log(' Added tickets collection') + } else { + console.log(' tickets already exists, skipping') + } + + // Add fields + const fields = [ + { + collection: 'tickets', + field: 'id', + type: 'uuid', + meta: { + collection: 'tickets', + conditions: null, + display: null, + display_options: null, + field: 'id', + group: null, + hidden: true, + interface: 'input', + note: null, + options: null, + readonly: true, + required: false, + searchable: true, + sort: 1, + special: ['uuid'], + translations: null, + validation: null, + validation_message: null, + width: 'full', + }, + schema: { + name: 'id', + table: 'tickets', + data_type: 'uuid', + default_value: null, + max_length: null, + numeric_precision: null, + numeric_scale: null, + is_nullable: false, + is_unique: true, + is_indexed: false, + is_primary_key: true, + is_generated: false, + generation_expression: null, + has_auto_increment: false, + foreign_key_table: null, + foreign_key_column: null, + }, + }, + { + collection: 'tickets', + field: 'ticket_code', + type: 'string', + meta: { + collection: 'tickets', + conditions: null, + display: 'raw', + display_options: null, + field: 'ticket_code', + group: null, + hidden: false, + interface: 'input', + note: 'Unique ticket code for QR (e.g., TKT-ABC123)', + options: null, + readonly: false, + required: true, + searchable: true, + sort: 2, + special: null, + translations: null, + validation: null, + validation_message: null, + width: 'half', + }, + schema: { + name: 'ticket_code', + table: 'tickets', + data_type: 'character varying', + default_value: null, + max_length: 50, + numeric_precision: null, + numeric_scale: null, + is_nullable: false, + is_unique: true, + is_indexed: true, + is_primary_key: false, + is_generated: false, + generation_expression: null, + has_auto_increment: false, + foreign_key_table: null, + foreign_key_column: null, + }, + }, + { + collection: 'tickets', + field: 'order', + type: 'uuid', + meta: { + collection: 'tickets', + conditions: null, + display: 'related-values', + display_options: { template: '{{order_number}}' }, + field: 'order', + group: null, + hidden: false, + interface: 'select-dropdown-m2o', + note: 'Parent order', + options: { template: '{{order_number}}' }, + readonly: false, + required: true, + searchable: true, + sort: 3, + special: ['m2o'], + translations: null, + validation: null, + validation_message: null, + width: 'half', + }, + schema: { + name: 'order', + table: 'tickets', + data_type: 'uuid', + default_value: null, + max_length: null, + numeric_precision: null, + numeric_scale: null, + is_nullable: false, + is_unique: false, + is_indexed: true, + is_primary_key: false, + is_generated: false, + generation_expression: null, + has_auto_increment: false, + foreign_key_table: 'ticket_orders', + foreign_key_column: 'id', + }, + }, + { + collection: 'tickets', + field: 'conference', + type: 'uuid', + meta: { + collection: 'tickets', + conditions: null, + display: 'related-values', + display_options: { template: '{{title}}' }, + field: 'conference', + group: null, + hidden: false, + interface: 'select-dropdown-m2o', + note: 'Conference reference', + options: { template: '{{title}}' }, + readonly: false, + required: true, + searchable: true, + sort: 4, + special: ['m2o'], + translations: null, + validation: null, + validation_message: null, + width: 'half', + }, + schema: { + name: 'conference', + table: 'tickets', + data_type: 'uuid', + default_value: null, + max_length: null, + numeric_precision: null, + numeric_scale: null, + is_nullable: false, + is_unique: false, + is_indexed: true, + is_primary_key: false, + is_generated: false, + generation_expression: null, + has_auto_increment: false, + foreign_key_table: 'conferences', + foreign_key_column: 'id', + }, + }, + { + collection: 'tickets', + field: 'attendee_first_name', + type: 'string', + meta: { + collection: 'tickets', + conditions: null, + display: 'raw', + display_options: null, + field: 'attendee_first_name', + group: null, + hidden: false, + interface: 'input', + note: 'Attendee first name', + options: null, + readonly: false, + required: true, + searchable: true, + sort: 5, + special: null, + translations: null, + validation: null, + validation_message: null, + width: 'half', + }, + schema: { + name: 'attendee_first_name', + table: 'tickets', + data_type: 'character varying', + default_value: null, + max_length: 100, + numeric_precision: null, + numeric_scale: null, + is_nullable: false, + is_unique: false, + is_indexed: false, + is_primary_key: false, + is_generated: false, + generation_expression: null, + has_auto_increment: false, + foreign_key_table: null, + foreign_key_column: null, + }, + }, + { + collection: 'tickets', + field: 'attendee_last_name', + type: 'string', + meta: { + collection: 'tickets', + conditions: null, + display: 'raw', + display_options: null, + field: 'attendee_last_name', + group: null, + hidden: false, + interface: 'input', + note: 'Attendee last name', + options: null, + readonly: false, + required: true, + searchable: true, + sort: 6, + special: null, + translations: null, + validation: null, + validation_message: null, + width: 'half', + }, + schema: { + name: 'attendee_last_name', + table: 'tickets', + data_type: 'character varying', + default_value: null, + max_length: 100, + numeric_precision: null, + numeric_scale: null, + is_nullable: false, + is_unique: false, + is_indexed: false, + is_primary_key: false, + is_generated: false, + generation_expression: null, + has_auto_increment: false, + foreign_key_table: null, + foreign_key_column: null, + }, + }, + { + collection: 'tickets', + field: 'attendee_email', + type: 'string', + meta: { + collection: 'tickets', + conditions: null, + display: 'raw', + display_options: null, + field: 'attendee_email', + group: null, + hidden: false, + interface: 'input', + note: 'Attendee email', + options: null, + readonly: false, + required: true, + searchable: true, + sort: 7, + special: null, + translations: null, + validation: null, + validation_message: null, + width: 'full', + }, + schema: { + name: 'attendee_email', + table: 'tickets', + data_type: 'character varying', + default_value: null, + max_length: 200, + numeric_precision: null, + numeric_scale: null, + is_nullable: false, + is_unique: false, + is_indexed: true, + is_primary_key: false, + is_generated: false, + generation_expression: null, + has_auto_increment: false, + foreign_key_table: null, + foreign_key_column: null, + }, + }, + { + collection: 'tickets', + field: 'ticket_type', + type: 'string', + meta: { + collection: 'tickets', + conditions: null, + display: 'labels', + display_options: { + showAsDot: true, + choices: [ + { value: 'early_bird', background: '#10B981', foreground: '#FFFFFF' }, + { value: 'regular', background: '#3B82F6', foreground: '#FFFFFF' }, + { value: 'discounted', background: '#8B5CF6', foreground: '#FFFFFF' }, + ], + }, + field: 'ticket_type', + group: null, + hidden: false, + interface: 'select-dropdown', + note: 'Ticket type', + options: { + choices: [ + { text: 'Early Bird', value: 'early_bird' }, + { text: 'Regular', value: 'regular' }, + { text: 'Discounted', value: 'discounted' }, + ], + }, + readonly: false, + required: true, + searchable: true, + sort: 8, + special: null, + translations: null, + validation: null, + validation_message: null, + width: 'half', + }, + schema: { + name: 'ticket_type', + table: 'tickets', + data_type: 'character varying', + default_value: 'regular', + max_length: 50, + numeric_precision: null, + numeric_scale: null, + is_nullable: false, + is_unique: false, + is_indexed: false, + is_primary_key: false, + is_generated: false, + generation_expression: null, + has_auto_increment: false, + foreign_key_table: null, + foreign_key_column: null, + }, + }, + { + collection: 'tickets', + field: 'price_cents', + type: 'integer', + meta: { + collection: 'tickets', + conditions: null, + display: 'raw', + display_options: null, + field: 'price_cents', + group: null, + hidden: false, + interface: 'input', + note: 'Price paid in cents', + options: null, + readonly: false, + required: true, + searchable: true, + sort: 9, + special: null, + translations: null, + validation: null, + validation_message: null, + width: 'half', + }, + schema: { + name: 'price_cents', + table: 'tickets', + data_type: 'integer', + default_value: 0, + max_length: null, + numeric_precision: 32, + numeric_scale: 0, + is_nullable: false, + is_unique: false, + is_indexed: false, + is_primary_key: false, + is_generated: false, + generation_expression: null, + has_auto_increment: false, + foreign_key_table: null, + foreign_key_column: null, + }, + }, + { + collection: 'tickets', + field: 'status', + type: 'string', + meta: { + collection: 'tickets', + conditions: null, + display: 'labels', + display_options: { + showAsDot: true, + choices: [ + { value: 'valid', background: '#10B981', foreground: '#FFFFFF' }, + { value: 'checked_in', background: '#3B82F6', foreground: '#FFFFFF' }, + { value: 'cancelled', background: '#EF4444', foreground: '#FFFFFF' }, + ], + }, + field: 'status', + group: null, + hidden: false, + interface: 'select-dropdown', + note: 'Ticket status', + options: { + choices: [ + { text: 'Valid', value: 'valid' }, + { text: 'Checked In', value: 'checked_in' }, + { text: 'Cancelled', value: 'cancelled' }, + ], + }, + readonly: false, + required: true, + searchable: true, + sort: 10, + special: null, + translations: null, + validation: null, + validation_message: null, + width: 'half', + }, + schema: { + name: 'status', + table: 'tickets', + data_type: 'character varying', + default_value: 'valid', + max_length: 50, + numeric_precision: null, + numeric_scale: null, + is_nullable: false, + is_unique: false, + is_indexed: true, + is_primary_key: false, + is_generated: false, + generation_expression: null, + has_auto_increment: false, + foreign_key_table: null, + foreign_key_column: null, + }, + }, + { + collection: 'tickets', + field: 'checked_in_at', + type: 'timestamp', + meta: { + collection: 'tickets', + conditions: null, + display: 'datetime', + display_options: { relative: true }, + field: 'checked_in_at', + group: null, + hidden: false, + interface: 'datetime', + note: 'Check-in timestamp', + options: null, + readonly: false, + required: false, + searchable: true, + sort: 11, + special: null, + translations: null, + validation: null, + validation_message: null, + width: 'half', + }, + schema: { + name: 'checked_in_at', + table: 'tickets', + data_type: 'timestamp with time zone', + default_value: null, + max_length: null, + numeric_precision: null, + numeric_scale: null, + is_nullable: true, + is_unique: false, + is_indexed: false, + is_primary_key: false, + is_generated: false, + generation_expression: null, + has_auto_increment: false, + foreign_key_table: null, + foreign_key_column: null, + }, + }, + { + collection: 'tickets', + field: 'date_created', + type: 'timestamp', + meta: { + collection: 'tickets', + conditions: null, + display: 'datetime', + display_options: { relative: true }, + field: 'date_created', + group: null, + hidden: false, + interface: 'datetime', + note: 'Ticket creation timestamp', + options: null, + readonly: true, + required: false, + searchable: true, + sort: 12, + special: ['date-created'], + translations: null, + validation: null, + validation_message: null, + width: 'half', + }, + schema: { + name: 'date_created', + table: 'tickets', + data_type: 'timestamp with time zone', + default_value: null, + max_length: null, + numeric_precision: null, + numeric_scale: null, + is_nullable: true, + is_unique: false, + is_indexed: false, + is_primary_key: false, + is_generated: false, + generation_expression: null, + has_auto_increment: false, + foreign_key_table: null, + foreign_key_column: null, + }, + }, + ] + + for (const field of fields) { + if (!fieldExists(schema.fields, field.collection, field.field)) { + schema.fields.push(field) + console.log(` Added ${field.collection}.${field.field}`) + } else { + console.log(` ${field.collection}.${field.field} already exists, skipping`) + } + } + + // Add relations + const orderRelation = { + collection: 'tickets', + field: 'order', + related_collection: 'ticket_orders', + meta: { + junction_field: null, + many_collection: 'tickets', + many_field: 'order', + one_allowed_collections: null, + one_collection: 'ticket_orders', + one_collection_field: null, + one_deselect_action: 'nullify', + one_field: 'tickets', + sort_field: null, + }, + schema: { + table: 'tickets', + column: 'order', + foreign_key_table: 'ticket_orders', + foreign_key_column: 'id', + on_update: 'NO ACTION', + on_delete: 'CASCADE', + constraint_name: null, + }, + } + + if (!schema.relations.some((r) => r.collection === 'tickets' && r.field === 'order')) { + schema.relations.push(orderRelation) + console.log(' Added relation tickets.order -> ticket_orders') + } + + const conferenceRelation = { + collection: 'tickets', + field: 'conference', + related_collection: 'conferences', + meta: { + junction_field: null, + many_collection: 'tickets', + many_field: 'conference', + one_allowed_collections: null, + one_collection: 'conferences', + one_collection_field: null, + one_deselect_action: 'nullify', + one_field: null, + sort_field: null, + }, + schema: { + table: 'tickets', + column: 'conference', + foreign_key_table: 'conferences', + foreign_key_column: 'id', + on_update: 'NO ACTION', + on_delete: 'CASCADE', + constraint_name: null, + }, + } + + if (!schema.relations.some((r) => r.collection === 'tickets' && r.field === 'conference')) { + schema.relations.push(conferenceRelation) + console.log(' Added relation tickets.conference -> conferences') + } +} + +// Add ticket_settings singleton collection +function addTicketSettingsCollection(schema) { + console.log('Adding ticket_settings collection...') + + if (!collectionExists(schema.collections, 'ticket_settings')) { + schema.collections.push({ + collection: 'ticket_settings', + meta: { + accountability: 'all', + archive_app_filter: true, + archive_field: null, + archive_value: null, + collapse: 'open', + collection: 'ticket_settings', + color: null, + display_template: null, + group: 'Ticketing', + hidden: false, + icon: 'settings', + item_duplication_fields: null, + note: 'Global ticket pricing and discount settings', + preview_url: null, + singleton: true, + sort: 3, + sort_field: null, + translations: null, + unarchive_value: null, + versioning: false, + }, + schema: { + name: 'ticket_settings', + }, + }) + console.log(' Added ticket_settings collection') + } else { + console.log(' ticket_settings already exists, skipping') + } + + // Add fields + const fields = [ + { + collection: 'ticket_settings', + field: 'id', + type: 'integer', + meta: { + collection: 'ticket_settings', + conditions: null, + display: null, + display_options: null, + field: 'id', + group: null, + hidden: true, + interface: 'input', + note: null, + options: null, + readonly: true, + required: false, + searchable: true, + sort: 1, + special: null, + translations: null, + validation: null, + validation_message: null, + width: 'full', + }, + schema: { + name: 'id', + table: 'ticket_settings', + data_type: 'integer', + default_value: null, + max_length: null, + numeric_precision: 32, + numeric_scale: 0, + is_nullable: false, + is_unique: true, + is_indexed: false, + is_primary_key: true, + is_generated: true, + generation_expression: null, + has_auto_increment: true, + foreign_key_table: null, + foreign_key_column: null, + }, + }, + { + collection: 'ticket_settings', + field: 'early_bird_price_cents', + type: 'integer', + meta: { + collection: 'ticket_settings', + conditions: null, + display: 'raw', + display_options: null, + field: 'early_bird_price_cents', + group: null, + hidden: false, + interface: 'input', + note: 'Early bird price in cents (e.g., 24900 for €249.00)', + options: null, + readonly: false, + required: true, + searchable: true, + sort: 2, + special: null, + translations: null, + validation: null, + validation_message: null, + width: 'half', + }, + schema: { + name: 'early_bird_price_cents', + table: 'ticket_settings', + data_type: 'integer', + default_value: 24900, + max_length: null, + numeric_precision: 32, + numeric_scale: 0, + is_nullable: false, + is_unique: false, + is_indexed: false, + is_primary_key: false, + is_generated: false, + generation_expression: null, + has_auto_increment: false, + foreign_key_table: null, + foreign_key_column: null, + }, + }, + { + collection: 'ticket_settings', + field: 'regular_price_cents', + type: 'integer', + meta: { + collection: 'ticket_settings', + conditions: null, + display: 'raw', + display_options: null, + field: 'regular_price_cents', + group: null, + hidden: false, + interface: 'input', + note: 'Regular price in cents (e.g., 34900 for €349.00)', + options: null, + readonly: false, + required: true, + searchable: true, + sort: 3, + special: null, + translations: null, + validation: null, + validation_message: null, + width: 'half', + }, + schema: { + name: 'regular_price_cents', + table: 'ticket_settings', + data_type: 'integer', + default_value: 34900, + max_length: null, + numeric_precision: 32, + numeric_scale: 0, + is_nullable: false, + is_unique: false, + is_indexed: false, + is_primary_key: false, + is_generated: false, + generation_expression: null, + has_auto_increment: false, + foreign_key_table: null, + foreign_key_column: null, + }, + }, + { + collection: 'ticket_settings', + field: 'discounted_price_cents', + type: 'integer', + meta: { + collection: 'ticket_settings', + conditions: null, + display: 'raw', + display_options: null, + field: 'discounted_price_cents', + group: null, + hidden: false, + interface: 'input', + note: 'Discounted price in cents (e.g., 29900 for €299.00)', + options: null, + readonly: false, + required: true, + searchable: true, + sort: 4, + special: null, + translations: null, + validation: null, + validation_message: null, + width: 'half', + }, + schema: { + name: 'discounted_price_cents', + table: 'ticket_settings', + data_type: 'integer', + default_value: 29900, + max_length: null, + numeric_precision: 32, + numeric_scale: 0, + is_nullable: false, + is_unique: false, + is_indexed: false, + is_primary_key: false, + is_generated: false, + generation_expression: null, + has_auto_increment: false, + foreign_key_table: null, + foreign_key_column: null, + }, + }, + { + collection: 'ticket_settings', + field: 'early_bird_deadline', + type: 'timestamp', + meta: { + collection: 'ticket_settings', + conditions: null, + display: 'datetime', + display_options: null, + field: 'early_bird_deadline', + group: null, + hidden: false, + interface: 'datetime', + note: 'Early bird pricing ends after this date', + options: null, + readonly: false, + required: true, + searchable: true, + sort: 5, + special: null, + translations: null, + validation: null, + validation_message: null, + width: 'half', + }, + schema: { + name: 'early_bird_deadline', + table: 'ticket_settings', + data_type: 'timestamp with time zone', + default_value: null, + max_length: null, + numeric_precision: null, + numeric_scale: null, + is_nullable: false, + is_unique: false, + is_indexed: false, + is_primary_key: false, + is_generated: false, + generation_expression: null, + has_auto_increment: false, + foreign_key_table: null, + foreign_key_column: null, + }, + }, + { + collection: 'ticket_settings', + field: 'discount_code', + type: 'string', + meta: { + collection: 'ticket_settings', + conditions: null, + display: 'raw', + display_options: null, + field: 'discount_code', + group: null, + hidden: false, + interface: 'input', + note: 'Valid discount code (case-insensitive)', + options: null, + readonly: false, + required: false, + searchable: true, + sort: 6, + special: null, + translations: null, + validation: null, + validation_message: null, + width: 'half', + }, + schema: { + name: 'discount_code', + table: 'ticket_settings', + data_type: 'character varying', + default_value: null, + max_length: 50, + numeric_precision: null, + numeric_scale: null, + is_nullable: true, + is_unique: false, + is_indexed: false, + is_primary_key: false, + is_generated: false, + generation_expression: null, + has_auto_increment: false, + foreign_key_table: null, + foreign_key_column: null, + }, + }, + ] + + for (const field of fields) { + if (!fieldExists(schema.fields, field.collection, field.field)) { + schema.fields.push(field) + console.log(` Added ${field.collection}.${field.field}`) + } else { + console.log(` ${field.collection}.${field.field} already exists, skipping`) + } + } +} + +// Add tickets field to ticket_orders (O2M relation) +function addTicketsFieldToOrders(schema) { + console.log('Adding tickets field to ticket_orders...') + + const ticketsField = { + collection: 'ticket_orders', + field: 'tickets', + type: 'alias', + meta: { + collection: 'ticket_orders', + conditions: null, + display: 'related-values', + display_options: { template: '{{ticket_code}} - {{attendee_first_name}} {{attendee_last_name}}' }, + field: 'tickets', + group: null, + hidden: false, + interface: 'list-o2m', + note: 'Tickets in this order', + options: { template: '{{ticket_code}} - {{attendee_first_name}} {{attendee_last_name}}' }, + readonly: false, + required: false, + searchable: true, + sort: 28, + special: ['o2m'], + translations: null, + validation: null, + validation_message: null, + width: 'full', + }, + schema: null, + } + + if (!fieldExists(schema.fields, 'ticket_orders', 'tickets')) { + schema.fields.push(ticketsField) + console.log(' Added ticket_orders.tickets') + } else { + console.log(' ticket_orders.tickets already exists, skipping') + } +} + +// Main function +function main() { + console.log('=== Updating schema.json with ticketing collections ===\n') + + addTicketingFieldToConferences(schema) + addTicketingFolderCollection(schema) + addTicketOrdersCollection(schema) + addTicketsCollection(schema) + addTicketsFieldToOrders(schema) + addTicketSettingsCollection(schema) + + // Write updated schema + writeFileSync(schemaPath, JSON.stringify(schema, null, 2)) + console.log('\n=== Schema updated successfully ===') + console.log(`Wrote to: ${schemaPath}`) +} + +main() diff --git a/nuxt-app/components/GenericLazyList.vue b/nuxt-app/components/GenericLazyList.vue index bb929cb..ac5c985 100644 --- a/nuxt-app/components/GenericLazyList.vue +++ b/nuxt-app/components/GenericLazyList.vue @@ -32,14 +32,14 @@ const lastItemElement = ref() // Create first an last index reference const firstIndex = ref(0) -const lastIndex = ref(Math.min(props.items.length - 1, 9)) +const lastIndex = ref(Math.min((props.items?.length ?? 0) - 1, 9)) // Create padding start and end list reference const paddingStartList = ref([]) const paddingEndList = ref([]) // Create items to be rendered -const renderItems = computed(() => props.items.slice(firstIndex.value, lastIndex.value + 1)) +const renderItems = computed(() => (props.items ?? []).slice(firstIndex.value, lastIndex.value + 1)) // Create viewport items reference const viewportItems = ref(new Set()) @@ -55,14 +55,15 @@ const addViewportItem = (item: unknown) => { watch( () => props.items, () => { - firstIndex.value = Math.max(Math.min(props.items.length - 11, firstIndex.value), 0) + const itemsLength = props.items?.length ?? 0 + firstIndex.value = Math.max(Math.min(itemsLength - 11, firstIndex.value), 0) lastIndex.value = Math.max( - Math.min(props.items.length - 1, lastIndex.value), - Math.min(props.items.length - 1, 9), + Math.min(itemsLength - 1, lastIndex.value), + Math.min(itemsLength - 1, 9), 0 ) paddingStartList.value = paddingStartList.value.slice(0, firstIndex.value) - paddingEndList.value = paddingEndList.value.slice(lastIndex.value + 1, props.items.length) + paddingEndList.value = paddingEndList.value.slice(lastIndex.value + 1, itemsLength) viewportItems.value = new Set() } ) @@ -174,7 +175,7 @@ const handleScroll = () => { // Check position of last item element if user scrolls down, last // index is not reached and last item element exists - } else if (scrollDirection === 'down' && lastIndex.value < props.items.length - 1 && lastItemElement.value) { + } else if (scrollDirection === 'down' && lastIndex.value < (props.items?.length ?? 0) - 1 && lastItemElement.value) { // Destructure client rect of last item element const { top, left } = lastItemElement.value.getBoundingClientRect() diff --git a/nuxt-app/components/Pagination.vue b/nuxt-app/components/Pagination.vue index 99d22ab..d8c2276 100644 --- a/nuxt-app/components/Pagination.vue +++ b/nuxt-app/components/Pagination.vue @@ -1,5 +1,6 @@ + + diff --git a/nuxt-app/components/tickets/TicketPurchaseFlow.vue b/nuxt-app/components/tickets/TicketPurchaseFlow.vue new file mode 100644 index 0000000..852371b --- /dev/null +++ b/nuxt-app/components/tickets/TicketPurchaseFlow.vue @@ -0,0 +1,62 @@ + + + diff --git a/nuxt-app/components/tickets/TicketStepAttendees.vue b/nuxt-app/components/tickets/TicketStepAttendees.vue new file mode 100644 index 0000000..b873d38 --- /dev/null +++ b/nuxt-app/components/tickets/TicketStepAttendees.vue @@ -0,0 +1,128 @@ + + + diff --git a/nuxt-app/components/tickets/TicketStepBilling.vue b/nuxt-app/components/tickets/TicketStepBilling.vue new file mode 100644 index 0000000..22bbddb --- /dev/null +++ b/nuxt-app/components/tickets/TicketStepBilling.vue @@ -0,0 +1,387 @@ + + + diff --git a/nuxt-app/components/tickets/TicketStepQuantity.vue b/nuxt-app/components/tickets/TicketStepQuantity.vue new file mode 100644 index 0000000..93fe374 --- /dev/null +++ b/nuxt-app/components/tickets/TicketStepQuantity.vue @@ -0,0 +1,161 @@ + + + diff --git a/nuxt-app/components/tickets/TicketStepReview.vue b/nuxt-app/components/tickets/TicketStepReview.vue new file mode 100644 index 0000000..639b983 --- /dev/null +++ b/nuxt-app/components/tickets/TicketStepReview.vue @@ -0,0 +1,144 @@ + + + diff --git a/nuxt-app/composables/useDirectus.ts b/nuxt-app/composables/useDirectus.ts index 8b4e2ee..97c60f9 100644 --- a/nuxt-app/composables/useDirectus.ts +++ b/nuxt-app/composables/useDirectus.ts @@ -434,6 +434,7 @@ export function useDirectus() { 'tickets_url', 'tickets_on_sale', 'tickets_text', + // 'ticketing_enabled', // TODO: Enable once schema is deployed to production 'partners', 'partners.*', 'partners.partner.*', @@ -862,6 +863,19 @@ export function useDirectus() { } } + /** + * Get ticket settings via API (uses admin auth on server) + */ + async function getTicketSettings() { + try { + const response = await $fetch('/api/tickets/settings') + return response + } catch (e: unknown) { + console.error('Error fetching ticket settings', e) + return null + } + } + return { getHomepage, getPodcastPage, @@ -903,5 +917,6 @@ export function useDirectus() { getProfileById, getTestimonials, createRating, + getTicketSettings, } } diff --git a/nuxt-app/composables/useTicketCheckoutStore.ts b/nuxt-app/composables/useTicketCheckoutStore.ts new file mode 100644 index 0000000..1ea0512 --- /dev/null +++ b/nuxt-app/composables/useTicketCheckoutStore.ts @@ -0,0 +1,548 @@ +import { defineStore } from 'pinia' +import type { + TicketAttendee, + CompanyBillingInfo, + BillingAddress, + Purchaser, + PurchaseType, + TicketType, +} from '~/types/tickets' + +interface TicketPricingSettings { + earlyBirdPriceCents: number + regularPriceCents: number + discountedPriceCents: number + earlyBirdDeadline: string + isEarlyBird: boolean +} + +interface TicketCheckoutState { + conferenceId: string + conferenceSlug: string + conferenceTitle: string + ticketCount: number + attendees: TicketAttendee[] + purchaser: Purchaser + purchaseType: PurchaseType + company: CompanyBillingInfo | null + showPersonalAddress: boolean + personalAddress: BillingAddress | null + discountCode: string + discountValid: boolean + discountValidating: boolean + isLoading: boolean + error: string | null + // Pricing settings from Directus + pricingSettings: TicketPricingSettings | null + pricingLoaded: boolean + pricingError: boolean +} + +// Keys to persist (exclude transient state like isLoading, error, discountValidating) +const PERSISTED_KEYS: (keyof TicketCheckoutState)[] = [ + 'conferenceId', + 'conferenceSlug', + 'conferenceTitle', + 'ticketCount', + 'attendees', + 'purchaser', + 'purchaseType', + 'company', + 'showPersonalAddress', + 'personalAddress', + 'discountCode', + 'discountValid', +] + +function getStorageKey(conferenceSlug: string): string { + return `ticket-checkout-${conferenceSlug}` +} + +function loadFromStorage(conferenceSlug: string): Partial | null { + if (typeof window === 'undefined') return null + try { + const stored = localStorage.getItem(getStorageKey(conferenceSlug)) + if (stored) { + return JSON.parse(stored) + } + } catch (e) { + console.warn('Failed to load checkout state from localStorage', e) + } + return null +} + +function saveToStorage(state: TicketCheckoutState): void { + if (typeof window === 'undefined') return + if (!state.conferenceSlug) return + + try { + const toSave: Partial = {} + for (const key of PERSISTED_KEYS) { + ;(toSave as any)[key] = state[key] + } + localStorage.setItem(getStorageKey(state.conferenceSlug), JSON.stringify(toSave)) + } catch (e) { + console.warn('Failed to save checkout state to localStorage', e) + } +} + +function clearStorage(conferenceSlug: string): void { + if (typeof window === 'undefined') return + try { + localStorage.removeItem(getStorageKey(conferenceSlug)) + } catch (e) { + console.warn('Failed to clear checkout state from localStorage', e) + } +} + +export const useTicketCheckoutStore = defineStore('ticketCheckout', { + state: (): TicketCheckoutState => ({ + conferenceId: '', + conferenceSlug: '', + conferenceTitle: '', + ticketCount: 1, + attendees: [{ firstName: '', lastName: '', email: '' }], + purchaser: { firstName: '', lastName: '', email: '' }, + purchaseType: 'personal', + company: null, + showPersonalAddress: false, + personalAddress: null, + discountCode: '', + discountValid: false, + discountValidating: false, + isLoading: false, + error: null, + pricingSettings: null, + pricingLoaded: false, + pricingError: false, + }), + + getters: { + /** + * Check if pricing settings failed to load + */ + hasPricingError(): boolean { + return this.pricingError + }, + + /** + * Check if we're in early bird period + */ + isEarlyBird(): boolean { + if (!this.pricingSettings) { + return false + } + return this.pricingSettings.isEarlyBird + }, + + /** + * Get unit price per ticket in cents (returns 0 if settings not loaded) + */ + unitPriceCents(): number { + if (!this.pricingSettings) { + return 0 + } + if (this.isEarlyBird) { + return this.pricingSettings.earlyBirdPriceCents + } + if (this.discountValid) { + return this.pricingSettings.discountedPriceCents + } + return this.pricingSettings.regularPriceCents + }, + + /** + * Get ticket type based on current pricing + */ + ticketType(): TicketType { + if (this.isEarlyBird) { + return 'early_bird' + } + if (this.discountValid) { + return 'discounted' + } + return 'regular' + }, + + /** + * Calculate subtotal in cents + */ + subtotalCents(): number { + return this.ticketCount * this.unitPriceCents + }, + + /** + * Calculate discount amount in cents + */ + discountAmountCents(): number { + if (!this.discountValid || this.isEarlyBird || !this.pricingSettings) { + return 0 + } + return ( + this.ticketCount * + (this.pricingSettings.regularPriceCents - this.pricingSettings.discountedPriceCents) + ) + }, + + /** + * Calculate total (net) in cents + */ + totalCents(): number { + return this.subtotalCents - this.discountAmountCents + }, + + /** + * VAT rate (19% in Germany) + */ + vatRate(): number { + return 0.19 + }, + + /** + * Calculate VAT amount in cents + */ + vatAmountCents(): number { + return Math.round(this.totalCents * this.vatRate) + }, + + /** + * Calculate total with VAT (gross) in cents + */ + totalWithVatCents(): number { + return this.totalCents + this.vatAmountCents + }, + + /** + * Format price in euros + */ + formatPrice: + () => + (cents: number): string => { + return new Intl.NumberFormat('de-DE', { + style: 'currency', + currency: 'EUR', + }).format(cents / 100) + }, + }, + + actions: { + /** + * Fetch pricing settings from the API + */ + async fetchPricingSettings(): Promise { + if (this.pricingLoaded) return + + try { + const settings = await $fetch('/api/tickets/settings') + this.pricingSettings = settings as TicketPricingSettings + this.pricingLoaded = true + this.pricingError = false + } catch (e) { + console.error('Failed to fetch pricing settings', e) + this.pricingError = true + this.error = 'Preise konnten nicht geladen werden. Bitte versuche es später erneut.' + } + }, + + /** + * Set pricing settings from pre-fetched data (SSR/SSG) + */ + setPricingSettings(settings: { + early_bird_price_cents: number + regular_price_cents: number + discounted_price_cents: number + early_bird_deadline: string + discount_code: string | null + } | null | undefined) { + if (!settings) { + this.pricingError = true + this.error = 'Preise konnten nicht geladen werden. Bitte versuche es später erneut.' + return + } + + const deadline = new Date(settings.early_bird_deadline) + const isEarlyBird = new Date() <= deadline + + this.pricingSettings = { + earlyBirdPriceCents: settings.early_bird_price_cents, + regularPriceCents: settings.regular_price_cents, + discountedPriceCents: settings.discounted_price_cents, + earlyBirdDeadline: settings.early_bird_deadline, + isEarlyBird, + } + this.pricingLoaded = true + this.pricingError = false + }, + + /** + * Initialize the store with conference data, loading from localStorage if available + */ + initConference( + id: string, + slug: string, + title: string, + preloadedSettings?: { + early_bird_price_cents: number + regular_price_cents: number + discounted_price_cents: number + early_bird_deadline: string + discount_code: string | null + } | null + ) { + // Use pre-fetched settings if available (from SSR/SSG) + if (preloadedSettings && !this.pricingLoaded) { + this.setPricingSettings(preloadedSettings) + } + + // Try to load existing state from localStorage + const stored = loadFromStorage(slug) + + if (stored && stored.conferenceSlug === slug) { + // Restore persisted state + this.conferenceId = stored.conferenceId + this.conferenceSlug = stored.conferenceSlug || slug + this.conferenceTitle = stored.conferenceTitle || title + this.ticketCount = stored.ticketCount || 1 + this.attendees = stored.attendees || [{ firstName: '', lastName: '', email: '' }] + this.purchaser = stored.purchaser || { firstName: '', lastName: '', email: '' } + this.purchaseType = stored.purchaseType || 'personal' + this.company = stored.company || null + this.showPersonalAddress = stored.showPersonalAddress || false + this.personalAddress = stored.personalAddress || null + this.discountCode = stored.discountCode || '' + this.discountValid = stored.discountValid || false + } else { + // Initialize fresh state + this.conferenceId = id + this.conferenceSlug = slug + this.conferenceTitle = title + } + }, + + /** + * Persist current state to localStorage + */ + persistState() { + saveToStorage(this.$state) + }, + + /** + * Set ticket count and sync attendees array + */ + setTicketCount(count: number) { + const validCount = Math.max(1, Math.min(10, count)) + this.ticketCount = validCount + + // Sync attendees array with ticket count + while (this.attendees.length < validCount) { + this.attendees.push({ firstName: '', lastName: '', email: '' }) + } + while (this.attendees.length > validCount) { + this.attendees.pop() + } + + this.persistState() + }, + + /** + * Update a specific attendee + */ + updateAttendee(index: number, data: Partial) { + if (index >= 0 && index < this.attendees.length) { + this.attendees[index] = { ...this.attendees[index], ...data } + this.persistState() + } + }, + + /** + * Copy purchaser info to first attendee + */ + copyPurchaserToFirstAttendee() { + if (this.attendees.length > 0) { + this.attendees[0] = { ...this.purchaser } + this.persistState() + } + }, + + /** + * Copy first attendee info to purchaser + */ + copyFirstAttendeeToPurchaser() { + if (this.attendees.length > 0 && this.attendees[0]) { + this.purchaser = { ...this.attendees[0] } + this.persistState() + } + }, + + /** + * Update purchaser info + */ + updatePurchaser(data: Partial) { + this.purchaser = { ...this.purchaser, ...data } + this.persistState() + }, + + /** + * Set purchase type + */ + setPurchaseType(type: PurchaseType) { + this.purchaseType = type + if (type === 'personal') { + this.company = null + } else if (!this.company) { + this.company = { + name: '', + address: { + line1: '', + city: '', + postalCode: '', + country: 'Deutschland', + }, + } + } + this.persistState() + }, + + /** + * Update company info + */ + updateCompany(data: Partial) { + if (this.company) { + this.company = { ...this.company, ...data } + this.persistState() + } + }, + + /** + * Toggle personal address section + */ + setShowPersonalAddress(show: boolean) { + this.showPersonalAddress = show + if (show && !this.personalAddress) { + this.personalAddress = { + line1: '', + city: '', + postalCode: '', + country: 'Deutschland', + } + } else if (!show) { + this.personalAddress = null + } + this.persistState() + }, + + /** + * Update personal address + */ + updatePersonalAddress(data: Partial) { + if (this.personalAddress) { + this.personalAddress = { ...this.personalAddress, ...data } + this.persistState() + } + }, + + /** + * Set discount code + */ + setDiscountCode(code: string) { + this.discountCode = code + this.discountValid = false + this.persistState() + }, + + /** + * Validate discount code + */ + async validateDiscountCode(): Promise { + if (!this.discountCode.trim()) { + this.discountValid = false + return false + } + + this.discountValidating = true + this.error = null + + try { + const response = await $fetch('/api/tickets/validate-discount', { + method: 'POST', + body: { + code: this.discountCode.trim(), + }, + }) + + this.discountValid = (response as { valid: boolean }).valid + this.persistState() + return this.discountValid + } catch (e: any) { + this.discountValid = false + this.error = e.data?.message || 'Fehler bei der Code-Validierung' + return false + } finally { + this.discountValidating = false + } + }, + + /** + * Create Stripe checkout session and return URL + */ + async createCheckout(): Promise { + this.isLoading = true + this.error = null + + try { + const response = await $fetch('/api/tickets/create-checkout', { + method: 'POST', + body: { + conferenceId: this.conferenceId, + purchaseType: this.purchaseType, + purchaser: this.purchaser, + company: this.purchaseType === 'company' ? this.company : undefined, + personalAddress: + this.purchaseType === 'personal' && this.showPersonalAddress + ? this.personalAddress + : undefined, + tickets: this.attendees, + discountCode: this.discountValid ? this.discountCode : undefined, + }, + }) + + return (response as { checkoutUrl: string }).checkoutUrl + } catch (e: any) { + this.error = e.data?.message || 'Fehler beim Erstellen der Bestellung' + throw e + } finally { + this.isLoading = false + } + }, + + /** + * Reset the store to initial state and clear localStorage + */ + reset() { + const conferenceSlug = this.conferenceSlug + this.$reset() + if (conferenceSlug) { + clearStorage(conferenceSlug) + } + }, + + /** + * Reset and clear storage using a specific slug (for use when store isn't initialized) + */ + resetBySlug(slug: string) { + this.$reset() + if (slug) { + clearStorage(slug) + } + }, + + /** + * Clear persisted data for current conference + */ + clearPersistedData() { + if (this.conferenceSlug) { + clearStorage(this.conferenceSlug) + } + }, + }, +}) diff --git a/nuxt-app/composables/useWeightedRandomSelection.ts b/nuxt-app/composables/useWeightedRandomSelection.ts index 33c0b3a..007bd9c 100644 --- a/nuxt-app/composables/useWeightedRandomSelection.ts +++ b/nuxt-app/composables/useWeightedRandomSelection.ts @@ -26,8 +26,8 @@ export function useWeightedRandomSelection() { testimonials: DirectusTestimonialItem[], maxCount: number = 5 ): DirectusTestimonialItem[] => { - if (testimonials.length <= maxCount) { - return testimonials + if (!testimonials || testimonials.length <= maxCount) { + return testimonials || [] } const seed = getHourlySeed() diff --git a/nuxt-app/nuxt.config.ts b/nuxt-app/nuxt.config.ts index 431e759..2a45d62 100644 --- a/nuxt-app/nuxt.config.ts +++ b/nuxt-app/nuxt.config.ts @@ -28,13 +28,22 @@ export default defineNuxtConfig({ ], runtimeConfig: { - emailPassword: '', + // Email (Mailgun API) + emailTransport: 'mailgun', // Set via NUXT_EMAIL_TRANSPORT env var + emailFrom: 'noreply@programmier.bar', // Set via NUXT_EMAIL_FROM env var + emailMailgunApiKey: '', // Set via NUXT_EMAIL_MAILGUN_API_KEY env var + emailMailgunDomain: '', // Set via NUXT_EMAIL_MAILGUN_DOMAIN env var + emailMailgunHost: 'api.eu.mailgun.net', // Set via NUXT_EMAIL_MAILGUN_HOST env var directusAdminToken: '', // Set via NUXT_DIRECTUS_ADMIN_TOKEN env var + directusTicketToken: '', // Set via NUXT_DIRECTUS_TICKET_TOKEN env var geminiApiKey: '', // Set via NUXT_GEMINI_API_KEY env var + stripeSecretKey: '', // Set via NUXT_STRIPE_SECRET_KEY env var + stripeWebhookSecret: '', // Set via NUXT_STRIPE_WEBHOOK_SECRET env var public: { FLAG_SHOW_LOGIN: FLAG_SHOW_LOGIN, DISCORD_INVITE_LINK: DISCORD_INVITE_LINK, directusCmsUrl: DIRECTUS_CMS_URL, + stripePublishableKey: '', // Set via NUXT_PUBLIC_STRIPE_PUBLISHABLE_KEY env var }, }, @@ -129,4 +138,12 @@ export default defineNuxtConfig({ }, compatibilityDate: '2025-01-17', + + nitro: { + prerender: { + // Don't fail build on prerender errors for image routes + // which require the CMS server to be running + failOnError: false, + }, + }, }) diff --git a/nuxt-app/package-lock.json b/nuxt-app/package-lock.json index aa46114..7dd861c 100644 --- a/nuxt-app/package-lock.json +++ b/nuxt-app/package-lock.json @@ -24,6 +24,7 @@ "nuxt-jsonld": "^2.0.8", "pinia": "^2.1.7", "smoothscroll-polyfill": "^0.4.4", + "stripe": "^20.3.0", "vite-svg-loader": "^5.1.0", "vue-json-pretty": "^2.5.0", "zod": "^3.22.4" @@ -5502,7 +5503,7 @@ "version": "25.2.0", "resolved": "https://registry.npmjs.org/@types/node/-/node-25.2.0.tgz", "integrity": "sha512-DZ8VwRFUNzuqJ5khrvwMXHmvPe+zGayJhr2CDNiKB1WBE1ST8Djl00D0IC4vvNmHMdj6DlbYRIaFE7WHjlDl5w==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "undici-types": "~7.16.0" @@ -14843,6 +14844,23 @@ "dev": true, "license": "MIT" }, + "node_modules/stripe": { + "version": "20.3.0", + "resolved": "https://registry.npmjs.org/stripe/-/stripe-20.3.0.tgz", + "integrity": "sha512-DYzcmV1MfYhycr1GwjCjeQVYk9Gu8dpxyTlu7qeDCsuguug7oUTxPsUQuZeSf/OPzK7pofqobvOKVqAwlpgf/Q==", + "license": "MIT", + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "@types/node": ">=16" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, "node_modules/structured-clone-es": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/structured-clone-es/-/structured-clone-es-1.0.0.tgz", @@ -15611,7 +15629,7 @@ "version": "7.16.0", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/unenv": { diff --git a/nuxt-app/package.json b/nuxt-app/package.json index 0cd5578..5f1d3ec 100644 --- a/nuxt-app/package.json +++ b/nuxt-app/package.json @@ -27,6 +27,7 @@ "nuxt-jsonld": "^2.0.8", "pinia": "^2.1.7", "smoothscroll-polyfill": "^0.4.4", + "stripe": "^20.3.0", "vite-svg-loader": "^5.1.0", "vue-json-pretty": "^2.5.0", "zod": "^3.22.4" diff --git a/nuxt-app/pages/hall-of-fame/[slug].vue b/nuxt-app/pages/hall-of-fame/[slug].vue index 36698e4..433bc9d 100644 --- a/nuxt-app/pages/hall-of-fame/[slug].vue +++ b/nuxt-app/pages/hall-of-fame/[slug].vue @@ -21,6 +21,7 @@ > +import { useDirectus } from '~/composables/useDirectus' +import { getMetaInfo } from '~/helpers' +import { computed, onMounted, ref } from 'vue' +import TicketPurchaseFlow from '~/components/tickets/TicketPurchaseFlow.vue' + +const route = useRoute() +const directus = useDirectus() + +// Check for cancelled state from Stripe redirect +const wasCancelled = ref(false) +onMounted(() => { + if (route.query.cancelled === 'true') { + wasCancelled.value = true + } +}) + +// Query conference data and ticket settings +const { data: pageData, error } = useAsyncData(route.fullPath, async () => { + const [conference, ticketSettings] = await Promise.all([ + directus.getConferenceBySlug(route.params.slug as string), + directus.getTicketSettings(), + ]) + + if (!conference) { + throw createError({ + statusCode: 404, + message: 'Konferenz nicht gefunden', + }) + } + + return { conference, ticketSettings } +}) + +const conference = computed(() => pageData.value?.conference) +const ticketSettings = computed(() => pageData.value?.ticketSettings) + +// Check if ticketing is enabled +const ticketingAvailable = computed(() => { + return conference.value?.ticketing_enabled === true +}) + +// Set page meta data +useHead(() => + conference.value + ? getMetaInfo({ + type: 'website', + path: route.path, + title: `Tickets - ${conference.value.title}`, + description: `Tickets für die ${conference.value.title} kaufen`, + image: conference.value.cover_image, + }) + : {} +) + +// Breadcrumbs +const breadcrumbs = computed(() => [ + { label: 'Konferenz', href: '/konferenzen' }, + { label: conference.value?.title || '', href: `/konferenzen/${route.params.slug}` }, + { label: 'Tickets' }, +]) + + + diff --git a/nuxt-app/pages/konferenzen/[slug]/tickets/success.vue b/nuxt-app/pages/konferenzen/[slug]/tickets/success.vue new file mode 100644 index 0000000..1259aa0 --- /dev/null +++ b/nuxt-app/pages/konferenzen/[slug]/tickets/success.vue @@ -0,0 +1,118 @@ + + + diff --git a/nuxt-app/server/api/tickets/create-checkout.post.ts b/nuxt-app/server/api/tickets/create-checkout.post.ts new file mode 100644 index 0000000..29fe8e7 --- /dev/null +++ b/nuxt-app/server/api/tickets/create-checkout.post.ts @@ -0,0 +1,275 @@ +import { CreateCheckoutSchema } from '../../utils/ticketSchemas' +import { getStripe } from '../../utils/stripe' +import { getTicketSettings, isEarlyBirdPeriod } from '../../utils/ticketSettings' +import type { TicketType, DirectusTicketSettingsItem } from '~/types/tickets' + +/** + * Generate a unique order number + */ +function generateOrderNumber(): string { + const year = new Date().getFullYear() + const random = Math.random().toString(36).substring(2, 8).toUpperCase() + return `ORD-${year}-${random}` +} + +const VAT_RATE = 0.19 + +/** + * Calculate pricing for the order (net prices + VAT) + */ +function calculatePricing( + settings: DirectusTicketSettingsItem, + ticketCount: number, + discountValid: boolean +) { + const isEarlyBird = isEarlyBirdPeriod(settings) + + let unitPriceNetCents: number + let ticketType: TicketType + + if (isEarlyBird) { + unitPriceNetCents = settings.early_bird_price_cents + ticketType = 'early_bird' + } else if (discountValid) { + unitPriceNetCents = settings.discounted_price_cents + ticketType = 'discounted' + } else { + unitPriceNetCents = settings.regular_price_cents + ticketType = 'regular' + } + + const subtotalNetCents = ticketCount * unitPriceNetCents + const discountAmountCents = + discountValid && !isEarlyBird + ? ticketCount * (settings.regular_price_cents - settings.discounted_price_cents) + : 0 + const totalNetCents = subtotalNetCents + + // Calculate gross unit price for Stripe line items (round per-ticket for consistency) + const unitPriceGrossCents = Math.round(unitPriceNetCents * (1 + VAT_RATE)) + + // Calculate VAT and gross amounts from per-ticket gross to ensure consistency + // This ensures ticketCount * unitPriceGrossCents === totalGrossCents + const totalGrossCents = ticketCount * unitPriceGrossCents + const vatAmountCents = totalGrossCents - totalNetCents + + return { + unitPriceNetCents, + unitPriceGrossCents, + ticketType, + subtotalNetCents, + discountAmountCents, + totalNetCents, + vatAmountCents, + totalGrossCents, + } +} + +export default defineEventHandler(async (event) => { + const rawBody = await readBody(event) + + // Validate request body + const parseResult = CreateCheckoutSchema.safeParse(rawBody) + if (!parseResult.success) { + const issue = parseResult.error.issues[0] + const key = issue?.path?.[0] ?? 'input' + const message = issue?.message ?? 'Validierungsfehler' + throw createError({ statusCode: 400, message: `${key}: ${message}` }) + } + + const { conferenceId, purchaseType, purchaser, company, personalAddress, tickets, discountCode } = parseResult.data + + // Fetch ticket settings from Directus + const settings = await getTicketSettings() + if (!settings) { + throw createError({ + statusCode: 503, + message: 'Ticketing ist derzeit nicht verfügbar. Bitte versuche es später erneut.', + }) + } + + // Validate discount code if provided + const discountValid = + discountCode && settings.discount_code + ? discountCode.toUpperCase() === settings.discount_code.toUpperCase() + : false + + // Calculate pricing + const pricing = calculatePricing(settings, tickets.length, discountValid) + + const config = useRuntimeConfig() + const directusUrl = config.public.directusCmsUrl || 'http://localhost:8055' + const ticketToken = config.directusTicketToken + + if (!ticketToken) { + console.error('DIRECTUS_TICKET_TOKEN not configured') + throw createError({ + statusCode: 500, + message: 'Serverkonfigurationsfehler', + }) + } + + try { + // Verify conference exists + // Note: ticketing_enabled field is optional until schema is deployed to production + const conferenceResponse = await fetch( + `${directusUrl}/items/conferences/${conferenceId}?fields=id,slug,title`, + { + headers: { + Authorization: `Bearer ${ticketToken}`, + }, + } + ) + + if (!conferenceResponse.ok) { + throw createError({ + statusCode: 404, + message: 'Konferenz nicht gefunden', + }) + } + + const conferenceData = await conferenceResponse.json() + const conference = conferenceData.data + + // TODO: Re-enable ticketing_enabled check once schema is deployed to production + // if (!conference.ticketing_enabled) { + // throw createError({ + // statusCode: 400, + // message: 'Ticketverkauf für diese Konferenz ist nicht aktiv', + // }) + // } + + // Generate order number + const orderNumber = generateOrderNumber() + + // Create pending order in Directus + // Note: We store net amounts in the database, VAT is calculated + // For billing address: use company address for company purchases, or optional personal address + const billingAddress = + purchaseType === 'company' ? company?.address : personalAddress + + const orderPayload = { + order_number: orderNumber, + conference: conferenceId, + status: 'pending', + purchase_type: purchaseType, + purchaser_first_name: purchaser.firstName, + purchaser_last_name: purchaser.lastName, + purchaser_email: purchaser.email, + company_name: company?.name || null, + billing_address_line1: billingAddress?.line1 || null, + billing_address_line2: billingAddress?.line2 || null, + billing_city: billingAddress?.city || null, + billing_postal_code: billingAddress?.postalCode || null, + billing_country: billingAddress?.country || null, + billing_email: company?.billingEmail || null, + subtotal_cents: pricing.subtotalNetCents, + discount_amount_cents: pricing.discountAmountCents, + total_cents: pricing.totalNetCents, + vat_amount_cents: pricing.vatAmountCents, + total_gross_cents: pricing.totalGrossCents, + discount_code_used: discountValid ? discountCode : null, + ticket_type: pricing.ticketType, + stripe_checkout_session_id: '', // Will be updated after creating Stripe session + } + + const createOrderResponse = await fetch(`${directusUrl}/items/ticket_orders`, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + Authorization: `Bearer ${ticketToken}`, + }, + body: JSON.stringify(orderPayload), + }) + + if (!createOrderResponse.ok) { + const errorText = await createOrderResponse.text() + console.error('Failed to create order:', errorText) + throw createError({ + statusCode: 500, + message: 'Fehler beim Erstellen der Bestellung', + }) + } + + const orderData = await createOrderResponse.json() + const orderId = orderData.data.id + + // Create Stripe Checkout Session + const stripe = getStripe() + const websiteUrl = process.env.WEBSITE_URL || 'http://localhost:3000' + + let session + try { + session = await stripe.checkout.sessions.create({ + mode: 'payment', + payment_method_types: ['card'], + customer_email: purchaser.email, + // Use gross prices (including 19% VAT) for Stripe + line_items: tickets.map((ticket) => ({ + price_data: { + currency: 'eur', + unit_amount: pricing.unitPriceGrossCents, + product_data: { + name: `${conference.title} - Ticket (inkl. 19% MwSt.)`, + description: `Teilnehmer: ${ticket.firstName} ${ticket.lastName}`, + }, + }, + quantity: 1, + })), + success_url: `${websiteUrl}/konferenzen/${conference.slug}/tickets/success?session_id={CHECKOUT_SESSION_ID}`, + cancel_url: `${websiteUrl}/konferenzen/${conference.slug}/tickets?cancelled=true`, + metadata: { + order_id: orderId, + conference_id: conferenceId, + ticket_type: pricing.ticketType, + // Store attendee info for webhook processing + attendees: JSON.stringify(tickets), + }, + }) + } catch (stripeErr: any) { + // Stripe session creation failed - delete the pending order from Directus + console.error('Stripe session creation failed:', stripeErr) + try { + await fetch(`${directusUrl}/items/ticket_orders/${orderId}`, { + method: 'DELETE', + headers: { + Authorization: `Bearer ${ticketToken}`, + }, + }) + console.log(`Deleted orphaned order ${orderId} after Stripe failure`) + } catch (deleteErr) { + console.error('Failed to delete orphaned order:', deleteErr) + } + throw createError({ + statusCode: 500, + message: 'Fehler beim Erstellen der Zahlungssitzung. Bitte versuche es erneut.', + }) + } + + // Update order with Stripe session ID + await fetch(`${directusUrl}/items/ticket_orders/${orderId}`, { + method: 'PATCH', + headers: { + 'Content-Type': 'application/json', + Authorization: `Bearer ${ticketToken}`, + }, + body: JSON.stringify({ + stripe_checkout_session_id: session.id, + }), + }) + + return { + checkoutUrl: session.url, + orderId: orderId, + } + } catch (err: any) { + if (err.statusCode) { + throw err + } + console.error('Checkout creation error:', err) + throw createError({ + statusCode: 500, + message: 'Ein Fehler ist beim Erstellen der Bestellung aufgetreten.', + }) + } +}) diff --git a/nuxt-app/server/api/tickets/settings.get.ts b/nuxt-app/server/api/tickets/settings.get.ts new file mode 100644 index 0000000..9409409 --- /dev/null +++ b/nuxt-app/server/api/tickets/settings.get.ts @@ -0,0 +1,21 @@ +import { getTicketSettings } from '../../utils/ticketSettings' + +export default defineEventHandler(async () => { + const settings = await getTicketSettings() + + // Return null if settings unavailable (e.g., schema not deployed yet) + // The frontend handles this gracefully + if (!settings) { + return null + } + + // Return in snake_case format matching the store's expected interface + // Note: discount_code is intentionally excluded from public API response + return { + early_bird_price_cents: settings.early_bird_price_cents, + regular_price_cents: settings.regular_price_cents, + discounted_price_cents: settings.discounted_price_cents, + early_bird_deadline: settings.early_bird_deadline, + discount_code: null, // Not exposed publicly for security + } +}) diff --git a/nuxt-app/server/api/tickets/validate-discount.post.ts b/nuxt-app/server/api/tickets/validate-discount.post.ts new file mode 100644 index 0000000..9f885e3 --- /dev/null +++ b/nuxt-app/server/api/tickets/validate-discount.post.ts @@ -0,0 +1,52 @@ +import { z } from 'zod' +import { getTicketSettings } from '../../utils/ticketSettings' + +// Discount codes are global (not conference-specific) +const ValidateDiscountSchema = z.object({ + code: z.string().min(1, 'Bitte trage einen Rabattcode ein.').max(50), +}) + +export default defineEventHandler(async (event) => { + const rawBody = await readBody(event) + + // Validate request body + const parseResult = ValidateDiscountSchema.safeParse(rawBody) + if (!parseResult.success) { + const issue = parseResult.error.issues[0] + const key = issue?.path?.[0] ?? 'input' + const message = issue?.message ?? 'Validierungsfehler' + throw createError({ statusCode: 400, message: `${key}: ${message}` }) + } + + const { code } = parseResult.data + + // Fetch settings from Directus + const settings = await getTicketSettings() + + // Return unavailable if settings not configured (e.g., schema not deployed yet) + if (!settings) { + return { + valid: false, + message: 'Ticketing ist derzeit nicht verfügbar.', + } + } + + // Check if code matches the configured discount code + const isValid = + settings.discount_code && code.toUpperCase() === settings.discount_code.toUpperCase() + + if (isValid) { + // Calculate discount: difference between regular and discounted price + const discountAmountCents = settings.regular_price_cents - settings.discounted_price_cents + return { + valid: true, + discountAmountCents, + message: 'Rabattcode erfolgreich angewendet!', + } + } + + return { + valid: false, + message: 'Ungültiger Rabattcode.', + } +}) diff --git a/nuxt-app/server/api/tickets/webhook.post.ts b/nuxt-app/server/api/tickets/webhook.post.ts new file mode 100644 index 0000000..ed108bc --- /dev/null +++ b/nuxt-app/server/api/tickets/webhook.post.ts @@ -0,0 +1,107 @@ +import { verifyWebhookSignature } from '../../utils/stripe' +import type Stripe from 'stripe' + +/** + * Stripe webhook handler for ticket purchases. + * + * This endpoint receives checkout.session.completed events from Stripe + * and updates the order status in Directus. The Directus hook + * (ticket-order-processing) handles ticket creation and email sending. + */ +export default defineEventHandler(async (event) => { + // Get raw body for signature verification + const rawBody = await readRawBody(event) + if (!rawBody) { + throw createError({ statusCode: 400, message: 'No request body' }) + } + + // Get Stripe signature header + const signature = getHeader(event, 'stripe-signature') + if (!signature) { + throw createError({ statusCode: 400, message: 'Missing Stripe signature' }) + } + + let stripeEvent: Stripe.Event + + try { + stripeEvent = verifyWebhookSignature(rawBody, signature) + } catch (err: any) { + console.error('Webhook signature verification failed:', err.message) + throw createError({ statusCode: 400, message: 'Invalid signature' }) + } + + // Handle the event + if (stripeEvent.type === 'checkout.session.completed') { + const session = stripeEvent.data.object as Stripe.Checkout.Session + + const orderId = session.metadata?.order_id + const attendeesJson = session.metadata?.attendees + + if (!orderId) { + console.error('Missing order_id in checkout session metadata') + throw createError({ statusCode: 400, message: 'Missing order_id' }) + } + + const config = useRuntimeConfig() + const directusUrl = config.public.directusCmsUrl || 'http://localhost:8055' + const ticketToken = config.directusTicketToken + + if (!ticketToken) { + console.error('DIRECTUS_TICKET_TOKEN not configured') + throw createError({ statusCode: 500, message: 'Server configuration error' }) + } + + try { + // Atomic idempotent update: only update if status is NOT already 'paid' + // This prevents race conditions from duplicate webhooks by using Directus + // filter to ensure only pending orders are updated + const updatePayload: Record = { + status: 'paid', + stripe_payment_intent_id: session.payment_intent, + date_paid: new Date().toISOString(), + } + + // Store attendees JSON for Directus hook to process + if (attendeesJson) { + updatePayload.attendees_json = attendeesJson + } + + // Use Directus filter to atomically update only if status != 'paid' + // The filter ensures this is idempotent - duplicate webhooks won't re-process + const filterParam = encodeURIComponent(JSON.stringify({ status: { _neq: 'paid' } })) + const response = await fetch( + `${directusUrl}/items/ticket_orders/${orderId}?filter=${filterParam}`, + { + method: 'PATCH', + headers: { + 'Content-Type': 'application/json', + Authorization: `Bearer ${ticketToken}`, + }, + body: JSON.stringify(updatePayload), + } + ) + + if (!response.ok) { + const errorText = await response.text() + console.error('Failed to update order:', errorText) + throw createError({ statusCode: 500, message: 'Failed to update order' }) + } + + // Check if the update actually modified the record + // Directus returns the updated item, or null/empty if filter didn't match + const result = await response.json() + if (!result.data) { + console.log(`Order ${orderId} already marked as paid - skipping duplicate webhook`) + return { received: true, message: 'Already processed' } + } + + console.log(`Order ${orderId} marked as paid - Directus hook will process tickets and emails`) + } catch (err: any) { + console.error('Error processing checkout completion:', err) + throw createError({ statusCode: 500, message: 'Error processing payment' }) + } + } + + // Return 200 to acknowledge receipt + return { received: true } +}) diff --git a/nuxt-app/server/utils/index.ts b/nuxt-app/server/utils/index.ts index 80c6b97..061dca5 100644 --- a/nuxt-app/server/utils/index.ts +++ b/nuxt-app/server/utils/index.ts @@ -1,2 +1,5 @@ export * from './sendEmail' export * from './schema' +export * from './stripe' +export * from './ticketSchemas' +export * from './ticketSettings' diff --git a/nuxt-app/server/utils/sendEmail.ts b/nuxt-app/server/utils/sendEmail.ts index 2856096..3b1514e 100644 --- a/nuxt-app/server/utils/sendEmail.ts +++ b/nuxt-app/server/utils/sendEmail.ts @@ -1,40 +1,78 @@ -import nodemailer from 'nodemailer' - -// Create nodemailer transporter -const transporter = nodemailer.createTransport({ - host: 'smtp.gmail.com', - port: 465, - secure: true, - auth: { - user: 'noreply@programmier.bar', - pass: useRuntimeConfig().emailPassword, - }, -}) - type EmailData = { to: string subject: string html: string + attachments?: Array<{ + filename: string + content: Buffer | string + contentType?: string + cid?: string + }> } /** - * Helper function that sends an email via nodemailer. + * Helper function that sends an email via Mailgun API. * - * @param emailData The email data. + * @param emailData The email data including optional attachments. */ export async function sendEmail(emailData: EmailData): Promise { - return new Promise((resolve, reject) => { - transporter.sendMail( - { - ...emailData, - from: 'programmier.bar ', - }, - (error) => { - if (error) { - reject(error) + const config = useRuntimeConfig() + + const apiKey = config.emailMailgunApiKey + const domain = config.emailMailgunDomain + const host = config.emailMailgunHost || 'api.eu.mailgun.net' + const from = config.emailFrom || 'noreply@programmier.bar' + + if (!apiKey || !domain) { + throw new Error('Mailgun API key or domain not configured') + } + + const url = `https://${host}/v3/${domain}/messages` + + // Create form data for Mailgun API + const formData = new FormData() + formData.append('from', `programmier.bar <${from}>`) + formData.append('to', emailData.to) + formData.append('subject', emailData.subject) + formData.append('html', emailData.html) + + // Handle attachments + if (emailData.attachments && emailData.attachments.length > 0) { + for (const attachment of emailData.attachments) { + let blob: Blob + if (typeof attachment.content === 'string') { + // Base64 encoded content + const binaryString = atob(attachment.content) + const bytes = new Uint8Array(binaryString.length) + for (let i = 0; i < binaryString.length; i++) { + bytes[i] = binaryString.charCodeAt(i) } - resolve() + blob = new Blob([bytes], { type: attachment.contentType || 'application/octet-stream' }) + } else { + // Buffer content + blob = new Blob([attachment.content], { type: attachment.contentType || 'application/octet-stream' }) + } + + if (attachment.cid) { + // Inline attachment (for embedding images in HTML) + formData.append('inline', blob, attachment.filename) + } else { + formData.append('attachment', blob, attachment.filename) } - ) + } + } + + // Send request to Mailgun API + const response = await fetch(url, { + method: 'POST', + headers: { + Authorization: `Basic ${btoa(`api:${apiKey}`)}`, + }, + body: formData, }) + + if (!response.ok) { + const errorText = await response.text() + throw new Error(`Mailgun API error: ${response.status} ${errorText}`) + } } diff --git a/nuxt-app/server/utils/stripe.ts b/nuxt-app/server/utils/stripe.ts new file mode 100644 index 0000000..773fae9 --- /dev/null +++ b/nuxt-app/server/utils/stripe.ts @@ -0,0 +1,32 @@ +import Stripe from 'stripe' + +let stripeInstance: Stripe | null = null + +/** + * Get the Stripe client instance. + * Uses lazy initialization to avoid issues during build. + */ +export function getStripe(): Stripe { + if (!stripeInstance) { + const config = useRuntimeConfig() + if (!config.stripeSecretKey) { + throw new Error('NUXT_STRIPE_SECRET_KEY is not configured') + } + stripeInstance = new Stripe(config.stripeSecretKey) + } + return stripeInstance +} + +/** + * Verify a Stripe webhook signature. + */ +export function verifyWebhookSignature( + body: string | Buffer, + signature: string +): Stripe.Event { + const config = useRuntimeConfig() + if (!config.stripeWebhookSecret) { + throw new Error('NUXT_STRIPE_WEBHOOK_SECRET is not configured') + } + return getStripe().webhooks.constructEvent(body, signature, config.stripeWebhookSecret) +} diff --git a/nuxt-app/server/utils/ticketSchemas.ts b/nuxt-app/server/utils/ticketSchemas.ts new file mode 100644 index 0000000..b78aaba --- /dev/null +++ b/nuxt-app/server/utils/ticketSchemas.ts @@ -0,0 +1,111 @@ +import { z } from 'zod' + +// Attendee schema for individual ticket holders +export const TicketAttendeeSchema = z.object({ + firstName: z + .string() + .min(1, 'Bitte trage den Vornamen ein.') + .max(100, 'Der Vorname darf nicht länger als 100 Zeichen sein.'), + lastName: z + .string() + .min(1, 'Bitte trage den Nachnamen ein.') + .max(100, 'Der Nachname darf nicht länger als 100 Zeichen sein.'), + email: z + .string() + .email('Die E-Mail-Adresse scheint ungültig zu sein.') + .max(200, 'Die E-Mail-Adresse darf nicht länger als 200 Zeichen sein.'), +}) + +// Purchaser schema (the person making the purchase) +export const PurchaserSchema = z.object({ + firstName: z + .string() + .min(1, 'Bitte trage deinen Vornamen ein.') + .max(100, 'Dein Vorname darf nicht länger als 100 Zeichen sein.'), + lastName: z + .string() + .min(1, 'Bitte trage deinen Nachnamen ein.') + .max(100, 'Dein Nachname darf nicht länger als 100 Zeichen sein.'), + email: z + .string() + .email('Deine E-Mail-Adresse scheint ungültig zu sein.') + .max(200, 'Deine E-Mail-Adresse darf nicht länger als 200 Zeichen sein.'), +}) + +// Billing address schema for company purchases (all fields required) +export const BillingAddressSchema = z.object({ + line1: z + .string() + .min(1, 'Bitte trage die Straße und Hausnummer ein.') + .max(200, 'Die Adresszeile darf nicht länger als 200 Zeichen sein.'), + line2: z.string().max(200, 'Die Adresszeile darf nicht länger als 200 Zeichen sein.').optional(), + city: z + .string() + .min(1, 'Bitte trage die Stadt ein.') + .max(100, 'Die Stadt darf nicht länger als 100 Zeichen sein.'), + postalCode: z + .string() + .min(1, 'Bitte trage die Postleitzahl ein.') + .max(20, 'Die Postleitzahl darf nicht länger als 20 Zeichen sein.'), + country: z + .string() + .min(1, 'Bitte trage das Land ein.') + .max(100, 'Das Land darf nicht länger als 100 Zeichen sein.'), +}) + +// Optional billing address schema for personal purchases (all fields optional) +export const OptionalBillingAddressSchema = z.object({ + line1: z.string().max(200, 'Die Adresszeile darf nicht länger als 200 Zeichen sein.').optional(), + line2: z.string().max(200, 'Die Adresszeile darf nicht länger als 200 Zeichen sein.').optional(), + city: z.string().max(100, 'Die Stadt darf nicht länger als 100 Zeichen sein.').optional(), + postalCode: z.string().max(20, 'Die Postleitzahl darf nicht länger als 20 Zeichen sein.').optional(), + country: z.string().max(100, 'Das Land darf nicht länger als 100 Zeichen sein.').optional(), +}) + +// Company billing info schema +export const CompanyBillingSchema = z.object({ + name: z + .string() + .min(1, 'Bitte trage den Firmennamen ein.') + .max(200, 'Der Firmenname darf nicht länger als 200 Zeichen sein.'), + address: BillingAddressSchema, + billingEmail: z + .string() + .email('Die Rechnungs-E-Mail-Adresse scheint ungültig zu sein.') + .max(200, 'Die E-Mail-Adresse darf nicht länger als 200 Zeichen sein.') + .optional(), +}) + +// Main checkout request schema +export const CreateCheckoutSchema = z + .object({ + conferenceId: z.string().uuid('Ungültige Konferenz-ID.'), + purchaseType: z.enum(['personal', 'company'], { + errorMap: () => ({ message: 'Bitte wähle zwischen Privat oder Firma.' }), + }), + purchaser: PurchaserSchema, + company: CompanyBillingSchema.optional(), + personalAddress: OptionalBillingAddressSchema.optional(), + tickets: z + .array(TicketAttendeeSchema) + .min(1, 'Mindestens ein Ticket muss ausgewählt werden.') + .max(10, 'Maximal 10 Tickets pro Bestellung möglich.'), + discountCode: z.string().max(50, 'Der Rabattcode darf nicht länger als 50 Zeichen sein.').optional(), + }) + .refine( + (data) => { + // Company info is required when purchaseType is 'company' + if (data.purchaseType === 'company') { + return data.company !== undefined + } + return true + }, + { + message: 'Firmeninformationen sind bei Firmenkäufen erforderlich.', + path: ['company'], + } + ) + +// Type exports inferred from schemas +export type CreateCheckoutInput = z.infer +export type TicketAttendeeInput = z.infer diff --git a/nuxt-app/server/utils/ticketSettings.ts b/nuxt-app/server/utils/ticketSettings.ts new file mode 100644 index 0000000..3742fb8 --- /dev/null +++ b/nuxt-app/server/utils/ticketSettings.ts @@ -0,0 +1,81 @@ +import type { DirectusTicketSettingsItem } from '~/types/tickets' + +let cachedSettings: DirectusTicketSettingsItem | null = null +let cacheTime: number = 0 +const CACHE_TTL = 60 * 1000 // 1 minute cache + +/** + * Fetch ticket settings from Directus (singleton collection) + * Uses a short-lived cache to avoid repeated requests + */ +export async function getTicketSettings(): Promise { + const now = Date.now() + + // Return cached settings if still valid + if (cachedSettings && now - cacheTime < CACHE_TTL) { + return cachedSettings + } + + const config = useRuntimeConfig() + const directusUrl = config.public.directusCmsUrl || 'http://localhost:8055' + const ticketToken = config.directusTicketToken + + if (!ticketToken) { + // Not an error - ticketing may not be configured in this environment + console.info('Ticketing not configured: NUXT_DIRECTUS_TICKET_TOKEN not set') + return null + } + + try { + const response = await fetch( + `${directusUrl}/items/ticket_settings?fields=early_bird_price_cents,regular_price_cents,discounted_price_cents,early_bird_deadline,discount_code`, + { + headers: { + Authorization: `Bearer ${ticketToken}`, + }, + } + ) + + if (!response.ok) { + const errorText = await response.text().catch(() => '') + console.error(`Failed to fetch ticket settings: ${response.status} ${response.statusText}`, errorText) + if (response.status === 401) { + console.error('Check that NUXT_DIRECTUS_TICKET_TOKEN is set to a valid Directus access token') + } + return null + } + + const data = await response.json() + cachedSettings = data.data as DirectusTicketSettingsItem + cacheTime = now + return cachedSettings + } catch (e) { + console.error('Error fetching ticket settings:', e) + return null + } +} + +/** + * Check if we're currently in the early bird period + */ +export function isEarlyBirdPeriod(settings: DirectusTicketSettingsItem): boolean { + const deadline = new Date(settings.early_bird_deadline) + return new Date() <= deadline +} + +/** + * Get the current unit price based on ticket type + */ +export function getUnitPrice( + settings: DirectusTicketSettingsItem, + isEarlyBird: boolean, + hasDiscount: boolean +): number { + if (isEarlyBird) { + return settings.early_bird_price_cents + } + if (hasDiscount) { + return settings.discounted_price_cents + } + return settings.regular_price_cents +} diff --git a/nuxt-app/services/directus.ts b/nuxt-app/services/directus.ts index 3833dc8..dc24ef8 100644 --- a/nuxt-app/services/directus.ts +++ b/nuxt-app/services/directus.ts @@ -24,8 +24,13 @@ import type { DirectusSpeakerItem, DirectusTagItem, DirectusProfileItem, - DirectusTranscriptItem, DirectusTestimonialItem, DirectusCocktailMenu, DirectusRatingItem, -} from '../types'; + DirectusTranscriptItem, + DirectusTestimonialItem, + DirectusCocktailMenu, + DirectusRatingItem, + DirectusTicketOrderItem, + DirectusTicketItem, +} from '../types' export type Collections = { home_page: DirectusHomePage @@ -50,11 +55,13 @@ export type Collections = { members: DirectusMemberItem[] speakers: DirectusSpeakerItem[] picks_of_the_day: DirectusPickOfTheDayItem[] - profiles: DirectusProfileItem[], - ratings: DirectusRatingItem[], + profiles: DirectusProfileItem[] + ratings: DirectusRatingItem[] tags: DirectusTagItem[] testimonials: DirectusTestimonialItem[] transcripts: DirectusTranscriptItem[] + ticket_orders: DirectusTicketOrderItem[] + tickets: DirectusTicketItem[] } export const directus = createDirectus(DIRECTUS_CMS_URL) diff --git a/nuxt-app/types/directus.ts b/nuxt-app/types/directus.ts index 7d26135..c0306b0 100644 --- a/nuxt-app/types/directus.ts +++ b/nuxt-app/types/directus.ts @@ -147,7 +147,8 @@ export interface DirectusConferenceItem { partners: { partner: PartnerItem sort: number - }[], + }[] + ticketing_enabled?: boolean // Optional until schema deployed to production } export interface DirectusTestimonialItem { diff --git a/nuxt-app/types/index.ts b/nuxt-app/types/index.ts index 8d09396..184e0c8 100644 --- a/nuxt-app/types/index.ts +++ b/nuxt-app/types/index.ts @@ -1,3 +1,4 @@ export * from './directus' export * from './items' export * from './search' +export * from './tickets' diff --git a/nuxt-app/types/tickets.ts b/nuxt-app/types/tickets.ts new file mode 100644 index 0000000..97fe8d0 --- /dev/null +++ b/nuxt-app/types/tickets.ts @@ -0,0 +1,111 @@ +// Ticket system types + +export type TicketOrderStatus = 'pending' | 'paid' | 'cancelled' +export type TicketStatus = 'valid' | 'checked_in' | 'cancelled' +export type TicketType = 'early_bird' | 'regular' | 'discounted' +export type PurchaseType = 'personal' | 'company' + +// Directus collection types (raw from CMS) +export interface DirectusTicketOrderItem { + id: string + order_number: string + conference: string // Reference to conference ID + status: TicketOrderStatus + purchase_type: PurchaseType + purchaser_first_name: string + purchaser_last_name: string + purchaser_email: string + company_name: string | null + billing_address_line1: string | null + billing_address_line2: string | null + billing_city: string | null + billing_postal_code: string | null + billing_country: string | null + billing_email: string | null + subtotal_cents: number + discount_amount_cents: number + total_cents: number + discount_code_used: string | null + stripe_checkout_session_id: string + stripe_payment_intent_id: string | null + date_created: string + date_paid: string | null +} + +export interface DirectusTicketItem { + id: string + ticket_code: string + order: string // Reference to ticket_order ID + conference: string // Reference to conference ID + attendee_first_name: string + attendee_last_name: string + attendee_email: string + ticket_type: TicketType + price_cents: number + status: TicketStatus + checked_in_at: string | null + date_created: string +} + +export interface DirectusTicketSettingsItem { + id: number + early_bird_price_cents: number + regular_price_cents: number + discounted_price_cents: number + early_bird_deadline: string + discount_code: string | null +} + +// Frontend types for checkout flow +export interface TicketAttendee { + firstName: string + lastName: string + email: string +} + +export interface BillingAddress { + line1: string + line2?: string + city: string + postalCode: string + country: string +} + +export interface CompanyBillingInfo { + name: string + address: BillingAddress + billingEmail?: string +} + +export interface Purchaser { + firstName: string + lastName: string + email: string +} + +// API request/response types +export interface CreateCheckoutRequest { + conferenceId: string + purchaseType: PurchaseType + purchaser: Purchaser + company?: CompanyBillingInfo + personalAddress?: BillingAddress + tickets: TicketAttendee[] + discountCode?: string +} + +export interface CreateCheckoutResponse { + checkoutUrl: string + orderId: string +} + +export interface ValidateDiscountRequest { + code: string + conferenceId: string +} + +export interface ValidateDiscountResponse { + valid: boolean + discountAmountCents?: number + message?: string +} diff --git a/nuxt-app/yarn.lock b/nuxt-app/yarn.lock new file mode 100644 index 0000000..48aa4ed --- /dev/null +++ b/nuxt-app/yarn.lock @@ -0,0 +1,8297 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@algolia/cache-browser-local-storage@4.24.0": + version "4.24.0" + resolved "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.24.0.tgz" + integrity sha512-t63W9BnoXVrGy9iYHBgObNXqYXM3tYXCjDSHeNwnsc324r4o5UiVKUiAB4THQ5z9U5hTj6qUvwg/Ez43ZD85ww== + dependencies: + "@algolia/cache-common" "4.24.0" + +"@algolia/cache-common@4.24.0": + version "4.24.0" + resolved "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.24.0.tgz" + integrity sha512-emi+v+DmVLpMGhp0V9q9h5CdkURsNmFC+cOS6uK9ndeJm9J4TiqSvPYVu+THUP8P/S08rxf5x2P+p3CfID0Y4g== + +"@algolia/cache-in-memory@^4.14.2", "@algolia/cache-in-memory@4.24.0": + version "4.24.0" + resolved "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.24.0.tgz" + integrity sha512-gDrt2so19jW26jY3/MkFg5mEypFIPbPoXsQGQWAi6TrCPsNOSEYepBMPlucqWigsmEy/prp5ug2jy/N3PVG/8w== + dependencies: + "@algolia/cache-common" "4.24.0" + +"@algolia/client-account@4.24.0": + version "4.24.0" + resolved "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.24.0.tgz" + integrity sha512-adcvyJ3KjPZFDybxlqnf+5KgxJtBjwTPTeyG2aOyoJvx0Y8dUQAEOEVOJ/GBxX0WWNbmaSrhDURMhc+QeevDsA== + dependencies: + "@algolia/client-common" "4.24.0" + "@algolia/client-search" "4.24.0" + "@algolia/transporter" "4.24.0" + +"@algolia/client-analytics@4.24.0": + version "4.24.0" + resolved "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.24.0.tgz" + integrity sha512-y8jOZt1OjwWU4N2qr8G4AxXAzaa8DBvyHTWlHzX/7Me1LX8OayfgHexqrsL4vSBcoMmVw2XnVW9MhL+Y2ZDJXg== + dependencies: + "@algolia/client-common" "4.24.0" + "@algolia/client-search" "4.24.0" + "@algolia/requester-common" "4.24.0" + "@algolia/transporter" "4.24.0" + +"@algolia/client-common@4.24.0": + version "4.24.0" + resolved "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.24.0.tgz" + integrity sha512-bc2ROsNL6w6rqpl5jj/UywlIYC21TwSSoFHKl01lYirGMW+9Eek6r02Tocg4gZ8HAw3iBvu6XQiM3BEbmEMoiA== + dependencies: + "@algolia/requester-common" "4.24.0" + "@algolia/transporter" "4.24.0" + +"@algolia/client-common@5.47.0": + version "5.47.0" + resolved "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.47.0.tgz" + integrity sha512-Wzg5Me2FqgRDj0lFuPWFK05UOWccSMsIBL2YqmTmaOzxVlLZ+oUqvKbsUSOE5ud8Fo1JU7JyiLmEXBtgDKzTwg== + +"@algolia/client-personalization@4.24.0": + version "4.24.0" + resolved "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-4.24.0.tgz" + integrity sha512-l5FRFm/yngztweU0HdUzz1rC4yoWCFo3IF+dVIVTfEPg906eZg5BOd1k0K6rZx5JzyyoP4LdmOikfkfGsKVE9w== + dependencies: + "@algolia/client-common" "4.24.0" + "@algolia/requester-common" "4.24.0" + "@algolia/transporter" "4.24.0" + +"@algolia/client-search@4.24.0": + version "4.24.0" + resolved "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.24.0.tgz" + integrity sha512-uRW6EpNapmLAD0mW47OXqTP8eiIx5F6qN9/x/7HHO6owL3N1IXqydGwW5nhDFBrV+ldouro2W1VX3XlcUXEFCA== + dependencies: + "@algolia/client-common" "4.24.0" + "@algolia/requester-common" "4.24.0" + "@algolia/transporter" "4.24.0" + +"@algolia/events@^4.0.1": + version "4.0.1" + resolved "https://registry.npmjs.org/@algolia/events/-/events-4.0.1.tgz" + integrity sha512-FQzvOCgoFXAbf5Y6mYozw2aj5KCJoA3m4heImceldzPSMbdyS4atVjJzXKMsfX3wnZTFYwkkt8/z8UesLHlSBQ== + +"@algolia/logger-common@4.24.0": + version "4.24.0" + resolved "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.24.0.tgz" + integrity sha512-LLUNjkahj9KtKYrQhFKCzMx0BY3RnNP4FEtO+sBybCjJ73E8jNdaKJ/Dd8A/VA4imVHP5tADZ8pn5B8Ga/wTMA== + +"@algolia/logger-console@4.24.0": + version "4.24.0" + resolved "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.24.0.tgz" + integrity sha512-X4C8IoHgHfiUROfoRCV+lzSy+LHMgkoEEU1BbKcsfnV0i0S20zyy0NLww9dwVHUWNfPPxdMU+/wKmLGYf96yTg== + dependencies: + "@algolia/logger-common" "4.24.0" + +"@algolia/recommend@^4.12.2", "@algolia/recommend@4.24.0": + version "4.24.0" + resolved "https://registry.npmjs.org/@algolia/recommend/-/recommend-4.24.0.tgz" + integrity sha512-P9kcgerfVBpfYHDfVZDvvdJv0lEoCvzNlOy2nykyt5bK8TyieYyiD0lguIJdRZZYGre03WIAFf14pgE+V+IBlw== + dependencies: + "@algolia/cache-browser-local-storage" "4.24.0" + "@algolia/cache-common" "4.24.0" + "@algolia/cache-in-memory" "4.24.0" + "@algolia/client-common" "4.24.0" + "@algolia/client-search" "4.24.0" + "@algolia/logger-common" "4.24.0" + "@algolia/logger-console" "4.24.0" + "@algolia/requester-browser-xhr" "4.24.0" + "@algolia/requester-common" "4.24.0" + "@algolia/requester-node-http" "4.24.0" + "@algolia/transporter" "4.24.0" + +"@algolia/requester-browser-xhr@4.24.0": + version "4.24.0" + resolved "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.24.0.tgz" + integrity sha512-Z2NxZMb6+nVXSjF13YpjYTdvV3032YTBSGm2vnYvYPA6mMxzM3v5rsCiSspndn9rzIW4Qp1lPHBvuoKJV6jnAA== + dependencies: + "@algolia/requester-common" "4.24.0" + +"@algolia/requester-common@4.24.0": + version "4.24.0" + resolved "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.24.0.tgz" + integrity sha512-k3CXJ2OVnvgE3HMwcojpvY6d9kgKMPRxs/kVohrwF5WMr2fnqojnycZkxPoEg+bXm8fi5BBfFmOqgYztRtHsQA== + +"@algolia/requester-fetch@^4.23.2": + version "4.24.0" + resolved "https://registry.npmjs.org/@algolia/requester-fetch/-/requester-fetch-4.24.0.tgz" + integrity sha512-qgZu2gbKLPEQGMg20UAwmJ1v1qQfRtmKhw6r511iYEeZXBrhuzS9lPf8qOCOUsHud96nYzw39C257Y15mO6rOA== + dependencies: + "@algolia/requester-common" "4.24.0" + +"@algolia/requester-node-http@^5.21.0": + version "5.47.0" + resolved "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.47.0.tgz" + integrity sha512-z1oyLq5/UVkohVXNDEY70mJbT/sv/t6HYtCvCwNrOri6pxBJDomP9R83KOlwcat+xqBQEdJHjbrPh36f1avmZA== + dependencies: + "@algolia/client-common" "5.47.0" + +"@algolia/requester-node-http@4.24.0": + version "4.24.0" + resolved "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.24.0.tgz" + integrity sha512-JF18yTjNOVYvU/L3UosRcvbPMGT9B+/GQWNWnenIImglzNVGpyzChkXLnrSf6uxwVNO6ESGu6oN8MqcGQcjQJw== + dependencies: + "@algolia/requester-common" "4.24.0" + +"@algolia/transporter@4.24.0": + version "4.24.0" + resolved "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.24.0.tgz" + integrity sha512-86nI7w6NzWxd1Zp9q3413dRshDqAzSbsQjhcDhPIatEFiZrL1/TjnHL8S7jVKFePlIMzDsZWXAXwXzcok9c5oA== + dependencies: + "@algolia/cache-common" "4.24.0" + "@algolia/logger-common" "4.24.0" + "@algolia/requester-common" "4.24.0" + +"@alloc/quick-lru@^5.2.0": + version "5.2.0" + resolved "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz" + integrity sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw== + +"@asamuzakjp/css-color@^2.8.2": + version "2.8.3" + resolved "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-2.8.3.tgz" + integrity sha512-GIc76d9UI1hCvOATjZPyHFmE5qhRccp3/zGfMPapK3jBi+yocEzp6BBB0UnfRYP9NP4FANqUZYb0hnfs3TM3hw== + dependencies: + "@csstools/css-calc" "^2.1.1" + "@csstools/css-color-parser" "^3.0.7" + "@csstools/css-parser-algorithms" "^3.0.4" + "@csstools/css-tokenizer" "^3.0.3" + lru-cache "^10.4.3" + +"@babel/code-frame@^7.27.1", "@babel/code-frame@^7.28.6", "@babel/code-frame@^7.29.0": + version "7.29.0" + resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz" + integrity sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw== + dependencies: + "@babel/helper-validator-identifier" "^7.28.5" + js-tokens "^4.0.0" + picocolors "^1.1.1" + +"@babel/compat-data@^7.28.6": + version "7.29.0" + resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.0.tgz" + integrity sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg== + +"@babel/core@^7.0.0", "@babel/core@^7.0.0-0", "@babel/core@^7.29.0": + version "7.29.0" + resolved "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz" + integrity sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA== + dependencies: + "@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" + json5 "^2.2.3" + semver "^6.3.1" + +"@babel/generator@^7.26.2", "@babel/generator@^7.28.5", "@babel/generator@^7.29.0": + version "7.29.0" + resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.29.0.tgz" + integrity sha512-vSH118/wwM/pLR38g/Sgk05sNtro6TlTJKuiMXDaZqPUfjTFcudpCOt00IhOfj+1BFAX+UFAlzCU+6WXr3GLFQ== + dependencies: + "@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" + +"@babel/helper-annotate-as-pure@^7.27.3": + 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== + dependencies: + "@babel/types" "^7.27.3" + +"@babel/helper-compilation-targets@^7.28.6": + 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== + dependencies: + "@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" + +"@babel/helper-create-class-features-plugin@^7.28.6": + 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== + dependencies: + "@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" + +"@babel/helper-globals@^7.28.0": + version "7.28.0" + resolved "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz" + integrity sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw== + +"@babel/helper-member-expression-to-functions@^7.28.5": + 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== + dependencies: + "@babel/traverse" "^7.28.5" + "@babel/types" "^7.28.5" + +"@babel/helper-module-imports@^7.27.1", "@babel/helper-module-imports@^7.28.6": + version "7.28.6" + resolved "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz" + integrity sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw== + dependencies: + "@babel/traverse" "^7.28.6" + "@babel/types" "^7.28.6" + +"@babel/helper-module-transforms@^7.28.6": + version "7.28.6" + resolved "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz" + integrity sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA== + dependencies: + "@babel/helper-module-imports" "^7.28.6" + "@babel/helper-validator-identifier" "^7.28.5" + "@babel/traverse" "^7.28.6" + +"@babel/helper-optimise-call-expression@^7.27.1": + 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== + dependencies: + "@babel/types" "^7.27.1" + +"@babel/helper-plugin-utils@^7.27.1", "@babel/helper-plugin-utils@^7.28.6": + 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== + +"@babel/helper-replace-supers@^7.28.6": + 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== + dependencies: + "@babel/helper-member-expression-to-functions" "^7.28.5" + "@babel/helper-optimise-call-expression" "^7.27.1" + "@babel/traverse" "^7.28.6" + +"@babel/helper-skip-transparent-expression-wrappers@^7.27.1": + 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== + dependencies: + "@babel/traverse" "^7.27.1" + "@babel/types" "^7.27.1" + +"@babel/helper-string-parser@^7.27.1": + version "7.27.1" + resolved "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz" + integrity sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA== + +"@babel/helper-validator-identifier@^7.28.5": + version "7.28.5" + resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz" + integrity sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q== + +"@babel/helper-validator-option@^7.27.1": + version "7.27.1" + resolved "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz" + integrity sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg== + +"@babel/helpers@^7.28.6": + version "7.28.6" + resolved "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.6.tgz" + integrity sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw== + dependencies: + "@babel/template" "^7.28.6" + "@babel/types" "^7.28.6" + +"@babel/parser@^7.25.3", "@babel/parser@^7.26.2", "@babel/parser@^7.28.4", "@babel/parser@^7.28.5", "@babel/parser@^7.28.6", "@babel/parser@^7.29.0": + version "7.29.0" + resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.29.0.tgz" + integrity sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww== + dependencies: + "@babel/types" "^7.29.0" + +"@babel/plugin-syntax-jsx@^7.27.1": + 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== + dependencies: + "@babel/helper-plugin-utils" "^7.28.6" + +"@babel/plugin-syntax-typescript@^7.28.6": + 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== + dependencies: + "@babel/helper-plugin-utils" "^7.28.6" + +"@babel/plugin-transform-typescript@^7.28.6": + version "7.28.6" + resolved "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.28.6.tgz" + integrity sha512-0YWL2RFxOqEm9Efk5PvreamxPME8OyY0wM5wh5lHjF+VtVhdneCWGzZeSqzOfiobVqQaNCd2z0tQvnI9DaPWPw== + dependencies: + "@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" + +"@babel/runtime@^7.27.6": + version "7.28.6" + resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.6.tgz" + integrity sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA== + +"@babel/template@^7.27.2", "@babel/template@^7.28.6": + 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== + dependencies: + "@babel/code-frame" "^7.28.6" + "@babel/parser" "^7.28.6" + "@babel/types" "^7.28.6" + +"@babel/traverse@^7.25.9", "@babel/traverse@^7.27.1", "@babel/traverse@^7.28.4", "@babel/traverse@^7.28.5", "@babel/traverse@^7.28.6", "@babel/traverse@^7.29.0": + version "7.29.0" + resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz" + integrity sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA== + dependencies: + "@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" + +"@babel/types@^7.26.0", "@babel/types@^7.27.1", "@babel/types@^7.27.3", "@babel/types@^7.28.4", "@babel/types@^7.28.5", "@babel/types@^7.28.6", "@babel/types@^7.29.0": + version "7.29.0" + resolved "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz" + integrity sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A== + dependencies: + "@babel/helper-string-parser" "^7.27.1" + "@babel/helper-validator-identifier" "^7.28.5" + +"@bomb.sh/tab@^0.0.11": + version "0.0.11" + resolved "https://registry.npmjs.org/@bomb.sh/tab/-/tab-0.0.11.tgz" + integrity sha512-RSqyreeicYBALcMaNxIUJTBknftXsyW45VRq5gKDNwKroh0Re5SDoWwXZaphb+OTEzVdpm/BA8Uq6y0P+AtVYw== + +"@clack/core@1.0.0-alpha.7": + version "1.0.0-alpha.7" + resolved "https://registry.npmjs.org/@clack/core/-/core-1.0.0-alpha.7.tgz" + integrity sha512-3vdh6Ar09D14rVxJZIm3VQJkU+ZOKKT5I5cC0cOVazy70CNyYYjiwRj9unwalhESndgxx6bGc/m6Hhs4EKF5XQ== + dependencies: + picocolors "^1.0.0" + sisteransi "^1.0.5" + +"@clack/prompts@1.0.0-alpha.9": + version "1.0.0-alpha.9" + resolved "https://registry.npmjs.org/@clack/prompts/-/prompts-1.0.0-alpha.9.tgz" + integrity sha512-sKs0UjiHFWvry4SiRfBi5Qnj0C/6AYx8aKkFPZQSuUZXgAram25ZDmhQmP7vj1aFyLpfHWtLQjWvOvcat0TOLg== + dependencies: + "@clack/core" "1.0.0-alpha.7" + picocolors "^1.0.0" + sisteransi "^1.0.5" + +"@cloudflare/kv-asset-handler@^0.4.2": + version "0.4.2" + resolved "https://registry.npmjs.org/@cloudflare/kv-asset-handler/-/kv-asset-handler-0.4.2.tgz" + integrity sha512-SIOD2DxrRRwQ+jgzlXCqoEFiKOFqaPjhnNTGKXSRLvp1HiOvapLaFG2kEr9dYQTYe8rKrd9uvDUzmAITeNyaHQ== + +"@csstools/color-helpers@^5.0.1": + version "5.0.1" + resolved "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-5.0.1.tgz" + integrity sha512-MKtmkA0BX87PKaO1NFRTFH+UnkgnmySQOvNxJubsadusqPEC2aJ9MOQiMceZJJ6oitUl/i0L6u0M1IrmAOmgBA== + +"@csstools/css-calc@^2.1.1": + version "2.1.1" + resolved "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-2.1.1.tgz" + integrity sha512-rL7kaUnTkL9K+Cvo2pnCieqNpTKgQzy5f+N+5Iuko9HAoasP+xgprVh7KN/MaJVvVL1l0EzQq2MoqBHKSrDrag== + +"@csstools/css-color-parser@^3.0.7": + version "3.0.7" + resolved "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-3.0.7.tgz" + integrity sha512-nkMp2mTICw32uE5NN+EsJ4f5N+IGFeCFu4bGpiKgb2Pq/7J/MpyLBeQ5ry4KKtRFZaYs6sTmcMYrSRIyj5DFKA== + dependencies: + "@csstools/color-helpers" "^5.0.1" + "@csstools/css-calc" "^2.1.1" + +"@csstools/css-parser-algorithms@^3.0.4": + version "3.0.4" + resolved "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.4.tgz" + integrity sha512-Up7rBoV77rv29d3uKHUIVubz1BTcgyUK72IvCQAbfbMv584xHcGKCKbWh7i8hPrRJ7qU4Y8IO3IY9m+iTB7P3A== + +"@csstools/css-tokenizer@^3.0.3": + version "3.0.3" + resolved "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.3.tgz" + integrity sha512-UJnjoFsmxfKUdNYdWgOB0mWUypuLvAfQPH1+pyvRJs6euowbFkFC6P13w1l8mJyi3vxYMxc9kld5jZEGRQs6bw== + +"@csstools/selector-resolve-nested@^3.0.0": + version "3.0.0" + resolved "https://registry.npmjs.org/@csstools/selector-resolve-nested/-/selector-resolve-nested-3.0.0.tgz" + integrity sha512-ZoK24Yku6VJU1gS79a5PFmC8yn3wIapiKmPgun0hZgEI5AOqgH2kiPRsPz1qkGv4HL+wuDLH83yQyk6inMYrJQ== + +"@csstools/selector-specificity@^5.0.0": + version "5.0.0" + resolved "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-5.0.0.tgz" + integrity sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw== + +"@directus/sdk@^17.0.0": + version "17.0.2" + resolved "https://registry.npmjs.org/@directus/sdk/-/sdk-17.0.2.tgz" + integrity sha512-gKfWH6oQKnHw6mUl5lM32PTjtWrmSF6f09/zfN/74FKGPD853srCwip6rGif2R0GfdcrPHXwGHc7vTMXNDlniw== + +"@dxup/nuxt@^0.3.2": + version "0.3.2" + resolved "https://registry.npmjs.org/@dxup/nuxt/-/nuxt-0.3.2.tgz" + integrity sha512-2f2usP4oLNsIGjPprvABe3f3GWuIhIDp0169pGLFxTDRI5A4d4sBbGpR+tD9bGZCT+1Btb6Q2GKlyv3LkDCW5g== + dependencies: + "@dxup/unimport" "^0.1.2" + "@nuxt/kit" "^4.2.2" + chokidar "^5.0.0" + pathe "^2.0.3" + tinyglobby "^0.2.15" + +"@dxup/unimport@^0.1.2": + version "0.1.2" + resolved "https://registry.npmjs.org/@dxup/unimport/-/unimport-0.1.2.tgz" + integrity sha512-/B8YJGPzaYq1NbsQmwgP8EZqg40NpTw4ZB3suuI0TplbxKHeK94jeaawLmVhCv+YwUnOpiWEz9U6SeThku/8JQ== + +"@emnapi/core@^1.7.1": + version "1.8.1" + resolved "https://registry.npmjs.org/@emnapi/core/-/core-1.8.1.tgz" + integrity sha512-AvT9QFpxK0Zd8J0jopedNm+w/2fIzvtPKPjqyw9jwvBaReTTqPBk9Hixaz7KbjimP+QNz605/XnjFcDAL2pqBg== + dependencies: + "@emnapi/wasi-threads" "1.1.0" + tslib "^2.4.0" + +"@emnapi/runtime@^1.7.1": + version "1.8.1" + resolved "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.8.1.tgz" + integrity sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg== + dependencies: + tslib "^2.4.0" + +"@emnapi/wasi-threads@1.1.0": + 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== + dependencies: + tslib "^2.4.0" + +"@esbuild/aix-ppc64@0.27.2": + version "0.27.2" + resolved "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.2.tgz" + integrity sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw== + +"@esbuild/android-arm@0.27.2": + version "0.27.2" + resolved "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.2.tgz" + integrity sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA== + +"@esbuild/android-arm64@0.27.2": + version "0.27.2" + resolved "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.2.tgz" + integrity sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA== + +"@esbuild/android-x64@0.27.2": + version "0.27.2" + resolved "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.2.tgz" + integrity sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A== + +"@esbuild/darwin-arm64@0.27.2": + version "0.27.2" + resolved "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.2.tgz" + integrity sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg== + +"@esbuild/darwin-x64@0.27.2": + version "0.27.2" + resolved "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.2.tgz" + integrity sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA== + +"@esbuild/freebsd-arm64@0.27.2": + version "0.27.2" + resolved "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.2.tgz" + integrity sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g== + +"@esbuild/freebsd-x64@0.27.2": + version "0.27.2" + resolved "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.2.tgz" + integrity sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA== + +"@esbuild/linux-arm@0.27.2": + version "0.27.2" + resolved "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.2.tgz" + integrity sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw== + +"@esbuild/linux-arm64@0.27.2": + version "0.27.2" + resolved "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.2.tgz" + integrity sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw== + +"@esbuild/linux-ia32@0.27.2": + version "0.27.2" + resolved "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.2.tgz" + integrity sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w== + +"@esbuild/linux-loong64@0.27.2": + version "0.27.2" + resolved "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.2.tgz" + integrity sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg== + +"@esbuild/linux-mips64el@0.27.2": + version "0.27.2" + resolved "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.2.tgz" + integrity sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw== + +"@esbuild/linux-ppc64@0.27.2": + version "0.27.2" + resolved "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.2.tgz" + integrity sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ== + +"@esbuild/linux-riscv64@0.27.2": + version "0.27.2" + resolved "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.2.tgz" + integrity sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA== + +"@esbuild/linux-s390x@0.27.2": + version "0.27.2" + resolved "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.2.tgz" + integrity sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w== + +"@esbuild/linux-x64@0.27.2": + version "0.27.2" + resolved "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.2.tgz" + integrity sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA== + +"@esbuild/netbsd-arm64@0.27.2": + version "0.27.2" + resolved "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.2.tgz" + integrity sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw== + +"@esbuild/netbsd-x64@0.27.2": + version "0.27.2" + resolved "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.2.tgz" + integrity sha512-HwGDZ0VLVBY3Y+Nw0JexZy9o/nUAWq9MlV7cahpaXKW6TOzfVno3y3/M8Ga8u8Yr7GldLOov27xiCnqRZf0tCA== + +"@esbuild/openbsd-arm64@0.27.2": + version "0.27.2" + resolved "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.2.tgz" + integrity sha512-DNIHH2BPQ5551A7oSHD0CKbwIA/Ox7+78/AWkbS5QoRzaqlev2uFayfSxq68EkonB+IKjiuxBFoV8ESJy8bOHA== + +"@esbuild/openbsd-x64@0.27.2": + version "0.27.2" + resolved "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.2.tgz" + integrity sha512-/it7w9Nb7+0KFIzjalNJVR5bOzA9Vay+yIPLVHfIQYG/j+j9VTH84aNB8ExGKPU4AzfaEvN9/V4HV+F+vo8OEg== + +"@esbuild/openharmony-arm64@0.27.2": + version "0.27.2" + resolved "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.2.tgz" + integrity sha512-LRBbCmiU51IXfeXk59csuX/aSaToeG7w48nMwA6049Y4J4+VbWALAuXcs+qcD04rHDuSCSRKdmY63sruDS5qag== + +"@esbuild/sunos-x64@0.27.2": + version "0.27.2" + resolved "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.2.tgz" + integrity sha512-kMtx1yqJHTmqaqHPAzKCAkDaKsffmXkPHThSfRwZGyuqyIeBvf08KSsYXl+abf5HDAPMJIPnbBfXvP2ZC2TfHg== + +"@esbuild/win32-arm64@0.27.2": + version "0.27.2" + resolved "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.2.tgz" + integrity sha512-Yaf78O/B3Kkh+nKABUF++bvJv5Ijoy9AN1ww904rOXZFLWVc5OLOfL56W+C8F9xn5JQZa3UX6m+IktJnIb1Jjg== + +"@esbuild/win32-ia32@0.27.2": + version "0.27.2" + resolved "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.2.tgz" + integrity sha512-Iuws0kxo4yusk7sw70Xa2E2imZU5HoixzxfGCdxwBdhiDgt9vX9VUCBhqcwY7/uh//78A1hMkkROMJq9l27oLQ== + +"@esbuild/win32-x64@0.27.2": + version "0.27.2" + resolved "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.2.tgz" + integrity sha512-sRdU18mcKf7F+YgheI/zGf5alZatMUTKj/jNS6l744f9u3WFu4v7twcUI9vu4mknF4Y9aDlblIie0IM+5xxaqQ== + +"@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0", "@eslint-community/eslint-utils@^4.8.0": + version "4.9.1" + resolved "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz" + integrity sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ== + dependencies: + eslint-visitor-keys "^3.4.3" + +"@eslint-community/regexpp@^4.12.1", "@eslint-community/regexpp@^4.5.1", "@eslint-community/regexpp@^4.6.1": + version "4.12.1" + resolved "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz" + integrity sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ== + +"@eslint/config-array@^0.21.1": + version "0.21.1" + resolved "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.1.tgz" + integrity sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA== + dependencies: + "@eslint/object-schema" "^2.1.7" + debug "^4.3.1" + minimatch "^3.1.2" + +"@eslint/config-helpers@^0.4.2": + version "0.4.2" + resolved "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.4.2.tgz" + integrity sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw== + dependencies: + "@eslint/core" "^0.17.0" + +"@eslint/core@^0.17.0": + version "0.17.0" + resolved "https://registry.npmjs.org/@eslint/core/-/core-0.17.0.tgz" + integrity sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ== + dependencies: + "@types/json-schema" "^7.0.15" + +"@eslint/eslintrc@^2.1.4": + version "2.1.4" + resolved "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz" + integrity sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ== + dependencies: + ajv "^6.12.4" + debug "^4.3.2" + espree "^9.6.0" + globals "^13.19.0" + ignore "^5.2.0" + import-fresh "^3.2.1" + js-yaml "^4.1.0" + minimatch "^3.1.2" + strip-json-comments "^3.1.1" + +"@eslint/eslintrc@^3.3.1": + version "3.3.3" + resolved "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.3.tgz" + integrity sha512-Kr+LPIUVKz2qkx1HAMH8q1q6azbqBAsXJUxBl/ODDuVPX45Z9DfwB8tPjTi6nNZ8BuM3nbJxC5zCAg5elnBUTQ== + dependencies: + ajv "^6.12.4" + debug "^4.3.2" + espree "^10.0.1" + globals "^14.0.0" + ignore "^5.2.0" + import-fresh "^3.2.1" + js-yaml "^4.1.1" + minimatch "^3.1.2" + strip-json-comments "^3.1.1" + +"@eslint/js@8.57.1": + version "8.57.1" + resolved "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz" + integrity sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q== + +"@eslint/js@9.39.2": + version "9.39.2" + resolved "https://registry.npmjs.org/@eslint/js/-/js-9.39.2.tgz" + integrity sha512-q1mjIoW1VX4IvSocvM/vbTiveKC4k9eLrajNEuSsmjymSDEbpGddtpfOoN7YGAqBK3NG+uqo8ia4PDTt8buCYA== + +"@eslint/object-schema@^2.1.7": + version "2.1.7" + resolved "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.7.tgz" + integrity sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA== + +"@eslint/plugin-kit@^0.4.1": + version "0.4.1" + resolved "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.4.1.tgz" + integrity sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA== + dependencies: + "@eslint/core" "^0.17.0" + levn "^0.4.1" + +"@fastify/accept-negotiator@^1.1.0": + version "1.1.0" + resolved "https://registry.npmjs.org/@fastify/accept-negotiator/-/accept-negotiator-1.1.0.tgz" + integrity sha512-OIHZrb2ImZ7XG85HXOONLcJWGosv7sIvM2ifAPQVhg9Lv7qdmMBNVaai4QTdyuaqbKM5eO6sLSQOYI7wEQeCJQ== + +"@google/generative-ai@^0.24.1": + version "0.24.1" + resolved "https://registry.npmjs.org/@google/generative-ai/-/generative-ai-0.24.1.tgz" + integrity sha512-MqO+MLfM6kjxcKoy0p1wRzG3b4ZZXtPI+z2IE26UogS2Cm/XHO+7gGRBh6gcJsOiIVoH93UwKvW4HdgiOZCy9Q== + +"@humanfs/core@^0.19.1": + version "0.19.1" + resolved "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz" + integrity sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA== + +"@humanfs/node@^0.16.6": + version "0.16.7" + resolved "https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz" + integrity sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ== + dependencies: + "@humanfs/core" "^0.19.1" + "@humanwhocodes/retry" "^0.4.0" + +"@humanwhocodes/config-array@^0.13.0": + version "0.13.0" + resolved "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz" + integrity sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw== + dependencies: + "@humanwhocodes/object-schema" "^2.0.3" + debug "^4.3.1" + minimatch "^3.0.5" + +"@humanwhocodes/module-importer@^1.0.1": + version "1.0.1" + resolved "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz" + integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== + +"@humanwhocodes/object-schema@^2.0.3": + 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== + +"@humanwhocodes/retry@^0.4.0", "@humanwhocodes/retry@^0.4.2": + version "0.4.3" + resolved "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz" + integrity sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ== + +"@ianvs/prettier-plugin-sort-imports@*", "@ianvs/prettier-plugin-sort-imports@^4.1.1": + version "4.4.1" + resolved "https://registry.npmjs.org/@ianvs/prettier-plugin-sort-imports/-/prettier-plugin-sort-imports-4.4.1.tgz" + integrity sha512-F0/Hrcfpy8WuxlQyAWJTEren/uxKhYonOGY4OyWmwRdeTvkh9mMSCxowZLjNkhwi/2ipqCgtXwwOk7tW0mWXkA== + dependencies: + "@babel/generator" "^7.26.2" + "@babel/parser" "^7.26.2" + "@babel/traverse" "^7.25.9" + "@babel/types" "^7.26.0" + semver "^7.5.2" + +"@ioredis/commands@1.5.0": + version "1.5.0" + resolved "https://registry.npmjs.org/@ioredis/commands/-/commands-1.5.0.tgz" + integrity sha512-eUgLqrMf8nJkZxT24JvVRrQya1vZkQh8BBeYNwGDqa5I0VUi8ACx7uFvAaLxintokpTenkK6DASvo/bvNbBGow== + +"@isaacs/balanced-match@^4.0.1": + version "4.0.1" + resolved "https://registry.npmjs.org/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz" + integrity sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ== + +"@isaacs/brace-expansion@^5.0.0": + version "5.0.1" + resolved "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.1.tgz" + integrity sha512-WMz71T1JS624nWj2n2fnYAuPovhv7EUhk69R6i9dsVyzxt5eM3bjwvgk9L+APE1TRscGysAVMANkB0jh0LQZrQ== + dependencies: + "@isaacs/balanced-match" "^4.0.1" + +"@isaacs/cliui@^8.0.2": + version "8.0.2" + resolved "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz" + integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== + dependencies: + string-width "^5.1.2" + string-width-cjs "npm:string-width@^4.2.0" + strip-ansi "^7.0.1" + strip-ansi-cjs "npm:strip-ansi@^6.0.1" + wrap-ansi "^8.1.0" + wrap-ansi-cjs "npm:wrap-ansi@^7.0.0" + +"@isaacs/fs-minipass@^4.0.0": + version "4.0.1" + resolved "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz" + integrity sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w== + dependencies: + minipass "^7.0.4" + +"@jridgewell/gen-mapping@^0.3.12", "@jridgewell/gen-mapping@^0.3.2", "@jridgewell/gen-mapping@^0.3.5": + 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== + dependencies: + "@jridgewell/sourcemap-codec" "^1.5.0" + "@jridgewell/trace-mapping" "^0.3.24" + +"@jridgewell/remapping@^2.3.5": + version "2.3.5" + resolved "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz" + integrity sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ== + dependencies: + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.24" + +"@jridgewell/resolve-uri@^3.1.0": + version "3.1.2" + resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz" + integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== + +"@jridgewell/source-map@^0.3.3": + version "0.3.11" + resolved "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.11.tgz" + integrity sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA== + dependencies: + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.25" + +"@jridgewell/sourcemap-codec@^1.4.14", "@jridgewell/sourcemap-codec@^1.5.0", "@jridgewell/sourcemap-codec@^1.5.5": + version "1.5.5" + resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz" + integrity sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og== + +"@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25", "@jridgewell/trace-mapping@^0.3.28": + version "0.3.31" + resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz" + integrity sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw== + dependencies: + "@jridgewell/resolve-uri" "^3.1.0" + "@jridgewell/sourcemap-codec" "^1.4.14" + +"@koa/router@^12.0.1": + version "12.0.2" + resolved "https://registry.npmjs.org/@koa/router/-/router-12.0.2.tgz" + integrity sha512-sYcHglGKTxGF+hQ6x67xDfkE9o+NhVlRHBqq6gLywaMc6CojK/5vFZByphdonKinYlMLkEkacm+HEse9HzwgTA== + dependencies: + debug "^4.3.4" + http-errors "^2.0.0" + koa-compose "^4.1.0" + methods "^1.1.2" + path-to-regexp "^6.3.0" + +"@kwsites/file-exists@^1.1.1": + version "1.1.1" + resolved "https://registry.npmjs.org/@kwsites/file-exists/-/file-exists-1.1.1.tgz" + integrity sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw== + dependencies: + debug "^4.1.1" + +"@kwsites/promise-deferred@^1.1.1": + version "1.1.1" + resolved "https://registry.npmjs.org/@kwsites/promise-deferred/-/promise-deferred-1.1.1.tgz" + integrity sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw== + +"@mapbox/node-pre-gyp@^2.0.0": + version "2.0.3" + resolved "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-2.0.3.tgz" + integrity sha512-uwPAhccfFJlsfCxMYTwOdVfOz3xqyj8xYL3zJj8f0pb30tLohnnFPhLuqp4/qoEz8sNxe4SESZedcBojRefIzg== + dependencies: + consola "^3.2.3" + detect-libc "^2.0.0" + https-proxy-agent "^7.0.5" + node-fetch "^2.6.7" + nopt "^8.0.0" + semver "^7.5.3" + tar "^7.4.0" + +"@napi-rs/wasm-runtime@^1.1.1": + version "1.1.1" + resolved "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.1.tgz" + integrity sha512-p64ah1M1ld8xjWv3qbvFwHiFVWrq1yFvV4f7w+mzaqiR4IlSgkqhcRdHwsGgomwzBH51sRY4NEowLxnaBjcW/A== + dependencies: + "@emnapi/core" "^1.7.1" + "@emnapi/runtime" "^1.7.1" + "@tybys/wasm-util" "^0.10.1" + +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + dependencies: + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.5": + version "2.0.5" + resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== + +"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": + version "1.2.8" + resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + dependencies: + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" + +"@nuxt/cli@^3.32.0": + version "3.32.0" + resolved "https://registry.npmjs.org/@nuxt/cli/-/cli-3.32.0.tgz" + integrity sha512-n2f3SRjPlhthPvo2qWjLRRiTrUtB6WFwg0BGsvtqcqZVeQpNEU371zuKWBaFrWgqDZHV1r/aD9jrVCo+C8Pmrw== + dependencies: + "@bomb.sh/tab" "^0.0.11" + "@clack/prompts" "1.0.0-alpha.9" + c12 "^3.3.3" + citty "^0.1.6" + confbox "^0.2.2" + consola "^3.4.2" + copy-paste "^2.2.0" + debug "^4.4.3" + defu "^6.1.4" + exsolve "^1.0.8" + fuse.js "^7.1.0" + giget "^2.0.0" + jiti "^2.6.1" + listhen "^1.9.0" + nypm "^0.6.2" + ofetch "^1.5.1" + ohash "^2.0.11" + pathe "^2.0.3" + perfect-debounce "^2.0.0" + pkg-types "^2.3.0" + scule "^1.3.0" + semver "^7.7.3" + srvx "^0.10.0" + std-env "^3.10.0" + tinyexec "^1.0.2" + ufo "^1.6.1" + youch "^4.1.0-beta.13" + +"@nuxt/devalue@^2.0.2": + version "2.0.2" + resolved "https://registry.npmjs.org/@nuxt/devalue/-/devalue-2.0.2.tgz" + integrity sha512-GBzP8zOc7CGWyFQS6dv1lQz8VVpz5C2yRszbXufwG/9zhStTIH50EtD87NmWbTMwXDvZLNg8GIpb1UFdH93JCA== + +"@nuxt/devtools-kit@3.1.1": + version "3.1.1" + resolved "https://registry.npmjs.org/@nuxt/devtools-kit/-/devtools-kit-3.1.1.tgz" + integrity sha512-sjiKFeDCOy1SyqezSgyV4rYNfQewC64k/GhOsuJgRF+wR2qr6KTVhO6u2B+csKs74KrMrnJprQBgud7ejvOXAQ== + dependencies: + "@nuxt/kit" "^4.2.1" + execa "^8.0.1" + +"@nuxt/devtools-wizard@3.1.1": + version "3.1.1" + resolved "https://registry.npmjs.org/@nuxt/devtools-wizard/-/devtools-wizard-3.1.1.tgz" + integrity sha512-6UORjapNKko2buv+3o57DQp69n5Z91TeJ75qdtNKcTvOfCTJrO78Ew0nZSgMMGrjbIJ4pFsHQEqXfgYLw3pNxg== + dependencies: + consola "^3.4.2" + diff "^8.0.2" + execa "^8.0.1" + magicast "^0.5.1" + pathe "^2.0.3" + pkg-types "^2.3.0" + prompts "^2.4.2" + semver "^7.7.3" + +"@nuxt/devtools@^3.1.1": + version "3.1.1" + resolved "https://registry.npmjs.org/@nuxt/devtools/-/devtools-3.1.1.tgz" + integrity sha512-UG8oKQqcSyzwBe1l0z24zypmwn6FLW/HQMHK/F/gscUU5LeMHzgBhLPD+cuLlDvwlGAbifexWNMsS/I7n95KlA== + dependencies: + "@nuxt/devtools-kit" "3.1.1" + "@nuxt/devtools-wizard" "3.1.1" + "@nuxt/kit" "^4.2.1" + "@vue/devtools-core" "^8.0.5" + "@vue/devtools-kit" "^8.0.5" + birpc "^2.8.0" + consola "^3.4.2" + destr "^2.0.5" + error-stack-parser-es "^1.0.5" + execa "^8.0.1" + fast-npm-meta "^0.4.7" + get-port-please "^3.2.0" + hookable "^5.5.3" + image-meta "^0.2.2" + is-installed-globally "^1.0.0" + launch-editor "^2.12.0" + local-pkg "^1.1.2" + magicast "^0.5.1" + nypm "^0.6.2" + ohash "^2.0.11" + pathe "^2.0.3" + perfect-debounce "^2.0.0" + pkg-types "^2.3.0" + semver "^7.7.3" + simple-git "^3.30.0" + sirv "^3.0.2" + structured-clone-es "^1.0.0" + tinyglobby "^0.2.15" + vite-plugin-inspect "^11.3.3" + vite-plugin-vue-tracer "^1.1.3" + which "^5.0.0" + ws "^8.18.3" + +"@nuxt/eslint-config@^0.2.0": + version "0.2.0" + resolved "https://registry.npmjs.org/@nuxt/eslint-config/-/eslint-config-0.2.0.tgz" + integrity sha512-NeJX8TLcnNAjQFiDs3XhP+9CHKK8jaKsP7eUyCSrQdgY7nqWe7VJx64lwzx5FTT4cW3RHMEyH+Y0qzLGYYoa/A== + dependencies: + "@rushstack/eslint-patch" "^1.3.3" + "@typescript-eslint/eslint-plugin" "^6.5.0" + "@typescript-eslint/parser" "^6.5.0" + eslint-plugin-vue "^9.17.0" + typescript "^5.2.2" + +"@nuxt/image-edge@^1.3.0-28468005.8ad772e": + version "1.3.0-28493895.369b747" + resolved "https://registry.npmjs.org/@nuxt/image-edge/-/image-edge-1.3.0-28493895.369b747.tgz" + integrity sha512-WNUIXOjZp8dNWheYH5qxvQBz3bz2rhNvUan8GvQ5cuaG1N2i2uqgOYdxrXREELnfxPqsEW2h+n1n+UCybHDxKQ== + dependencies: + "@nuxt/kit" "^3.10.3" + consola "^3.2.3" + defu "^6.1.4" + h3 "^1.11.1" + image-meta "^0.2.0" + node-fetch-native "^1.6.2" + ohash "^1.1.3" + pathe "^1.1.2" + std-env "^3.7.0" + ufo "^1.4.0" + optionalDependencies: + ipx "^2.1.0" + +"@nuxt/kit@^3.10.3", "@nuxt/kit@^3.15.4", "@nuxt/kit@^3.16.0", "@nuxt/kit@^3.7.0", "@nuxt/kit@^3.9.0", "@nuxt/kit@3.21.0": + version "3.21.0" + resolved "https://registry.npmjs.org/@nuxt/kit/-/kit-3.21.0.tgz" + integrity sha512-KMTLK/dsGaQioZzkYUvgfN9le4grNW54aNcA1jqzgVZLcFVy4jJfrJr5WZio9NT2EMfajdoZ+V28aD7BRr4Zfw== + dependencies: + c12 "^3.3.3" + consola "^3.4.2" + defu "^6.1.4" + destr "^2.0.5" + errx "^0.1.0" + exsolve "^1.0.8" + ignore "^7.0.5" + jiti "^2.6.1" + klona "^2.0.6" + knitwork "^1.3.0" + mlly "^1.8.0" + ohash "^2.0.11" + pathe "^2.0.3" + pkg-types "^2.3.0" + rc9 "^2.1.2" + scule "^1.3.0" + semver "^7.7.3" + tinyglobby "^0.2.15" + ufo "^1.6.3" + unctx "^2.5.0" + untyped "^2.0.0" + +"@nuxt/kit@^4.2.1": + version "4.3.0" + resolved "https://registry.npmjs.org/@nuxt/kit/-/kit-4.3.0.tgz" + integrity sha512-cD/0UU9RQmlnTbmyJTDyzN8f6CzpziDLv3tFQCnwl0Aoxt3KmFu4k/XA4Sogxqj7jJ/3cdX1kL+Lnsh34sxcQQ== + dependencies: + c12 "^3.3.3" + consola "^3.4.2" + defu "^6.1.4" + destr "^2.0.5" + errx "^0.1.0" + exsolve "^1.0.8" + ignore "^7.0.5" + jiti "^2.6.1" + klona "^2.0.6" + mlly "^1.8.0" + ohash "^2.0.11" + pathe "^2.0.3" + pkg-types "^2.3.0" + rc9 "^2.1.2" + scule "^1.3.0" + semver "^7.7.3" + tinyglobby "^0.2.15" + ufo "^1.6.3" + unctx "^2.5.0" + untyped "^2.0.0" + +"@nuxt/kit@^4.2.2": + version "4.3.0" + resolved "https://registry.npmjs.org/@nuxt/kit/-/kit-4.3.0.tgz" + integrity sha512-cD/0UU9RQmlnTbmyJTDyzN8f6CzpziDLv3tFQCnwl0Aoxt3KmFu4k/XA4Sogxqj7jJ/3cdX1kL+Lnsh34sxcQQ== + dependencies: + c12 "^3.3.3" + consola "^3.4.2" + defu "^6.1.4" + destr "^2.0.5" + errx "^0.1.0" + exsolve "^1.0.8" + ignore "^7.0.5" + jiti "^2.6.1" + klona "^2.0.6" + mlly "^1.8.0" + ohash "^2.0.11" + pathe "^2.0.3" + pkg-types "^2.3.0" + rc9 "^2.1.2" + scule "^1.3.0" + semver "^7.7.3" + tinyglobby "^0.2.15" + ufo "^1.6.3" + unctx "^2.5.0" + untyped "^2.0.0" + +"@nuxt/nitro-server@3.21.0": + version "3.21.0" + resolved "https://registry.npmjs.org/@nuxt/nitro-server/-/nitro-server-3.21.0.tgz" + integrity sha512-lM+PPyJf6NpWC7EqcttnNgkh1aGFlb2q1YnyHX/C9OSvF2XUXbSkNKhVclZtYSyZ6aUQSek9P1MRKcaEh7bgpw== + dependencies: + "@nuxt/devalue" "^2.0.2" + "@nuxt/kit" "3.21.0" + "@unhead/vue" "^2.1.2" + "@vue/shared" "^3.5.27" + consola "^3.4.2" + defu "^6.1.4" + destr "^2.0.5" + devalue "^5.6.2" + errx "^0.1.0" + escape-string-regexp "^5.0.0" + exsolve "^1.0.8" + h3 "^1.15.5" + impound "^1.0.0" + klona "^2.0.6" + mocked-exports "^0.1.1" + nitropack "^2.13.1" + ohash "^2.0.11" + pathe "^2.0.3" + pkg-types "^2.3.0" + rou3 "^0.7.12" + std-env "^3.10.0" + ufo "^1.6.3" + unctx "^2.5.0" + unstorage "^1.17.4" + vue "^3.5.27" + vue-bundle-renderer "^2.2.0" + vue-devtools-stub "^0.1.0" + +"@nuxt/schema@3.21.0": + version "3.21.0" + resolved "https://registry.npmjs.org/@nuxt/schema/-/schema-3.21.0.tgz" + integrity sha512-s4cDCQrlG3RbUXowTDlQVR/tsWW2Wd2PQ0Pw/QV5x2Mzp26VH0XyGZ3zYkaDPt23BsjrbF/XA4Bhut5YREfxbg== + dependencies: + "@vue/shared" "^3.5.27" + defu "^6.1.4" + pathe "^2.0.3" + pkg-types "^2.3.0" + std-env "^3.10.0" + +"@nuxt/telemetry@^2.6.6": + version "2.6.6" + resolved "https://registry.npmjs.org/@nuxt/telemetry/-/telemetry-2.6.6.tgz" + integrity sha512-Zh4HJLjzvm3Cq9w6sfzIFyH9ozK5ePYVfCUzzUQNiZojFsI2k1QkSBrVI9BGc6ArKXj/O6rkI6w7qQ+ouL8Cag== + dependencies: + "@nuxt/kit" "^3.15.4" + citty "^0.1.6" + consola "^3.4.2" + destr "^2.0.3" + dotenv "^16.4.7" + git-url-parse "^16.0.1" + is-docker "^3.0.0" + ofetch "^1.4.1" + package-manager-detector "^1.1.0" + pathe "^2.0.3" + rc9 "^2.1.2" + std-env "^3.8.1" + +"@nuxt/vite-builder@3.21.0": + version "3.21.0" + resolved "https://registry.npmjs.org/@nuxt/vite-builder/-/vite-builder-3.21.0.tgz" + integrity sha512-XxwadSMlpvtjDstTtUHdXhLAGldZlWNmPhfAGo5PhsrXhidrjHcODXTGnh9iC1mbVu8xML78/m2rhB9MFHSCyw== + dependencies: + "@nuxt/kit" "3.21.0" + "@rollup/plugin-replace" "^6.0.3" + "@vitejs/plugin-vue" "^6.0.3" + "@vitejs/plugin-vue-jsx" "^5.1.3" + autoprefixer "^10.4.23" + consola "^3.4.2" + cssnano "^7.1.2" + defu "^6.1.4" + esbuild "^0.27.2" + escape-string-regexp "^5.0.0" + exsolve "^1.0.8" + externality "^1.0.2" + get-port-please "^3.2.0" + jiti "^2.6.1" + knitwork "^1.3.0" + magic-string "^0.30.21" + mlly "^1.8.0" + mocked-exports "^0.1.1" + ohash "^2.0.11" + pathe "^2.0.3" + perfect-debounce "^2.0.0" + pkg-types "^2.3.0" + postcss "^8.5.6" + rollup-plugin-visualizer "^6.0.5" + seroval "^1.4.2" + std-env "^3.10.0" + ufo "^1.6.3" + unenv "^2.0.0-rc.24" + vite "^7.3.1" + vite-node "^5.3.0" + vite-plugin-checker "^0.12.0" + vue-bundle-renderer "^2.2.0" + +"@nuxtjs/algolia@^1.11.2": + version "1.11.2" + resolved "https://registry.npmjs.org/@nuxtjs/algolia/-/algolia-1.11.2.tgz" + integrity sha512-x22Sx6EQebvUmrEY5vDqSaTjNzmAaIA36TKR2Sn9WYM0lS7+tcVL2l3AKg0fUNTLHZz6kesoLMGsppX6cq5Lrw== + dependencies: + "@algolia/cache-in-memory" "^4.14.2" + "@algolia/recommend" "^4.12.2" + "@algolia/requester-fetch" "^4.23.2" + "@algolia/requester-node-http" "^5.21.0" + "@nuxt/kit" "^3.7.0" + algoliasearch "^4.11.0" + defu "^6.1.4" + exsolve "^1.0.4" + instantsearch.css "^7.4.5" + metadata-scraper "^0.2.49" + mocked-exports "^0.1.1" + storyblok-algolia-indexer "^1.1.0" + vue-instantsearch "^4.3.2" + +"@nuxtjs/tailwindcss@^6.11.4": + version "6.14.0" + resolved "https://registry.npmjs.org/@nuxtjs/tailwindcss/-/tailwindcss-6.14.0.tgz" + integrity sha512-30RyDK++LrUVRgc2A85MktGWIZoRQgeQKjE4CjjD64OXNozyl+4ScHnnYgqVToMM6Ch2ZG2W4wV2J0EN6F0zkQ== + dependencies: + "@nuxt/kit" "^3.16.0" + autoprefixer "^10.4.20" + c12 "^3.0.2" + consola "^3.4.0" + defu "^6.1.4" + h3 "^1.15.1" + klona "^2.0.6" + ohash "^2.0.11" + pathe "^2.0.3" + pkg-types "^2.1.0" + postcss "^8.5.3" + postcss-nesting "^13.0.1" + tailwind-config-viewer "^2.0.4" + tailwindcss "~3.4.17" + ufo "^1.5.4" + unctx "^2.4.1" + +"@oxc-minify/binding-android-arm-eabi@0.110.0": + version "0.110.0" + resolved "https://registry.npmjs.org/@oxc-minify/binding-android-arm-eabi/-/binding-android-arm-eabi-0.110.0.tgz" + integrity sha512-43fMTO8/5bMlqfOiNSZNKUzIqeLIYuB9Hr1Ohyf58B1wU11S2dPGibTXOGNaWsfgHy99eeZ1bSgeIHy/fEYqbw== + +"@oxc-minify/binding-android-arm64@0.110.0": + version "0.110.0" + resolved "https://registry.npmjs.org/@oxc-minify/binding-android-arm64/-/binding-android-arm64-0.110.0.tgz" + integrity sha512-5oQrnn9eK/ccOp80PTrNj0Vq893NPNNRryjGpOIVsYNgWFuoGCfpnKg68oEFcN8bArizYAqw4nvgHljEnar69w== + +"@oxc-minify/binding-darwin-arm64@0.110.0": + version "0.110.0" + resolved "https://registry.npmjs.org/@oxc-minify/binding-darwin-arm64/-/binding-darwin-arm64-0.110.0.tgz" + integrity sha512-dqBDgTG9tF2z2lrZp9E8wU+Godz1i8gCGSei2eFKS2hRploBOD5dmOLp1j4IMornkPvSQmbwB3uSjPq7fjx4EA== + +"@oxc-minify/binding-darwin-x64@0.110.0": + version "0.110.0" + resolved "https://registry.npmjs.org/@oxc-minify/binding-darwin-x64/-/binding-darwin-x64-0.110.0.tgz" + integrity sha512-U0AqabqaooDOpYmeeOye8wClv8PSScELXgOfYqyqgrwH9J9KrpCE1jL8Rlqgz68QbL4mPw3V6sKiiHssI4CLeQ== + +"@oxc-minify/binding-freebsd-x64@0.110.0": + version "0.110.0" + resolved "https://registry.npmjs.org/@oxc-minify/binding-freebsd-x64/-/binding-freebsd-x64-0.110.0.tgz" + integrity sha512-H0w8o/Wo1072WSdLfhwwrpFpwZnPpjQODlHuRYkTfsSSSJbTxQtjJd4uxk7YJsRv5RQp69y0I7zvdH6f8Xueyw== + +"@oxc-minify/binding-linux-arm-gnueabihf@0.110.0": + version "0.110.0" + resolved "https://registry.npmjs.org/@oxc-minify/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-0.110.0.tgz" + integrity sha512-qd6sW0AvEVYZhbVVMGtmKZw3b1zDYGIW+54Uh42moWRAj6i4Jhk/LGr6r9YNZpOINeuvZfkFuEeDD/jbu7xPUA== + +"@oxc-minify/binding-linux-arm-musleabihf@0.110.0": + version "0.110.0" + resolved "https://registry.npmjs.org/@oxc-minify/binding-linux-arm-musleabihf/-/binding-linux-arm-musleabihf-0.110.0.tgz" + integrity sha512-7WXP0aXMrWSn0ScppUBi3jf68ebfBG0eri8kxLmBOVSBj6jw1repzkHMITJMBeLr5d0tT/51qFEptiAk2EP2iA== + +"@oxc-minify/binding-linux-arm64-gnu@0.110.0": + version "0.110.0" + resolved "https://registry.npmjs.org/@oxc-minify/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-0.110.0.tgz" + integrity sha512-LYfADrq5x1W5gs+u9OIbMbDQNYkAECTXX0ufnAuf3oGmO51rF98kGFR5qJqC/6/csokDyT3wwTpxhE0TkcF/Og== + +"@oxc-minify/binding-linux-arm64-musl@0.110.0": + version "0.110.0" + resolved "https://registry.npmjs.org/@oxc-minify/binding-linux-arm64-musl/-/binding-linux-arm64-musl-0.110.0.tgz" + integrity sha512-53GjCVY8kvymk9P6qNDh6zyblcehF5QHstq9QgCjv13ONGRnSHjeds0PxIwiihD7h295bxsWs84DN39syLPH4Q== + +"@oxc-minify/binding-linux-ppc64-gnu@0.110.0": + version "0.110.0" + resolved "https://registry.npmjs.org/@oxc-minify/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-0.110.0.tgz" + integrity sha512-li8XcN81dxbJDMBESnTgGhoiAQ+CNIdM0QGscZ4duVPjCry1RpX+5FJySFbGqG3pk4s9ZzlL/vtQtbRzZIZOzg== + +"@oxc-minify/binding-linux-riscv64-gnu@0.110.0": + version "0.110.0" + resolved "https://registry.npmjs.org/@oxc-minify/binding-linux-riscv64-gnu/-/binding-linux-riscv64-gnu-0.110.0.tgz" + integrity sha512-SweKfsnLKShu6UFV8mwuj1d1wmlNoL/FlAxPUzwjEBgwiT2HQkY24KnjBH+TIA+//1O83kzmWKvvs4OuEhdIEQ== + +"@oxc-minify/binding-linux-riscv64-musl@0.110.0": + version "0.110.0" + resolved "https://registry.npmjs.org/@oxc-minify/binding-linux-riscv64-musl/-/binding-linux-riscv64-musl-0.110.0.tgz" + integrity sha512-oH8G4aFMP8XyTsEpdANC5PQyHgSeGlopHZuW1rpyYcaErg5YaK0vXjQ4EM5HVvPm+feBV24JjxgakTnZoF3aOQ== + +"@oxc-minify/binding-linux-s390x-gnu@0.110.0": + version "0.110.0" + resolved "https://registry.npmjs.org/@oxc-minify/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-0.110.0.tgz" + integrity sha512-W9na+Vza7XVUlpf8wMt4QBfH35KeTENEmnpPUq3NSlbQHz8lSlSvhAafvo43NcKvHAXV3ckD/mUf2VkqSdbklg== + +"@oxc-minify/binding-linux-x64-gnu@0.110.0": + version "0.110.0" + resolved "https://registry.npmjs.org/@oxc-minify/binding-linux-x64-gnu/-/binding-linux-x64-gnu-0.110.0.tgz" + integrity sha512-XJdA4mmmXOjJxSRgNJXsDP7Xe8h3gQhmb56hUcCrvq5d+h5UcEi2pR8rxsdIrS8QmkLuBA3eHkGK8E27D7DTgQ== + +"@oxc-minify/binding-linux-x64-musl@0.110.0": + version "0.110.0" + resolved "https://registry.npmjs.org/@oxc-minify/binding-linux-x64-musl/-/binding-linux-x64-musl-0.110.0.tgz" + integrity sha512-QqzvALuOTtSckI8x467R4GNArzYDb/yEh6aNzLoeaY1O7vfT7SPDwlOEcchaTznutpeS9Dy8gUS/AfqtUHaufw== + +"@oxc-minify/binding-openharmony-arm64@0.110.0": + version "0.110.0" + resolved "https://registry.npmjs.org/@oxc-minify/binding-openharmony-arm64/-/binding-openharmony-arm64-0.110.0.tgz" + integrity sha512-gAMssLs2Q3+uhLZxanh1DF+27Kaug3cf4PXb9AB7XK81DR+LVcKySXaoGYoOs20Co0fFSphd6rRzKge2qDK3dA== + +"@oxc-minify/binding-wasm32-wasi@0.110.0": + version "0.110.0" + resolved "https://registry.npmjs.org/@oxc-minify/binding-wasm32-wasi/-/binding-wasm32-wasi-0.110.0.tgz" + integrity sha512-7Wqi5Zjl022bs2zXq+ICdalDPeDuCH/Nhbi8q2isLihAonMVIT0YH2hqqnNEylRNGYck+FJ6gRZwMpGCgrNxPg== + dependencies: + "@napi-rs/wasm-runtime" "^1.1.1" + +"@oxc-minify/binding-win32-arm64-msvc@0.110.0": + version "0.110.0" + resolved "https://registry.npmjs.org/@oxc-minify/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-0.110.0.tgz" + integrity sha512-ZPx+0Tj4dqn41ecyoGotlvekQKy6JxJCixn9Rw7h/dafZ3eDuBcEVh3c2ZoldXXsyMIt5ywI8IWzFZsjNedd5Q== + +"@oxc-minify/binding-win32-ia32-msvc@0.110.0": + version "0.110.0" + resolved "https://registry.npmjs.org/@oxc-minify/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-0.110.0.tgz" + integrity sha512-H0Oyd3RWBfpEyvJIrFK94RYiY7KKSQl11Ym7LMDwLEagelIAfRCkt1amHZhFa/S3ZRoaOJFXzEw4YKeSsjVFsg== + +"@oxc-minify/binding-win32-x64-msvc@0.110.0": + version "0.110.0" + resolved "https://registry.npmjs.org/@oxc-minify/binding-win32-x64-msvc/-/binding-win32-x64-msvc-0.110.0.tgz" + integrity sha512-Hr3nK90+qXKJ2kepXwFIcNfQQIOBecB4FFCyaMMypthoEEhVP08heRynj4eSXZ8NL9hLjs3fQzH8PJXfpznRnQ== + +"@oxc-parser/binding-android-arm-eabi@0.110.0": + version "0.110.0" + resolved "https://registry.npmjs.org/@oxc-parser/binding-android-arm-eabi/-/binding-android-arm-eabi-0.110.0.tgz" + integrity sha512-g6+kHTI/BRDJszaZkSgyu0pGuMIVYJ7/v0I4C9BkTeGn1LxF9GWI6jE22dBEELXMWbG7FTyNlD9RCuWlStAx6w== + +"@oxc-parser/binding-android-arm64@0.110.0": + version "0.110.0" + resolved "https://registry.npmjs.org/@oxc-parser/binding-android-arm64/-/binding-android-arm64-0.110.0.tgz" + integrity sha512-tbr+uWFVUN6p9LYlR0cPyFA24HWlnRYU+oldWlEGis/tdMtya3BubQcKdylhFhhDLaW6ChCJfxogQranElGVsw== + +"@oxc-parser/binding-darwin-arm64@0.110.0": + version "0.110.0" + resolved "https://registry.npmjs.org/@oxc-parser/binding-darwin-arm64/-/binding-darwin-arm64-0.110.0.tgz" + integrity sha512-jPBsXPc8hwmsUQyLMg7a5Ll/j/8rWCDFoB8WzLP6C0qQKX0zWQxbfSdLFg9GGNPuRo8J8ma9WfBQN5RmbFxNJA== + +"@oxc-parser/binding-darwin-x64@0.110.0": + version "0.110.0" + resolved "https://registry.npmjs.org/@oxc-parser/binding-darwin-x64/-/binding-darwin-x64-0.110.0.tgz" + integrity sha512-jt5G1eZj4sdMGc7Q0c6kfPRmqY1Mn3yzo6xuRr8EXozkh93O8KGFflABY7t56WIrmP+cloaCQkLcjlm6vdhzcQ== + +"@oxc-parser/binding-freebsd-x64@0.110.0": + version "0.110.0" + resolved "https://registry.npmjs.org/@oxc-parser/binding-freebsd-x64/-/binding-freebsd-x64-0.110.0.tgz" + integrity sha512-VJ7Hwf4dg7uf8b/DrLEhE6lgnNTfBZbTqXQBG3n0oCBoreE1c5aWf1la+o7fJjjTpACRts/vAZ2ngFNNqEFpJw== + +"@oxc-parser/binding-linux-arm-gnueabihf@0.110.0": + version "0.110.0" + resolved "https://registry.npmjs.org/@oxc-parser/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-0.110.0.tgz" + integrity sha512-w3OZ0pLKktM7k4qEbVj3dHnCvSMFnWugYxHfhpwncYUOxwDNL3mw++EOIrw997QYiEuJ+H6Od8K6mbj1p6Ae8w== + +"@oxc-parser/binding-linux-arm-musleabihf@0.110.0": + version "0.110.0" + resolved "https://registry.npmjs.org/@oxc-parser/binding-linux-arm-musleabihf/-/binding-linux-arm-musleabihf-0.110.0.tgz" + integrity sha512-BIaoW4W6QKb8Q6p3DErDtsAuDRAnr0W+gtwo7fQQkbAJpoPII0ZJXZn+tcQGCyNGKWSsilRNWHyd/XZfXXXpzw== + +"@oxc-parser/binding-linux-arm64-gnu@0.110.0": + version "0.110.0" + resolved "https://registry.npmjs.org/@oxc-parser/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-0.110.0.tgz" + integrity sha512-3EQDJze28t0HdxXjMKBU6utNscXJePg2YV0Kd/ZnHx24VcIyfkNH6NKzBh0NeaWHovDTkpzYHPtF2tOevtbbfw== + +"@oxc-parser/binding-linux-arm64-musl@0.110.0": + version "0.110.0" + resolved "https://registry.npmjs.org/@oxc-parser/binding-linux-arm64-musl/-/binding-linux-arm64-musl-0.110.0.tgz" + integrity sha512-5xwm1hPrGGvjCVtTWNGJ39MmQGnyipoIDShneGBgSrnDh0XX+COAO7AZKajgNipqgNq5rGEItpzFkMtSDyx0bQ== + +"@oxc-parser/binding-linux-ppc64-gnu@0.110.0": + version "0.110.0" + resolved "https://registry.npmjs.org/@oxc-parser/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-0.110.0.tgz" + integrity sha512-I8Xop7z+enuvW1xe0AcRQ9XqFNkUYgeXusyGjCyW6TstRb62P90h+nL1AoGaUMy0E0518DJam5vRYVRgXaAzYg== + +"@oxc-parser/binding-linux-riscv64-gnu@0.110.0": + version "0.110.0" + resolved "https://registry.npmjs.org/@oxc-parser/binding-linux-riscv64-gnu/-/binding-linux-riscv64-gnu-0.110.0.tgz" + integrity sha512-XPM0jpght/AuHnweNaIo0twpId6rWFs8NrTkMijxcsRQMzNBeSQQgYm9ErrutmKQS6gb8XNAEIkYXHgPmhdDPg== + +"@oxc-parser/binding-linux-riscv64-musl@0.110.0": + version "0.110.0" + resolved "https://registry.npmjs.org/@oxc-parser/binding-linux-riscv64-musl/-/binding-linux-riscv64-musl-0.110.0.tgz" + integrity sha512-ylJIuJyMzAqR191QeCwZLEkyo4Sx817TNILjNhT0W1EDQusGicOYKSsGXM/2DHCNYGcidV+MQ8pUVzNeVmuM6g== + +"@oxc-parser/binding-linux-s390x-gnu@0.110.0": + version "0.110.0" + resolved "https://registry.npmjs.org/@oxc-parser/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-0.110.0.tgz" + integrity sha512-DL6oR0PfYor9tBX9xlAxMUVwfm6+sKTL4H+KiQ6JKP3xkJTwBIdDCgeN2AjMht1D3N40uUwVq3v8/2fqnZRgLQ== + +"@oxc-parser/binding-linux-x64-gnu@0.110.0": + version "0.110.0" + resolved "https://registry.npmjs.org/@oxc-parser/binding-linux-x64-gnu/-/binding-linux-x64-gnu-0.110.0.tgz" + integrity sha512-+e6ws5JLpFehdK+wh6q8icx1iM3Ao+9dtItVWFcRiXxSvGcIlS9viWcMvXKrmcsyVDUf81dnvuMSBigNslxhIQ== + +"@oxc-parser/binding-linux-x64-musl@0.110.0": + version "0.110.0" + resolved "https://registry.npmjs.org/@oxc-parser/binding-linux-x64-musl/-/binding-linux-x64-musl-0.110.0.tgz" + integrity sha512-6DiYhVdXKOzB01+j/tyrB6/d2o6b4XYFQvcbBRNbVHIimS6nl992y3V3mGG3NaA+uCZAzhT3M3btTdKAxE4A3A== + +"@oxc-parser/binding-openharmony-arm64@0.110.0": + version "0.110.0" + resolved "https://registry.npmjs.org/@oxc-parser/binding-openharmony-arm64/-/binding-openharmony-arm64-0.110.0.tgz" + integrity sha512-U9KEK7tXdHrXl2eZpoHYGWj31ZSvdGiaXwjkJzeRN0elt89PXi+VcryRh6BAFbEz1EQpTteyMDwDXMgJVWM85A== + +"@oxc-parser/binding-wasm32-wasi@0.110.0": + version "0.110.0" + resolved "https://registry.npmjs.org/@oxc-parser/binding-wasm32-wasi/-/binding-wasm32-wasi-0.110.0.tgz" + integrity sha512-cK2j/GbXGxP7k4qDM0OGjkbPrIOj8n9+U/27joH/M19z+jrQ5u1lvlvbAK/Aw2LnqE0waADnnuAc0MFab+Ea8w== + dependencies: + "@napi-rs/wasm-runtime" "^1.1.1" + +"@oxc-parser/binding-win32-arm64-msvc@0.110.0": + version "0.110.0" + resolved "https://registry.npmjs.org/@oxc-parser/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-0.110.0.tgz" + integrity sha512-ZW393ysGT5oZeGJRyw2JAz4tIfyTjVCSxuZoh8e+7J7e0QPDH/SAmyxJXb/aMxarIVa3OcYZ5p/Q6eooHZ0i1Q== + +"@oxc-parser/binding-win32-ia32-msvc@0.110.0": + version "0.110.0" + resolved "https://registry.npmjs.org/@oxc-parser/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-0.110.0.tgz" + integrity sha512-NM50LT1PEnlMlw+z/TFVkWaDOF/s5DRHbU3XhEESNhDDT9qYA8N9B1V/FYxVr1ngu28JGK2HtkjpWKlKoF4E2Q== + +"@oxc-parser/binding-win32-x64-msvc@0.110.0": + version "0.110.0" + resolved "https://registry.npmjs.org/@oxc-parser/binding-win32-x64-msvc/-/binding-win32-x64-msvc-0.110.0.tgz" + integrity sha512-w1SzoXNaY59tbTz8/YhImByuj7kXP5EfPtv4+PPwPrvLrOWt8BOpK0wN8ysXqyWCdHv9vS1UBRrNd/aSp4Dy8A== + +"@oxc-project/types@^0.110.0": + version "0.110.0" + resolved "https://registry.npmjs.org/@oxc-project/types/-/types-0.110.0.tgz" + integrity sha512-6Ct21OIlrEnFEJk5LT4e63pk3btsI6/TusD/GStLi7wYlGJNOl1GI9qvXAnRAxQU9zqA2Oz+UwhfTOU2rPZVow== + +"@oxc-transform/binding-android-arm-eabi@0.110.0": + version "0.110.0" + resolved "https://registry.npmjs.org/@oxc-transform/binding-android-arm-eabi/-/binding-android-arm-eabi-0.110.0.tgz" + integrity sha512-sE9dxvqqAax1YYJ3t7j+h5ZSI9jl6dYuDfngl6ieZUrIy5P89/8JKVgAzgp8o3wQSo7ndpJvYsi1K4ZqrmbP7w== + +"@oxc-transform/binding-android-arm64@0.110.0": + version "0.110.0" + resolved "https://registry.npmjs.org/@oxc-transform/binding-android-arm64/-/binding-android-arm64-0.110.0.tgz" + integrity sha512-nqtbP4aMCtsCZ6qpHlHaQoWVHSBtlKzwaAgwEOvR+9DWqHjk31BHvpGiDXlMeed6CVNpl3lCbWgygb3RcSjcfw== + +"@oxc-transform/binding-darwin-arm64@0.110.0": + version "0.110.0" + resolved "https://registry.npmjs.org/@oxc-transform/binding-darwin-arm64/-/binding-darwin-arm64-0.110.0.tgz" + integrity sha512-oeSeHnL4Z4cMXtc8V0/rwoVn0dgwlS9q0j6LcHn9dIhtFEdp3W0iSBF8YmMQA+E7sILeLDjsHmHE4Kp0sOScXw== + +"@oxc-transform/binding-darwin-x64@0.110.0": + version "0.110.0" + resolved "https://registry.npmjs.org/@oxc-transform/binding-darwin-x64/-/binding-darwin-x64-0.110.0.tgz" + integrity sha512-nL9K5x7OuZydobAGPylsEW9d4APs2qEkIBLMgQPA+kY8dtVD3IR87QsTbs4l4DBQYyun/+ay6qVCDlxqxdX2Jg== + +"@oxc-transform/binding-freebsd-x64@0.110.0": + version "0.110.0" + resolved "https://registry.npmjs.org/@oxc-transform/binding-freebsd-x64/-/binding-freebsd-x64-0.110.0.tgz" + integrity sha512-GS29zXXirDQhZEUq8xKJ1azAWMuUy3Ih3W5Bc5ddk12LRthO5wRLFcKIyeHpAXCoXymQ+LmxbMtbPf84GPxouw== + +"@oxc-transform/binding-linux-arm-gnueabihf@0.110.0": + version "0.110.0" + resolved "https://registry.npmjs.org/@oxc-transform/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-0.110.0.tgz" + integrity sha512-glzDHak8ISyZJemCUi7RCvzNSl+MQ1ly9RceT2qRufhUsvNZ4C/2QLJ1HJwd2N6E88bO4laYn+RofdRzNnGGEA== + +"@oxc-transform/binding-linux-arm-musleabihf@0.110.0": + version "0.110.0" + resolved "https://registry.npmjs.org/@oxc-transform/binding-linux-arm-musleabihf/-/binding-linux-arm-musleabihf-0.110.0.tgz" + integrity sha512-8JThvgJ2FRoTVfbp7e4wqeZqCZbtudM06SfZmNzND9kPNu/LVYygIR+72RWs+xm4bWkuYHg/islo/boNPtMT5Q== + +"@oxc-transform/binding-linux-arm64-gnu@0.110.0": + version "0.110.0" + resolved "https://registry.npmjs.org/@oxc-transform/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-0.110.0.tgz" + integrity sha512-IRh21Ub/g4bkHoErZ0AUWMlWfoZaS0A6EaOVtbcY70RSYIMlrsbjiFwJCzM+b/1DD1rXbH5tsGcH7GweTbfRqg== + +"@oxc-transform/binding-linux-arm64-musl@0.110.0": + version "0.110.0" + resolved "https://registry.npmjs.org/@oxc-transform/binding-linux-arm64-musl/-/binding-linux-arm64-musl-0.110.0.tgz" + integrity sha512-e5JN94/oy+wevk76q+LMr+2klTTcO60uXa+Wkq558Ms7mdF2TvkKFI++d/JeiuIwJLTi/BxQ4qdT5FWcsHM/ug== + +"@oxc-transform/binding-linux-ppc64-gnu@0.110.0": + version "0.110.0" + resolved "https://registry.npmjs.org/@oxc-transform/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-0.110.0.tgz" + integrity sha512-Y3/Tnnz1GvDpmv8FXBIKtdZPsdZklOEPdrL6NHrN5i2u54BOkybFaDSptgWF53wOrJlTrcmAVSE6fRKK9XCM2Q== + +"@oxc-transform/binding-linux-riscv64-gnu@0.110.0": + version "0.110.0" + resolved "https://registry.npmjs.org/@oxc-transform/binding-linux-riscv64-gnu/-/binding-linux-riscv64-gnu-0.110.0.tgz" + integrity sha512-Y0E35iA9/v9jlkNcP6tMJ+ZFOS0rLsWDqG6rU9z+X2R3fBFJBO9UARIK6ngx8upxk81y1TFR2CmBFhupfYdH6Q== + +"@oxc-transform/binding-linux-riscv64-musl@0.110.0": + version "0.110.0" + resolved "https://registry.npmjs.org/@oxc-transform/binding-linux-riscv64-musl/-/binding-linux-riscv64-musl-0.110.0.tgz" + integrity sha512-JOUSYFfHjBUs7xp2FHmZHb8eTYD/oEu0NklS6JgUauqnoXZHiTLPLVW2o2uVCqldnabYHcomuwI2iqVFYJNhTw== + +"@oxc-transform/binding-linux-s390x-gnu@0.110.0": + version "0.110.0" + resolved "https://registry.npmjs.org/@oxc-transform/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-0.110.0.tgz" + integrity sha512-7blgoXF9D3Ngzb7eun23pNrHJpoV/TtE6LObwlZ3Nmb4oZ6Z+yMvBVaoW68NarbmvNGfZ95zrOjgm6cVETLYBA== + +"@oxc-transform/binding-linux-x64-gnu@0.110.0": + version "0.110.0" + resolved "https://registry.npmjs.org/@oxc-transform/binding-linux-x64-gnu/-/binding-linux-x64-gnu-0.110.0.tgz" + integrity sha512-YQ2joGWCVDZVEU2cD/r/w49hVjDm/Qu1BvC/7zs8LvprzdLS/HyMXGF2oA0puw0b+AqgYaz3bhwKB2xexHyITQ== + +"@oxc-transform/binding-linux-x64-musl@0.110.0": + version "0.110.0" + resolved "https://registry.npmjs.org/@oxc-transform/binding-linux-x64-musl/-/binding-linux-x64-musl-0.110.0.tgz" + integrity sha512-fkjr5qE632ULmNgvFXWDR/8668WxERz3tU7TQFp6JebPBneColitjSkdx6VKNVXEoMmQnOvBIGeP5tUNT384oA== + +"@oxc-transform/binding-openharmony-arm64@0.110.0": + version "0.110.0" + resolved "https://registry.npmjs.org/@oxc-transform/binding-openharmony-arm64/-/binding-openharmony-arm64-0.110.0.tgz" + integrity sha512-HWH9Zj+lMrdSTqFRCZsvDWMz7OnMjbdGsm3xURXWfRZpuaz0bVvyuZNDQXc4FyyhRDsemICaJbU1bgeIpUJDGw== + +"@oxc-transform/binding-wasm32-wasi@0.110.0": + version "0.110.0" + resolved "https://registry.npmjs.org/@oxc-transform/binding-wasm32-wasi/-/binding-wasm32-wasi-0.110.0.tgz" + integrity sha512-ejdxHmYfIcHDPhZUe3WklViLt9mDEJE5BzcW7+R1vc5i/5JFA8D0l7NUSsHBJ7FB8Bu9gF+5iMDm6cXGAgaghw== + dependencies: + "@napi-rs/wasm-runtime" "^1.1.1" + +"@oxc-transform/binding-win32-arm64-msvc@0.110.0": + version "0.110.0" + resolved "https://registry.npmjs.org/@oxc-transform/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-0.110.0.tgz" + integrity sha512-9VTwpXCZs7xkV+mKhQ62dVk7KLnLXtEUxNS2T4nLz3iMl1IJbA4h5oltK0JoobtiUAnbkV53QmMVGW8+Nh3bDQ== + +"@oxc-transform/binding-win32-ia32-msvc@0.110.0": + version "0.110.0" + resolved "https://registry.npmjs.org/@oxc-transform/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-0.110.0.tgz" + integrity sha512-5y0fzuNON7/F2hh2P94vANFaRPJ/3DI1hVl5rseCT8VUVqOGIjWaza0YS/D1g6t1WwycW2LWDMi2raOKoWU5GQ== + +"@oxc-transform/binding-win32-x64-msvc@0.110.0": + version "0.110.0" + resolved "https://registry.npmjs.org/@oxc-transform/binding-win32-x64-msvc/-/binding-win32-x64-msvc-0.110.0.tgz" + integrity sha512-QROrowwlrApI1fEScMknGWKM6GTM/Z2xwMnDqvSaEmzNazBsDUlE08Jasw610hFEsYAVU2K5sp/YaCa9ORdP4A== + +"@parcel/watcher-android-arm64@2.5.0": + version "2.5.0" + resolved "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.0.tgz" + integrity sha512-qlX4eS28bUcQCdribHkg/herLe+0A9RyYC+mm2PXpncit8z5b3nSqGVzMNR3CmtAOgRutiZ02eIJJgP/b1iEFQ== + +"@parcel/watcher-darwin-arm64@2.5.0": + version "2.5.0" + resolved "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.0.tgz" + integrity sha512-hyZ3TANnzGfLpRA2s/4U1kbw2ZI4qGxaRJbBH2DCSREFfubMswheh8TeiC1sGZ3z2jUf3s37P0BBlrD3sjVTUw== + +"@parcel/watcher-darwin-x64@2.5.0": + version "2.5.0" + resolved "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.0.tgz" + integrity sha512-9rhlwd78saKf18fT869/poydQK8YqlU26TMiNg7AIu7eBp9adqbJZqmdFOsbZ5cnLp5XvRo9wcFmNHgHdWaGYA== + +"@parcel/watcher-freebsd-x64@2.5.0": + version "2.5.0" + resolved "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.0.tgz" + integrity sha512-syvfhZzyM8kErg3VF0xpV8dixJ+RzbUaaGaeb7uDuz0D3FK97/mZ5AJQ3XNnDsXX7KkFNtyQyFrXZzQIcN49Tw== + +"@parcel/watcher-linux-arm-glibc@2.5.0": + version "2.5.0" + resolved "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.0.tgz" + integrity sha512-0VQY1K35DQET3dVYWpOaPFecqOT9dbuCfzjxoQyif1Wc574t3kOSkKevULddcR9znz1TcklCE7Ht6NIxjvTqLA== + +"@parcel/watcher-linux-arm-musl@2.5.0": + version "2.5.0" + resolved "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.0.tgz" + integrity sha512-6uHywSIzz8+vi2lAzFeltnYbdHsDm3iIB57d4g5oaB9vKwjb6N6dRIgZMujw4nm5r6v9/BQH0noq6DzHrqr2pA== + +"@parcel/watcher-linux-arm64-glibc@2.5.0": + version "2.5.0" + resolved "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.0.tgz" + integrity sha512-BfNjXwZKxBy4WibDb/LDCriWSKLz+jJRL3cM/DllnHH5QUyoiUNEp3GmL80ZqxeumoADfCCP19+qiYiC8gUBjA== + +"@parcel/watcher-linux-arm64-musl@2.5.0": + version "2.5.0" + resolved "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.0.tgz" + integrity sha512-S1qARKOphxfiBEkwLUbHjCY9BWPdWnW9j7f7Hb2jPplu8UZ3nes7zpPOW9bkLbHRvWM0WDTsjdOTUgW0xLBN1Q== + +"@parcel/watcher-linux-x64-glibc@2.5.0": + version "2.5.0" + resolved "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.0.tgz" + integrity sha512-d9AOkusyXARkFD66S6zlGXyzx5RvY+chTP9Jp0ypSTC9d4lzyRs9ovGf/80VCxjKddcUvnsGwCHWuF2EoPgWjw== + +"@parcel/watcher-linux-x64-musl@2.5.0": + version "2.5.0" + resolved "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.0.tgz" + integrity sha512-iqOC+GoTDoFyk/VYSFHwjHhYrk8bljW6zOhPuhi5t9ulqiYq1togGJB5e3PwYVFFfeVgc6pbz3JdQyDoBszVaA== + +"@parcel/watcher-wasm@^2.4.1": + version "2.5.0" + resolved "https://registry.npmjs.org/@parcel/watcher-wasm/-/watcher-wasm-2.5.0.tgz" + integrity sha512-Z4ouuR8Pfggk1EYYbTaIoxc+Yv4o7cGQnH0Xy8+pQ+HbiW+ZnwhcD2LPf/prfq1nIWpAxjOkQ8uSMFWMtBLiVQ== + dependencies: + is-glob "^4.0.3" + micromatch "^4.0.5" + napi-wasm "^1.1.0" + +"@parcel/watcher-win32-arm64@2.5.0": + version "2.5.0" + resolved "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.0.tgz" + integrity sha512-twtft1d+JRNkM5YbmexfcH/N4znDtjgysFaV9zvZmmJezQsKpkfLYJ+JFV3uygugK6AtIM2oADPkB2AdhBrNig== + +"@parcel/watcher-win32-ia32@2.5.0": + version "2.5.0" + resolved "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.0.tgz" + integrity sha512-+rgpsNRKwo8A53elqbbHXdOMtY/tAtTzManTWShB5Kk54N8Q9mzNWV7tV+IbGueCbcj826MfWGU3mprWtuf1TA== + +"@parcel/watcher-win32-x64@2.5.0": + version "2.5.0" + resolved "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.0.tgz" + integrity sha512-lPrxve92zEHdgeff3aiu4gDOIt4u7sJYha6wbdEZDCDUhtjTsOMiaJzG5lMY4GkWH8p0fMmO2Ppq5G5XXG+DQw== + +"@parcel/watcher@^2.1.0", "@parcel/watcher@^2.4.1": + version "2.5.0" + resolved "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.0.tgz" + integrity sha512-i0GV1yJnm2n3Yq1qw6QrUrd/LI9bE8WEBOTtOkpCXHHdyN3TAGgqAK/DAT05z4fq2x04cARXt2pDmjWjL92iTQ== + dependencies: + detect-libc "^1.0.3" + is-glob "^4.0.3" + micromatch "^4.0.5" + node-addon-api "^7.0.0" + optionalDependencies: + "@parcel/watcher-android-arm64" "2.5.0" + "@parcel/watcher-darwin-arm64" "2.5.0" + "@parcel/watcher-darwin-x64" "2.5.0" + "@parcel/watcher-freebsd-x64" "2.5.0" + "@parcel/watcher-linux-arm-glibc" "2.5.0" + "@parcel/watcher-linux-arm-musl" "2.5.0" + "@parcel/watcher-linux-arm64-glibc" "2.5.0" + "@parcel/watcher-linux-arm64-musl" "2.5.0" + "@parcel/watcher-linux-x64-glibc" "2.5.0" + "@parcel/watcher-linux-x64-musl" "2.5.0" + "@parcel/watcher-win32-arm64" "2.5.0" + "@parcel/watcher-win32-ia32" "2.5.0" + "@parcel/watcher-win32-x64" "2.5.0" + +"@pinia/nuxt@^0.5.1": + version "0.5.5" + resolved "https://registry.npmjs.org/@pinia/nuxt/-/nuxt-0.5.5.tgz" + integrity sha512-wjxS7YqIesh4OLK+qE3ZjhdOJ5pYZQ+VlEmZNtTwzQn1Kavei/khovx7mzXVXNA/mvSPXVhb9xBzhyS3XMURtw== + dependencies: + "@nuxt/kit" "^3.9.0" + pinia "^2.2.3" + +"@pkgjs/parseargs@^0.11.0": + version "0.11.0" + resolved "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz" + integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== + +"@polka/url@^1.0.0-next.24": + version "1.0.0-next.29" + resolved "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.29.tgz" + integrity sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww== + +"@poppinss/colors@^4.1.5": + version "4.1.6" + resolved "https://registry.npmjs.org/@poppinss/colors/-/colors-4.1.6.tgz" + integrity sha512-H9xkIdFswbS8n1d6vmRd8+c10t2Qe+rZITbbDHHkQixH5+2x1FDGmi/0K+WgWiqQFKPSlIYB7jlH6Kpfn6Fleg== + dependencies: + kleur "^4.1.5" + +"@poppinss/dumper@^0.6.5": + version "0.6.5" + resolved "https://registry.npmjs.org/@poppinss/dumper/-/dumper-0.6.5.tgz" + integrity sha512-NBdYIb90J7LfOI32dOewKI1r7wnkiH6m920puQ3qHUeZkxNkQiFnXVWoE6YtFSv6QOiPPf7ys6i+HWWecDz7sw== + dependencies: + "@poppinss/colors" "^4.1.5" + "@sindresorhus/is" "^7.0.2" + supports-color "^10.0.0" + +"@poppinss/exception@^1.2.2": + version "1.2.3" + resolved "https://registry.npmjs.org/@poppinss/exception/-/exception-1.2.3.tgz" + integrity sha512-dCED+QRChTVatE9ibtoaxc+WkdzOSjYTKi/+uacHWIsfodVfpsueo3+DKpgU5Px8qXjgmXkSvhXvSCz3fnP9lw== + +"@rolldown/pluginutils@^1.0.0-rc.2", "@rolldown/pluginutils@1.0.0-rc.2": + version "1.0.0-rc.2" + resolved "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.2.tgz" + integrity sha512-izyXV/v+cHiRfozX62W9htOAvwMo4/bXKDrQ+vom1L1qRuexPock/7VZDAhnpHCLNejd3NJ6hiab+tO0D44Rgw== + +"@rollup/plugin-alias@^6.0.0": + version "6.0.0" + resolved "https://registry.npmjs.org/@rollup/plugin-alias/-/plugin-alias-6.0.0.tgz" + integrity sha512-tPCzJOtS7uuVZd+xPhoy5W4vThe6KWXNmsFCNktaAh5RTqcLiSfT4huPQIXkgJ6YCOjJHvecOAzQxLFhPxKr+g== + +"@rollup/plugin-commonjs@^29.0.0": + version "29.0.0" + resolved "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-29.0.0.tgz" + integrity sha512-U2YHaxR2cU/yAiwKJtJRhnyLk7cifnQw0zUpISsocBDoHDJn+HTV74ABqnwr5bEgWUwFZC9oFL6wLe21lHu5eQ== + dependencies: + "@rollup/pluginutils" "^5.0.1" + commondir "^1.0.1" + estree-walker "^2.0.2" + fdir "^6.2.0" + is-reference "1.2.1" + magic-string "^0.30.3" + picomatch "^4.0.2" + +"@rollup/plugin-inject@^5.0.5": + version "5.0.5" + resolved "https://registry.npmjs.org/@rollup/plugin-inject/-/plugin-inject-5.0.5.tgz" + integrity sha512-2+DEJbNBoPROPkgTDNe8/1YXWcqxbN5DTjASVIOx8HS+pITXushyNiBV56RB08zuptzz8gT3YfkqriTBVycepg== + dependencies: + "@rollup/pluginutils" "^5.0.1" + estree-walker "^2.0.2" + magic-string "^0.30.3" + +"@rollup/plugin-json@^6.1.0": + version "6.1.0" + resolved "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-6.1.0.tgz" + integrity sha512-EGI2te5ENk1coGeADSIwZ7G2Q8CJS2sF120T7jLw4xFw9n7wIOXHo+kIYRAoVpJAN+kmqZSoO3Fp4JtoNF4ReA== + dependencies: + "@rollup/pluginutils" "^5.1.0" + +"@rollup/plugin-node-resolve@^16.0.3": + version "16.0.3" + resolved "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-16.0.3.tgz" + integrity sha512-lUYM3UBGuM93CnMPG1YocWu7X802BrNF3jW2zny5gQyLQgRFJhV1Sq0Zi74+dh/6NBx1DxFC4b4GXg9wUCG5Qg== + dependencies: + "@rollup/pluginutils" "^5.0.1" + "@types/resolve" "1.20.2" + deepmerge "^4.2.2" + is-module "^1.0.0" + resolve "^1.22.1" + +"@rollup/plugin-replace@^6.0.3": + version "6.0.3" + resolved "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-6.0.3.tgz" + integrity sha512-J4RZarRvQAm5IF0/LwUUg+obsm+xZhYnbMXmXROyoSE1ATJe3oXSb9L5MMppdxP2ylNSjv6zFBwKYjcKMucVfA== + dependencies: + "@rollup/pluginutils" "^5.0.1" + magic-string "^0.30.3" + +"@rollup/plugin-terser@^0.4.4": + version "0.4.4" + resolved "https://registry.npmjs.org/@rollup/plugin-terser/-/plugin-terser-0.4.4.tgz" + integrity sha512-XHeJC5Bgvs8LfukDwWZp7yeqin6ns8RTl2B9avbejt6tZqsqvVoWI7ZTQrcNsfKEDWBTnTxM8nMDkO2IFFbd0A== + dependencies: + serialize-javascript "^6.0.1" + smob "^1.0.0" + terser "^5.17.4" + +"@rollup/pluginutils@^5.0.1", "@rollup/pluginutils@^5.1.0", "@rollup/pluginutils@^5.1.3": + version "5.3.0" + resolved "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.3.0.tgz" + integrity sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q== + dependencies: + "@types/estree" "^1.0.0" + estree-walker "^2.0.2" + picomatch "^4.0.2" + +"@rollup/rollup-android-arm-eabi@4.57.1": + version "4.57.1" + resolved "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.57.1.tgz" + integrity sha512-A6ehUVSiSaaliTxai040ZpZ2zTevHYbvu/lDoeAteHI8QnaosIzm4qwtezfRg1jOYaUmnzLX1AOD6Z+UJjtifg== + +"@rollup/rollup-android-arm64@4.57.1": + version "4.57.1" + resolved "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.57.1.tgz" + integrity sha512-dQaAddCY9YgkFHZcFNS/606Exo8vcLHwArFZ7vxXq4rigo2bb494/xKMMwRRQW6ug7Js6yXmBZhSBRuBvCCQ3w== + +"@rollup/rollup-darwin-arm64@4.57.1": + version "4.57.1" + resolved "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.57.1.tgz" + integrity sha512-crNPrwJOrRxagUYeMn/DZwqN88SDmwaJ8Cvi/TN1HnWBU7GwknckyosC2gd0IqYRsHDEnXf328o9/HC6OkPgOg== + +"@rollup/rollup-darwin-x64@4.57.1": + version "4.57.1" + resolved "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.57.1.tgz" + integrity sha512-Ji8g8ChVbKrhFtig5QBV7iMaJrGtpHelkB3lsaKzadFBe58gmjfGXAOfI5FV0lYMH8wiqsxKQ1C9B0YTRXVy4w== + +"@rollup/rollup-freebsd-arm64@4.57.1": + version "4.57.1" + resolved "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.57.1.tgz" + integrity sha512-R+/WwhsjmwodAcz65guCGFRkMb4gKWTcIeLy60JJQbXrJ97BOXHxnkPFrP+YwFlaS0m+uWJTstrUA9o+UchFug== + +"@rollup/rollup-freebsd-x64@4.57.1": + version "4.57.1" + resolved "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.57.1.tgz" + integrity sha512-IEQTCHeiTOnAUC3IDQdzRAGj3jOAYNr9kBguI7MQAAZK3caezRrg0GxAb6Hchg4lxdZEI5Oq3iov/w/hnFWY9Q== + +"@rollup/rollup-linux-arm-gnueabihf@4.57.1": + version "4.57.1" + resolved "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.57.1.tgz" + integrity sha512-F8sWbhZ7tyuEfsmOxwc2giKDQzN3+kuBLPwwZGyVkLlKGdV1nvnNwYD0fKQ8+XS6hp9nY7B+ZeK01EBUE7aHaw== + +"@rollup/rollup-linux-arm-musleabihf@4.57.1": + version "4.57.1" + resolved "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.57.1.tgz" + integrity sha512-rGfNUfn0GIeXtBP1wL5MnzSj98+PZe/AXaGBCRmT0ts80lU5CATYGxXukeTX39XBKsxzFpEeK+Mrp9faXOlmrw== + +"@rollup/rollup-linux-arm64-gnu@4.57.1": + version "4.57.1" + resolved "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.57.1.tgz" + integrity sha512-MMtej3YHWeg/0klK2Qodf3yrNzz6CGjo2UntLvk2RSPlhzgLvYEB3frRvbEF2wRKh1Z2fDIg9KRPe1fawv7C+g== + +"@rollup/rollup-linux-arm64-musl@4.57.1": + version "4.57.1" + resolved "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.57.1.tgz" + integrity sha512-1a/qhaaOXhqXGpMFMET9VqwZakkljWHLmZOX48R0I/YLbhdxr1m4gtG1Hq7++VhVUmf+L3sTAf9op4JlhQ5u1Q== + +"@rollup/rollup-linux-loong64-gnu@4.57.1": + version "4.57.1" + resolved "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.57.1.tgz" + integrity sha512-QWO6RQTZ/cqYtJMtxhkRkidoNGXc7ERPbZN7dVW5SdURuLeVU7lwKMpo18XdcmpWYd0qsP1bwKPf7DNSUinhvA== + +"@rollup/rollup-linux-loong64-musl@4.57.1": + version "4.57.1" + resolved "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.57.1.tgz" + integrity sha512-xpObYIf+8gprgWaPP32xiN5RVTi/s5FCR+XMXSKmhfoJjrpRAjCuuqQXyxUa/eJTdAE6eJ+KDKaoEqjZQxh3Gw== + +"@rollup/rollup-linux-ppc64-gnu@4.57.1": + version "4.57.1" + resolved "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.57.1.tgz" + integrity sha512-4BrCgrpZo4hvzMDKRqEaW1zeecScDCR+2nZ86ATLhAoJ5FQ+lbHVD3ttKe74/c7tNT9c6F2viwB3ufwp01Oh2w== + +"@rollup/rollup-linux-ppc64-musl@4.57.1": + version "4.57.1" + resolved "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.57.1.tgz" + integrity sha512-NOlUuzesGauESAyEYFSe3QTUguL+lvrN1HtwEEsU2rOwdUDeTMJdO5dUYl/2hKf9jWydJrO9OL/XSSf65R5+Xw== + +"@rollup/rollup-linux-riscv64-gnu@4.57.1": + version "4.57.1" + resolved "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.57.1.tgz" + integrity sha512-ptA88htVp0AwUUqhVghwDIKlvJMD/fmL/wrQj99PRHFRAG6Z5nbWoWG4o81Nt9FT+IuqUQi+L31ZKAFeJ5Is+A== + +"@rollup/rollup-linux-riscv64-musl@4.57.1": + version "4.57.1" + resolved "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.57.1.tgz" + integrity sha512-S51t7aMMTNdmAMPpBg7OOsTdn4tySRQvklmL3RpDRyknk87+Sp3xaumlatU+ppQ+5raY7sSTcC2beGgvhENfuw== + +"@rollup/rollup-linux-s390x-gnu@4.57.1": + version "4.57.1" + resolved "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.57.1.tgz" + integrity sha512-Bl00OFnVFkL82FHbEqy3k5CUCKH6OEJL54KCyx2oqsmZnFTR8IoNqBF+mjQVcRCT5sB6yOvK8A37LNm/kPJiZg== + +"@rollup/rollup-linux-x64-gnu@4.57.1": + version "4.57.1" + resolved "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.57.1.tgz" + integrity sha512-ABca4ceT4N+Tv/GtotnWAeXZUZuM/9AQyCyKYyKnpk4yoA7QIAuBt6Hkgpw8kActYlew2mvckXkvx0FfoInnLg== + +"@rollup/rollup-linux-x64-musl@4.57.1": + version "4.57.1" + resolved "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.57.1.tgz" + integrity sha512-HFps0JeGtuOR2convgRRkHCekD7j+gdAuXM+/i6kGzQtFhlCtQkpwtNzkNj6QhCDp7DRJ7+qC/1Vg2jt5iSOFw== + +"@rollup/rollup-openbsd-x64@4.57.1": + version "4.57.1" + resolved "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.57.1.tgz" + integrity sha512-H+hXEv9gdVQuDTgnqD+SQffoWoc0Of59AStSzTEj/feWTBAnSfSD3+Dql1ZruJQxmykT/JVY0dE8Ka7z0DH1hw== + +"@rollup/rollup-openharmony-arm64@4.57.1": + version "4.57.1" + resolved "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.57.1.tgz" + integrity sha512-4wYoDpNg6o/oPximyc/NG+mYUejZrCU2q+2w6YZqrAs2UcNUChIZXjtafAiiZSUc7On8v5NyNj34Kzj/Ltk6dQ== + +"@rollup/rollup-win32-arm64-msvc@4.57.1": + version "4.57.1" + resolved "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.57.1.tgz" + integrity sha512-O54mtsV/6LW3P8qdTcamQmuC990HDfR71lo44oZMZlXU4tzLrbvTii87Ni9opq60ds0YzuAlEr/GNwuNluZyMQ== + +"@rollup/rollup-win32-ia32-msvc@4.57.1": + version "4.57.1" + resolved "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.57.1.tgz" + integrity sha512-P3dLS+IerxCT/7D2q2FYcRdWRl22dNbrbBEtxdWhXrfIMPP9lQhb5h4Du04mdl5Woq05jVCDPCMF7Ub0NAjIew== + +"@rollup/rollup-win32-x64-gnu@4.57.1": + version "4.57.1" + resolved "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.57.1.tgz" + integrity sha512-VMBH2eOOaKGtIJYleXsi2B8CPVADrh+TyNxJ4mWPnKfLB/DBUmzW+5m1xUrcwWoMfSLagIRpjUFeW5CO5hyciQ== + +"@rollup/rollup-win32-x64-msvc@4.57.1": + version "4.57.1" + resolved "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.57.1.tgz" + integrity sha512-mxRFDdHIWRxg3UfIIAwCm6NzvxG0jDX/wBN6KsQFTvKFqqg9vTrWUE68qEjHt19A5wwx5X5aUi2zuZT7YR0jrA== + +"@rushstack/eslint-patch@^1.3.3": + version "1.10.5" + resolved "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.10.5.tgz" + integrity sha512-kkKUDVlII2DQiKy7UstOR1ErJP8kUKAQ4oa+SQtM0K+lPdmmjj0YnnxBgtTVYH7mUKtbsxeFC9y0AmK7Yb78/A== + +"@sindresorhus/is@^4.0.0": + version "4.6.0" + resolved "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz" + integrity sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw== + +"@sindresorhus/is@^7.0.2": + version "7.2.0" + resolved "https://registry.npmjs.org/@sindresorhus/is/-/is-7.2.0.tgz" + integrity sha512-P1Cz1dWaFfR4IR+U13mqqiGsLFf1KbayybWwdd2vfctdV6hDpUkgCY0nKOLLTMSoRd/jJNjtbqzf13K8DCCXQw== + +"@sindresorhus/merge-streams@^4.0.0": + version "4.0.0" + resolved "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-4.0.0.tgz" + integrity sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ== + +"@speed-highlight/core@^1.2.9": + version "1.2.14" + resolved "https://registry.npmjs.org/@speed-highlight/core/-/core-1.2.14.tgz" + integrity sha512-G4ewlBNhUtlLvrJTb88d2mdy2KRijzs4UhnlrOSRT4bmjh/IqNElZa3zkrZ+TC47TwtlDWzVLFADljF1Ijp5hA== + +"@szmarczak/http-timer@^4.0.5": + version "4.0.6" + resolved "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz" + integrity sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w== + dependencies: + defer-to-connect "^2.0.0" + +"@trysound/sax@0.2.0": + version "0.2.0" + resolved "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz" + integrity sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA== + +"@tybys/wasm-util@^0.10.1": + version "0.10.1" + resolved "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.1.tgz" + integrity sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg== + dependencies: + tslib "^2.4.0" + +"@types/cacheable-request@^6.0.1": + version "6.0.3" + resolved "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz" + integrity sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw== + dependencies: + "@types/http-cache-semantics" "*" + "@types/keyv" "^3.1.4" + "@types/node" "*" + "@types/responselike" "^1.0.0" + +"@types/dom-speech-recognition@^0.0.1": + version "0.0.1" + resolved "https://registry.npmjs.org/@types/dom-speech-recognition/-/dom-speech-recognition-0.0.1.tgz" + integrity sha512-udCxb8DvjcDKfk1WTBzDsxFbLgYxmQGKrE/ricoMqHRNjSlSUCcamVTA5lIQqzY10mY5qCY0QDwBfFEwhfoDPw== + +"@types/estree@*", "@types/estree@^1.0.0", "@types/estree@^1.0.6", "@types/estree@1.0.8": + version "1.0.8" + resolved "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz" + integrity sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w== + +"@types/google.maps@^3.55.12", "@types/google.maps@^3.55.3": + version "3.58.1" + resolved "https://registry.npmjs.org/@types/google.maps/-/google.maps-3.58.1.tgz" + integrity sha512-X9QTSvGJ0nCfMzYOnaVs/k6/4L+7F5uCS+4iUmkLEls6J9S/Phv+m/i3mDeyc49ZBgwab3EFO1HEoBY7k98EGQ== + +"@types/hogan.js@^3.0.0": + version "3.0.5" + resolved "https://registry.npmjs.org/@types/hogan.js/-/hogan.js-3.0.5.tgz" + integrity sha512-/uRaY3HGPWyLqOyhgvW9Aa43BNnLZrNeQxl2p8wqId4UHMfPKolSB+U7BlZyO1ng7MkLnyEAItsBzCG0SDhqrA== + +"@types/http-cache-semantics@*": + version "4.0.4" + resolved "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz" + integrity sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA== + +"@types/json-schema@^7.0.12", "@types/json-schema@^7.0.15": + version "7.0.15" + resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz" + integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== + +"@types/keyv@^3.1.4": + version "3.1.4" + resolved "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz" + integrity sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg== + dependencies: + "@types/node" "*" + +"@types/node@*", "@types/node@^18.0.0 || ^20.0.0 || >=22.0.0", "@types/node@^20.19.0 || >=22.12.0", "@types/node@>=16": + version "25.2.0" + resolved "https://registry.npmjs.org/@types/node/-/node-25.2.0.tgz" + integrity sha512-DZ8VwRFUNzuqJ5khrvwMXHmvPe+zGayJhr2CDNiKB1WBE1ST8Djl00D0IC4vvNmHMdj6DlbYRIaFE7WHjlDl5w== + dependencies: + undici-types "~7.16.0" + +"@types/nodemailer@^6.4.14": + version "6.4.17" + resolved "https://registry.npmjs.org/@types/nodemailer/-/nodemailer-6.4.17.tgz" + integrity sha512-I9CCaIp6DTldEg7vyUTZi8+9Vo0hi1/T8gv3C89yk1rSAAzoKQ8H8ki/jBYJSFoH/BisgLP8tkZMlQ91CIquww== + dependencies: + "@types/node" "*" + +"@types/parse-path@^7.0.0": + version "7.0.3" + resolved "https://registry.npmjs.org/@types/parse-path/-/parse-path-7.0.3.tgz" + integrity sha512-LriObC2+KYZD3FzCrgWGv/qufdUy4eXrxcLgQMfYXgPbLIecKIsVBaQgUPmxSSLcjmYbDTQbMgr6qr6l/eb7Bg== + +"@types/qs@^6.5.3": + version "6.14.0" + resolved "https://registry.npmjs.org/@types/qs/-/qs-6.14.0.tgz" + integrity sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ== + +"@types/resolve@1.20.2": + version "1.20.2" + resolved "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz" + integrity sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q== + +"@types/responselike@^1.0.0": + version "1.0.3" + resolved "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.3.tgz" + integrity sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw== + dependencies: + "@types/node" "*" + +"@types/semver@^7.5.0": + version "7.5.8" + resolved "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz" + integrity sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ== + +"@types/smoothscroll-polyfill@^0.3.4": + version "0.3.4" + resolved "https://registry.npmjs.org/@types/smoothscroll-polyfill/-/smoothscroll-polyfill-0.3.4.tgz" + integrity sha512-w1krF+TJh7Azz/2/bEN1tmyKoNt3B6bLCn6SfJErzhKAr1w1b06ePx79NXA+3lTw+DbqXN12nk/Ce1UQDVY8yA== + +"@types/trusted-types@^2.0.7": + version "2.0.7" + resolved "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz" + integrity sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw== + +"@typescript-eslint/eslint-plugin@^6.5.0": + 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== + 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/parser@^6.0.0 || ^6.0.0-alpha", "@typescript-eslint/parser@^6.5.0": + version "6.21.0" + resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.21.0.tgz" + integrity sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ== + 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" + +"@typescript-eslint/scope-manager@6.21.0": + 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== + dependencies: + "@typescript-eslint/types" "6.21.0" + "@typescript-eslint/visitor-keys" "6.21.0" + +"@typescript-eslint/type-utils@6.21.0": + version "6.21.0" + resolved "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.21.0.tgz" + integrity sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag== + dependencies: + "@typescript-eslint/typescript-estree" "6.21.0" + "@typescript-eslint/utils" "6.21.0" + debug "^4.3.4" + ts-api-utils "^1.0.1" + +"@typescript-eslint/types@6.21.0": + version "6.21.0" + resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.21.0.tgz" + integrity sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg== + +"@typescript-eslint/typescript-estree@6.21.0": + 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== + 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/utils@6.21.0": + version "6.21.0" + resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.21.0.tgz" + integrity sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ== + 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" + +"@typescript-eslint/visitor-keys@6.21.0": + 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== + dependencies: + "@typescript-eslint/types" "6.21.0" + eslint-visitor-keys "^3.4.1" + +"@ubclaunchpad/vue-fathom@^2.0.0": + version "2.0.0" + resolved "https://registry.npmjs.org/@ubclaunchpad/vue-fathom/-/vue-fathom-2.0.0.tgz" + integrity sha512-QbO0O46a2uVpGhufDyqUArOUR5mgvbpS7p0Ug01hNtXK0Qhhy1Mh1Kn6xaVpkd0+8Vp9RsvJAMoufakpTT4iRQ== + dependencies: + fathom-client "^3.0.0" + vue "^3.0.0" + +"@ungap/structured-clone@^1.2.0": + version "1.2.1" + resolved "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.1.tgz" + integrity sha512-fEzPV3hSkSMltkw152tJKNARhOupqbH96MZWyRjNaYZOMIzbrTeQDG+MTc6Mr2pgzFQzFxAfmhGDNP5QK++2ZA== + +"@unhead/vue@^2.1.2": + version "2.1.2" + resolved "https://registry.npmjs.org/@unhead/vue/-/vue-2.1.2.tgz" + integrity sha512-w5yxH/fkkLWAFAOnMSIbvAikNHYn6pgC7zGF/BasXf+K3CO1cYIPFehYAk5jpcsbiNPMc3goyyw1prGLoyD14g== + dependencies: + hookable "^6.0.1" + unhead "2.1.2" + +"@vercel/nft@^1.2.0": + version "1.3.0" + resolved "https://registry.npmjs.org/@vercel/nft/-/nft-1.3.0.tgz" + integrity sha512-i4EYGkCsIjzu4vorDUbqglZc5eFtQI2syHb++9ZUDm6TU4edVywGpVnYDein35x9sevONOn9/UabfQXuNXtuzQ== + dependencies: + "@mapbox/node-pre-gyp" "^2.0.0" + "@rollup/pluginutils" "^5.1.3" + acorn "^8.6.0" + acorn-import-attributes "^1.9.5" + async-sema "^3.1.1" + bindings "^1.4.0" + estree-walker "2.0.2" + glob "^13.0.0" + graceful-fs "^4.2.9" + node-gyp-build "^4.2.2" + picomatch "^4.0.2" + resolve-from "^5.0.0" + +"@vitejs/plugin-vue-jsx@^5.1.3": + version "5.1.4" + resolved "https://registry.npmjs.org/@vitejs/plugin-vue-jsx/-/plugin-vue-jsx-5.1.4.tgz" + integrity sha512-70LmoVk9riR7qc4W2CpjsbNMWTPnuZb9dpFKX1emru0yP57nsc9k8nhLA6U93ngQapv5VDIUq2JatNfLbBIkrA== + dependencies: + "@babel/core" "^7.29.0" + "@babel/plugin-syntax-typescript" "^7.28.6" + "@babel/plugin-transform-typescript" "^7.28.6" + "@rolldown/pluginutils" "^1.0.0-rc.2" + "@vue/babel-plugin-jsx" "^2.0.1" + +"@vitejs/plugin-vue@^6.0.3": + version "6.0.4" + resolved "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-6.0.4.tgz" + integrity sha512-uM5iXipgYIn13UUQCZNdWkYk+sysBeA97d5mHsAoAt1u/wpN3+zxOmsVJWosuzX+IMGRzeYUNytztrYznboIkQ== + dependencies: + "@rolldown/pluginutils" "1.0.0-rc.2" + +"@volar/language-core@2.4.27": + version "2.4.27" + resolved "https://registry.npmjs.org/@volar/language-core/-/language-core-2.4.27.tgz" + integrity sha512-DjmjBWZ4tJKxfNC1F6HyYERNHPYS7L7OPFyCrestykNdUZMFYzI9WTyvwPcaNaHlrEUwESHYsfEw3isInncZxQ== + dependencies: + "@volar/source-map" "2.4.27" + +"@volar/source-map@2.4.27": + version "2.4.27" + resolved "https://registry.npmjs.org/@volar/source-map/-/source-map-2.4.27.tgz" + integrity sha512-ynlcBReMgOZj2i6po+qVswtDUeeBRCTgDurjMGShbm8WYZgJ0PA4RmtebBJ0BCYol1qPv3GQF6jK7C9qoVc7lg== + +"@vue-macros/common@^3.1.1": + version "3.1.2" + resolved "https://registry.npmjs.org/@vue-macros/common/-/common-3.1.2.tgz" + integrity sha512-h9t4ArDdniO9ekYHAD95t9AZcAbb19lEGK+26iAjUODOIJKmObDNBSe4+6ELQAA3vtYiFPPBtHh7+cQCKi3Dng== + dependencies: + "@vue/compiler-sfc" "^3.5.22" + ast-kit "^2.1.2" + local-pkg "^1.1.2" + magic-string-ast "^1.0.2" + unplugin-utils "^0.3.0" + +"@vue/babel-helper-vue-transform-on@2.0.1": + version "2.0.1" + resolved "https://registry.npmjs.org/@vue/babel-helper-vue-transform-on/-/babel-helper-vue-transform-on-2.0.1.tgz" + integrity sha512-uZ66EaFbnnZSYqYEyplWvn46GhZ1KuYSThdT68p+am7MgBNbQ3hphTL9L+xSIsWkdktwhPYLwPgVWqo96jDdRA== + +"@vue/babel-plugin-jsx@^2.0.1": + version "2.0.1" + resolved "https://registry.npmjs.org/@vue/babel-plugin-jsx/-/babel-plugin-jsx-2.0.1.tgz" + integrity sha512-a8CaLQjD/s4PVdhrLD/zT574ZNPnZBOY+IhdtKWRB4HRZ0I2tXBi5ne7d9eCfaYwp5gU5+4KIyFTV1W1YL9xZA== + dependencies: + "@babel/helper-module-imports" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/plugin-syntax-jsx" "^7.27.1" + "@babel/template" "^7.27.2" + "@babel/traverse" "^7.28.4" + "@babel/types" "^7.28.4" + "@vue/babel-helper-vue-transform-on" "2.0.1" + "@vue/babel-plugin-resolve-type" "2.0.1" + "@vue/shared" "^3.5.22" + +"@vue/babel-plugin-resolve-type@2.0.1": + version "2.0.1" + resolved "https://registry.npmjs.org/@vue/babel-plugin-resolve-type/-/babel-plugin-resolve-type-2.0.1.tgz" + integrity sha512-ybwgIuRGRRBhOU37GImDoWQoz+TlSqap65qVI6iwg/J7FfLTLmMf97TS7xQH9I7Qtr/gp161kYVdhr1ZMraSYQ== + dependencies: + "@babel/code-frame" "^7.27.1" + "@babel/helper-module-imports" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/parser" "^7.28.4" + "@vue/compiler-sfc" "^3.5.22" + +"@vue/compiler-core@3.5.13": + version "3.5.13" + resolved "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.13.tgz" + integrity sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q== + dependencies: + "@babel/parser" "^7.25.3" + "@vue/shared" "3.5.13" + entities "^4.5.0" + estree-walker "^2.0.2" + source-map-js "^1.2.0" + +"@vue/compiler-core@3.5.27": + version "3.5.27" + resolved "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.27.tgz" + integrity sha512-gnSBQjZA+//qDZen+6a2EdHqJ68Z7uybrMf3SPjEGgG4dicklwDVmMC1AeIHxtLVPT7sn6sH1KOO+tS6gwOUeQ== + dependencies: + "@babel/parser" "^7.28.5" + "@vue/shared" "3.5.27" + entities "^7.0.0" + estree-walker "^2.0.2" + source-map-js "^1.2.1" + +"@vue/compiler-dom@^3.5.0", "@vue/compiler-dom@3.5.13": + version "3.5.13" + resolved "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.13.tgz" + integrity sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA== + dependencies: + "@vue/compiler-core" "3.5.13" + "@vue/shared" "3.5.13" + +"@vue/compiler-dom@3.5.27": + version "3.5.27" + resolved "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.27.tgz" + integrity sha512-oAFea8dZgCtVVVTEC7fv3T5CbZW9BxpFzGGxC79xakTr6ooeEqmRuvQydIiDAkglZEAd09LgVf1RoDnL54fu5w== + dependencies: + "@vue/compiler-core" "3.5.27" + "@vue/shared" "3.5.27" + +"@vue/compiler-sfc@^3.4.19", "@vue/compiler-sfc@2.7.x || 3.x", "@vue/compiler-sfc@3.5.13": + version "3.5.13" + resolved "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.13.tgz" + integrity sha512-6VdaljMpD82w6c2749Zhf5T9u5uLBWKnVue6XWxprDobftnletJ8+oel7sexFfM3qIxNmVE7LSFGTpv6obNyaQ== + dependencies: + "@babel/parser" "^7.25.3" + "@vue/compiler-core" "3.5.13" + "@vue/compiler-dom" "3.5.13" + "@vue/compiler-ssr" "3.5.13" + "@vue/shared" "3.5.13" + estree-walker "^2.0.2" + magic-string "^0.30.11" + postcss "^8.4.48" + source-map-js "^1.2.0" + +"@vue/compiler-sfc@^3.5.17": + version "3.5.27" + resolved "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.27.tgz" + integrity sha512-sHZu9QyDPeDmN/MRoshhggVOWE5WlGFStKFwu8G52swATgSny27hJRWteKDSUUzUH+wp+bmeNbhJnEAel/auUQ== + dependencies: + "@babel/parser" "^7.28.5" + "@vue/compiler-core" "3.5.27" + "@vue/compiler-dom" "3.5.27" + "@vue/compiler-ssr" "3.5.27" + "@vue/shared" "3.5.27" + estree-walker "^2.0.2" + magic-string "^0.30.21" + postcss "^8.5.6" + source-map-js "^1.2.1" + +"@vue/compiler-sfc@^3.5.22": + version "3.5.27" + resolved "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.27.tgz" + integrity sha512-sHZu9QyDPeDmN/MRoshhggVOWE5WlGFStKFwu8G52swATgSny27hJRWteKDSUUzUH+wp+bmeNbhJnEAel/auUQ== + dependencies: + "@babel/parser" "^7.28.5" + "@vue/compiler-core" "3.5.27" + "@vue/compiler-dom" "3.5.27" + "@vue/compiler-ssr" "3.5.27" + "@vue/shared" "3.5.27" + estree-walker "^2.0.2" + magic-string "^0.30.21" + postcss "^8.5.6" + source-map-js "^1.2.1" + +"@vue/compiler-ssr@3.5.13": + version "3.5.13" + resolved "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.13.tgz" + integrity sha512-wMH6vrYHxQl/IybKJagqbquvxpWCuVYpoUJfCqFZwa/JY1GdATAQ+TgVtgrwwMZ0D07QhA99rs/EAAWfvG6KpA== + dependencies: + "@vue/compiler-dom" "3.5.13" + "@vue/shared" "3.5.13" + +"@vue/compiler-ssr@3.5.27": + version "3.5.27" + resolved "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.27.tgz" + integrity sha512-Sj7h+JHt512fV1cTxKlYhg7qxBvack+BGncSpH+8vnN+KN95iPIcqB5rsbblX40XorP+ilO7VIKlkuu3Xq2vjw== + dependencies: + "@vue/compiler-dom" "3.5.27" + "@vue/shared" "3.5.27" + +"@vue/devtools-api@^6.6.3", "@vue/devtools-api@^6.6.4": + version "6.6.4" + resolved "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.6.4.tgz" + integrity sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g== + +"@vue/devtools-core@^8.0.5": + version "8.0.5" + resolved "https://registry.npmjs.org/@vue/devtools-core/-/devtools-core-8.0.5.tgz" + integrity sha512-dpCw8nl0GDBuiL9SaY0mtDxoGIEmU38w+TQiYEPOLhW03VDC0lfNMYXS/qhl4I0YlysGp04NLY4UNn6xgD0VIQ== + dependencies: + "@vue/devtools-kit" "^8.0.5" + "@vue/devtools-shared" "^8.0.5" + mitt "^3.0.1" + nanoid "^5.1.5" + pathe "^2.0.3" + vite-hot-client "^2.1.0" + +"@vue/devtools-kit@^8.0.5": + version "8.0.5" + resolved "https://registry.npmjs.org/@vue/devtools-kit/-/devtools-kit-8.0.5.tgz" + integrity sha512-q2VV6x1U3KJMTQPUlRMyWEKVbcHuxhqJdSr6Jtjz5uAThAIrfJ6WVZdGZm5cuO63ZnSUz0RCsVwiUUb0mDV0Yg== + dependencies: + "@vue/devtools-shared" "^8.0.5" + birpc "^2.6.1" + hookable "^5.5.3" + mitt "^3.0.1" + perfect-debounce "^2.0.0" + speakingurl "^14.0.1" + superjson "^2.2.2" + +"@vue/devtools-shared@^8.0.5": + version "8.0.5" + resolved "https://registry.npmjs.org/@vue/devtools-shared/-/devtools-shared-8.0.5.tgz" + integrity sha512-bRLn6/spxpmgLk+iwOrR29KrYnJjG9DGpHGkDFG82UM21ZpJ39ztUT9OXX3g+usW7/b2z+h46I9ZiYyB07XMXg== + dependencies: + rfdc "^1.4.1" + +"@vue/language-core@^3.2.1": + version "3.2.4" + resolved "https://registry.npmjs.org/@vue/language-core/-/language-core-3.2.4.tgz" + integrity sha512-bqBGuSG4KZM45KKTXzGtoCl9cWju5jsaBKaJJe3h5hRAAWpZUuj5G+L+eI01sPIkm4H6setKRlw7E85wLdDNew== + dependencies: + "@volar/language-core" "2.4.27" + "@vue/compiler-dom" "^3.5.0" + "@vue/shared" "^3.5.0" + alien-signals "^3.0.0" + muggle-string "^0.4.1" + path-browserify "^1.0.1" + picomatch "^4.0.2" + +"@vue/reactivity@3.5.13": + version "3.5.13" + resolved "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.13.tgz" + integrity sha512-NaCwtw8o48B9I6L1zl2p41OHo/2Z4wqYGGIK1Khu5T7yxrn+ATOixn/Udn2m+6kZKB/J7cuT9DbWWhRxqixACg== + dependencies: + "@vue/shared" "3.5.13" + +"@vue/runtime-core@3.5.13": + version "3.5.13" + resolved "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.13.tgz" + integrity sha512-Fj4YRQ3Az0WTZw1sFe+QDb0aXCerigEpw418pw1HBUKFtnQHWzwojaukAs2X/c9DQz4MQ4bsXTGlcpGxU/RCIw== + dependencies: + "@vue/reactivity" "3.5.13" + "@vue/shared" "3.5.13" + +"@vue/runtime-dom@3.5.13": + version "3.5.13" + resolved "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.13.tgz" + integrity sha512-dLaj94s93NYLqjLiyFzVs9X6dWhTdAlEAciC3Moq7gzAc13VJUdCnjjRurNM6uTLFATRHexHCTu/Xp3eW6yoog== + dependencies: + "@vue/reactivity" "3.5.13" + "@vue/runtime-core" "3.5.13" + "@vue/shared" "3.5.13" + csstype "^3.1.3" + +"@vue/server-renderer@^3.1.2", "@vue/server-renderer@3.5.13": + version "3.5.13" + resolved "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.13.tgz" + integrity sha512-wAi4IRJV/2SAW3htkTlB+dHeRmpTiVIK1OGLWV1yeStVSebSQQOwGwIq0D3ZIoBj2C2qpgz5+vX9iEBkTdk5YA== + dependencies: + "@vue/compiler-ssr" "3.5.13" + "@vue/shared" "3.5.13" + +"@vue/shared@^3.5.0", "@vue/shared@3.5.13": + version "3.5.13" + resolved "https://registry.npmjs.org/@vue/shared/-/shared-3.5.13.tgz" + integrity sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ== + +"@vue/shared@^3.5.22": + version "3.5.27" + resolved "https://registry.npmjs.org/@vue/shared/-/shared-3.5.27.tgz" + integrity sha512-dXr/3CgqXsJkZ0n9F3I4elY8wM9jMJpP3pvRG52r6m0tu/MsAFIe6JpXVGeNMd/D9F4hQynWT8Rfuj0bdm9kFQ== + +"@vue/shared@^3.5.27", "@vue/shared@3.5.27": + version "3.5.27" + resolved "https://registry.npmjs.org/@vue/shared/-/shared-3.5.27.tgz" + integrity sha512-dXr/3CgqXsJkZ0n9F3I4elY8wM9jMJpP3pvRG52r6m0tu/MsAFIe6JpXVGeNMd/D9F4hQynWT8Rfuj0bdm9kFQ== + +abbrev@^3.0.0: + version "3.0.1" + resolved "https://registry.npmjs.org/abbrev/-/abbrev-3.0.1.tgz" + integrity sha512-AO2ac6pjRB3SJmGJo+v5/aK6Omggp6fsLrs6wN9bd35ulu4cCwaAU9+7ZhXjeqHVkaHThLuzH0nZr0YpCDhygg== + +abbrev@1: + version "1.1.1" + resolved "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz" + integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== + +abort-controller@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz" + integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== + dependencies: + event-target-shim "^5.0.0" + +accepts@^1.3.5: + 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== + dependencies: + mime-types "~2.1.34" + negotiator "0.6.3" + +acorn-import-attributes@^1.9.5: + 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== + +acorn-jsx@^5.3.2: + version "5.3.2" + resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz" + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== + +"acorn@^6.0.0 || ^7.0.0 || ^8.0.0", acorn@^8, acorn@^8.15.0, acorn@^8.6.0, acorn@^8.9.0: + version "8.15.0" + resolved "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz" + integrity sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg== + +agent-base@^7.1.0, agent-base@^7.1.2: + version "7.1.3" + resolved "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz" + integrity sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw== + +ajv@^6.12.4: + version "6.12.6" + resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + 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" + +algoliasearch-helper@3.27.0: + version "3.27.0" + resolved "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.27.0.tgz" + integrity sha512-eNYchRerbsvk2doHOMfdS1/B6Tm70oGtu8mzQlrNzbCeQ8p1MjCW8t/BL6iZ5PD+cL5NNMgTMyMnmiXZ1sgmNw== + dependencies: + "@algolia/events" "^4.0.1" + +algoliasearch@^4.11.0, algoliasearch@^4.12.0, "algoliasearch@>= 3.1 < 6", "algoliasearch@>= 3.32.0 < 6": + version "4.24.0" + resolved "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.24.0.tgz" + integrity sha512-bf0QV/9jVejssFBmz2HQLxUadxk574t4iwjCKp5E7NBzwKkrDEhKPISIIjAU/p6K5qDx3qoeh4+26zWN1jmw3g== + dependencies: + "@algolia/cache-browser-local-storage" "4.24.0" + "@algolia/cache-common" "4.24.0" + "@algolia/cache-in-memory" "4.24.0" + "@algolia/client-account" "4.24.0" + "@algolia/client-analytics" "4.24.0" + "@algolia/client-common" "4.24.0" + "@algolia/client-personalization" "4.24.0" + "@algolia/client-search" "4.24.0" + "@algolia/logger-common" "4.24.0" + "@algolia/logger-console" "4.24.0" + "@algolia/recommend" "4.24.0" + "@algolia/requester-browser-xhr" "4.24.0" + "@algolia/requester-common" "4.24.0" + "@algolia/requester-node-http" "4.24.0" + "@algolia/transporter" "4.24.0" + +alien-signals@^3.0.0: + version "3.1.2" + resolved "https://registry.npmjs.org/alien-signals/-/alien-signals-3.1.2.tgz" + integrity sha512-d9dYqZTS90WLiU0I5c6DHj/HcKkF8ZyGN3G5x8wSbslulz70KOxaqCT0hQCo9KOyhVqzqGojvNdJXoTumZOtcw== + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-regex@^6.0.1: + version "6.1.0" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz" + integrity sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA== + +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +ansi-styles@^6.1.0: + version "6.2.1" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz" + integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== + +ansis@^4.1.0: + version "4.2.0" + resolved "https://registry.npmjs.org/ansis/-/ansis-4.2.0.tgz" + integrity sha512-HqZ5rWlFjGiV0tDm3UxxgNRqsOTniqoKZu0pIAfh7TZQMGuZK+hH0drySty0si0QXj1ieop4+SkSfPZBPPkHig== + +any-promise@^1.0.0: + version "1.3.0" + resolved "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz" + integrity sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A== + +anymatch@^3.1.3, anymatch@~3.1.2: + version "3.1.3" + resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz" + integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +archiver-utils@^5.0.0, archiver-utils@^5.0.2: + version "5.0.2" + resolved "https://registry.npmjs.org/archiver-utils/-/archiver-utils-5.0.2.tgz" + integrity sha512-wuLJMmIBQYCsGZgYLTy5FIB2pF6Lfb6cXMSF8Qywwk3t20zWnAi7zLcQFdKQmIB8wyZpY5ER38x08GbwtR2cLA== + dependencies: + glob "^10.0.0" + graceful-fs "^4.2.0" + is-stream "^2.0.1" + lazystream "^1.0.0" + lodash "^4.17.15" + normalize-path "^3.0.0" + readable-stream "^4.0.0" + +archiver@^7.0.1: + version "7.0.1" + resolved "https://registry.npmjs.org/archiver/-/archiver-7.0.1.tgz" + integrity sha512-ZcbTaIqJOfCc03QwD468Unz/5Ir8ATtvAHsK+FdXbDIbGfihqh9mrvdcYunQzqn4HrvWWaFyaxJhGZagaJJpPQ== + dependencies: + archiver-utils "^5.0.2" + async "^3.2.4" + buffer-crc32 "^1.0.0" + readable-stream "^4.0.0" + readdir-glob "^1.1.2" + tar-stream "^3.0.0" + zip-stream "^6.0.1" + +arg@^5.0.2: + version "5.0.2" + resolved "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz" + integrity sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg== + +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + +ast-kit@^2.1.2, ast-kit@^2.1.3: + version "2.2.0" + resolved "https://registry.npmjs.org/ast-kit/-/ast-kit-2.2.0.tgz" + integrity sha512-m1Q/RaVOnTp9JxPX+F+Zn7IcLYMzM8kZofDImfsKZd8MbR+ikdOzTeztStWqfrqIxZnYWryyI9ePm3NGjnZgGw== + dependencies: + "@babel/parser" "^7.28.5" + pathe "^2.0.3" + +ast-walker-scope@^0.8.3: + version "0.8.3" + resolved "https://registry.npmjs.org/ast-walker-scope/-/ast-walker-scope-0.8.3.tgz" + integrity sha512-cbdCP0PGOBq0ASG+sjnKIoYkWMKhhz+F/h9pRexUdX2Hd38+WOlBkRKlqkGOSm0YQpcFMQBJeK4WspUAkwsEdg== + dependencies: + "@babel/parser" "^7.28.4" + ast-kit "^2.1.3" + +async-sema@^3.1.1: + version "3.1.1" + resolved "https://registry.npmjs.org/async-sema/-/async-sema-3.1.1.tgz" + integrity sha512-tLRNUXati5MFePdAk8dw7Qt7DpxPB60ofAgn8WRhW6a2rcimZnYBP9oxHiv0OHy+Wz7kPMG+t4LGdt31+4EmGg== + +async@^2.6.4: + version "2.6.4" + resolved "https://registry.npmjs.org/async/-/async-2.6.4.tgz" + integrity sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA== + dependencies: + lodash "^4.17.14" + +async@^3.2.4: + version "3.2.6" + resolved "https://registry.npmjs.org/async/-/async-3.2.6.tgz" + integrity sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA== + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz" + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== + +at-least-node@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz" + integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== + +autoprefixer@^10.4.20, autoprefixer@^10.4.23: + version "10.4.24" + resolved "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.24.tgz" + integrity sha512-uHZg7N9ULTVbutaIsDRoUkoS8/h3bdsmVJYZ5l3wv8Cp/6UIIoRDm90hZ+BwxUj/hGBEzLxdHNSKuFpn8WOyZw== + dependencies: + browserslist "^4.28.1" + caniuse-lite "^1.0.30001766" + fraction.js "^5.3.4" + picocolors "^1.1.1" + postcss-value-parser "^4.2.0" + +axios@^1.3.4: + version "1.13.4" + resolved "https://registry.npmjs.org/axios/-/axios-1.13.4.tgz" + integrity sha512-1wVkUaAO6WyaYtCkcYCOx12ZgpGf9Zif+qXa4n+oYzK558YryKqiL6UWwd5DqiH3VRW0GYhTZQ/vlgJrCoNQlg== + dependencies: + follow-redirects "^1.15.6" + form-data "^4.0.4" + proxy-from-env "^1.1.0" + +b4a@^1.6.4: + version "1.6.7" + resolved "https://registry.npmjs.org/b4a/-/b4a-1.6.7.tgz" + integrity sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg== + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +bare-events@*, bare-events@^2.0.0, bare-events@^2.2.0: + version "2.5.4" + resolved "https://registry.npmjs.org/bare-events/-/bare-events-2.5.4.tgz" + integrity sha512-+gFfDkR8pj4/TrWCGUGWmJIkBwuxPS5F+a5yWjOHQt2hHvNZd5YLzadjmDUtFmMM4y429bnKLa8bYBMHcYdnQA== + +bare-fs@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/bare-fs/-/bare-fs-4.0.1.tgz" + integrity sha512-ilQs4fm/l9eMfWY2dY0WCIUplSUp7U0CT1vrqMg1MUdeZl4fypu5UP0XcDBK5WBQPJAKP1b7XEodISmekH/CEg== + dependencies: + bare-events "^2.0.0" + bare-path "^3.0.0" + bare-stream "^2.0.0" + +bare-os@^3.0.1: + version "3.4.0" + resolved "https://registry.npmjs.org/bare-os/-/bare-os-3.4.0.tgz" + integrity sha512-9Ous7UlnKbe3fMi7Y+qh0DwAup6A1JkYgPnjvMDNOlmnxNRQvQ/7Nst+OnUQKzk0iAT0m9BisbDVp9gCv8+ETA== + +bare-path@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/bare-path/-/bare-path-3.0.0.tgz" + integrity sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw== + dependencies: + bare-os "^3.0.1" + +bare-stream@^2.0.0: + version "2.6.4" + resolved "https://registry.npmjs.org/bare-stream/-/bare-stream-2.6.4.tgz" + integrity sha512-G6i3A74FjNq4nVrrSTUz5h3vgXzBJnjmWAVlBWaZETkgu+LgKd7AiyOml3EDJY1AHlIbBHKDXE+TUT53Ff8OaA== + dependencies: + streamx "^2.21.0" + +base64-js@^1.3.1: + version "1.5.1" + resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + +baseline-browser-mapping@^2.9.0: + version "2.9.19" + resolved "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.19.tgz" + integrity sha512-ipDqC8FrAl/76p2SSWKSI+H9tFwm7vYqXQrItCuiVPt26Km0jS+NzSsBWAaBusvSbQcfJG+JitdMm+wZAgTYqg== + +binary-extensions@^2.0.0: + version "2.3.0" + resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz" + integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== + +bindings@^1.4.0: + version "1.5.0" + resolved "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz" + integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== + dependencies: + file-uri-to-path "1.0.0" + +birpc@^2.4.0, birpc@^2.6.1, birpc@^2.8.0: + version "2.9.0" + resolved "https://registry.npmjs.org/birpc/-/birpc-2.9.0.tgz" + integrity sha512-KrayHS5pBi69Xi9JmvoqrIgYGDkD6mcSe/i6YKi3w5kekCLzrX4+nawcXqrj2tIp50Kw/mT/s3p+GVK0A0sKxw== + +bl@^4.0.3: + version "4.1.0" + resolved "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz" + integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== + dependencies: + buffer "^5.5.0" + inherits "^2.0.4" + readable-stream "^3.4.0" + +boolbase@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz" + integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== + +brace-expansion@^1.1.7: + version "1.1.12" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz" + integrity sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +brace-expansion@^2.0.1: + version "2.0.2" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz" + integrity sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ== + dependencies: + balanced-match "^1.0.0" + +braces@^3.0.3, braces@~3.0.2: + version "3.0.3" + resolved "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz" + integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== + dependencies: + fill-range "^7.1.1" + +browserslist@^4.0.0, browserslist@^4.24.0, browserslist@^4.27.0, browserslist@^4.28.1, "browserslist@>= 4.21.0": + version "4.28.1" + resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz" + integrity sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA== + 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" + +buffer-crc32@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-1.0.0.tgz" + integrity sha512-Db1SbgBS/fg/392AblrMJk97KggmvYhr4pB5ZIMTWtaivCPMWLkmb7m21cJvpvgK+J3nsU2CmmixNBZx4vFj/w== + +buffer-from@^1.0.0: + version "1.1.2" + resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz" + integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== + +buffer@^5.5.0: + version "5.7.1" + resolved "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz" + integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.1.13" + +buffer@^6.0.3: + version "6.0.3" + resolved "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz" + integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.2.1" + +bundle-name@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz" + integrity sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q== + dependencies: + run-applescript "^7.0.0" + +c12@^3.0.2, c12@^3.3.3: + version "3.3.3" + resolved "https://registry.npmjs.org/c12/-/c12-3.3.3.tgz" + integrity sha512-750hTRvgBy5kcMNPdh95Qo+XUBeGo8C7nsKSmedDmaQI+E0r82DwHeM6vBewDe4rGFbnxoa4V9pw+sPh5+Iz8Q== + dependencies: + chokidar "^5.0.0" + confbox "^0.2.2" + defu "^6.1.4" + dotenv "^17.2.3" + exsolve "^1.0.8" + giget "^2.0.0" + jiti "^2.6.1" + ohash "^2.0.11" + pathe "^2.0.3" + perfect-debounce "^2.0.0" + pkg-types "^2.3.0" + rc9 "^2.1.2" + +cac@^6.7.14: + version "6.7.14" + resolved "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz" + integrity sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ== + +cache-content-type@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/cache-content-type/-/cache-content-type-1.0.1.tgz" + integrity sha512-IKufZ1o4Ut42YUrZSo8+qnMTrFuKkvyoLXUywKz9GJ5BrhOFGhLdkx9sG4KAnVvbY6kEcSFjLQul+DVmBm2bgA== + dependencies: + mime-types "^2.1.18" + ylru "^1.2.0" + +cacheable-lookup@^5.0.3: + version "5.0.4" + resolved "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz" + integrity sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA== + +cacheable-request@^7.0.2: + version "7.0.4" + resolved "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.4.tgz" + integrity sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg== + dependencies: + clone-response "^1.0.2" + get-stream "^5.1.0" + http-cache-semantics "^4.0.0" + keyv "^4.0.0" + lowercase-keys "^2.0.0" + normalize-url "^6.0.1" + responselike "^2.0.0" + +call-bind-apply-helpers@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.1.tgz" + integrity sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g== + dependencies: + es-errors "^1.3.0" + function-bind "^1.1.2" + +call-bound@^1.0.2, call-bound@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/call-bound/-/call-bound-1.0.3.tgz" + integrity sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA== + dependencies: + call-bind-apply-helpers "^1.0.1" + get-intrinsic "^1.2.6" + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +camelcase-css@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz" + integrity sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA== + +caniuse-api@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz" + integrity sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw== + dependencies: + browserslist "^4.0.0" + caniuse-lite "^1.0.0" + lodash.memoize "^4.1.2" + lodash.uniq "^4.5.0" + +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001759, caniuse-lite@^1.0.30001766: + version "1.0.30001767" + resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001767.tgz" + integrity sha512-34+zUAMhSH+r+9eKmYG+k2Rpt8XttfE4yXAjoZvkAPs15xcYQhyBYdalJ65BzivAvGRMViEjy6oKr/S91loekQ== + +chalk@^4.0.0, chalk@^4.1.2: + version "4.1.2" + resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chokidar@^3.6.0: + version "3.6.0" + resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz" + integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== + 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" + optionalDependencies: + fsevents "~2.3.2" + +chokidar@^4.0.3: + version "4.0.3" + resolved "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz" + integrity sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA== + dependencies: + readdirp "^4.0.1" + +chokidar@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/chokidar/-/chokidar-5.0.0.tgz" + integrity sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw== + dependencies: + readdirp "^5.0.0" + +chownr@^1.1.1: + version "1.1.4" + resolved "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz" + integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== + +chownr@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz" + integrity sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g== + +citty@^0.1.5, citty@^0.1.6: + version "0.1.6" + resolved "https://registry.npmjs.org/citty/-/citty-0.1.6.tgz" + integrity sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ== + dependencies: + consola "^3.2.3" + +citty@^0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/citty/-/citty-0.2.0.tgz" + integrity sha512-8csy5IBFI2ex2hTVpaHN2j+LNE199AgiI7y4dMintrr8i0lQiFn+0AWMZrWdHKIgMOer65f8IThysYhoReqjWA== + +clipboardy@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/clipboardy/-/clipboardy-4.0.0.tgz" + integrity sha512-5mOlNS0mhX0707P2I0aZ2V/cmHUEO/fL7VFLqszkhUsxt7RwnmrInf/eEQKlf5GzvYeHIjT+Ov1HRfNmymlG0w== + dependencies: + execa "^8.0.1" + is-wsl "^3.1.0" + is64bit "^2.0.0" + +cliui@^8.0.1: + 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== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.1" + wrap-ansi "^7.0.0" + +clone-response@^1.0.2: + version "1.0.3" + resolved "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz" + integrity sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA== + dependencies: + mimic-response "^1.0.0" + +cluster-key-slot@^1.1.0: + version "1.1.2" + resolved "https://registry.npmjs.org/cluster-key-slot/-/cluster-key-slot-1.1.2.tgz" + integrity sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA== + +co@^4.6.0: + version "4.6.0" + resolved "https://registry.npmjs.org/co/-/co-4.6.0.tgz" + integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ== + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@^1.0.0, color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +color-string@^1.9.0: + version "1.9.1" + resolved "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz" + integrity sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg== + dependencies: + color-name "^1.0.0" + simple-swizzle "^0.2.2" + +color@^4.2.3: + version "4.2.3" + resolved "https://registry.npmjs.org/color/-/color-4.2.3.tgz" + integrity sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A== + dependencies: + color-convert "^2.0.1" + color-string "^1.9.0" + +colord@^2.9.3: + version "2.9.3" + resolved "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz" + integrity sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw== + +combined-stream@^1.0.8: + version "1.0.8" + resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +commander@^11.1.0: + version "11.1.0" + resolved "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz" + integrity sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ== + +commander@^13.1.0: + version "13.1.0" + resolved "https://registry.npmjs.org/commander/-/commander-13.1.0.tgz" + integrity sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw== + +commander@^2.20.0: + 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== + +commander@^2.20.3: + 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== + +commander@^4.0.0: + version "4.1.1" + resolved "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz" + integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== + +commander@^6.0.0: + version "6.2.1" + resolved "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz" + integrity sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA== + +commander@^7.2.0: + version "7.2.0" + resolved "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz" + integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== + +commondir@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz" + integrity sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg== + +compatx@^0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/compatx/-/compatx-0.2.0.tgz" + integrity sha512-6gLRNt4ygsi5NyMVhceOCFv14CIdDFN7fQjX1U4+47qVE/+kjPoXMK65KWK+dWxmFzMTuKazoQ9sch6pM0p5oA== + +compress-commons@^6.0.2: + version "6.0.2" + resolved "https://registry.npmjs.org/compress-commons/-/compress-commons-6.0.2.tgz" + integrity sha512-6FqVXeETqWPoGcfzrXb37E50NP0LXT8kAMu5ooZayhWWdgEY4lBEEcbQNXtkuKQsGduxiIcI4gOTsxTmuq/bSg== + dependencies: + crc-32 "^1.2.0" + crc32-stream "^6.0.0" + is-stream "^2.0.1" + normalize-path "^3.0.0" + readable-stream "^4.0.0" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +confbox@^0.1.8: + version "0.1.8" + resolved "https://registry.npmjs.org/confbox/-/confbox-0.1.8.tgz" + integrity sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w== + +confbox@^0.2.2: + version "0.2.2" + resolved "https://registry.npmjs.org/confbox/-/confbox-0.2.2.tgz" + integrity sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ== + +consola@^3.2.3, consola@^3.4.0, consola@^3.4.2: + version "3.4.2" + resolved "https://registry.npmjs.org/consola/-/consola-3.4.2.tgz" + integrity sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA== + +content-disposition@~0.5.2: + version "0.5.4" + resolved "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz" + integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== + dependencies: + safe-buffer "5.2.1" + +content-type@^1.0.4: + version "1.0.5" + resolved "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz" + integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== + +convert-source-map@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz" + integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== + +cookie-es@^1.2.2: + version "1.2.2" + resolved "https://registry.npmjs.org/cookie-es/-/cookie-es-1.2.2.tgz" + integrity sha512-+W7VmiVINB+ywl1HGXJXmrqkOhpKrIiVZV6tQuV54ZyQC7MMuBt81Vc336GMLoHBq5hV/F9eXgt5Mnx0Rha5Fg== + +cookie-es@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/cookie-es/-/cookie-es-2.0.0.tgz" + integrity sha512-RAj4E421UYRgqokKUmotqAwuplYw15qtdXfY+hGzgCJ/MBjCVZcSoHK/kH9kocfjRjcDME7IiDWR/1WX1TM2Pg== + +cookies@~0.9.0: + version "0.9.1" + resolved "https://registry.npmjs.org/cookies/-/cookies-0.9.1.tgz" + integrity sha512-TG2hpqe4ELx54QER/S3HQ9SRVnQnGBtKUz5bLQWtYAQ+o6GpgMs6sYUvaiJjVxb+UXwhRhAEP3m7LbsIZ77Hmw== + dependencies: + depd "~2.0.0" + keygrip "~1.1.0" + +copy-anything@^4: + version "4.0.5" + resolved "https://registry.npmjs.org/copy-anything/-/copy-anything-4.0.5.tgz" + integrity sha512-7Vv6asjS4gMOuILabD3l739tsaxFQmC+a7pLZm02zyvs8p977bL3zEgq3yDk5rn9B0PbYgIv++jmHcuUab4RhA== + dependencies: + is-what "^5.2.0" + +copy-paste@^2.2.0: + version "2.2.0" + resolved "https://registry.npmjs.org/copy-paste/-/copy-paste-2.2.0.tgz" + integrity sha512-jqSL4r9DSeiIvJZStLzY/sMLt9ToTM7RsK237lYOTG+KcbQJHGala3R1TUpa8h1p9adswVgIdV4qGbseVhL4lg== + dependencies: + iconv-lite "^0.4.8" + +core-js@^3.36.0: + version "3.40.0" + resolved "https://registry.npmjs.org/core-js/-/core-js-3.40.0.tgz" + integrity sha512-7vsMc/Lty6AGnn7uFpYT56QesI5D2Y/UkgKounk87OP9Z2H9Z8kj6jzcSGAxFmUtDOS0ntK6lbQz+Nsa0Jj6mQ== + +core-util-is@~1.0.0: + version "1.0.3" + resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz" + integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== + +crc-32@^1.2.0: + version "1.2.2" + resolved "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz" + integrity sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ== + +crc32-stream@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/crc32-stream/-/crc32-stream-6.0.0.tgz" + integrity sha512-piICUB6ei4IlTv1+653yq5+KoqfBYmj9bw6LqXoOneTMDXk5nM1qt12mFW1caG3LlJXEKW1Bp0WggEmIfQB34g== + dependencies: + crc-32 "^1.2.0" + readable-stream "^4.0.0" + +croner@^9.1.0: + version "9.1.0" + resolved "https://registry.npmjs.org/croner/-/croner-9.1.0.tgz" + integrity sha512-p9nwwR4qyT5W996vBZhdvBCnMhicY5ytZkR4D1Xj0wuTDEiMnjwR57Q3RXYY/s0EpX6Ay3vgIcfaR+ewGHsi+g== + +cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3, cross-spawn@^7.0.6: + version "7.0.6" + resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz" + integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +crossws@^0.3.5, "crossws@>=0.2.0 <0.4.0": + version "0.3.5" + resolved "https://registry.npmjs.org/crossws/-/crossws-0.3.5.tgz" + integrity sha512-ojKiDvcmByhwa8YYqbQI/hg7MEU0NC03+pSdEq4ZUnZR9xXpwk7E43SMNGkn+JxJGPFtNvQ48+vV2p+P1ml5PA== + dependencies: + uncrypto "^0.1.3" + +css-declaration-sorter@^7.2.0: + version "7.3.1" + resolved "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-7.3.1.tgz" + integrity sha512-gz6x+KkgNCjxq3Var03pRYLhyNfwhkKF1g/yoLgDNtFvVu0/fOLV9C8fFEZRjACp/XQLumjAYo7JVjzH3wLbxA== + +css-select@^5.1.0: + version "5.1.0" + resolved "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz" + integrity sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg== + dependencies: + boolbase "^1.0.0" + css-what "^6.1.0" + domhandler "^5.0.2" + domutils "^3.0.1" + nth-check "^2.0.1" + +css-tree@^2.3.1: + 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== + dependencies: + mdn-data "2.0.30" + source-map-js "^1.0.1" + +css-tree@^3.0.1: + version "3.1.0" + resolved "https://registry.npmjs.org/css-tree/-/css-tree-3.1.0.tgz" + integrity sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w== + dependencies: + mdn-data "2.12.2" + source-map-js "^1.0.1" + +css-tree@~2.2.0: + version "2.2.1" + resolved "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz" + integrity sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA== + dependencies: + mdn-data "2.0.28" + source-map-js "^1.0.1" + +css-what@^6.1.0: + version "6.1.0" + resolved "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz" + integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== + +cssesc@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz" + integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== + +cssfilter@0.0.10: + version "0.0.10" + resolved "https://registry.npmjs.org/cssfilter/-/cssfilter-0.0.10.tgz" + integrity sha512-FAaLDaplstoRsDR8XGYH51znUN0UY7nMc6Z9/fvE8EXGwvJE9hu7W2vHwx1+bd6gCYnln9nLbzxFTrcO9YQDZw== + +cssnano-preset-default@^7.0.10: + version "7.0.10" + resolved "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-7.0.10.tgz" + integrity sha512-6ZBjW0Lf1K1Z+0OKUAUpEN62tSXmYChXWi2NAA0afxEVsj9a+MbcB1l5qel6BHJHmULai2fCGRthCeKSFbScpA== + dependencies: + browserslist "^4.27.0" + css-declaration-sorter "^7.2.0" + cssnano-utils "^5.0.1" + postcss-calc "^10.1.1" + postcss-colormin "^7.0.5" + postcss-convert-values "^7.0.8" + postcss-discard-comments "^7.0.5" + postcss-discard-duplicates "^7.0.2" + postcss-discard-empty "^7.0.1" + postcss-discard-overridden "^7.0.1" + postcss-merge-longhand "^7.0.5" + postcss-merge-rules "^7.0.7" + postcss-minify-font-values "^7.0.1" + postcss-minify-gradients "^7.0.1" + postcss-minify-params "^7.0.5" + postcss-minify-selectors "^7.0.5" + postcss-normalize-charset "^7.0.1" + postcss-normalize-display-values "^7.0.1" + postcss-normalize-positions "^7.0.1" + postcss-normalize-repeat-style "^7.0.1" + postcss-normalize-string "^7.0.1" + postcss-normalize-timing-functions "^7.0.1" + postcss-normalize-unicode "^7.0.5" + postcss-normalize-url "^7.0.1" + postcss-normalize-whitespace "^7.0.1" + postcss-ordered-values "^7.0.2" + postcss-reduce-initial "^7.0.5" + postcss-reduce-transforms "^7.0.1" + postcss-svgo "^7.1.0" + postcss-unique-selectors "^7.0.4" + +cssnano-utils@^5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-5.0.1.tgz" + integrity sha512-ZIP71eQgG9JwjVZsTPSqhc6GHgEr53uJ7tK5///VfyWj6Xp2DBmixWHqJgPno+PqATzn48pL42ww9x5SSGmhZg== + +cssnano@^7.1.2: + version "7.1.2" + resolved "https://registry.npmjs.org/cssnano/-/cssnano-7.1.2.tgz" + integrity sha512-HYOPBsNvoiFeR1eghKD5C3ASm64v9YVyJB4Ivnl2gqKoQYvjjN/G0rztvKQq8OxocUtC6sjqY8jwYngIB4AByA== + dependencies: + cssnano-preset-default "^7.0.10" + lilconfig "^3.1.3" + +csso@^5.0.5: + version "5.0.5" + resolved "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz" + integrity sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ== + dependencies: + css-tree "~2.2.0" + +cssstyle@^4.2.1: + version "4.2.1" + resolved "https://registry.npmjs.org/cssstyle/-/cssstyle-4.2.1.tgz" + integrity sha512-9+vem03dMXG7gDmZ62uqmRiMRNtinIZ9ZyuF6BdxzfOD+FdN5hretzynkn0ReS2DO2GSw76RWHs0UmJPI2zUjw== + dependencies: + "@asamuzakjp/css-color" "^2.8.2" + rrweb-cssom "^0.8.0" + +csstype@^3.1.3: + version "3.1.3" + resolved "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz" + integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw== + +data-urls@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/data-urls/-/data-urls-5.0.0.tgz" + integrity sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg== + dependencies: + whatwg-mimetype "^4.0.0" + whatwg-url "^14.0.0" + +db0@^0.3.4, db0@>=0.2.1: + version "0.3.4" + resolved "https://registry.npmjs.org/db0/-/db0-0.3.4.tgz" + integrity sha512-RiXXi4WaNzPTHEOu8UPQKMooIbqOEyqA1t7Z6MsdxSCeb8iUC9ko3LcmsLmeUt2SM5bctfArZKkRQggKZz7JNw== + +debug@^3.1.0: + version "3.2.7" + resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== + dependencies: + ms "^2.1.1" + +debug@^3.2.7: + version "3.2.7" + resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== + dependencies: + ms "^2.1.1" + +debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4, debug@^4.4.0, debug@^4.4.1, debug@^4.4.3, debug@4: + version "4.4.3" + resolved "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz" + integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA== + dependencies: + ms "^2.1.3" + +decimal.js@^10.4.3: + version "10.4.3" + resolved "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz" + integrity sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA== + +decompress-response@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz" + integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== + dependencies: + mimic-response "^3.1.0" + +deep-equal@~1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz" + integrity sha512-bHtC0iYvWhyaTzvV3CZgPeZQqCOBGyGsVV7v4eevpdkLHfiSrXUdBG+qAuSz4RI70sszvjQ1QSZ98An1yNwpSw== + +deep-extend@^0.6.0: + version "0.6.0" + resolved "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz" + integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== + +deep-is@^0.1.3: + version "0.1.4" + resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz" + integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== + +deepmerge@^4.2.2: + version "4.3.1" + resolved "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz" + integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== + +default-browser-id@^5.0.0: + version "5.0.1" + resolved "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.1.tgz" + integrity sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q== + +default-browser@^5.2.1: + version "5.5.0" + resolved "https://registry.npmjs.org/default-browser/-/default-browser-5.5.0.tgz" + integrity sha512-H9LMLr5zwIbSxrmvikGuI/5KGhZ8E2zH3stkMgM5LpOWDutGM2JZaj460Udnf1a+946zc7YBgrqEWwbk7zHvGw== + dependencies: + bundle-name "^4.1.0" + default-browser-id "^5.0.0" + +defer-to-connect@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz" + integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg== + +define-lazy-prop@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz" + integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== + +define-lazy-prop@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz" + integrity sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg== + +defu@^6.1.4: + version "6.1.4" + resolved "https://registry.npmjs.org/defu/-/defu-6.1.4.tgz" + integrity sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg== + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== + +delegates@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz" + integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ== + +denque@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz" + integrity sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw== + +depd@^2.0.0, depd@~2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz" + integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== + +depd@~1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz" + integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ== + +destr@^2.0.2, destr@^2.0.3, destr@^2.0.5: + version "2.0.5" + resolved "https://registry.npmjs.org/destr/-/destr-2.0.5.tgz" + integrity sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA== + +destroy@^1.0.4: + version "1.2.0" + resolved "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz" + integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== + +detect-libc@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz" + integrity sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg== + +detect-libc@^2.0.0: + version "2.1.2" + resolved "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz" + integrity sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ== + +detect-libc@^2.0.2: + version "2.0.3" + resolved "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz" + integrity sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw== + +devalue@^5.6.2: + version "5.6.2" + resolved "https://registry.npmjs.org/devalue/-/devalue-5.6.2.tgz" + integrity sha512-nPRkjWzzDQlsejL1WVifk5rvcFi/y1onBRxjaFMjZeR9mFpqu2gmAZ9xUB9/IEanEP/vBtGeGganC/GO1fmufg== + +didyoumean@^1.2.2: + version "1.2.2" + resolved "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz" + integrity sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw== + +diff@^8.0.2: + version "8.0.3" + resolved "https://registry.npmjs.org/diff/-/diff-8.0.3.tgz" + integrity sha512-qejHi7bcSD4hQAZE0tNAawRK1ZtafHDmMTMkrrIGgSLl7hTnQHmKCeB45xAcbfTqK2zowkM3j3bHt/4b/ARbYQ== + +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + dependencies: + path-type "^4.0.0" + +dlv@^1.1.3: + version "1.1.3" + resolved "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz" + integrity sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA== + +doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + dependencies: + esutils "^2.0.2" + +dom-serializer@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz" + integrity sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg== + dependencies: + domelementtype "^2.3.0" + domhandler "^5.0.2" + entities "^4.2.0" + +domelementtype@^2.3.0: + version "2.3.0" + resolved "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz" + integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== + +domhandler@^5.0.2, domhandler@^5.0.3: + version "5.0.3" + resolved "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz" + integrity sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w== + dependencies: + domelementtype "^2.3.0" + +domino@^2.1.6: + version "2.1.6" + resolved "https://registry.npmjs.org/domino/-/domino-2.1.6.tgz" + integrity sha512-3VdM/SXBZX2omc9JF9nOPCtDaYQ67BGp5CoLpIQlO2KCAPETs8TcDHacF26jXadGbvUteZzRTeos2fhID5+ucQ== + +dompurify@^3.2.3: + version "3.3.1" + resolved "https://registry.npmjs.org/dompurify/-/dompurify-3.3.1.tgz" + integrity sha512-qkdCKzLNtrgPFP1Vo+98FRzJnBRGe4ffyCea9IwHB1fyxPOeNTHpLKYGd4Uk9xvNoH0ZoOjwZxNptyMwqrId1Q== + optionalDependencies: + "@types/trusted-types" "^2.0.7" + +domutils@^3.0.1: + version "3.2.2" + resolved "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz" + integrity sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw== + dependencies: + dom-serializer "^2.0.0" + domelementtype "^2.3.0" + domhandler "^5.0.3" + +dot-prop@^10.1.0: + version "10.1.0" + resolved "https://registry.npmjs.org/dot-prop/-/dot-prop-10.1.0.tgz" + integrity sha512-MVUtAugQMOff5RnBy2d9N31iG0lNwg1qAoAOn7pOK5wf94WIaE3My2p3uwTQuvS2AcqchkcR3bHByjaM0mmi7Q== + dependencies: + type-fest "^5.0.0" + +dotenv@^16.4.7: + version "16.6.1" + resolved "https://registry.npmjs.org/dotenv/-/dotenv-16.6.1.tgz" + integrity sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow== + +dotenv@^17.2.3: + version "17.2.3" + resolved "https://registry.npmjs.org/dotenv/-/dotenv-17.2.3.tgz" + integrity sha512-JVUnt+DUIzu87TABbhPmNfVdBDt18BLOWjMUFJMSi/Qqg7NTYtabbvSNJGOJ7afbRuv9D/lngizHtP7QyLQ+9w== + +dunder-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz" + integrity sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A== + dependencies: + call-bind-apply-helpers "^1.0.1" + es-errors "^1.3.0" + gopd "^1.2.0" + +duplexer@^0.1.2: + version "0.1.2" + resolved "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz" + integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== + +eastasianwidth@^0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz" + integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz" + integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== + +electron-to-chromium@^1.5.263: + version "1.5.286" + resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.286.tgz" + integrity sha512-9tfDXhJ4RKFNerfjdCcZfufu49vg620741MNs26a9+bhLThdB+plgMeou98CAaHu/WATj2iHOOHTp1hWtABj2A== + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +emoji-regex@^9.2.2: + version "9.2.2" + resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz" + integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== + +encodeurl@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz" + integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== + +encodeurl@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz" + integrity sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg== + +end-of-stream@^1.1.0, end-of-stream@^1.4.1: + version "1.4.4" + resolved "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + +enhanced-resolve@^5.14.1: + version "5.19.0" + resolved "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.19.0.tgz" + integrity sha512-phv3E1Xl4tQOShqSte26C7Fl84EwUdZsyOuSSk9qtAGyyQs2s3jJzComh+Abf4g187lUUAvH+H26omrqia2aGg== + dependencies: + graceful-fs "^4.2.4" + tapable "^2.3.0" + +entities@^4.2.0, entities@^4.5.0: + version "4.5.0" + resolved "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz" + integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== + +entities@^7.0.0: + version "7.0.1" + resolved "https://registry.npmjs.org/entities/-/entities-7.0.1.tgz" + integrity sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA== + +error-stack-parser-es@^1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/error-stack-parser-es/-/error-stack-parser-es-1.0.5.tgz" + integrity sha512-5qucVt2XcuGMcEGgWI7i+yZpmpByQ8J1lHhcL7PwqCwu9FPP3VUXzT4ltHe5i2z9dePwEHcDVOAfSnHsOlCXRA== + +errx@^0.1.0: + version "0.1.0" + resolved "https://registry.npmjs.org/errx/-/errx-0.1.0.tgz" + integrity sha512-fZmsRiDNv07K6s2KkKFTiD2aIvECa7++PKyD5NC32tpRw46qZA3sOz+aM+/V9V0GDHxVTKLziveV4JhzBHDp9Q== + +es-define-property@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz" + integrity sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g== + +es-errors@^1.3.0: + version "1.3.0" + resolved "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz" + integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== + +es-module-lexer@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.0.0.tgz" + integrity sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw== + +es-object-atoms@^1.0.0: + version "1.1.1" + resolved "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz" + integrity sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA== + dependencies: + es-errors "^1.3.0" + +es-set-tostringtag@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz" + integrity sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA== + dependencies: + es-errors "^1.3.0" + get-intrinsic "^1.2.6" + has-tostringtag "^1.0.2" + hasown "^2.0.2" + +esbuild@^0.27.0, esbuild@^0.27.2: + version "0.27.2" + resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.27.2.tgz" + integrity sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw== + optionalDependencies: + "@esbuild/aix-ppc64" "0.27.2" + "@esbuild/android-arm" "0.27.2" + "@esbuild/android-arm64" "0.27.2" + "@esbuild/android-x64" "0.27.2" + "@esbuild/darwin-arm64" "0.27.2" + "@esbuild/darwin-x64" "0.27.2" + "@esbuild/freebsd-arm64" "0.27.2" + "@esbuild/freebsd-x64" "0.27.2" + "@esbuild/linux-arm" "0.27.2" + "@esbuild/linux-arm64" "0.27.2" + "@esbuild/linux-ia32" "0.27.2" + "@esbuild/linux-loong64" "0.27.2" + "@esbuild/linux-mips64el" "0.27.2" + "@esbuild/linux-ppc64" "0.27.2" + "@esbuild/linux-riscv64" "0.27.2" + "@esbuild/linux-s390x" "0.27.2" + "@esbuild/linux-x64" "0.27.2" + "@esbuild/netbsd-arm64" "0.27.2" + "@esbuild/netbsd-x64" "0.27.2" + "@esbuild/openbsd-arm64" "0.27.2" + "@esbuild/openbsd-x64" "0.27.2" + "@esbuild/openharmony-arm64" "0.27.2" + "@esbuild/sunos-x64" "0.27.2" + "@esbuild/win32-arm64" "0.27.2" + "@esbuild/win32-ia32" "0.27.2" + "@esbuild/win32-x64" "0.27.2" + +escalade@^3.1.1, escalade@^3.2.0: + version "3.2.0" + resolved "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz" + integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== + +escape-html@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz" + integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== + +escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +escape-string-regexp@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz" + integrity sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw== + +eslint-config-prettier@^9.1.0: + version "9.1.0" + resolved "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz" + integrity sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw== + +eslint-plugin-nuxt@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/eslint-plugin-nuxt/-/eslint-plugin-nuxt-4.0.0.tgz" + integrity sha512-v3Vwdk8YKe52bAz8eSIDqQuTtfL/T1r9dSl1uhC5SyR5pgLxgKkQdxXVf/Bf6Ax7uyd9rHqiAuYVdqqDb7ILdA== + dependencies: + eslint-plugin-vue "^9.4.0" + semver "^7.3.7" + vue-eslint-parser "^9.0.3" + +eslint-plugin-vue@^9.17.0, eslint-plugin-vue@^9.21.1, eslint-plugin-vue@^9.4.0: + version "9.32.0" + resolved "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.32.0.tgz" + integrity sha512-b/Y05HYmnB/32wqVcjxjHZzNpwxj1onBOvqW89W+V+XNG1dRuaFbNd3vT9CLbr2LXjEoq+3vn8DanWf7XU22Ug== + dependencies: + "@eslint-community/eslint-utils" "^4.4.0" + globals "^13.24.0" + natural-compare "^1.4.0" + nth-check "^2.1.1" + postcss-selector-parser "^6.0.15" + semver "^7.6.3" + vue-eslint-parser "^9.4.3" + xml-name-validator "^4.0.0" + +eslint-scope@^7.1.1, eslint-scope@^7.2.2: + version "7.2.2" + resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz" + integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg== + dependencies: + esrecurse "^4.3.0" + estraverse "^5.2.0" + +eslint-scope@^8.4.0: + version "8.4.0" + resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz" + integrity sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg== + dependencies: + esrecurse "^4.3.0" + estraverse "^5.2.0" + +eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3: + 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== + +eslint-visitor-keys@^4.2.1: + version "4.2.1" + resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz" + integrity sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ== + +"eslint@^6.0.0 || ^7.0.0 || >=8.0.0", "eslint@^6.2.0 || ^7.0.0 || ^8.0.0 || ^9.0.0", "eslint@^7.0.0 || ^8.0.0", eslint@^8.48.0, eslint@^8.56.0, eslint@>=6.0.0, eslint@>=7.0.0: + version "8.57.1" + resolved "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz" + integrity sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA== + 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" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.3.2" + doctrine "^3.0.0" + escape-string-regexp "^4.0.0" + eslint-scope "^7.2.2" + eslint-visitor-keys "^3.4.3" + espree "^9.6.1" + esquery "^1.4.2" + 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" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + is-path-inside "^3.0.3" + js-yaml "^4.1.0" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.4.1" + lodash.merge "^4.6.2" + minimatch "^3.1.2" + natural-compare "^1.4.0" + optionator "^0.9.3" + strip-ansi "^6.0.1" + text-table "^0.2.0" + +eslint@>=9.39.1: + version "9.39.2" + resolved "https://registry.npmjs.org/eslint/-/eslint-9.39.2.tgz" + integrity sha512-LEyamqS7W5HB3ujJyvi0HQK/dtVINZvd5mAAp9eT5S/ujByGjiZLCzPcHVzuXbpJDJF/cxwHlfceVUDZ2lnSTw== + dependencies: + "@eslint-community/eslint-utils" "^4.8.0" + "@eslint-community/regexpp" "^4.12.1" + "@eslint/config-array" "^0.21.1" + "@eslint/config-helpers" "^0.4.2" + "@eslint/core" "^0.17.0" + "@eslint/eslintrc" "^3.3.1" + "@eslint/js" "9.39.2" + "@eslint/plugin-kit" "^0.4.1" + "@humanfs/node" "^0.16.6" + "@humanwhocodes/module-importer" "^1.0.1" + "@humanwhocodes/retry" "^0.4.2" + "@types/estree" "^1.0.6" + ajv "^6.12.4" + chalk "^4.0.0" + cross-spawn "^7.0.6" + debug "^4.3.2" + escape-string-regexp "^4.0.0" + eslint-scope "^8.4.0" + eslint-visitor-keys "^4.2.1" + espree "^10.4.0" + esquery "^1.5.0" + esutils "^2.0.2" + fast-deep-equal "^3.1.3" + file-entry-cache "^8.0.0" + find-up "^5.0.0" + glob-parent "^6.0.2" + ignore "^5.2.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + json-stable-stringify-without-jsonify "^1.0.1" + lodash.merge "^4.6.2" + minimatch "^3.1.2" + natural-compare "^1.4.0" + optionator "^0.9.3" + +espree@^10.0.1, espree@^10.4.0: + version "10.4.0" + resolved "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz" + integrity sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ== + dependencies: + acorn "^8.15.0" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^4.2.1" + +espree@^9.3.1, espree@^9.6.0, espree@^9.6.1: + version "9.6.1" + resolved "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz" + integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== + dependencies: + acorn "^8.9.0" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^3.4.1" + +esquery@^1.4.0, esquery@^1.4.2, esquery@^1.5.0: + version "1.6.0" + resolved "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz" + integrity sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg== + dependencies: + estraverse "^5.1.0" + +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^5.1.0, estraverse@^5.2.0: + version "5.3.0" + resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + +estree-walker@^2.0.2, estree-walker@2.0.2: + version "2.0.2" + resolved "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz" + integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== + +estree-walker@^3.0.3: + version "3.0.3" + resolved "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz" + integrity sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g== + dependencies: + "@types/estree" "^1.0.0" + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +etag@^1.8.1: + version "1.8.1" + resolved "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz" + integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== + +event-target-shim@^5.0.0: + version "5.0.1" + resolved "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz" + integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== + +events@^3.3.0: + version "3.3.0" + resolved "https://registry.npmjs.org/events/-/events-3.3.0.tgz" + integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== + +execa@^8.0.1: + version "8.0.1" + resolved "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz" + integrity sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg== + dependencies: + cross-spawn "^7.0.3" + get-stream "^8.0.1" + human-signals "^5.0.0" + is-stream "^3.0.0" + merge-stream "^2.0.0" + npm-run-path "^5.1.0" + onetime "^6.0.0" + signal-exit "^4.1.0" + strip-final-newline "^3.0.0" + +expand-template@^2.0.3: + version "2.0.3" + resolved "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz" + integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg== + +exsolve@^1.0.4, exsolve@^1.0.5, exsolve@^1.0.7, exsolve@^1.0.8: + version "1.0.8" + resolved "https://registry.npmjs.org/exsolve/-/exsolve-1.0.8.tgz" + integrity sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA== + +externality@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/externality/-/externality-1.0.2.tgz" + integrity sha512-LyExtJWKxtgVzmgtEHyQtLFpw1KFhQphF9nTG8TpAIVkiI/xQ3FJh75tRFLYl4hkn7BNIIdLJInuDAavX35pMw== + dependencies: + enhanced-resolve "^5.14.1" + mlly "^1.3.0" + pathe "^1.1.1" + ufo "^1.1.2" + +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: + version "3.1.3" + resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-fifo@^1.2.0, fast-fifo@^1.3.2: + version "1.3.2" + resolved "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz" + integrity sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ== + +fast-glob@^3.2.9, fast-glob@^3.3.2, fast-glob@^3.3.3: + version "3.3.3" + resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz" + integrity sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.8" + +fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fast-levenshtein@^2.0.6: + version "2.0.6" + resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" + integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== + +fast-npm-meta@^0.4.7: + version "0.4.8" + resolved "https://registry.npmjs.org/fast-npm-meta/-/fast-npm-meta-0.4.8.tgz" + integrity sha512-ybZVlDZ2PkO79dosM+6CLZfKWRH8MF0PiWlw8M4mVWJl8IEJrPfxYc7Tsu830Dwj/R96LKXfePGTSzKWbPJ08w== + +fastq@^1.6.0: + version "1.18.0" + resolved "https://registry.npmjs.org/fastq/-/fastq-1.18.0.tgz" + integrity sha512-QKHXPW0hD8g4UET03SdOdunzSouc9N4AuHdsX8XNcTsuz+yYFILVNIX4l9yHABMhiEI9Db0JTTIpu0wB+Y1QQw== + dependencies: + reusify "^1.0.4" + +fathom-client@^3.0.0: + version "3.7.2" + resolved "https://registry.npmjs.org/fathom-client/-/fathom-client-3.7.2.tgz" + integrity sha512-sWtaNivhg7uwp/q1bUuIiNj4LeQZMEZ5NXXFFpZ8le4uDedAfQG84gPOdYehtVXbl+1yX2s8lmXZ2+IQ9a/xxA== + +fdir@^6.2.0: + version "6.5.0" + resolved "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz" + integrity sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg== + +fdir@^6.5.0: + version "6.5.0" + resolved "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz" + integrity sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg== + +file-entry-cache@^6.0.1: + version "6.0.1" + resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz" + integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== + dependencies: + flat-cache "^3.0.4" + +file-entry-cache@^8.0.0: + version "8.0.0" + resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz" + integrity sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ== + dependencies: + flat-cache "^4.0.0" + +file-uri-to-path@1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz" + integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== + +fill-range@^7.1.1: + version "7.1.1" + resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz" + integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== + dependencies: + to-regex-range "^5.0.1" + +find-up@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + +flat-cache@^3.0.4: + version "3.2.0" + resolved "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz" + integrity sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw== + dependencies: + flatted "^3.2.9" + keyv "^4.5.3" + rimraf "^3.0.2" + +flat-cache@^4.0.0: + version "4.0.1" + resolved "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz" + integrity sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw== + dependencies: + flatted "^3.2.9" + keyv "^4.5.4" + +flatted@^3.2.9: + version "3.3.2" + resolved "https://registry.npmjs.org/flatted/-/flatted-3.3.2.tgz" + integrity sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA== + +follow-redirects@^1.15.6: + version "1.15.9" + resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz" + integrity sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ== + +foreground-child@^3.1.0: + version "3.3.0" + resolved "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz" + integrity sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg== + dependencies: + cross-spawn "^7.0.0" + signal-exit "^4.0.1" + +form-data@^4.0.1, form-data@^4.0.4: + version "4.0.5" + resolved "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz" + integrity sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + es-set-tostringtag "^2.1.0" + hasown "^2.0.2" + mime-types "^2.1.12" + +fraction.js@^5.3.4: + version "5.3.4" + resolved "https://registry.npmjs.org/fraction.js/-/fraction.js-5.3.4.tgz" + integrity sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ== + +fresh@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz" + integrity sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A== + +fresh@~0.5.2: + version "0.5.2" + resolved "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz" + integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== + +fs-constants@^1.0.0: + 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== + +fs-extra@^9.0.1: + version "9.1.0" + resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz" + integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== + dependencies: + at-least-node "^1.0.0" + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + +fsevents@~2.3.2, fsevents@~2.3.3: + version "2.3.3" + resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz" + integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== + +function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== + +fuse.js@^7.1.0: + version "7.1.0" + resolved "https://registry.npmjs.org/fuse.js/-/fuse.js-7.1.0.tgz" + integrity sha512-trLf4SzuuUxfusZADLINj+dE8clK1frKdmqiJNb1Es75fmI5oY6X2mxLVUciLLjxqw/xr72Dhy+lER6dGd02FQ== + +gensync@^1.0.0-beta.2: + version "1.0.0-beta.2" + resolved "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz" + integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== + +get-caller-file@^2.0.5: + version "2.0.5" + resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + +get-intrinsic@^1.2.5, get-intrinsic@^1.2.6: + version "1.2.7" + resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.7.tgz" + integrity sha512-VW6Pxhsrk0KAOqs3WEd0klDiF/+V7gQOpAvY1jVU/LHmaD/kQO4523aiJuikX/QAKYiW6x8Jh+RJej1almdtCA== + dependencies: + call-bind-apply-helpers "^1.0.1" + es-define-property "^1.0.1" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + function-bind "^1.1.2" + get-proto "^1.0.0" + gopd "^1.2.0" + has-symbols "^1.1.0" + hasown "^2.0.2" + math-intrinsics "^1.1.0" + +get-port-please@^3.1.2, get-port-please@^3.2.0: + version "3.2.0" + resolved "https://registry.npmjs.org/get-port-please/-/get-port-please-3.2.0.tgz" + integrity sha512-I9QVvBw5U/hw3RmWpYKRumUeaDgxTPd401x364rLmWBJcOQ753eov1eTgzDqRG9bqFIfDc7gfzcQEWrUri3o1A== + +get-proto@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz" + integrity sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g== + dependencies: + dunder-proto "^1.0.1" + es-object-atoms "^1.0.0" + +get-stream@^5.1.0: + version "5.2.0" + resolved "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz" + integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== + dependencies: + pump "^3.0.0" + +get-stream@^8.0.1: + version "8.0.1" + resolved "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz" + integrity sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA== + +giget@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/giget/-/giget-2.0.0.tgz" + integrity sha512-L5bGsVkxJbJgdnwyuheIunkGatUF/zssUoxxjACCseZYAVbaqdh9Tsmmlkl8vYan09H7sbvKt4pS8GqKLBrEzA== + dependencies: + citty "^0.1.6" + consola "^3.4.0" + defu "^6.1.4" + node-fetch-native "^1.6.6" + nypm "^0.6.0" + pathe "^2.0.3" + +git-up@^8.1.0: + version "8.1.1" + resolved "https://registry.npmjs.org/git-up/-/git-up-8.1.1.tgz" + integrity sha512-FDenSF3fVqBYSaJoYy1KSc2wosx0gCvKP+c+PRBht7cAaiCeQlBtfBDX9vgnNOHmdePlSFITVcn4pFfcgNvx3g== + dependencies: + is-ssh "^1.4.0" + parse-url "^9.2.0" + +git-url-parse@^16.0.1: + version "16.1.0" + resolved "https://registry.npmjs.org/git-url-parse/-/git-url-parse-16.1.0.tgz" + integrity sha512-cPLz4HuK86wClEW7iDdeAKcCVlWXmrLpb2L+G9goW0Z1dtpNS6BXXSOckUTlJT/LDQViE1QZKstNORzHsLnobw== + dependencies: + git-up "^8.1.0" + +github-from-package@0.0.0: + version "0.0.0" + resolved "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz" + integrity sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw== + +glob-parent@^5.1.2: + version "5.1.2" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob-parent@^6.0.2: + version "6.0.2" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== + dependencies: + is-glob "^4.0.3" + +glob-parent@~5.1.2: + version "5.1.2" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob@^10.0.0: + version "10.5.0" + resolved "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz" + integrity sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg== + dependencies: + foreground-child "^3.1.0" + jackspeak "^3.1.2" + minimatch "^9.0.4" + minipass "^7.1.2" + package-json-from-dist "^1.0.0" + path-scurry "^1.11.1" + +glob@^10.3.10: + version "10.5.0" + resolved "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz" + integrity sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg== + dependencies: + foreground-child "^3.1.0" + jackspeak "^3.1.2" + minimatch "^9.0.4" + minipass "^7.1.2" + package-json-from-dist "^1.0.0" + path-scurry "^1.11.1" + +glob@^13.0.0: + version "13.0.0" + resolved "https://registry.npmjs.org/glob/-/glob-13.0.0.tgz" + integrity sha512-tvZgpqk6fz4BaNZ66ZsRaZnbHvP/jG3uKJvAZOwEVUL4RTA5nJeeLYfyN9/VA8NX/V3IBG+hkeuGpKjvELkVhA== + dependencies: + minimatch "^10.1.1" + minipass "^7.1.2" + path-scurry "^2.0.0" + +glob@^7.1.3, glob@^7.2.0: + version "7.2.3" + resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + +global-directory@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/global-directory/-/global-directory-4.0.1.tgz" + integrity sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q== + dependencies: + ini "4.1.1" + +globals@^13.19.0: + version "13.24.0" + resolved "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz" + integrity sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ== + dependencies: + type-fest "^0.20.2" + +globals@^13.24.0: + version "13.24.0" + resolved "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz" + integrity sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ== + dependencies: + type-fest "^0.20.2" + +globals@^14.0.0: + version "14.0.0" + resolved "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz" + integrity sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ== + +globby@^11.1.0: + version "11.1.0" + resolved "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz" + integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.2.9" + ignore "^5.2.0" + merge2 "^1.4.1" + slash "^3.0.0" + +globby@^16.1.0: + version "16.1.0" + resolved "https://registry.npmjs.org/globby/-/globby-16.1.0.tgz" + integrity sha512-+A4Hq7m7Ze592k9gZRy4gJ27DrXRNnC1vPjxTt1qQxEY8RxagBkBxivkCwg7FxSTG0iLLEMaUx13oOr0R2/qcQ== + dependencies: + "@sindresorhus/merge-streams" "^4.0.0" + fast-glob "^3.3.3" + ignore "^7.0.5" + is-path-inside "^4.0.0" + slash "^5.1.0" + unicorn-magic "^0.4.0" + +gopd@^1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz" + integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg== + +got@^11.8.1: + version "11.8.6" + resolved "https://registry.npmjs.org/got/-/got-11.8.6.tgz" + integrity sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g== + dependencies: + "@sindresorhus/is" "^4.0.0" + "@szmarczak/http-timer" "^4.0.5" + "@types/cacheable-request" "^6.0.1" + "@types/responselike" "^1.0.0" + cacheable-lookup "^5.0.3" + cacheable-request "^7.0.2" + decompress-response "^6.0.0" + http2-wrapper "^1.0.0-beta.5.2" + lowercase-keys "^2.0.0" + p-cancelable "^2.0.0" + responselike "^2.0.0" + +graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4, graceful-fs@^4.2.9: + version "4.2.11" + resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== + +graphemer@^1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz" + integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== + +gzip-size@^7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/gzip-size/-/gzip-size-7.0.0.tgz" + integrity sha512-O1Ld7Dr+nqPnmGpdhzLmMTQ4vAsD+rHwMm1NLUmoUFFymBOMKxCCrtDxqdBRYXdeEPEi3SyoR4TizJLQrnKBNA== + dependencies: + duplexer "^0.1.2" + +h3-zod@^0.5.3: + version "0.5.3" + resolved "https://registry.npmjs.org/h3-zod/-/h3-zod-0.5.3.tgz" + integrity sha512-wqlRd/d5d9sNYxmNglnL63J4v5HiZZrcXdLIiU2cBsy5gTwxrSH1AqtNrVkuUleshgNOAQldbuO06phdUIxuKA== + +h3@^1.10.0, h3@^1.11.1, h3@^1.12.0, h3@^1.15.1, h3@^1.15.5, h3@^1.6.0: + version "1.15.5" + resolved "https://registry.npmjs.org/h3/-/h3-1.15.5.tgz" + integrity sha512-xEyq3rSl+dhGX2Lm0+eFQIAzlDN6Fs0EcC4f7BNUmzaRX/PTzeuM+Tr2lHB8FoXggsQIeXLj8EDVgs5ywxyxmg== + dependencies: + cookie-es "^1.2.2" + crossws "^0.3.5" + defu "^6.1.4" + destr "^2.0.5" + iron-webcrypto "^1.2.1" + node-mock-http "^1.0.4" + radix3 "^1.1.2" + ufo "^1.6.3" + uncrypto "^0.1.3" + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-symbols@^1.0.3, has-symbols@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz" + integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ== + +has-tostringtag@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz" + integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== + dependencies: + has-symbols "^1.0.3" + +hasown@^2.0.2: + version "2.0.2" + resolved "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz" + integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== + dependencies: + function-bind "^1.1.2" + +hogan.js@^3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/hogan.js/-/hogan.js-3.0.2.tgz" + integrity sha512-RqGs4wavGYJWE07t35JQccByczmNUXQT0E12ZYV1VKYu5UiAU9lsos/yBAcf840+zrUQQxgVduCR5/B8nNtibg== + dependencies: + mkdirp "0.3.0" + nopt "1.0.10" + +hookable@^5.5.3: + version "5.5.3" + resolved "https://registry.npmjs.org/hookable/-/hookable-5.5.3.tgz" + integrity sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ== + +hookable@^6.0.1: + version "6.0.1" + resolved "https://registry.npmjs.org/hookable/-/hookable-6.0.1.tgz" + integrity sha512-uKGyY8BuzN/a5gvzvA+3FVWo0+wUjgtfSdnmjtrOVwQCZPHpHDH2WRO3VZSOeluYrHoDCiXFffZXs8Dj1ULWtw== + +htm@^3.0.0: + version "3.1.1" + resolved "https://registry.npmjs.org/htm/-/htm-3.1.1.tgz" + integrity sha512-983Vyg8NwUE7JkZ6NmOqpCZ+sh1bKv2iYTlUkzlWmA5JD2acKoxd4KVxbMmxX/85mtfdnDmTFoNKcg5DGAvxNQ== + +html-encoding-sniffer@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz" + integrity sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ== + dependencies: + whatwg-encoding "^3.1.1" + +http-assert@^1.3.0: + version "1.5.0" + resolved "https://registry.npmjs.org/http-assert/-/http-assert-1.5.0.tgz" + integrity sha512-uPpH7OKX4H25hBmU6G1jWNaqJGpTXxey+YOUizJUAgu0AjLUeC8D73hTrhvDS5D+GJN1DN1+hhc/eF/wpxtp0w== + dependencies: + deep-equal "~1.0.1" + http-errors "~1.8.0" + +http-cache-semantics@^4.0.0: + version "4.1.1" + resolved "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz" + integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== + +http-errors@^1.6.3: + version "1.8.1" + resolved "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz" + integrity sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g== + dependencies: + depd "~1.1.2" + inherits "2.0.4" + setprototypeof "1.2.0" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.1" + +http-errors@^1.7.3: + version "1.8.1" + resolved "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz" + integrity sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g== + dependencies: + depd "~1.1.2" + inherits "2.0.4" + setprototypeof "1.2.0" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.1" + +http-errors@^2.0.0, http-errors@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz" + integrity sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ== + dependencies: + depd "~2.0.0" + inherits "~2.0.4" + setprototypeof "~1.2.0" + statuses "~2.0.2" + toidentifier "~1.0.1" + +http-errors@~1.6.2: + version "1.6.3" + resolved "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz" + integrity sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A== + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.0" + statuses ">= 1.4.0 < 2" + +http-errors@~1.8.0: + version "1.8.1" + resolved "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz" + integrity sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g== + dependencies: + depd "~1.1.2" + inherits "2.0.4" + setprototypeof "1.2.0" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.1" + +http-proxy-agent@^7.0.2: + 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== + dependencies: + agent-base "^7.1.0" + debug "^4.3.4" + +http-shutdown@^1.2.2: + version "1.2.2" + resolved "https://registry.npmjs.org/http-shutdown/-/http-shutdown-1.2.2.tgz" + integrity sha512-S9wWkJ/VSY9/k4qcjG318bqJNruzE4HySUhFYknwmu6LBP97KLLfwNf+n4V1BHurvFNkSKLFnK/RsuUnRTf9Vw== + +http2-wrapper@^1.0.0-beta.5.2: + version "1.0.3" + resolved "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz" + integrity sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg== + dependencies: + quick-lru "^5.1.1" + resolve-alpn "^1.0.0" + +https-proxy-agent@^7.0.5, https-proxy-agent@^7.0.6: + version "7.0.6" + resolved "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz" + integrity sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw== + dependencies: + agent-base "^7.1.2" + debug "4" + +httpxy@^0.1.7: + version "0.1.7" + resolved "https://registry.npmjs.org/httpxy/-/httpxy-0.1.7.tgz" + integrity sha512-pXNx8gnANKAndgga5ahefxc++tJvNL87CXoRwxn1cJE2ZkWEojF3tNfQIEhZX/vfpt+wzeAzpUI4qkediX1MLQ== + +human-signals@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz" + integrity sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ== + +iconv-lite@^0.4.8: + version "0.4.24" + resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +iconv-lite@0.6.3: + version "0.6.3" + resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz" + integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + +ieee754@^1.1.13, ieee754@^1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + +ignore@^5.2.0: + version "5.3.2" + resolved "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz" + integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== + +ignore@^5.2.4: + version "5.3.2" + resolved "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz" + integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== + +ignore@^7.0.5: + version "7.0.5" + resolved "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz" + integrity sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg== + +image-meta@^0.2.0, image-meta@^0.2.2: + version "0.2.2" + resolved "https://registry.npmjs.org/image-meta/-/image-meta-0.2.2.tgz" + integrity sha512-3MOLanc3sb3LNGWQl1RlQlNWURE5g32aUphrDyFeCsxBTk08iE3VNe4CwsUZ0Qs1X+EfX0+r29Sxdpza4B+yRA== + +import-fresh@^3.2.1: + version "3.3.0" + resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz" + integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +impound@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/impound/-/impound-1.0.0.tgz" + integrity sha512-8lAJ+1Arw2sMaZ9HE2ZmL5zOcMnt18s6+7Xqgq2aUVy4P1nlzAyPtzCDxsk51KVFwHEEdc6OWvUyqwHwhRYaug== + dependencies: + exsolve "^1.0.5" + mocked-exports "^0.1.1" + pathe "^2.0.3" + unplugin "^2.3.2" + unplugin-utils "^0.2.4" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3, inherits@~2.0.4, inherits@2, inherits@2.0.4: + version "2.0.4" + resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +inherits@2.0.3: + version "2.0.3" + resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz" + integrity sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw== + +ini@~1.3.0: + version "1.3.8" + resolved "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz" + integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== + +ini@4.1.1: + version "4.1.1" + resolved "https://registry.npmjs.org/ini/-/ini-4.1.1.tgz" + integrity sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g== + +instantsearch-ui-components@0.17.1: + version "0.17.1" + resolved "https://registry.npmjs.org/instantsearch-ui-components/-/instantsearch-ui-components-0.17.1.tgz" + integrity sha512-uOn39sNs9ukK0N6pklVdxbE5dapIdSJmkh/WJPPtOe4bpnvLzzvvexQYpUJ9vy1xQJMaQcAoPMoMKfBXwUA29A== + dependencies: + "@babel/runtime" "^7.27.6" + markdown-to-jsx "^7.7.15" + zod "^3.25.76 || ^4" + zod-to-json-schema "3.24.6" + +instantsearch.css@^7.4.5: + version "7.4.5" + resolved "https://registry.npmjs.org/instantsearch.css/-/instantsearch.css-7.4.5.tgz" + integrity sha512-iIGBYjCokU93DDB8kbeztKtlu4qVEyTg1xvS6iSO1YvqRwkIZgf0tmsl/GytsLdZhuw8j4wEaeYsCzNbeJ/zEQ== + +instantsearch.js@4.87.1: + version "4.87.1" + resolved "https://registry.npmjs.org/instantsearch.js/-/instantsearch.js-4.87.1.tgz" + integrity sha512-KkOSosDPnCXZg5QNZ6AnW+wWJaTsK0kXzUyr4/ugGE/Tm5Fn5D08yC9RFT4JxlvDJw+re0ov1xBbWKBcBn8XuA== + dependencies: + "@algolia/events" "^4.0.1" + "@types/dom-speech-recognition" "^0.0.1" + "@types/google.maps" "^3.55.12" + "@types/hogan.js" "^3.0.0" + "@types/qs" "^6.5.3" + algoliasearch-helper "3.27.0" + hogan.js "^3.0.2" + htm "^3.0.0" + instantsearch-ui-components "0.17.1" + preact "^10.10.0" + qs "^6.5.1" + react ">= 0.14.0" + search-insights "^2.17.2" + zod "^3.25.76 || ^4" + zod-to-json-schema "3.24.6" + +ioredis@^5.4.2, ioredis@^5.9.1: + version "5.9.2" + resolved "https://registry.npmjs.org/ioredis/-/ioredis-5.9.2.tgz" + integrity sha512-tAAg/72/VxOUW7RQSX1pIxJVucYKcjFjfvj60L57jrZpYCHC3XN0WCQ3sNYL4Gmvv+7GPvTAjc+KSdeNuE8oWQ== + dependencies: + "@ioredis/commands" "1.5.0" + cluster-key-slot "^1.1.0" + debug "^4.3.4" + denque "^2.1.0" + lodash.defaults "^4.2.0" + lodash.isarguments "^3.1.0" + redis-errors "^1.2.0" + redis-parser "^3.0.0" + standard-as-callback "^2.1.0" + +ipx@^2.1.0: + version "2.1.1" + resolved "https://registry.npmjs.org/ipx/-/ipx-2.1.1.tgz" + integrity sha512-XuM9FEGOT+/45mfAWZ5ykwkZ/oE7vWpd1iWjRffMWlwAYIRzb/xD6wZhQ4BzmPMX6Ov5dqK0wUyD0OEN9oWT6g== + dependencies: + "@fastify/accept-negotiator" "^1.1.0" + citty "^0.1.5" + consola "^3.2.3" + defu "^6.1.4" + destr "^2.0.2" + etag "^1.8.1" + h3 "^1.10.0" + image-meta "^0.2.0" + listhen "^1.5.6" + ofetch "^1.3.3" + pathe "^1.1.2" + sharp "^0.32.6" + svgo "^3.2.0" + ufo "^1.3.2" + unstorage "^1.10.1" + xss "^1.0.14" + +iron-webcrypto@^1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/iron-webcrypto/-/iron-webcrypto-1.2.1.tgz" + integrity sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg== + +is-arrayish@^0.3.1: + version "0.3.2" + resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz" + integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-core-module@^2.16.0: + version "2.16.1" + resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz" + integrity sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w== + dependencies: + hasown "^2.0.2" + +is-docker@^2.0.0, is-docker@^2.1.1: + version "2.2.1" + resolved "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz" + integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== + +is-docker@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz" + integrity sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ== + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-generator-function@^1.0.7: + version "1.1.0" + resolved "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz" + integrity sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ== + dependencies: + call-bound "^1.0.3" + get-proto "^1.0.0" + has-tostringtag "^1.0.2" + safe-regex-test "^1.1.0" + +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: + version "4.0.3" + resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-inside-container@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz" + integrity sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA== + dependencies: + is-docker "^3.0.0" + +is-installed-globally@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-1.0.0.tgz" + integrity sha512-K55T22lfpQ63N4KEN57jZUAaAYqYHEe8veb/TycJRk9DdSCLLcovXz/mL6mOnhQaZsQGwPhuFopdQIlqGSEjiQ== + dependencies: + global-directory "^4.0.1" + is-path-inside "^4.0.0" + +is-module@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz" + integrity sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g== + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-path-inside@^3.0.3: + 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== + +is-path-inside@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/is-path-inside/-/is-path-inside-4.0.0.tgz" + integrity sha512-lJJV/5dYS+RcL8uQdBDW9c9uWFLLBNRyFhnAKXw5tVqLlKZ4RMGZKv+YQ/IA3OhD+RpbJa1LLFM1FQPGyIXvOA== + +is-potential-custom-element-name@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz" + integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== + +is-reference@1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz" + integrity sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ== + dependencies: + "@types/estree" "*" + +is-regex@^1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz" + integrity sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g== + dependencies: + call-bound "^1.0.2" + gopd "^1.2.0" + has-tostringtag "^1.0.2" + hasown "^2.0.2" + +is-ssh@^1.4.0: + version "1.4.1" + resolved "https://registry.npmjs.org/is-ssh/-/is-ssh-1.4.1.tgz" + integrity sha512-JNeu1wQsHjyHgn9NcWTaXq6zWSR6hqE0++zhfZlkFBbScNkyvxCdeV8sRkSBaeLKxmbpR21brail63ACNxJ0Tg== + dependencies: + protocols "^2.0.1" + +is-stream@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz" + integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== + +is-stream@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz" + integrity sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA== + +is-what@^5.2.0: + version "5.5.0" + resolved "https://registry.npmjs.org/is-what/-/is-what-5.5.0.tgz" + integrity sha512-oG7cgbmg5kLYae2N5IVd3jm2s+vldjxJzK1pcu9LfpGuQ93MQSzo0okvRna+7y5ifrD+20FE8FvjusyGaz14fw== + +is-wsl@^2.1.1: + version "2.2.0" + resolved "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz" + integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== + dependencies: + is-docker "^2.0.0" + +is-wsl@^2.2.0: + version "2.2.0" + resolved "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz" + integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== + dependencies: + is-docker "^2.0.0" + +is-wsl@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz" + integrity sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw== + dependencies: + is-inside-container "^1.0.0" + +is64bit@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/is64bit/-/is64bit-2.0.0.tgz" + integrity sha512-jv+8jaWCl0g2lSBkNSVXdzfBA0npK1HGC2KtWM9FumFRoGS94g3NbCCLVnCYHLjp4GrW2KZeeSTMo5ddtznmGw== + dependencies: + system-architecture "^0.1.0" + +isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" + integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +isexe@^3.1.1: + version "3.1.1" + resolved "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz" + integrity sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ== + +isomorphic-dompurify@^2.12.0: + version "2.20.0" + resolved "https://registry.npmjs.org/isomorphic-dompurify/-/isomorphic-dompurify-2.20.0.tgz" + integrity sha512-zOq12fJPtNE+4dPd2S0xpWXl8NZj0C6k2xikT1yl/Lv/5p3QLafZqlVFy4xTGU9qHSkyEENcIbp2c0oahCNRYg== + dependencies: + dompurify "^3.2.3" + jsdom "^26.0.0" + +jackspeak@^3.1.2: + version "3.4.3" + resolved "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz" + integrity sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw== + dependencies: + "@isaacs/cliui" "^8.0.2" + optionalDependencies: + "@pkgjs/parseargs" "^0.11.0" + +jiti@*, jiti@^2.1.2, jiti@^2.4.2, jiti@^2.6.1, jiti@>=1.21.0: + version "2.6.1" + resolved "https://registry.npmjs.org/jiti/-/jiti-2.6.1.tgz" + integrity sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ== + +jiti@^1.21.6: + version "1.21.7" + resolved "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz" + integrity sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A== + +js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-tokens@^9.0.1: + version "9.0.1" + resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-9.0.1.tgz" + integrity sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ== + +js-yaml@^4.1.0, js-yaml@^4.1.1: + version "4.1.1" + resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz" + integrity sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA== + dependencies: + argparse "^2.0.1" + +jsdom@^26.0.0: + version "26.0.0" + resolved "https://registry.npmjs.org/jsdom/-/jsdom-26.0.0.tgz" + integrity sha512-BZYDGVAIriBWTpIxYzrXjv3E/4u8+/pSG5bQdIYCbNCGOvsPkDQfTVLAIXAf9ETdCpduCVTkDe2NNZ8NIwUVzw== + dependencies: + cssstyle "^4.2.1" + data-urls "^5.0.0" + decimal.js "^10.4.3" + form-data "^4.0.1" + html-encoding-sniffer "^4.0.0" + http-proxy-agent "^7.0.2" + https-proxy-agent "^7.0.6" + 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" + symbol-tree "^3.2.4" + tough-cookie "^5.0.0" + w3c-xmlserializer "^5.0.0" + webidl-conversions "^7.0.0" + whatwg-encoding "^3.1.1" + whatwg-mimetype "^4.0.0" + whatwg-url "^14.1.0" + ws "^8.18.0" + xml-name-validator "^5.0.0" + +jsesc@^3.0.2: + version "3.1.0" + resolved "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz" + integrity sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA== + +json-buffer@3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz" + integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz" + integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== + +json5@^2.2.3: + version "2.2.3" + resolved "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz" + integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== + +jsonfile@^6.0.1: + version "6.1.0" + resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz" + integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== + dependencies: + universalify "^2.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + +keygrip@~1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/keygrip/-/keygrip-1.1.0.tgz" + integrity sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ== + dependencies: + tsscmp "1.0.6" + +keyv@^4.0.0, keyv@^4.5.3, keyv@^4.5.4: + version "4.5.4" + resolved "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz" + integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== + dependencies: + json-buffer "3.0.1" + +kleur@^3.0.3: + version "3.0.3" + resolved "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz" + integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== + +kleur@^4.1.5: + version "4.1.5" + resolved "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz" + integrity sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ== + +klona@^2.0.6: + version "2.0.6" + resolved "https://registry.npmjs.org/klona/-/klona-2.0.6.tgz" + integrity sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA== + +knitwork@^1.2.0, knitwork@^1.3.0: + version "1.3.0" + resolved "https://registry.npmjs.org/knitwork/-/knitwork-1.3.0.tgz" + integrity sha512-4LqMNoONzR43B1W0ek0fhXMsDNW/zxa1NdFAVMY+k28pgZLovR4G3PB5MrpTxCy1QaZCqNoiaKPr5w5qZHfSNw== + +koa-compose@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/koa-compose/-/koa-compose-4.1.0.tgz" + integrity sha512-8ODW8TrDuMYvXRwra/Kh7/rJo9BtOfPc6qO8eAfC80CnCvSjSl0bkRM24X6/XBBEyj0v1nRUQ1LyOy3dbqOWXw== + +koa-convert@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/koa-convert/-/koa-convert-2.0.0.tgz" + integrity sha512-asOvN6bFlSnxewce2e/DK3p4tltyfC4VM7ZwuTuepI7dEQVcvpyFuBcEARu1+Hxg8DIwytce2n7jrZtRlPrARA== + dependencies: + co "^4.6.0" + koa-compose "^4.1.0" + +koa-send@^5.0.0: + version "5.0.1" + resolved "https://registry.npmjs.org/koa-send/-/koa-send-5.0.1.tgz" + integrity sha512-tmcyQ/wXXuxpDxyNXv5yNNkdAMdFRqwtegBXUaowiQzUKqJehttS0x2j0eOZDQAyloAth5w6wwBImnFzkUz3pQ== + dependencies: + debug "^4.1.1" + http-errors "^1.7.3" + resolve-path "^1.4.0" + +koa-static@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/koa-static/-/koa-static-5.0.0.tgz" + integrity sha512-UqyYyH5YEXaJrf9S8E23GoJFQZXkBVJ9zYYMPGz919MSX1KuvAcycIuS0ci150HCoPf4XQVhQ84Qf8xRPWxFaQ== + dependencies: + debug "^3.1.0" + koa-send "^5.0.0" + +koa@^2.14.2: + version "2.16.3" + resolved "https://registry.npmjs.org/koa/-/koa-2.16.3.tgz" + integrity sha512-zPPuIt+ku1iCpFBRwseMcPYQ1cJL8l60rSmKeOuGfOXyE6YnTBmf2aEFNL2HQGrD0cPcLO/t+v9RTgC+fwEh/g== + dependencies: + accepts "^1.3.5" + cache-content-type "^1.0.0" + content-disposition "~0.5.2" + content-type "^1.0.4" + cookies "~0.9.0" + debug "^4.3.2" + delegates "^1.0.0" + depd "^2.0.0" + destroy "^1.0.4" + encodeurl "^1.0.2" + escape-html "^1.0.3" + fresh "~0.5.2" + http-assert "^1.3.0" + http-errors "^1.6.3" + is-generator-function "^1.0.7" + koa-compose "^4.1.0" + koa-convert "^2.0.0" + on-finished "^2.3.0" + only "~0.0.2" + parseurl "^1.3.2" + statuses "^1.5.0" + type-is "^1.6.16" + vary "^1.1.2" + +launch-editor@^2.12.0: + version "2.12.0" + resolved "https://registry.npmjs.org/launch-editor/-/launch-editor-2.12.0.tgz" + integrity sha512-giOHXoOtifjdHqUamwKq6c49GzBdLjvxrd2D+Q4V6uOHopJv7p9VJxikDsQ/CBXZbEITgUqSVHXLTG3VhPP1Dg== + dependencies: + picocolors "^1.1.1" + shell-quote "^1.8.3" + +lazystream@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz" + integrity sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw== + dependencies: + readable-stream "^2.0.5" + +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + +lilconfig@^3.0.0, lilconfig@^3.1.3: + version "3.1.3" + resolved "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz" + integrity sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw== + +lines-and-columns@^1.1.6: + version "1.2.4" + resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz" + integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== + +listhen@^1.5.6, listhen@^1.9.0: + version "1.9.0" + resolved "https://registry.npmjs.org/listhen/-/listhen-1.9.0.tgz" + integrity sha512-I8oW2+QL5KJo8zXNWX046M134WchxsXC7SawLPvRQpogCbkyQIaFxPE89A2HiwR7vAK2Dm2ERBAmyjTYGYEpBg== + dependencies: + "@parcel/watcher" "^2.4.1" + "@parcel/watcher-wasm" "^2.4.1" + citty "^0.1.6" + clipboardy "^4.0.0" + consola "^3.2.3" + crossws ">=0.2.0 <0.4.0" + defu "^6.1.4" + get-port-please "^3.1.2" + h3 "^1.12.0" + http-shutdown "^1.2.2" + jiti "^2.1.2" + mlly "^1.7.1" + node-forge "^1.3.1" + pathe "^1.1.2" + std-env "^3.7.0" + ufo "^1.5.4" + untun "^0.1.3" + uqr "^0.1.2" + +local-pkg@^1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/local-pkg/-/local-pkg-1.1.2.tgz" + integrity sha512-arhlxbFRmoQHl33a0Zkle/YWlmNwoyt6QNZEIJcqNbdrsix5Lvc4HyyI3EnwxTYlZYc32EbYrQ8SzEZ7dqgg9A== + dependencies: + mlly "^1.7.4" + pkg-types "^2.3.0" + quansync "^0.2.11" + +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + +lodash.defaults@^4.2.0: + version "4.2.0" + resolved "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz" + integrity sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ== + +lodash.isarguments@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz" + integrity sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg== + +lodash.memoize@^4.1.2: + version "4.1.2" + resolved "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz" + integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag== + +lodash.merge@^4.6.2: + version "4.6.2" + resolved "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== + +lodash.uniq@^4.5.0: + version "4.5.0" + resolved "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz" + integrity sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ== + +lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.21: + version "4.17.23" + resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.23.tgz" + integrity sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w== + +lowercase-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz" + integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== + +lru-cache@^10.2.0, lru-cache@^10.4.3: + version "10.4.3" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz" + integrity sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ== + +lru-cache@^11.0.0: + version "11.2.5" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.5.tgz" + integrity sha512-vFrFJkWtJvJnD5hg+hJvVE8Lh/TcMzKnTgCWmtBipwI5yLX/iX+5UB2tfuyODF5E7k9xEzMdYgGqaSb1c0c5Yw== + +lru-cache@^11.2.0: + version "11.2.5" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.5.tgz" + integrity sha512-vFrFJkWtJvJnD5hg+hJvVE8Lh/TcMzKnTgCWmtBipwI5yLX/iX+5UB2tfuyODF5E7k9xEzMdYgGqaSb1c0c5Yw== + +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== + dependencies: + yallist "^3.0.2" + +magic-regexp@^0.10.0: + version "0.10.0" + resolved "https://registry.npmjs.org/magic-regexp/-/magic-regexp-0.10.0.tgz" + integrity sha512-Uly1Bu4lO1hwHUW0CQeSWuRtzCMNO00CmXtS8N6fyvB3B979GOEEeAkiTUDsmbYLAbvpUS/Kt5c4ibosAzVyVg== + dependencies: + estree-walker "^3.0.3" + magic-string "^0.30.12" + mlly "^1.7.2" + regexp-tree "^0.1.27" + type-level-regexp "~0.1.17" + ufo "^1.5.4" + unplugin "^2.0.0" + +magic-string-ast@^1.0.2: + version "1.0.3" + resolved "https://registry.npmjs.org/magic-string-ast/-/magic-string-ast-1.0.3.tgz" + integrity sha512-CvkkH1i81zl7mmb94DsRiFeG9V2fR2JeuK8yDgS8oiZSFa++wWLEgZ5ufEOyLHbvSbD1gTRKv9NdX69Rnvr9JA== + dependencies: + magic-string "^0.30.19" + +magic-string@^0.30.11, magic-string@^0.30.12, magic-string@^0.30.3: + version "0.30.17" + resolved "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz" + integrity sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA== + dependencies: + "@jridgewell/sourcemap-codec" "^1.5.0" + +magic-string@^0.30.19: + version "0.30.21" + resolved "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz" + integrity sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ== + dependencies: + "@jridgewell/sourcemap-codec" "^1.5.5" + +magic-string@^0.30.21: + version "0.30.21" + resolved "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz" + integrity sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ== + dependencies: + "@jridgewell/sourcemap-codec" "^1.5.5" + +magicast@*, magicast@^0.5.1: + version "0.5.1" + resolved "https://registry.npmjs.org/magicast/-/magicast-0.5.1.tgz" + integrity sha512-xrHS24IxaLrvuo613F719wvOIv9xPHFWQHuvGUBmPnCA/3MQxKI3b+r7n1jAoDHmsbC5bRhTZYR77invLAxVnw== + dependencies: + "@babel/parser" "^7.28.5" + "@babel/types" "^7.28.5" + source-map-js "^1.2.1" + +markdown-to-jsx@^7.7.15: + version "7.7.17" + resolved "https://registry.npmjs.org/markdown-to-jsx/-/markdown-to-jsx-7.7.17.tgz" + integrity sha512-7mG/1feQ0TX5I7YyMZVDgCC/y2I3CiEhIRQIhyov9nGBP5eoVrOXXHuL5ZP8GRfxVZKRiXWJgwXkb9It+nQZfQ== + +math-intrinsics@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz" + integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g== + +mdn-data@2.0.28: + version "2.0.28" + resolved "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz" + integrity sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g== + +mdn-data@2.0.30: + version "2.0.30" + resolved "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz" + integrity sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA== + +mdn-data@2.12.2: + version "2.12.2" + resolved "https://registry.npmjs.org/mdn-data/-/mdn-data-2.12.2.tgz" + integrity sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA== + +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz" + integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== + +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + +merge2@^1.3.0, merge2@^1.4.1: + version "1.4.1" + resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +metadata-scraper@^0.2.49: + version "0.2.61" + resolved "https://registry.npmjs.org/metadata-scraper/-/metadata-scraper-0.2.61.tgz" + integrity sha512-ECV8r10nIVgn7Y5vY8lnlvi9vF1YgYBJjn2R1zrOcKRe47ra9Yg25ZE1ejL3Equqi8u2Mp346KHqIcR4PLdyTA== + dependencies: + domino "^2.1.6" + got "^11.8.1" + +methods@^1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz" + integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== + +micromatch@^4.0.5, micromatch@^4.0.8: + version "4.0.8" + resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz" + integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== + dependencies: + braces "^3.0.3" + picomatch "^2.3.1" + +mime-db@^1.54.0: + version "1.54.0" + resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz" + integrity sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ== + +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-types@^2.1.12, mime-types@^2.1.18, mime-types@~2.1.24, mime-types@~2.1.34: + version "2.1.35" + resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + +mime-types@^3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz" + integrity sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A== + dependencies: + mime-db "^1.54.0" + +mime@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/mime/-/mime-4.1.0.tgz" + integrity sha512-X5ju04+cAzsojXKes0B/S4tcYtFAJ6tTMuSPBEn9CPGlrWr8Fiw7qYeLT0XyH80HSoAoqWCaz+MWKh22P7G1cw== + +mimic-fn@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz" + integrity sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw== + +mimic-response@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz" + integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== + +mimic-response@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz" + integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== + +minimatch@^10.1.1: + version "10.1.1" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-10.1.1.tgz" + integrity sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ== + dependencies: + "@isaacs/brace-expansion" "^5.0.0" + +minimatch@^3.0.5: + version "3.1.2" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimatch@^3.1.1: + version "3.1.2" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimatch@^3.1.2: + version "3.1.2" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimatch@^5.1.0: + version "5.1.6" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz" + integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== + dependencies: + brace-expansion "^2.0.1" + +minimatch@^9.0.4: + version "9.0.5" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz" + integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow== + dependencies: + brace-expansion "^2.0.1" + +minimatch@9.0.3: + version "9.0.3" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz" + integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== + dependencies: + brace-expansion "^2.0.1" + +minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.6: + version "1.2.8" + resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== + +"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.0.4, minipass@^7.1.2: + version "7.1.2" + resolved "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz" + integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw== + +minizlib@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/minizlib/-/minizlib-3.1.0.tgz" + integrity sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw== + dependencies: + minipass "^7.1.2" + +mitt@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/mitt/-/mitt-2.1.0.tgz" + integrity sha512-ILj2TpLiysu2wkBbWjAmww7TkZb65aiQO+DkVdUTBpBXq+MHYiETENkKFMtsJZX1Lf4pe4QOrTSjIfUwN5lRdg== + +mitt@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz" + integrity sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw== + +mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3: + version "0.5.3" + resolved "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz" + integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== + +mkdirp@^0.5.6: + version "0.5.6" + resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz" + integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== + dependencies: + minimist "^1.2.6" + +mkdirp@0.3.0: + version "0.3.0" + resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.0.tgz" + integrity sha512-OHsdUcVAQ6pOtg5JYWpCBo9W/GySVuwvP9hueRMW7UqshC0tbfzLv8wjySTPm3tfUZ/21CE9E1pJagOA91Pxew== + +mlly@^1.3.0, mlly@^1.7.1, mlly@^1.7.2, mlly@^1.7.4, mlly@^1.8.0: + version "1.8.0" + resolved "https://registry.npmjs.org/mlly/-/mlly-1.8.0.tgz" + integrity sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g== + dependencies: + acorn "^8.15.0" + pathe "^2.0.3" + pkg-types "^1.3.1" + ufo "^1.6.1" + +mocked-exports@^0.1.1: + version "0.1.1" + resolved "https://registry.npmjs.org/mocked-exports/-/mocked-exports-0.1.1.tgz" + integrity sha512-aF7yRQr/Q0O2/4pIXm6PZ5G+jAd7QS4Yu8m+WEeEHGnbo+7mE36CbLSDQiXYV8bVL3NfmdeqPJct0tUlnjVSnA== + +mrmime@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz" + integrity sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ== + +ms@^2.1.1, ms@^2.1.3: + version "2.1.3" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +muggle-string@^0.4.1: + version "0.4.1" + resolved "https://registry.npmjs.org/muggle-string/-/muggle-string-0.4.1.tgz" + integrity sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ== + +mz@^2.7.0: + version "2.7.0" + resolved "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz" + integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== + dependencies: + any-promise "^1.0.0" + object-assign "^4.0.1" + thenify-all "^1.0.0" + +nanoid@^3.3.11: + version "3.3.11" + resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz" + integrity sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w== + +nanoid@^5.1.5: + version "5.1.6" + resolved "https://registry.npmjs.org/nanoid/-/nanoid-5.1.6.tgz" + integrity sha512-c7+7RQ+dMB5dPwwCp4ee1/iV/q2P6aK1mTZcfr1BTuVlyW9hJYiMPybJCcnBlQtuSmTIWNeazm/zqNoZSSElBg== + +nanotar@^0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/nanotar/-/nanotar-0.2.0.tgz" + integrity sha512-9ca1h0Xjvo9bEkE4UOxgAzLV0jHKe6LMaxo37ND2DAhhAtd0j8pR1Wxz+/goMrZO8AEZTWCmyaOsFI/W5AdpCQ== + +napi-build-utils@^1.0.1: + version "1.0.2" + resolved "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz" + integrity sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg== + +napi-wasm@^1.1.0: + version "1.1.0" + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" + integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== + +negotiator@0.6.3: + version "0.6.3" + resolved "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz" + integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== + +nitropack@^2.13.1: + version "2.13.1" + resolved "https://registry.npmjs.org/nitropack/-/nitropack-2.13.1.tgz" + integrity sha512-2dDj89C4wC2uzG7guF3CnyG+zwkZosPEp7FFBGHB3AJo11AywOolWhyQJFHDzve8COvGxJaqscye9wW2IrUsNw== + dependencies: + "@cloudflare/kv-asset-handler" "^0.4.2" + "@rollup/plugin-alias" "^6.0.0" + "@rollup/plugin-commonjs" "^29.0.0" + "@rollup/plugin-inject" "^5.0.5" + "@rollup/plugin-json" "^6.1.0" + "@rollup/plugin-node-resolve" "^16.0.3" + "@rollup/plugin-replace" "^6.0.3" + "@rollup/plugin-terser" "^0.4.4" + "@vercel/nft" "^1.2.0" + archiver "^7.0.1" + c12 "^3.3.3" + chokidar "^5.0.0" + citty "^0.1.6" + compatx "^0.2.0" + confbox "^0.2.2" + consola "^3.4.2" + cookie-es "^2.0.0" + croner "^9.1.0" + crossws "^0.3.5" + db0 "^0.3.4" + defu "^6.1.4" + destr "^2.0.5" + dot-prop "^10.1.0" + esbuild "^0.27.2" + escape-string-regexp "^5.0.0" + etag "^1.8.1" + exsolve "^1.0.8" + globby "^16.1.0" + gzip-size "^7.0.0" + h3 "^1.15.5" + hookable "^5.5.3" + httpxy "^0.1.7" + ioredis "^5.9.1" + jiti "^2.6.1" + klona "^2.0.6" + knitwork "^1.3.0" + listhen "^1.9.0" + magic-string "^0.30.21" + magicast "^0.5.1" + mime "^4.1.0" + mlly "^1.8.0" + node-fetch-native "^1.6.7" + node-mock-http "^1.0.4" + ofetch "^1.5.1" + ohash "^2.0.11" + pathe "^2.0.3" + perfect-debounce "^2.0.0" + pkg-types "^2.3.0" + pretty-bytes "^7.1.0" + radix3 "^1.1.2" + rollup "^4.55.1" + rollup-plugin-visualizer "^6.0.5" + scule "^1.3.0" + semver "^7.7.3" + serve-placeholder "^2.0.2" + serve-static "^2.2.1" + source-map "^0.7.6" + std-env "^3.10.0" + ufo "^1.6.3" + ultrahtml "^1.6.0" + uncrypto "^0.1.3" + unctx "^2.5.0" + unenv "^2.0.0-rc.24" + unimport "^5.6.0" + unplugin-utils "^0.3.1" + unstorage "^1.17.4" + untyped "^2.0.0" + unwasm "^0.5.3" + youch "^4.1.0-beta.13" + youch-core "^0.3.3" + +node-abi@^3.3.0: + version "3.73.0" + resolved "https://registry.npmjs.org/node-abi/-/node-abi-3.73.0.tgz" + integrity sha512-z8iYzQGBu35ZkTQ9mtR8RqugJZ9RCLn8fv3d7LsgDBzOijGQP3RdKTX4LA7LXw03ZhU5z0l4xfhIMgSES31+cg== + dependencies: + semver "^7.3.5" + +node-addon-api@^6.1.0: + version "6.1.0" + resolved "https://registry.npmjs.org/node-addon-api/-/node-addon-api-6.1.0.tgz" + integrity sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA== + +node-addon-api@^7.0.0: + version "7.1.1" + resolved "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz" + integrity sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ== + +node-fetch-native@^1.6.2, node-fetch-native@^1.6.6, node-fetch-native@^1.6.7: + version "1.6.7" + resolved "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.6.7.tgz" + integrity sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q== + +node-fetch@^2.6.7: + version "2.7.0" + resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz" + integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== + dependencies: + whatwg-url "^5.0.0" + +node-forge@^1.3.1: + 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-gyp-build@^4.2.2: + version "4.8.4" + resolved "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.4.tgz" + integrity sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ== + +node-mock-http@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/node-mock-http/-/node-mock-http-1.0.4.tgz" + integrity sha512-8DY+kFsDkNXy1sJglUfuODx1/opAGJGyrTuFqEoN90oRc2Vk0ZbD4K2qmKXBBEhZQzdKHIVfEJpDU8Ak2NJEvQ== + +node-releases@^2.0.27: + version "2.0.27" + resolved "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz" + integrity sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA== + +nodemailer@^7.0.13: + version "7.0.13" + resolved "https://registry.npmjs.org/nodemailer/-/nodemailer-7.0.13.tgz" + integrity sha512-PNDFSJdP+KFgdsG3ZzMXCgquO7I6McjY2vlqILjtJd0hy8wEvtugS9xKRF2NWlPNGxvLCXlTNIae4serI7dinw== + +nopt@^8.0.0: + version "8.1.0" + resolved "https://registry.npmjs.org/nopt/-/nopt-8.1.0.tgz" + integrity sha512-ieGu42u/Qsa4TFktmaKEwM6MQH0pOWnaB3htzh0JRtx84+Mebc0cbZYN5bC+6WTZ4+77xrL9Pn5m7CV6VIkV7A== + dependencies: + abbrev "^3.0.0" + +nopt@1.0.10: + version "1.0.10" + resolved "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz" + integrity sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg== + dependencies: + abbrev "1" + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +normalize-url@^6.0.1: + version "6.1.0" + resolved "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz" + integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== + +npm-run-path@^5.1.0: + version "5.3.0" + resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz" + integrity sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ== + dependencies: + path-key "^4.0.0" + +npm-run-path@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-6.0.0.tgz" + integrity sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA== + dependencies: + path-key "^4.0.0" + unicorn-magic "^0.3.0" + +nth-check@^2.0.1, nth-check@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz" + integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w== + dependencies: + boolbase "^1.0.0" + +nuxt-jsonld@^2.0.8: + version "2.1.0" + resolved "https://registry.npmjs.org/nuxt-jsonld/-/nuxt-jsonld-2.1.0.tgz" + integrity sha512-DN737T3t/xzI+NP0Fwyet3Bm94fn7m9TIQMIgBcBzLxg/eszQSgxXVXzumcuCiX5VA4mVoBHyGjgbIwMzS1H2w== + dependencies: + pathe "^1.1.2" + schema-dts "^1.1.2" + +nuxt@^3.15.2, nuxt@^3.21.0, nuxt@3.21.0: + version "3.21.0" + resolved "https://registry.npmjs.org/nuxt/-/nuxt-3.21.0.tgz" + integrity sha512-K3vX68M0lXbqzvehWb+y6/YqAF+m7MEQQ3mtbcm34ynzB6OpFOJoZV9scBzFd5LehLoYl55CSNpY5vsupyJw7Q== + dependencies: + "@dxup/nuxt" "^0.3.2" + "@nuxt/cli" "^3.32.0" + "@nuxt/devtools" "^3.1.1" + "@nuxt/kit" "3.21.0" + "@nuxt/nitro-server" "3.21.0" + "@nuxt/schema" "3.21.0" + "@nuxt/telemetry" "^2.6.6" + "@nuxt/vite-builder" "3.21.0" + "@unhead/vue" "^2.1.2" + "@vue/shared" "^3.5.27" + c12 "^3.3.3" + chokidar "^5.0.0" + compatx "^0.2.0" + consola "^3.4.2" + cookie-es "^2.0.0" + defu "^6.1.4" + destr "^2.0.5" + devalue "^5.6.2" + errx "^0.1.0" + escape-string-regexp "^5.0.0" + exsolve "^1.0.8" + h3 "^1.15.5" + hookable "^5.5.3" + ignore "^7.0.5" + impound "^1.0.0" + jiti "^2.6.1" + klona "^2.0.6" + knitwork "^1.3.0" + magic-string "^0.30.21" + mlly "^1.8.0" + nanotar "^0.2.0" + nypm "^0.6.2" + ofetch "^1.5.1" + ohash "^2.0.11" + on-change "^6.0.1" + oxc-minify "^0.110.0" + oxc-parser "^0.110.0" + oxc-transform "^0.110.0" + oxc-walker "^0.7.0" + pathe "^2.0.3" + perfect-debounce "^2.0.0" + pkg-types "^2.3.0" + rou3 "^0.7.12" + scule "^1.3.0" + semver "^7.7.3" + std-env "^3.10.0" + tinyglobby "^0.2.15" + ufo "^1.6.3" + ultrahtml "^1.6.0" + uncrypto "^0.1.3" + unctx "^2.5.0" + unimport "^5.6.0" + unplugin "^2.3.11" + unplugin-vue-router "^0.19.2" + untyped "^2.0.0" + vue "^3.5.27" + vue-router "^4.6.4" + +nwsapi@^2.2.16: + version "2.2.16" + resolved "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.16.tgz" + integrity sha512-F1I/bimDpj3ncaNDhfyMWuFqmQDBwDB0Fogc2qpL3BWvkQteFD/8BzWuIRl83rq0DXfm8SGt/HFhLXZyljTXcQ== + +nypm@^0.6.0, nypm@^0.6.2: + version "0.6.4" + resolved "https://registry.npmjs.org/nypm/-/nypm-0.6.4.tgz" + integrity sha512-1TvCKjZyyklN+JJj2TS3P4uSQEInrM/HkkuSXsEzm1ApPgBffOn8gFguNnZf07r/1X6vlryfIqMUkJKQMzlZiw== + dependencies: + citty "^0.2.0" + pathe "^2.0.3" + tinyexec "^1.0.2" + +object-assign@^4.0.1: + version "4.1.1" + resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" + integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== + +object-hash@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz" + integrity sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw== + +object-inspect@^1.13.3: + version "1.13.4" + resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz" + integrity sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew== + +obug@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/obug/-/obug-2.1.1.tgz" + integrity sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ== + +ofetch@^1.3.3, ofetch@^1.4.1, ofetch@^1.5.1: + version "1.5.1" + resolved "https://registry.npmjs.org/ofetch/-/ofetch-1.5.1.tgz" + integrity sha512-2W4oUZlVaqAPAil6FUg/difl6YhqhUR7x2eZY4bQCko22UXg3hptq9KLQdqFClV+Wu85UX7hNtdGTngi/1BxcA== + dependencies: + destr "^2.0.5" + node-fetch-native "^1.6.7" + ufo "^1.6.1" + +ohash@^1.1.3: + version "1.1.4" + resolved "https://registry.npmjs.org/ohash/-/ohash-1.1.4.tgz" + integrity sha512-FlDryZAahJmEF3VR3w1KogSEdWX3WhA5GPakFx4J81kEAiHyLMpdLLElS8n8dfNadMgAne/MywcvmogzscVt4g== + +ohash@^2.0.11: + version "2.0.11" + resolved "https://registry.npmjs.org/ohash/-/ohash-2.0.11.tgz" + integrity sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ== + +on-change@^6.0.1: + version "6.0.2" + resolved "https://registry.npmjs.org/on-change/-/on-change-6.0.2.tgz" + integrity sha512-08+12qcOVEA0fS9g/VxKS27HaT94nRutUT77J2dr8zv/unzXopvhBuF8tNLWsoLQ5IgrQ6eptGeGqUYat82U1w== + +on-finished@^2.3.0, on-finished@^2.4.1: + version "2.4.1" + resolved "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz" + integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== + dependencies: + ee-first "1.1.1" + +once@^1.3.0, once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + +onetime@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz" + integrity sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ== + dependencies: + mimic-fn "^4.0.0" + +only@~0.0.2: + version "0.0.2" + resolved "https://registry.npmjs.org/only/-/only-0.0.2.tgz" + integrity sha512-Fvw+Jemq5fjjyWz6CpKx6w9s7xxqo3+JCyM0WXWeCSOboZ8ABkyvP8ID4CZuChA/wxSx+XSJmdOm8rGVyJ1hdQ== + +open@^10.2.0: + version "10.2.0" + resolved "https://registry.npmjs.org/open/-/open-10.2.0.tgz" + integrity sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA== + dependencies: + default-browser "^5.2.1" + define-lazy-prop "^3.0.0" + is-inside-container "^1.0.0" + wsl-utils "^0.1.0" + +open@^7.0.4: + version "7.4.2" + resolved "https://registry.npmjs.org/open/-/open-7.4.2.tgz" + integrity sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q== + dependencies: + is-docker "^2.0.0" + is-wsl "^2.1.1" + +open@^8.0.0: + version "8.4.2" + resolved "https://registry.npmjs.org/open/-/open-8.4.2.tgz" + integrity sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ== + dependencies: + define-lazy-prop "^2.0.0" + is-docker "^2.1.1" + is-wsl "^2.2.0" + +optionator@^0.9.3, optionator@^0.9.4: + version "0.9.4" + resolved "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz" + integrity sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g== + dependencies: + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + word-wrap "^1.2.5" + +oxc-minify@^0.110.0: + version "0.110.0" + resolved "https://registry.npmjs.org/oxc-minify/-/oxc-minify-0.110.0.tgz" + integrity sha512-KWGTzPo83QmGrXC4ml83PM9HDwUPtZFfasiclUvTV4i3/0j7xRRqINVkrL77CbQnoWura3CMxkRofjQKVDuhBw== + optionalDependencies: + "@oxc-minify/binding-android-arm-eabi" "0.110.0" + "@oxc-minify/binding-android-arm64" "0.110.0" + "@oxc-minify/binding-darwin-arm64" "0.110.0" + "@oxc-minify/binding-darwin-x64" "0.110.0" + "@oxc-minify/binding-freebsd-x64" "0.110.0" + "@oxc-minify/binding-linux-arm-gnueabihf" "0.110.0" + "@oxc-minify/binding-linux-arm-musleabihf" "0.110.0" + "@oxc-minify/binding-linux-arm64-gnu" "0.110.0" + "@oxc-minify/binding-linux-arm64-musl" "0.110.0" + "@oxc-minify/binding-linux-ppc64-gnu" "0.110.0" + "@oxc-minify/binding-linux-riscv64-gnu" "0.110.0" + "@oxc-minify/binding-linux-riscv64-musl" "0.110.0" + "@oxc-minify/binding-linux-s390x-gnu" "0.110.0" + "@oxc-minify/binding-linux-x64-gnu" "0.110.0" + "@oxc-minify/binding-linux-x64-musl" "0.110.0" + "@oxc-minify/binding-openharmony-arm64" "0.110.0" + "@oxc-minify/binding-wasm32-wasi" "0.110.0" + "@oxc-minify/binding-win32-arm64-msvc" "0.110.0" + "@oxc-minify/binding-win32-ia32-msvc" "0.110.0" + "@oxc-minify/binding-win32-x64-msvc" "0.110.0" + +oxc-parser@^0.110.0, oxc-parser@>=0.98.0: + version "0.110.0" + resolved "https://registry.npmjs.org/oxc-parser/-/oxc-parser-0.110.0.tgz" + integrity sha512-GijUR3K1Ln/QwMyYXRsBtOyzqGaCs9ce5pOug1UtrMg8dSiE7VuuRuIcyYD4nyJbasat3K0YljiKt/PSFPdSBA== + dependencies: + "@oxc-project/types" "^0.110.0" + optionalDependencies: + "@oxc-parser/binding-android-arm-eabi" "0.110.0" + "@oxc-parser/binding-android-arm64" "0.110.0" + "@oxc-parser/binding-darwin-arm64" "0.110.0" + "@oxc-parser/binding-darwin-x64" "0.110.0" + "@oxc-parser/binding-freebsd-x64" "0.110.0" + "@oxc-parser/binding-linux-arm-gnueabihf" "0.110.0" + "@oxc-parser/binding-linux-arm-musleabihf" "0.110.0" + "@oxc-parser/binding-linux-arm64-gnu" "0.110.0" + "@oxc-parser/binding-linux-arm64-musl" "0.110.0" + "@oxc-parser/binding-linux-ppc64-gnu" "0.110.0" + "@oxc-parser/binding-linux-riscv64-gnu" "0.110.0" + "@oxc-parser/binding-linux-riscv64-musl" "0.110.0" + "@oxc-parser/binding-linux-s390x-gnu" "0.110.0" + "@oxc-parser/binding-linux-x64-gnu" "0.110.0" + "@oxc-parser/binding-linux-x64-musl" "0.110.0" + "@oxc-parser/binding-openharmony-arm64" "0.110.0" + "@oxc-parser/binding-wasm32-wasi" "0.110.0" + "@oxc-parser/binding-win32-arm64-msvc" "0.110.0" + "@oxc-parser/binding-win32-ia32-msvc" "0.110.0" + "@oxc-parser/binding-win32-x64-msvc" "0.110.0" + +oxc-transform@^0.110.0: + version "0.110.0" + resolved "https://registry.npmjs.org/oxc-transform/-/oxc-transform-0.110.0.tgz" + integrity sha512-/fymQNzzUoKZweH0nC5yvbI2eR0yWYusT9TEKDYVgOgYrf9Qmdez9lUFyvxKR9ycx+PTHi/reIOzqf3wkShQsw== + optionalDependencies: + "@oxc-transform/binding-android-arm-eabi" "0.110.0" + "@oxc-transform/binding-android-arm64" "0.110.0" + "@oxc-transform/binding-darwin-arm64" "0.110.0" + "@oxc-transform/binding-darwin-x64" "0.110.0" + "@oxc-transform/binding-freebsd-x64" "0.110.0" + "@oxc-transform/binding-linux-arm-gnueabihf" "0.110.0" + "@oxc-transform/binding-linux-arm-musleabihf" "0.110.0" + "@oxc-transform/binding-linux-arm64-gnu" "0.110.0" + "@oxc-transform/binding-linux-arm64-musl" "0.110.0" + "@oxc-transform/binding-linux-ppc64-gnu" "0.110.0" + "@oxc-transform/binding-linux-riscv64-gnu" "0.110.0" + "@oxc-transform/binding-linux-riscv64-musl" "0.110.0" + "@oxc-transform/binding-linux-s390x-gnu" "0.110.0" + "@oxc-transform/binding-linux-x64-gnu" "0.110.0" + "@oxc-transform/binding-linux-x64-musl" "0.110.0" + "@oxc-transform/binding-openharmony-arm64" "0.110.0" + "@oxc-transform/binding-wasm32-wasi" "0.110.0" + "@oxc-transform/binding-win32-arm64-msvc" "0.110.0" + "@oxc-transform/binding-win32-ia32-msvc" "0.110.0" + "@oxc-transform/binding-win32-x64-msvc" "0.110.0" + +oxc-walker@^0.7.0: + version "0.7.0" + resolved "https://registry.npmjs.org/oxc-walker/-/oxc-walker-0.7.0.tgz" + integrity sha512-54B4KUhrzbzc4sKvKwVYm7E2PgeROpGba0/2nlNZMqfDyca+yOor5IMb4WLGBatGDT0nkzYdYuzylg7n3YfB7A== + dependencies: + magic-regexp "^0.10.0" + +p-cancelable@^2.0.0: + version "2.1.1" + resolved "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz" + integrity sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg== + +p-limit@^3.0.2: + version "3.1.0" + resolved "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-locate@^5.0.0: + 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== + dependencies: + p-limit "^3.0.2" + +package-json-from-dist@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz" + integrity sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw== + +package-manager-detector@^1.1.0: + version "1.6.0" + resolved "https://registry.npmjs.org/package-manager-detector/-/package-manager-detector-1.6.0.tgz" + integrity sha512-61A5ThoTiDG/C8s8UMZwSorAGwMJ0ERVGj2OjoW5pAalsNOg15+iQiPzrLJ4jhZ1HJzmC2PIHT2oEiH3R5fzNA== + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + +parse-path@^7.0.0: + version "7.1.0" + resolved "https://registry.npmjs.org/parse-path/-/parse-path-7.1.0.tgz" + integrity sha512-EuCycjZtfPcjWk7KTksnJ5xPMvWGA/6i4zrLYhRG0hGvC3GPU/jGUj3Cy+ZR0v30duV3e23R95T1lE2+lsndSw== + dependencies: + protocols "^2.0.0" + +parse-url@^9.2.0: + version "9.2.0" + resolved "https://registry.npmjs.org/parse-url/-/parse-url-9.2.0.tgz" + integrity sha512-bCgsFI+GeGWPAvAiUv63ZorMeif3/U0zaXABGJbOWt5OH2KCaPHF6S+0ok4aqM9RuIPGyZdx9tR9l13PsW4AYQ== + dependencies: + "@types/parse-path" "^7.0.0" + parse-path "^7.0.0" + +parse5@^7.2.1: + version "7.2.1" + resolved "https://registry.npmjs.org/parse5/-/parse5-7.2.1.tgz" + integrity sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ== + dependencies: + entities "^4.5.0" + +parseurl@^1.3.2, parseurl@^1.3.3: + version "1.3.3" + resolved "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz" + integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== + +path-browserify@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz" + integrity sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g== + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0, path-is-absolute@1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + +path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-key@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz" + integrity sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ== + +path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +path-scurry@^1.11.1: + version "1.11.1" + resolved "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz" + integrity sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA== + dependencies: + lru-cache "^10.2.0" + minipass "^5.0.0 || ^6.0.2 || ^7.0.0" + +path-scurry@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.1.tgz" + integrity sha512-oWyT4gICAu+kaA7QWk/jvCHWarMKNs6pXOGWKDTr7cw4IGcUbW+PeTfbaQiLGheFRpjo6O9J0PmyMfQPjH71oA== + dependencies: + lru-cache "^11.0.0" + minipass "^7.1.2" + +path-to-regexp@^6.3.0: + version "6.3.0" + resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.3.0.tgz" + integrity sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ== + +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + +pathe@^1.1.1, pathe@^1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz" + integrity sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ== + +pathe@^2.0.1: + version "2.0.2" + resolved "https://registry.npmjs.org/pathe/-/pathe-2.0.2.tgz" + integrity sha512-15Ztpk+nov8DR524R4BF7uEuzESgzUEAV4Ah7CUMNGXdE5ELuvxElxGXndBl32vMSsWa1jpNf22Z+Er3sKwq+w== + +pathe@^2.0.3: + version "2.0.3" + resolved "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz" + integrity sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w== + +perfect-debounce@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-2.1.0.tgz" + integrity sha512-LjgdTytVFXeUgtHZr9WYViYSM/g8MkcTPYDlPa3cDqMirHjKiSZPYd6DoL7pK8AJQr+uWkQvCjHNdiMqsrJs+g== + +picocolors@^1.0.0, picocolors@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz" + integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== + +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: + version "2.3.1" + resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +"picomatch@^3 || ^4", picomatch@^4.0.2, picomatch@^4.0.3: + version "4.0.3" + resolved "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz" + integrity sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q== + +pify@^2.3.0: + version "2.3.0" + resolved "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz" + integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== + +pinia@^2.1.7, pinia@^2.2.3: + version "2.3.0" + resolved "https://registry.npmjs.org/pinia/-/pinia-2.3.0.tgz" + integrity sha512-ohZj3jla0LL0OH5PlLTDMzqKiVw2XARmC1XYLdLWIPBMdhDW/123ZWr4zVAhtJm+aoSkFa13pYXskAvAscIkhQ== + dependencies: + "@vue/devtools-api" "^6.6.3" + vue-demi "^0.14.10" + +pirates@^4.0.1: + version "4.0.6" + resolved "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz" + integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg== + +pkg-types@^1.3.1: + version "1.3.1" + resolved "https://registry.npmjs.org/pkg-types/-/pkg-types-1.3.1.tgz" + integrity sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ== + dependencies: + confbox "^0.1.8" + mlly "^1.7.4" + pathe "^2.0.1" + +pkg-types@^2.1.0: + version "2.3.0" + resolved "https://registry.npmjs.org/pkg-types/-/pkg-types-2.3.0.tgz" + integrity sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig== + dependencies: + confbox "^0.2.2" + exsolve "^1.0.7" + pathe "^2.0.3" + +pkg-types@^2.3.0: + version "2.3.0" + resolved "https://registry.npmjs.org/pkg-types/-/pkg-types-2.3.0.tgz" + integrity sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig== + dependencies: + confbox "^0.2.2" + exsolve "^1.0.7" + pathe "^2.0.3" + +portfinder@^1.0.26: + version "1.0.32" + resolved "https://registry.npmjs.org/portfinder/-/portfinder-1.0.32.tgz" + integrity sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg== + dependencies: + async "^2.6.4" + debug "^3.2.7" + mkdirp "^0.5.6" + +postcss-calc@^10.1.1: + version "10.1.1" + resolved "https://registry.npmjs.org/postcss-calc/-/postcss-calc-10.1.1.tgz" + integrity sha512-NYEsLHh8DgG/PRH2+G9BTuUdtf9ViS+vdoQ0YA5OQdGsfN4ztiwtDWNtBl9EKeqNMFnIu8IKZ0cLxEQ5r5KVMw== + dependencies: + postcss-selector-parser "^7.0.0" + postcss-value-parser "^4.2.0" + +postcss-colormin@^7.0.5: + version "7.0.5" + resolved "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-7.0.5.tgz" + integrity sha512-ekIBP/nwzRWhEMmIxHHbXHcMdzd1HIUzBECaj5KEdLz9DVP2HzT065sEhvOx1dkLjYW7jyD0CngThx6bpFi2fA== + dependencies: + browserslist "^4.27.0" + caniuse-api "^3.0.0" + colord "^2.9.3" + postcss-value-parser "^4.2.0" + +postcss-convert-values@^7.0.8: + version "7.0.8" + resolved "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-7.0.8.tgz" + integrity sha512-+XNKuPfkHTCEo499VzLMYn94TiL3r9YqRE3Ty+jP7UX4qjewUONey1t7CG21lrlTLN07GtGM8MqFVp86D4uKJg== + dependencies: + browserslist "^4.27.0" + postcss-value-parser "^4.2.0" + +postcss-discard-comments@^7.0.5: + version "7.0.5" + resolved "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-7.0.5.tgz" + integrity sha512-IR2Eja8WfYgN5n32vEGSctVQ1+JARfu4UH8M7bgGh1bC+xI/obsPJXaBpQF7MAByvgwZinhpHpdrmXtvVVlKcQ== + dependencies: + postcss-selector-parser "^7.1.0" + +postcss-discard-duplicates@^7.0.2: + version "7.0.2" + resolved "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-7.0.2.tgz" + integrity sha512-eTonaQvPZ/3i1ASDHOKkYwAybiM45zFIc7KXils4mQmHLqIswXD9XNOKEVxtTFnsmwYzF66u4LMgSr0abDlh5w== + +postcss-discard-empty@^7.0.1: + version "7.0.1" + resolved "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-7.0.1.tgz" + integrity sha512-cFrJKZvcg/uxB6Ijr4l6qmn3pXQBna9zyrPC+sK0zjbkDUZew+6xDltSF7OeB7rAtzaaMVYSdbod+sZOCWnMOg== + +postcss-discard-overridden@^7.0.1: + version "7.0.1" + resolved "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-7.0.1.tgz" + integrity sha512-7c3MMjjSZ/qYrx3uc1940GSOzN1Iqjtlqe8uoSg+qdVPYyRb0TILSqqmtlSFuE4mTDECwsm397Ya7iXGzfF7lg== + +postcss-import@^15.1.0: + version "15.1.0" + resolved "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz" + integrity sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew== + dependencies: + postcss-value-parser "^4.0.0" + read-cache "^1.0.0" + resolve "^1.1.7" + +postcss-js@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz" + integrity sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw== + dependencies: + camelcase-css "^2.0.1" + +postcss-load-config@^4.0.2: + version "4.0.2" + resolved "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz" + integrity sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ== + dependencies: + lilconfig "^3.0.0" + yaml "^2.3.4" + +postcss-merge-longhand@^7.0.5: + version "7.0.5" + resolved "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-7.0.5.tgz" + integrity sha512-Kpu5v4Ys6QI59FxmxtNB/iHUVDn9Y9sYw66D6+SZoIk4QTz1prC4aYkhIESu+ieG1iylod1f8MILMs1Em3mmIw== + dependencies: + postcss-value-parser "^4.2.0" + stylehacks "^7.0.5" + +postcss-merge-rules@^7.0.7: + version "7.0.7" + resolved "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-7.0.7.tgz" + integrity sha512-njWJrd/Ms6XViwowaaCc+/vqhPG3SmXn725AGrnl+BgTuRPEacjiLEaGq16J6XirMJbtKkTwnt67SS+e2WGoew== + dependencies: + browserslist "^4.27.0" + caniuse-api "^3.0.0" + cssnano-utils "^5.0.1" + postcss-selector-parser "^7.1.0" + +postcss-minify-font-values@^7.0.1: + version "7.0.1" + resolved "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-7.0.1.tgz" + integrity sha512-2m1uiuJeTplll+tq4ENOQSzB8LRnSUChBv7oSyFLsJRtUgAAJGP6LLz0/8lkinTgxrmJSPOEhgY1bMXOQ4ZXhQ== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-minify-gradients@^7.0.1: + version "7.0.1" + resolved "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-7.0.1.tgz" + integrity sha512-X9JjaysZJwlqNkJbUDgOclyG3jZEpAMOfof6PUZjPnPrePnPG62pS17CjdM32uT1Uq1jFvNSff9l7kNbmMSL2A== + dependencies: + colord "^2.9.3" + cssnano-utils "^5.0.1" + postcss-value-parser "^4.2.0" + +postcss-minify-params@^7.0.5: + version "7.0.5" + resolved "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-7.0.5.tgz" + integrity sha512-FGK9ky02h6Ighn3UihsyeAH5XmLEE2MSGH5Tc4tXMFtEDx7B+zTG6hD/+/cT+fbF7PbYojsmmWjyTwFwW1JKQQ== + dependencies: + browserslist "^4.27.0" + cssnano-utils "^5.0.1" + postcss-value-parser "^4.2.0" + +postcss-minify-selectors@^7.0.5: + version "7.0.5" + resolved "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-7.0.5.tgz" + integrity sha512-x2/IvofHcdIrAm9Q+p06ZD1h6FPcQ32WtCRVodJLDR+WMn8EVHI1kvLxZuGKz/9EY5nAmI6lIQIrpo4tBy5+ug== + dependencies: + cssesc "^3.0.0" + postcss-selector-parser "^7.1.0" + +postcss-nested@^6.2.0: + version "6.2.0" + resolved "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz" + integrity sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ== + dependencies: + postcss-selector-parser "^6.1.1" + +postcss-nesting@^13.0.1: + version "13.0.1" + resolved "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-13.0.1.tgz" + integrity sha512-VbqqHkOBOt4Uu3G8Dm8n6lU5+9cJFxiuty9+4rcoyRPO9zZS1JIs6td49VIoix3qYqELHlJIn46Oih9SAKo+yQ== + dependencies: + "@csstools/selector-resolve-nested" "^3.0.0" + "@csstools/selector-specificity" "^5.0.0" + postcss-selector-parser "^7.0.0" + +postcss-normalize-charset@^7.0.1: + version "7.0.1" + resolved "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-7.0.1.tgz" + integrity sha512-sn413ofhSQHlZFae//m9FTOfkmiZ+YQXsbosqOWRiVQncU2BA3daX3n0VF3cG6rGLSFVc5Di/yns0dFfh8NFgQ== + +postcss-normalize-display-values@^7.0.1: + version "7.0.1" + resolved "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-7.0.1.tgz" + integrity sha512-E5nnB26XjSYz/mGITm6JgiDpAbVuAkzXwLzRZtts19jHDUBFxZ0BkXAehy0uimrOjYJbocby4FVswA/5noOxrQ== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-normalize-positions@^7.0.1: + version "7.0.1" + resolved "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-7.0.1.tgz" + integrity sha512-pB/SzrIP2l50ZIYu+yQZyMNmnAcwyYb9R1fVWPRxm4zcUFCY2ign7rcntGFuMXDdd9L2pPNUgoODDk91PzRZuQ== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-normalize-repeat-style@^7.0.1: + version "7.0.1" + resolved "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-7.0.1.tgz" + integrity sha512-NsSQJ8zj8TIDiF0ig44Byo3Jk9e4gNt9x2VIlJudnQQ5DhWAHJPF4Tr1ITwyHio2BUi/I6Iv0HRO7beHYOloYQ== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-normalize-string@^7.0.1: + version "7.0.1" + resolved "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-7.0.1.tgz" + integrity sha512-QByrI7hAhsoze992kpbMlJSbZ8FuCEc1OT9EFbZ6HldXNpsdpZr+YXC5di3UEv0+jeZlHbZcoCADgb7a+lPmmQ== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-normalize-timing-functions@^7.0.1: + version "7.0.1" + resolved "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-7.0.1.tgz" + integrity sha512-bHifyuuSNdKKsnNJ0s8fmfLMlvsQwYVxIoUBnowIVl2ZAdrkYQNGVB4RxjfpvkMjipqvbz0u7feBZybkl/6NJg== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-normalize-unicode@^7.0.5: + version "7.0.5" + resolved "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-7.0.5.tgz" + integrity sha512-X6BBwiRxVaFHrb2WyBMddIeB5HBjJcAaUHyhLrM2FsxSq5TFqcHSsK7Zu1otag+o0ZphQGJewGH1tAyrD0zX1Q== + dependencies: + browserslist "^4.27.0" + postcss-value-parser "^4.2.0" + +postcss-normalize-url@^7.0.1: + version "7.0.1" + resolved "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-7.0.1.tgz" + integrity sha512-sUcD2cWtyK1AOL/82Fwy1aIVm/wwj5SdZkgZ3QiUzSzQQofrbq15jWJ3BA7Z+yVRwamCjJgZJN0I9IS7c6tgeQ== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-normalize-whitespace@^7.0.1: + version "7.0.1" + resolved "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-7.0.1.tgz" + integrity sha512-vsbgFHMFQrJBJKrUFJNZ2pgBeBkC2IvvoHjz1to0/0Xk7sII24T0qFOiJzG6Fu3zJoq/0yI4rKWi7WhApW+EFA== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-ordered-values@^7.0.2: + version "7.0.2" + resolved "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-7.0.2.tgz" + integrity sha512-AMJjt1ECBffF7CEON/Y0rekRLS6KsePU6PRP08UqYW4UGFRnTXNrByUzYK1h8AC7UWTZdQ9O3Oq9kFIhm0SFEw== + dependencies: + cssnano-utils "^5.0.1" + postcss-value-parser "^4.2.0" + +postcss-reduce-initial@^7.0.5: + version "7.0.5" + resolved "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-7.0.5.tgz" + integrity sha512-RHagHLidG8hTZcnr4FpyMB2jtgd/OcyAazjMhoy5qmWJOx1uxKh4ntk0Pb46ajKM0rkf32lRH4C8c9qQiPR6IA== + dependencies: + browserslist "^4.27.0" + caniuse-api "^3.0.0" + +postcss-reduce-transforms@^7.0.1: + version "7.0.1" + resolved "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-7.0.1.tgz" + integrity sha512-MhyEbfrm+Mlp/36hvZ9mT9DaO7dbncU0CvWI8V93LRkY6IYlu38OPg3FObnuKTUxJ4qA8HpurdQOo5CyqqO76g== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-selector-parser@^6.0.15, postcss-selector-parser@^6.1.1, postcss-selector-parser@^6.1.2: + version "6.1.2" + resolved "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz" + integrity sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg== + dependencies: + cssesc "^3.0.0" + util-deprecate "^1.0.2" + +postcss-selector-parser@^7.0.0: + version "7.1.1" + resolved "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz" + integrity sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg== + dependencies: + cssesc "^3.0.0" + util-deprecate "^1.0.2" + +postcss-selector-parser@^7.1.0: + version "7.1.1" + resolved "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz" + integrity sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg== + dependencies: + cssesc "^3.0.0" + util-deprecate "^1.0.2" + +postcss-svgo@^7.1.0: + version "7.1.0" + resolved "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-7.1.0.tgz" + integrity sha512-KnAlfmhtoLz6IuU3Sij2ycusNs4jPW+QoFE5kuuUOK8awR6tMxZQrs5Ey3BUz7nFCzT3eqyFgqkyrHiaU2xx3w== + dependencies: + postcss-value-parser "^4.2.0" + svgo "^4.0.0" + +postcss-unique-selectors@^7.0.4: + version "7.0.4" + resolved "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-7.0.4.tgz" + integrity sha512-pmlZjsmEAG7cHd7uK3ZiNSW6otSZ13RHuZ/4cDN/bVglS5EpF2r2oxY99SuOHa8m7AWoBCelTS3JPpzsIs8skQ== + dependencies: + postcss-selector-parser "^7.1.0" + +postcss-value-parser@^4.0.0, postcss-value-parser@^4.2.0: + version "4.2.0" + resolved "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz" + integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== + +postcss@^8.0.0, postcss@^8.0.9, postcss@^8.1.0, postcss@^8.2.14, postcss@^8.4, postcss@^8.4.21, postcss@^8.4.32, postcss@^8.4.35, postcss@^8.4.38, postcss@^8.4.47, postcss@^8.4.48, postcss@^8.5.3, postcss@^8.5.6, postcss@>=8.0.9: + version "8.5.6" + resolved "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz" + integrity sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg== + dependencies: + nanoid "^3.3.11" + picocolors "^1.1.1" + source-map-js "^1.2.1" + +preact@^10.10.0: + version "10.28.3" + resolved "https://registry.npmjs.org/preact/-/preact-10.28.3.tgz" + integrity sha512-tCmoRkPQLpBeWzpmbhryairGnhW9tKV6c6gr/w+RhoRoKEJwsjzipwp//1oCpGPOchvSLaAPlpcJi9MwMmoPyA== + +prebuild-install@^7.1.1: + version "7.1.2" + resolved "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.2.tgz" + integrity sha512-UnNke3IQb6sgarcZIDU3gbMeTp/9SSU1DAIkil7PrqG1vZlBtY5msYccSKSHDqa3hNg436IXK+SNImReuA1wEQ== + dependencies: + detect-libc "^2.0.0" + expand-template "^2.0.3" + github-from-package "0.0.0" + minimist "^1.2.3" + mkdirp-classic "^0.5.3" + napi-build-utils "^1.0.1" + node-abi "^3.3.0" + pump "^3.0.0" + rc "^1.2.7" + simple-get "^4.0.0" + tar-fs "^2.0.0" + tunnel-agent "^0.6.0" + +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== + +prettier-plugin-tailwindcss@^0.5.11: + version "0.5.14" + resolved "https://registry.npmjs.org/prettier-plugin-tailwindcss/-/prettier-plugin-tailwindcss-0.5.14.tgz" + integrity sha512-Puaz+wPUAhFp8Lo9HuciYKM2Y2XExESjeT+9NQoVFXZsPPnc9VYss2SpxdQ6vbatmt8/4+SN0oe0I1cPDABg9Q== + +prettier@^3.0, prettier@^3.2.5, "prettier@2 || 3": + version "3.4.2" + resolved "https://registry.npmjs.org/prettier/-/prettier-3.4.2.tgz" + integrity sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ== + +pretty-bytes@^7.1.0: + version "7.1.0" + resolved "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-7.1.0.tgz" + integrity sha512-nODzvTiYVRGRqAOvE84Vk5JDPyyxsVk0/fbA/bq7RqlnhksGpset09XTxbpvLTIjoaF7K8Z8DG8yHtKGTPSYRw== + +process-nextick-args@~2.0.0: + 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== + +process@^0.11.10: + version "0.11.10" + resolved "https://registry.npmjs.org/process/-/process-0.11.10.tgz" + integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== + +prompts@^2.4.2: + version "2.4.2" + resolved "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz" + integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== + dependencies: + kleur "^3.0.3" + sisteransi "^1.0.5" + +protocols@^2.0.0, protocols@^2.0.1: + version "2.0.2" + resolved "https://registry.npmjs.org/protocols/-/protocols-2.0.2.tgz" + integrity sha512-hHVTzba3wboROl0/aWRRG9dMytgH6ow//STBZh43l/wQgmMhYhOFi0EHWAPtoCz9IAUymsyP0TSBHkhgMEGNnQ== + +proxy-from-env@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz" + integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== + +pump@^3.0.0: + version "3.0.2" + resolved "https://registry.npmjs.org/pump/-/pump-3.0.2.tgz" + integrity sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +punycode@^2.1.0, punycode@^2.3.1: + version "2.3.1" + resolved "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz" + integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== + +qs@^6.5.1: + version "6.14.1" + resolved "https://registry.npmjs.org/qs/-/qs-6.14.1.tgz" + integrity sha512-4EK3+xJl8Ts67nLYNwqw/dsFVnCf+qR7RgXSK9jEEm9unao3njwMDdmsdvoKBKHzxd7tCYz5e5M+SnMjdtXGQQ== + dependencies: + side-channel "^1.1.0" + +quansync@^0.2.11: + version "0.2.11" + resolved "https://registry.npmjs.org/quansync/-/quansync-0.2.11.tgz" + integrity sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA== + +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + +queue-tick@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz" + integrity sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag== + +quick-lru@^5.1.1: + version "5.1.1" + resolved "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz" + integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== + +radix3@^1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/radix3/-/radix3-1.1.2.tgz" + integrity sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA== + +randombytes@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + dependencies: + safe-buffer "^5.1.0" + +range-parser@^1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz" + integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== + +rc@^1.2.7: + version "1.2.8" + resolved "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz" + integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== + dependencies: + deep-extend "^0.6.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" + +rc9@^2.1.2: + version "2.1.2" + resolved "https://registry.npmjs.org/rc9/-/rc9-2.1.2.tgz" + integrity sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg== + dependencies: + defu "^6.1.4" + destr "^2.0.3" + +"react@>= 0.14.0": + version "19.2.4" + resolved "https://registry.npmjs.org/react/-/react-19.2.4.tgz" + integrity sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ== + +read-cache@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz" + integrity sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA== + dependencies: + pify "^2.3.0" + +readable-stream@^2.0.5: + version "2.3.8" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz" + integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== + 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" + +readable-stream@^3.1.1: + version "3.6.2" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz" + integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readable-stream@^3.4.0: + version "3.6.2" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz" + integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readable-stream@^4.0.0: + version "4.7.0" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz" + integrity sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg== + dependencies: + abort-controller "^3.0.0" + buffer "^6.0.3" + events "^3.3.0" + process "^0.11.10" + string_decoder "^1.3.0" + +readdir-glob@^1.1.2: + version "1.1.3" + resolved "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.3.tgz" + integrity sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA== + dependencies: + minimatch "^5.1.0" + +readdirp@^4.0.1: + version "4.1.2" + resolved "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz" + integrity sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg== + +readdirp@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/readdirp/-/readdirp-5.0.0.tgz" + integrity sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ== + +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== + dependencies: + picomatch "^2.2.1" + +redis-errors@^1.0.0, redis-errors@^1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/redis-errors/-/redis-errors-1.2.0.tgz" + integrity sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w== + +redis-parser@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/redis-parser/-/redis-parser-3.0.0.tgz" + integrity sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A== + dependencies: + redis-errors "^1.0.0" + +regexp-tree@^0.1.27: + version "0.1.27" + resolved "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.27.tgz" + integrity sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA== + +replace-in-file@^6.1.0: + version "6.3.5" + resolved "https://registry.npmjs.org/replace-in-file/-/replace-in-file-6.3.5.tgz" + integrity sha512-arB9d3ENdKva2fxRnSjwBEXfK1npgyci7ZZuwysgAp7ORjHSyxz6oqIjTEv8R0Ydl4Ll7uOAZXL4vbkhGIizCg== + dependencies: + chalk "^4.1.2" + glob "^7.2.0" + yargs "^17.2.1" + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz" + integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== + +resolve-alpn@^1.0.0: + version "1.2.1" + resolved "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz" + integrity sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g== + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + +resolve-from@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz" + integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== + +resolve-path@^1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/resolve-path/-/resolve-path-1.4.0.tgz" + integrity sha512-i1xevIst/Qa+nA9olDxLWnLk8YZbi8R/7JPbCMcgyWaFR6bKWaexgJgEB5oc2PKMjYdrHynyz0NY+if+H98t1w== + dependencies: + http-errors "~1.6.2" + path-is-absolute "1.0.1" + +resolve@^1.1.7, resolve@^1.22.1, resolve@^1.22.8: + version "1.22.10" + resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz" + integrity sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w== + dependencies: + is-core-module "^2.16.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +responselike@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz" + integrity sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw== + dependencies: + lowercase-keys "^2.0.0" + +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + +rfdc@^1.4.1: + version "1.4.1" + resolved "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz" + integrity sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA== + +rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + +rollup-plugin-visualizer@^6.0.5: + version "6.0.5" + resolved "https://registry.npmjs.org/rollup-plugin-visualizer/-/rollup-plugin-visualizer-6.0.5.tgz" + integrity sha512-9+HlNgKCVbJDs8tVtjQ43US12eqaiHyyiLMdBwQ7vSZPiHMysGNo2E88TAp1si5wx8NAoYriI2A5kuKfIakmJg== + dependencies: + open "^8.0.0" + picomatch "^4.0.2" + source-map "^0.7.4" + yargs "^17.5.1" + +rollup@^1.20.0||^2.0.0||^3.0.0||^4.0.0, rollup@^2.0.0||^3.0.0||^4.0.0, rollup@^2.68.0||^3.0.0||^4.0.0, rollup@^2.78.0||^3.0.0||^4.0.0, rollup@^4.43.0, rollup@^4.55.1, rollup@>=4.0.0, "rollup@2.x || 3.x || 4.x": + version "4.57.1" + resolved "https://registry.npmjs.org/rollup/-/rollup-4.57.1.tgz" + integrity sha512-oQL6lgK3e2QZeQ7gcgIkS2YZPg5slw37hYufJ3edKlfQSGGm8ICoxswK15ntSzF/a8+h7ekRy7k7oWc3BQ7y8A== + dependencies: + "@types/estree" "1.0.8" + optionalDependencies: + "@rollup/rollup-android-arm-eabi" "4.57.1" + "@rollup/rollup-android-arm64" "4.57.1" + "@rollup/rollup-darwin-arm64" "4.57.1" + "@rollup/rollup-darwin-x64" "4.57.1" + "@rollup/rollup-freebsd-arm64" "4.57.1" + "@rollup/rollup-freebsd-x64" "4.57.1" + "@rollup/rollup-linux-arm-gnueabihf" "4.57.1" + "@rollup/rollup-linux-arm-musleabihf" "4.57.1" + "@rollup/rollup-linux-arm64-gnu" "4.57.1" + "@rollup/rollup-linux-arm64-musl" "4.57.1" + "@rollup/rollup-linux-loong64-gnu" "4.57.1" + "@rollup/rollup-linux-loong64-musl" "4.57.1" + "@rollup/rollup-linux-ppc64-gnu" "4.57.1" + "@rollup/rollup-linux-ppc64-musl" "4.57.1" + "@rollup/rollup-linux-riscv64-gnu" "4.57.1" + "@rollup/rollup-linux-riscv64-musl" "4.57.1" + "@rollup/rollup-linux-s390x-gnu" "4.57.1" + "@rollup/rollup-linux-x64-gnu" "4.57.1" + "@rollup/rollup-linux-x64-musl" "4.57.1" + "@rollup/rollup-openbsd-x64" "4.57.1" + "@rollup/rollup-openharmony-arm64" "4.57.1" + "@rollup/rollup-win32-arm64-msvc" "4.57.1" + "@rollup/rollup-win32-ia32-msvc" "4.57.1" + "@rollup/rollup-win32-x64-gnu" "4.57.1" + "@rollup/rollup-win32-x64-msvc" "4.57.1" + fsevents "~2.3.2" + +rou3@^0.7.12: + version "0.7.12" + resolved "https://registry.npmjs.org/rou3/-/rou3-0.7.12.tgz" + integrity sha512-iFE4hLDuloSWcD7mjdCDhx2bKcIsYbtOTpfH5MHHLSKMOUyjqQXTeZVa289uuwEGEKFoE/BAPbhaU4B774nceg== + +rrweb-cssom@^0.8.0: + version "0.8.0" + resolved "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.8.0.tgz" + integrity sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw== + +run-applescript@^7.0.0: + version "7.1.0" + resolved "https://registry.npmjs.org/run-applescript/-/run-applescript-7.1.0.tgz" + integrity sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q== + +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + +safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@~5.2.0, safe-buffer@5.2.1: + version "5.2.1" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safe-regex-test@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz" + integrity sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + is-regex "^1.2.1" + +"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0": + version "2.1.2" + resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +sax@^1.4.1: + version "1.4.4" + resolved "https://registry.npmjs.org/sax/-/sax-1.4.4.tgz" + integrity sha512-1n3r/tGXO6b6VXMdFT54SHzT9ytu9yr7TaELowdYpMqY/Ao7EnlQGmAQ1+RatX7Tkkdm6hONI2owqNx2aZj5Sw== + +saxes@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz" + integrity sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA== + dependencies: + xmlchars "^2.2.0" + +schema-dts@^1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/schema-dts/-/schema-dts-1.1.2.tgz" + integrity sha512-MpNwH0dZJHinVxk9bT8XUdjKTxMYrA5bLtrrGmFA6PTLwlOKnhi67XoRd6/ty+Djt6ZC0slR57qFhZDNMI6DhQ== + +scule@^1.3.0: + version "1.3.0" + resolved "https://registry.npmjs.org/scule/-/scule-1.3.0.tgz" + integrity sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g== + +search-insights@^2.17.2: + version "2.17.3" + resolved "https://registry.npmjs.org/search-insights/-/search-insights-2.17.3.tgz" + integrity sha512-RQPdCYTa8A68uM2jwxoY842xDhvx3E5LFL1LxvxCNMev4o5mLuokczhzjAgGwUZBAmOKZknArSxLKmXtIi2AxQ== + +semver@^6.3.1: + version "6.3.1" + resolved "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz" + integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== + +semver@^7.3.5, semver@^7.3.6, semver@^7.3.7, semver@^7.5.2, semver@^7.5.3, semver@^7.5.4, semver@^7.6.3, semver@^7.7.3: + version "7.7.3" + resolved "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz" + integrity sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q== + +send@^1.2.0: + version "1.2.1" + resolved "https://registry.npmjs.org/send/-/send-1.2.1.tgz" + integrity sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ== + dependencies: + debug "^4.4.3" + encodeurl "^2.0.0" + escape-html "^1.0.3" + etag "^1.8.1" + fresh "^2.0.0" + http-errors "^2.0.1" + mime-types "^3.0.2" + ms "^2.1.3" + on-finished "^2.4.1" + range-parser "^1.2.1" + statuses "^2.0.2" + +serialize-javascript@^6.0.1: + version "6.0.2" + resolved "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz" + integrity sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g== + dependencies: + randombytes "^2.1.0" + +seroval@^1.4.2: + version "1.5.0" + resolved "https://registry.npmjs.org/seroval/-/seroval-1.5.0.tgz" + integrity sha512-OE4cvmJ1uSPrKorFIH9/w/Qwuvi/IMcGbv5RKgcJ/zjA/IohDLU6SVaxFN9FwajbP7nsX0dQqMDes1whk3y+yw== + +serve-placeholder@^2.0.2: + version "2.0.2" + resolved "https://registry.npmjs.org/serve-placeholder/-/serve-placeholder-2.0.2.tgz" + integrity sha512-/TMG8SboeiQbZJWRlfTCqMs2DD3SZgWp0kDQePz9yUuCnDfDh/92gf7/PxGhzXTKBIPASIHxFcZndoNbp6QOLQ== + dependencies: + defu "^6.1.4" + +serve-static@^2.2.1: + version "2.2.1" + resolved "https://registry.npmjs.org/serve-static/-/serve-static-2.2.1.tgz" + integrity sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw== + dependencies: + encodeurl "^2.0.0" + escape-html "^1.0.3" + parseurl "^1.3.3" + send "^1.2.0" + +setprototypeof@~1.2.0, setprototypeof@1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz" + integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== + +setprototypeof@1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz" + integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ== + +sharp@^0.32.6: + version "0.32.6" + resolved "https://registry.npmjs.org/sharp/-/sharp-0.32.6.tgz" + integrity sha512-KyLTWwgcR9Oe4d9HwCwNM2l7+J0dUQwn/yf7S0EnTtb0eVS4RxO0eUSvxPtzT4F3SY+C4K6fqdv/DO27sJ/v/w== + dependencies: + color "^4.2.3" + detect-libc "^2.0.2" + node-addon-api "^6.1.0" + prebuild-install "^7.1.1" + semver "^7.5.4" + simple-get "^4.0.1" + tar-fs "^3.0.4" + tunnel-agent "^0.6.0" + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +shell-quote@^1.8.3: + version "1.8.3" + resolved "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.3.tgz" + integrity sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw== + +side-channel-list@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz" + integrity sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA== + dependencies: + es-errors "^1.3.0" + object-inspect "^1.13.3" + +side-channel-map@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz" + integrity sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + get-intrinsic "^1.2.5" + object-inspect "^1.13.3" + +side-channel-weakmap@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz" + integrity sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + get-intrinsic "^1.2.5" + object-inspect "^1.13.3" + side-channel-map "^1.0.1" + +side-channel@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz" + integrity sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw== + dependencies: + es-errors "^1.3.0" + object-inspect "^1.13.3" + side-channel-list "^1.0.0" + side-channel-map "^1.0.1" + side-channel-weakmap "^1.0.2" + +signal-exit@^4.0.1, signal-exit@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz" + integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== + +simple-concat@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz" + integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q== + +simple-get@^4.0.0, simple-get@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz" + integrity sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA== + dependencies: + decompress-response "^6.0.0" + once "^1.3.1" + simple-concat "^1.0.0" + +simple-git@^3.30.0: + version "3.30.0" + resolved "https://registry.npmjs.org/simple-git/-/simple-git-3.30.0.tgz" + integrity sha512-q6lxyDsCmEal/MEGhP1aVyQ3oxnagGlBDOVSIB4XUVLl1iZh0Pah6ebC9V4xBap/RfgP2WlI8EKs0WS0rMEJHg== + dependencies: + "@kwsites/file-exists" "^1.1.1" + "@kwsites/promise-deferred" "^1.1.1" + debug "^4.4.0" + +simple-swizzle@^0.2.2: + version "0.2.2" + resolved "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz" + integrity sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg== + dependencies: + is-arrayish "^0.3.1" + +sirv@^3.0.1, sirv@^3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/sirv/-/sirv-3.0.2.tgz" + integrity sha512-2wcC/oGxHis/BoHkkPwldgiPSYcpZK3JU28WoMVv55yHJgcZ8rlXvuG9iZggz+sU1d4bRgIGASwyWqjxu3FM0g== + dependencies: + "@polka/url" "^1.0.0-next.24" + mrmime "^2.0.0" + totalist "^3.0.0" + +sisteransi@^1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz" + integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== + +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +slash@^5.1.0: + version "5.1.0" + resolved "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz" + integrity sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg== + +smob@^1.0.0: + version "1.5.0" + resolved "https://registry.npmjs.org/smob/-/smob-1.5.0.tgz" + integrity sha512-g6T+p7QO8npa+/hNx9ohv1E5pVCmWrVCUzUXJyLdMmftX6ER0oiWY/w9knEonLpnOp6b6FenKnMfR8gqwWdwig== + +smoothscroll-polyfill@^0.4.4: + version "0.4.4" + resolved "https://registry.npmjs.org/smoothscroll-polyfill/-/smoothscroll-polyfill-0.4.4.tgz" + integrity sha512-TK5ZA9U5RqCwMpfoMq/l1mrH0JAR7y7KRvOBx0n2869aLxch+gT9GhN3yUfjiw+d/DiF1mKo14+hd62JyMmoBg== + +source-map-js@^1.0.1, source-map-js@^1.2.0, source-map-js@^1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz" + integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA== + +source-map-support@~0.5.20: + 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== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map@^0.6.0: + version "0.6.1" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +source-map@^0.7.4, source-map@^0.7.6: + version "0.7.6" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz" + integrity sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ== + +speakingurl@^14.0.1: + version "14.0.1" + resolved "https://registry.npmjs.org/speakingurl/-/speakingurl-14.0.1.tgz" + integrity sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ== + +srvx@^0.10.0: + version "0.10.1" + resolved "https://registry.npmjs.org/srvx/-/srvx-0.10.1.tgz" + integrity sha512-A//xtfak4eESMWWydSRFUVvCTQbSwivnGCEf8YGPe2eHU0+Z6znfUTCPF0a7oV3sObSOcrXHlL6Bs9vVctfXdg== + +standard-as-callback@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/standard-as-callback/-/standard-as-callback-2.1.0.tgz" + integrity sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A== + +statuses@^1.5.0, "statuses@>= 1.5.0 < 2": + version "1.5.0" + resolved "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz" + integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== + +statuses@^2.0.2, statuses@~2.0.2: + version "2.0.2" + resolved "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz" + integrity sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw== + +"statuses@>= 1.4.0 < 2": + version "1.5.0" + resolved "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz" + integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== + +std-env@^3.10.0, std-env@^3.7.0, std-env@^3.8.1: + version "3.10.0" + resolved "https://registry.npmjs.org/std-env/-/std-env-3.10.0.tgz" + integrity sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg== + +storyblok-algolia-indexer@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/storyblok-algolia-indexer/-/storyblok-algolia-indexer-1.1.0.tgz" + integrity sha512-Kuy4FAzhdNC//LtZ+FJ3kZ92W9FVe7auUicAj4e2of5j4VE2BXYtg/TdAWtekjvA4vvzHYoYCt1sPPDe45n29A== + dependencies: + algoliasearch "^4.12.0" + axios "^1.3.4" + storyblok-js-client "^5.8.0" + +storyblok-js-client@^5.8.0: + version "5.14.4" + resolved "https://registry.npmjs.org/storyblok-js-client/-/storyblok-js-client-5.14.4.tgz" + integrity sha512-9yY33tvfO3Cbe25h/l6K0T3IxJeOOyGl/pCwsd55woT0ZEBhIiEZoMumpRsyLjD5AedW9KXLbLjMXhHazkepCA== + +streamx@^2.15.0, streamx@^2.21.0: + version "2.21.1" + resolved "https://registry.npmjs.org/streamx/-/streamx-2.21.1.tgz" + integrity sha512-PhP9wUnFLa+91CPy3N6tiQsK+gnYyUNuk15S3YG/zjYE7RuPeCjJngqnzpC31ow0lzBHQ+QGO4cNJnd0djYUsw== + dependencies: + fast-fifo "^1.3.2" + queue-tick "^1.0.1" + text-decoder "^1.1.0" + optionalDependencies: + bare-events "^2.2.0" + +string_decoder@^1.1.1, string_decoder@^1.3.0: + version "1.3.0" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +"string-width-cjs@npm:string-width@^4.2.0": + version "4.2.3" + resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string-width@^5.0.1, string-width@^5.1.2: + version "5.1.2" + resolved "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz" + integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== + dependencies: + eastasianwidth "^0.2.0" + emoji-regex "^9.2.2" + strip-ansi "^7.0.1" + +"strip-ansi-cjs@npm:strip-ansi@^6.0.1": + version "6.0.1" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-ansi@^7.0.1: + version "7.1.0" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz" + integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== + dependencies: + ansi-regex "^6.0.1" + +strip-final-newline@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz" + integrity sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw== + +strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +strip-json-comments@~2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz" + integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== + +strip-literal@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/strip-literal/-/strip-literal-3.1.0.tgz" + integrity sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg== + dependencies: + js-tokens "^9.0.1" + +stripe@^20.3.0: + version "20.3.0" + resolved "https://registry.npmjs.org/stripe/-/stripe-20.3.0.tgz" + integrity sha512-DYzcmV1MfYhycr1GwjCjeQVYk9Gu8dpxyTlu7qeDCsuguug7oUTxPsUQuZeSf/OPzK7pofqobvOKVqAwlpgf/Q== + +structured-clone-es@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/structured-clone-es/-/structured-clone-es-1.0.0.tgz" + integrity sha512-FL8EeKFFyNQv5cMnXI31CIMCsFarSVI2bF0U0ImeNE3g/F1IvJQyqzOXxPBRXiwQfyBTlbNe88jh1jFW0O/jiQ== + +stylehacks@^7.0.5: + version "7.0.7" + resolved "https://registry.npmjs.org/stylehacks/-/stylehacks-7.0.7.tgz" + integrity sha512-bJkD0JkEtbRrMFtwgpJyBbFIwfDDONQ1Ov3sDLZQP8HuJ73kBOyx66H4bOcAbVWmnfLdvQ0AJwXxOMkpujcO6g== + dependencies: + browserslist "^4.27.0" + postcss-selector-parser "^7.1.0" + +sucrase@^3.35.0: + version "3.35.0" + resolved "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz" + integrity sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA== + dependencies: + "@jridgewell/gen-mapping" "^0.3.2" + commander "^4.0.0" + glob "^10.3.10" + lines-and-columns "^1.1.6" + mz "^2.7.0" + pirates "^4.0.1" + ts-interface-checker "^0.1.9" + +superjson@^2.2.2: + version "2.2.6" + resolved "https://registry.npmjs.org/superjson/-/superjson-2.2.6.tgz" + integrity sha512-H+ue8Zo4vJmV2nRjpx86P35lzwDT3nItnIsocgumgr0hHMQ+ZGq5vrERg9kJBo5AWGmxZDhzDo+WVIJqkB0cGA== + dependencies: + copy-anything "^4" + +supports-color@^10.0.0: + version "10.2.2" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-10.2.2.tgz" + integrity sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g== + +supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + +svgo@^3.0.2, svgo@^3.2.0: + version "3.3.2" + resolved "https://registry.npmjs.org/svgo/-/svgo-3.3.2.tgz" + integrity sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw== + 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" + +svgo@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/svgo/-/svgo-4.0.0.tgz" + integrity sha512-VvrHQ+9uniE+Mvx3+C9IEe/lWasXCU0nXMY2kZeLrHNICuRiC8uMPyM14UEaMOFA5mhyQqEkB02VoQ16n3DLaw== + dependencies: + commander "^11.1.0" + css-select "^5.1.0" + css-tree "^3.0.1" + css-what "^6.1.0" + csso "^5.0.5" + picocolors "^1.1.1" + sax "^1.4.1" + +symbol-tree@^3.2.4: + version "3.2.4" + resolved "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz" + integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== + +system-architecture@^0.1.0: + version "0.1.0" + resolved "https://registry.npmjs.org/system-architecture/-/system-architecture-0.1.0.tgz" + integrity sha512-ulAk51I9UVUyJgxlv9M6lFot2WP3e7t8Kz9+IS6D4rVba1tR9kON+Ey69f+1R4Q8cd45Lod6a4IcJIxnzGc/zA== + +tagged-tag@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/tagged-tag/-/tagged-tag-1.0.0.tgz" + integrity sha512-yEFYrVhod+hdNyx7g5Bnkkb0G6si8HJurOoOEgC8B/O0uXLHlaey/65KRv6cuWBNhBgHKAROVpc7QyYqE5gFng== + +tailwind-config-viewer@^2.0.4: + version "2.0.4" + resolved "https://registry.npmjs.org/tailwind-config-viewer/-/tailwind-config-viewer-2.0.4.tgz" + integrity sha512-icvcmdMmt9dphvas8wL40qttrHwAnW3QEN4ExJ2zICjwRsPj7gowd1cOceaWG3IfTuM/cTNGQcx+bsjMtmV+cw== + dependencies: + "@koa/router" "^12.0.1" + commander "^6.0.0" + fs-extra "^9.0.1" + koa "^2.14.2" + koa-static "^5.0.0" + open "^7.0.4" + portfinder "^1.0.26" + replace-in-file "^6.1.0" + +tailwindcss@~3.4.17, "tailwindcss@1 || 2 || 2.0.1-compat || 3": + version "3.4.17" + resolved "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.17.tgz" + integrity sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og== + dependencies: + "@alloc/quick-lru" "^5.2.0" + arg "^5.0.2" + chokidar "^3.6.0" + didyoumean "^1.2.2" + dlv "^1.1.3" + fast-glob "^3.3.2" + glob-parent "^6.0.2" + is-glob "^4.0.3" + jiti "^1.21.6" + lilconfig "^3.1.3" + micromatch "^4.0.8" + normalize-path "^3.0.0" + object-hash "^3.0.0" + picocolors "^1.1.1" + postcss "^8.4.47" + postcss-import "^15.1.0" + postcss-js "^4.0.1" + postcss-load-config "^4.0.2" + postcss-nested "^6.2.0" + postcss-selector-parser "^6.1.2" + resolve "^1.22.8" + sucrase "^3.35.0" + +tapable@^2.3.0: + version "2.3.0" + resolved "https://registry.npmjs.org/tapable/-/tapable-2.3.0.tgz" + integrity sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg== + +tar-fs@^2.0.0: + version "2.1.4" + resolved "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.4.tgz" + integrity sha512-mDAjwmZdh7LTT6pNleZ05Yt65HC3E+NiQzl672vQG38jIrehtJk/J3mNwIg+vShQPcLF/LV7CMnDW6vjj6sfYQ== + dependencies: + chownr "^1.1.1" + mkdirp-classic "^0.5.2" + pump "^3.0.0" + tar-stream "^2.1.4" + +tar-fs@^3.0.4: + version "3.1.1" + resolved "https://registry.npmjs.org/tar-fs/-/tar-fs-3.1.1.tgz" + integrity sha512-LZA0oaPOc2fVo82Txf3gw+AkEd38szODlptMYejQUhndHMLQ9M059uXR+AfS7DNo0NpINvSqDsvyaCrBVkptWg== + dependencies: + pump "^3.0.0" + tar-stream "^3.1.5" + optionalDependencies: + bare-fs "^4.0.1" + bare-path "^3.0.0" + +tar-stream@^2.1.4: + version "2.2.0" + resolved "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz" + integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== + dependencies: + bl "^4.0.3" + end-of-stream "^1.4.1" + fs-constants "^1.0.0" + inherits "^2.0.3" + readable-stream "^3.1.1" + +tar-stream@^3.0.0, tar-stream@^3.1.5: + version "3.1.7" + resolved "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.7.tgz" + integrity sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ== + dependencies: + b4a "^1.6.4" + fast-fifo "^1.2.0" + streamx "^2.15.0" + +tar@^7.4.0: + version "7.5.7" + resolved "https://registry.npmjs.org/tar/-/tar-7.5.7.tgz" + integrity sha512-fov56fJiRuThVFXD6o6/Q354S7pnWMJIVlDBYijsTNx6jKSE4pvrDTs6lUnmGvNyfJwFQQwWy3owKz1ucIhveQ== + dependencies: + "@isaacs/fs-minipass" "^4.0.0" + chownr "^3.0.0" + minipass "^7.1.2" + minizlib "^3.1.0" + yallist "^5.0.0" + +terser@^5.16.0, terser@^5.17.4: + version "5.46.0" + resolved "https://registry.npmjs.org/terser/-/terser-5.46.0.tgz" + integrity sha512-jTwoImyr/QbOWFFso3YoU3ik0jBBDJ6JTOQiy/J2YxVJdZCc+5u7skhNwiOR3FQIygFqVUPHl7qbbxtjW2K3Qg== + dependencies: + "@jridgewell/source-map" "^0.3.3" + acorn "^8.15.0" + commander "^2.20.0" + source-map-support "~0.5.20" + +text-decoder@^1.1.0: + 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== + dependencies: + b4a "^1.6.4" + +text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" + integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== + +thenify-all@^1.0.0: + version "1.6.0" + resolved "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz" + integrity sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA== + dependencies: + thenify ">= 3.1.0 < 4" + +"thenify@>= 3.1.0 < 4": + version "3.3.1" + resolved "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz" + integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw== + dependencies: + any-promise "^1.0.0" + +tiny-invariant@^1.3.3: + version "1.3.3" + resolved "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz" + integrity sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg== + +tinyexec@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/tinyexec/-/tinyexec-1.0.2.tgz" + integrity sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg== + +tinyglobby@^0.2.15: + version "0.2.15" + resolved "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz" + integrity sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ== + dependencies: + fdir "^6.5.0" + picomatch "^4.0.3" + +tldts-core@^6.1.72: + version "6.1.72" + resolved "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.72.tgz" + integrity sha512-FW3H9aCaGTJ8l8RVCR3EX8GxsxDbQXuwetwwgXA2chYdsX+NY1ytCBl61narjjehWmCw92tc1AxlcY3668CU8g== + +tldts@^6.1.32: + version "6.1.72" + resolved "https://registry.npmjs.org/tldts/-/tldts-6.1.72.tgz" + integrity sha512-QNtgIqSUb9o2CoUjX9T5TwaIvUUJFU1+12PJkgt42DFV2yf9J6549yTF2uGloQsJ/JOC8X+gIB81ind97hRiIQ== + dependencies: + tldts-core "^6.1.72" + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +toidentifier@~1.0.1, toidentifier@1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz" + integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== + +totalist@^3.0.0: + version "3.0.1" + resolved "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz" + integrity sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ== + +tough-cookie@^5.0.0: + version "5.1.0" + resolved "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.1.0.tgz" + integrity sha512-rvZUv+7MoBYTiDmFPBrhL7Ujx9Sk+q9wwm22x8c8T5IJaR+Wsyc7TNxbVxo84kZoRJZZMazowFLqpankBEQrGg== + dependencies: + tldts "^6.1.32" + +tr46@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/tr46/-/tr46-5.0.0.tgz" + integrity sha512-tk2G5R2KRwBd+ZN0zaEXpmzdKyOYksXwywulIX95MBODjSzMIuQnQ3m8JxgbhnL1LeVo7lqQKsYa1O3Htl7K5g== + dependencies: + punycode "^2.3.1" + +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz" + integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== + +ts-api-utils@^1.0.1: + 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== + +ts-interface-checker@^0.1.9: + version "0.1.13" + resolved "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz" + integrity sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA== + +tslib@^2.4.0: + version "2.8.1" + resolved "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz" + integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== + +tsscmp@1.0.6: + version "1.0.6" + resolved "https://registry.npmjs.org/tsscmp/-/tsscmp-1.0.6.tgz" + integrity sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA== + +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz" + integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w== + dependencies: + safe-buffer "^5.0.1" + +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + +type-fest@^0.20.2: + 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== + +type-fest@^5.0.0: + version "5.4.3" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-5.4.3.tgz" + integrity sha512-AXSAQJu79WGc79/3e9/CR77I/KQgeY1AhNvcShIH4PTcGYyC4xv6H4R4AUOwkPS5799KlVDAu8zExeCrkGquiA== + dependencies: + tagged-tag "^1.0.0" + +type-is@^1.6.16: + version "1.6.18" + resolved "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz" + integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== + dependencies: + media-typer "0.3.0" + mime-types "~2.1.24" + +type-level-regexp@~0.1.17: + version "0.1.17" + resolved "https://registry.npmjs.org/type-level-regexp/-/type-level-regexp-0.1.17.tgz" + integrity sha512-wTk4DH3cxwk196uGLK/E9pE45aLfeKJacKmcEgEOA/q5dnPGNxXt0cfYdFxb57L+sEpf1oJH4Dnx/pnRcku9jg== + +typescript@*, typescript@^5.2.2, typescript@>=4.1.0, typescript@>=4.2.0, typescript@>=4.4.4: + version "5.7.3" + resolved "https://registry.npmjs.org/typescript/-/typescript-5.7.3.tgz" + integrity sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw== + +ufo@^1.1.2, ufo@^1.3.2, ufo@^1.4.0, ufo@^1.5.4, ufo@^1.6.1, ufo@^1.6.3: + version "1.6.3" + resolved "https://registry.npmjs.org/ufo/-/ufo-1.6.3.tgz" + integrity sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q== + +ultrahtml@^1.6.0: + version "1.6.0" + resolved "https://registry.npmjs.org/ultrahtml/-/ultrahtml-1.6.0.tgz" + integrity sha512-R9fBn90VTJrqqLDwyMph+HGne8eqY1iPfYhPzZrvKpIfwkWZbcYlfpsb8B9dTvBfpy1/hqAD7Wi8EKfP9e8zdw== + +uncrypto@^0.1.3: + version "0.1.3" + resolved "https://registry.npmjs.org/uncrypto/-/uncrypto-0.1.3.tgz" + integrity sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q== + +unctx@^2.4.1, unctx@^2.5.0: + version "2.5.0" + resolved "https://registry.npmjs.org/unctx/-/unctx-2.5.0.tgz" + integrity sha512-p+Rz9x0R7X+CYDkT+Xg8/GhpcShTlU8n+cf9OtOEf7zEQsNcCZO1dPKNRDqvUTaq+P32PMMkxWHwfrxkqfqAYg== + dependencies: + acorn "^8.15.0" + estree-walker "^3.0.3" + magic-string "^0.30.21" + unplugin "^2.3.11" + +undici-types@~7.16.0: + version "7.16.0" + resolved "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz" + integrity sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw== + +unenv@^2.0.0-rc.24: + version "2.0.0-rc.24" + resolved "https://registry.npmjs.org/unenv/-/unenv-2.0.0-rc.24.tgz" + integrity sha512-i7qRCmY42zmCwnYlh9H2SvLEypEFGye5iRmEMKjcGi7zk9UquigRjFtTLz0TYqr0ZGLZhaMHl/foy1bZR+Cwlw== + dependencies: + pathe "^2.0.3" + +unhead@2.1.2: + version "2.1.2" + resolved "https://registry.npmjs.org/unhead/-/unhead-2.1.2.tgz" + integrity sha512-vSihrxyb+zsEUfEbraZBCjdE0p/WSoc2NGDrpwwSNAwuPxhYK1nH3eegf02IENLpn1sUhL8IoO84JWmRQ6tILA== + dependencies: + hookable "^6.0.1" + +unicorn-magic@^0.3.0: + version "0.3.0" + resolved "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.3.0.tgz" + integrity sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA== + +unicorn-magic@^0.4.0: + version "0.4.0" + resolved "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.4.0.tgz" + integrity sha512-wH590V9VNgYH9g3lH9wWjTrUoKsjLF6sGLjhR4sH1LWpLmCOH0Zf7PukhDA8BiS7KHe4oPNkcTHqYkj7SOGUOw== + +unimport@^5.6.0: + version "5.6.0" + resolved "https://registry.npmjs.org/unimport/-/unimport-5.6.0.tgz" + integrity sha512-8rqAmtJV8o60x46kBAJKtHpJDJWkA2xcBqWKPI14MgUb05o1pnpnCnXSxedUXyeq7p8fR5g3pTo2BaswZ9lD9A== + dependencies: + acorn "^8.15.0" + escape-string-regexp "^5.0.0" + estree-walker "^3.0.3" + local-pkg "^1.1.2" + magic-string "^0.30.21" + mlly "^1.8.0" + pathe "^2.0.3" + picomatch "^4.0.3" + pkg-types "^2.3.0" + scule "^1.3.0" + strip-literal "^3.1.0" + tinyglobby "^0.2.15" + unplugin "^2.3.11" + unplugin-utils "^0.3.1" + +universalify@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz" + integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== + +unplugin-utils@^0.2.4: + version "0.2.5" + resolved "https://registry.npmjs.org/unplugin-utils/-/unplugin-utils-0.2.5.tgz" + integrity sha512-gwXJnPRewT4rT7sBi/IvxKTjsms7jX7QIDLOClApuZwR49SXbrB1z2NLUZ+vDHyqCj/n58OzRRqaW+B8OZi8vg== + dependencies: + pathe "^2.0.3" + picomatch "^4.0.3" + +unplugin-utils@^0.3.0: + version "0.3.1" + resolved "https://registry.npmjs.org/unplugin-utils/-/unplugin-utils-0.3.1.tgz" + integrity sha512-5lWVjgi6vuHhJ526bI4nlCOmkCIF3nnfXkCMDeMJrtdvxTs6ZFCM8oNufGTsDbKv/tJ/xj8RpvXjRuPBZJuJog== + dependencies: + pathe "^2.0.3" + picomatch "^4.0.3" + +unplugin-utils@^0.3.1: + version "0.3.1" + resolved "https://registry.npmjs.org/unplugin-utils/-/unplugin-utils-0.3.1.tgz" + integrity sha512-5lWVjgi6vuHhJ526bI4nlCOmkCIF3nnfXkCMDeMJrtdvxTs6ZFCM8oNufGTsDbKv/tJ/xj8RpvXjRuPBZJuJog== + dependencies: + pathe "^2.0.3" + picomatch "^4.0.3" + +unplugin-vue-router@^0.19.2: + version "0.19.2" + resolved "https://registry.npmjs.org/unplugin-vue-router/-/unplugin-vue-router-0.19.2.tgz" + integrity sha512-u5dgLBarxE5cyDK/hzJGfpCTLIAyiTXGlo85COuD4Nssj6G7NxS+i9mhCWz/1p/ud1eMwdcUbTXehQe41jYZUA== + dependencies: + "@babel/generator" "^7.28.5" + "@vue-macros/common" "^3.1.1" + "@vue/language-core" "^3.2.1" + ast-walker-scope "^0.8.3" + chokidar "^5.0.0" + json5 "^2.2.3" + local-pkg "^1.1.2" + magic-string "^0.30.21" + mlly "^1.8.0" + muggle-string "^0.4.1" + pathe "^2.0.3" + picomatch "^4.0.3" + scule "^1.3.0" + tinyglobby "^0.2.15" + unplugin "^2.3.11" + unplugin-utils "^0.3.1" + yaml "^2.8.2" + +unplugin@^2.0.0, unplugin@^2.3.11, unplugin@^2.3.2: + version "2.3.11" + resolved "https://registry.npmjs.org/unplugin/-/unplugin-2.3.11.tgz" + integrity sha512-5uKD0nqiYVzlmCRs01Fhs2BdkEgBS3SAVP6ndrBsuK42iC2+JHyxM05Rm9G8+5mkmRtzMZGY8Ct5+mliZxU/Ww== + dependencies: + "@jridgewell/remapping" "^2.3.5" + acorn "^8.15.0" + picomatch "^4.0.3" + webpack-virtual-modules "^0.6.2" + +unstorage@^1.10.1, unstorage@^1.17.4: + version "1.17.4" + resolved "https://registry.npmjs.org/unstorage/-/unstorage-1.17.4.tgz" + integrity sha512-fHK0yNg38tBiJKp/Vgsq4j0JEsCmgqH58HAn707S7zGkArbZsVr/CwINoi+nh3h98BRCwKvx1K3Xg9u3VV83sw== + dependencies: + anymatch "^3.1.3" + chokidar "^5.0.0" + destr "^2.0.5" + h3 "^1.15.5" + lru-cache "^11.2.0" + node-fetch-native "^1.6.7" + ofetch "^1.5.1" + ufo "^1.6.3" + +untun@^0.1.3: + version "0.1.3" + resolved "https://registry.npmjs.org/untun/-/untun-0.1.3.tgz" + integrity sha512-4luGP9LMYszMRZwsvyUd9MrxgEGZdZuZgpVQHEEX0lCYFESasVRvZd0EYpCkOIbJKHMuv0LskpXc/8Un+MJzEQ== + dependencies: + citty "^0.1.5" + consola "^3.2.3" + pathe "^1.1.1" + +untyped@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/untyped/-/untyped-2.0.0.tgz" + integrity sha512-nwNCjxJTjNuLCgFr42fEak5OcLuB3ecca+9ksPFNvtfYSLpjf+iJqSIaSnIile6ZPbKYxI5k2AfXqeopGudK/g== + dependencies: + citty "^0.1.6" + defu "^6.1.4" + jiti "^2.4.2" + knitwork "^1.2.0" + scule "^1.3.0" + +unwasm@^0.5.3: + version "0.5.3" + resolved "https://registry.npmjs.org/unwasm/-/unwasm-0.5.3.tgz" + integrity sha512-keBgTSfp3r6+s9ZcSma+0chwxQdmLbB5+dAD9vjtB21UTMYuKAxHXCU1K2CbCtnP09EaWeRvACnXk0EJtUx+hw== + dependencies: + exsolve "^1.0.8" + knitwork "^1.3.0" + magic-string "^0.30.21" + mlly "^1.8.0" + pathe "^2.0.3" + pkg-types "^2.3.0" + +update-browserslist-db@^1.2.0: + version "1.2.3" + resolved "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz" + integrity sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w== + dependencies: + escalade "^3.2.0" + picocolors "^1.1.1" + +uqr@^0.1.2: + version "0.1.2" + resolved "https://registry.npmjs.org/uqr/-/uqr-0.1.2.tgz" + integrity sha512-MJu7ypHq6QasgF5YRTjqscSzQp/W11zoUk6kvmlH+fmWEs63Y0Eib13hYFwAzagRJcVY8WVnlV+eBDUGMJ5IbA== + +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + +util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== + +vary@^1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz" + integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== + +vite-dev-rpc@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/vite-dev-rpc/-/vite-dev-rpc-1.1.0.tgz" + integrity sha512-pKXZlgoXGoE8sEKiKJSng4hI1sQ4wi5YT24FCrwrLt6opmkjlqPPVmiPWWJn8M8byMxRGzp1CrFuqQs4M/Z39A== + dependencies: + birpc "^2.4.0" + vite-hot-client "^2.1.0" + +vite-hot-client@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/vite-hot-client/-/vite-hot-client-2.1.0.tgz" + integrity sha512-7SpgZmU7R+dDnSmvXE1mfDtnHLHQSisdySVR7lO8ceAXvM0otZeuQQ6C8LrS5d/aYyP/QZ0hI0L+dIPrm4YlFQ== + +vite-node@^5.3.0: + version "5.3.0" + resolved "https://registry.npmjs.org/vite-node/-/vite-node-5.3.0.tgz" + integrity sha512-8f20COPYJujc3OKPX6OuyBy3ZIv2det4eRRU4GY1y2MjbeGSUmPjedxg1b72KnTagCofwvZ65ThzjxDW2AtQFQ== + dependencies: + cac "^6.7.14" + es-module-lexer "^2.0.0" + obug "^2.1.1" + pathe "^2.0.3" + vite "^7.3.1" + +vite-plugin-checker@^0.12.0: + version "0.12.0" + resolved "https://registry.npmjs.org/vite-plugin-checker/-/vite-plugin-checker-0.12.0.tgz" + integrity sha512-CmdZdDOGss7kdQwv73UyVgLPv0FVYe5czAgnmRX2oKljgEvSrODGuClaV3PDR2+3ou7N/OKGauDDBjy2MB07Rg== + dependencies: + "@babel/code-frame" "^7.27.1" + chokidar "^4.0.3" + npm-run-path "^6.0.0" + picocolors "^1.1.1" + picomatch "^4.0.3" + tiny-invariant "^1.3.3" + tinyglobby "^0.2.15" + vscode-uri "^3.1.0" + +vite-plugin-inspect@^11.3.3: + version "11.3.3" + resolved "https://registry.npmjs.org/vite-plugin-inspect/-/vite-plugin-inspect-11.3.3.tgz" + integrity sha512-u2eV5La99oHoYPHE6UvbwgEqKKOQGz86wMg40CCosP6q8BkB6e5xPneZfYagK4ojPJSj5anHCrnvC20DpwVdRA== + dependencies: + ansis "^4.1.0" + debug "^4.4.1" + error-stack-parser-es "^1.0.5" + ohash "^2.0.11" + open "^10.2.0" + perfect-debounce "^2.0.0" + sirv "^3.0.1" + unplugin-utils "^0.3.0" + vite-dev-rpc "^1.1.0" + +vite-plugin-vue-tracer@^1.1.3: + version "1.2.0" + resolved "https://registry.npmjs.org/vite-plugin-vue-tracer/-/vite-plugin-vue-tracer-1.2.0.tgz" + integrity sha512-a9Z/TLpxwmoE9kIcv28wqQmiszM7ec4zgndXWEsVD/2lEZLRGzcg7ONXmplzGF/UP5W59QNtS809OdywwpUWQQ== + dependencies: + estree-walker "^3.0.3" + exsolve "^1.0.8" + magic-string "^0.30.21" + pathe "^2.0.3" + source-map-js "^1.2.1" + +vite-svg-loader@^5.1.0: + version "5.1.0" + resolved "https://registry.npmjs.org/vite-svg-loader/-/vite-svg-loader-5.1.0.tgz" + integrity sha512-M/wqwtOEjgb956/+m5ZrYT/Iq6Hax0OakWbokj8+9PXOnB7b/4AxESHieEtnNEy7ZpjsjYW1/5nK8fATQMmRxw== + dependencies: + svgo "^3.0.2" + +"vite@^2.6.0 || ^3.0.0 || ^4.0.0 || ^5.0.0-0 || ^6.0.0-0 || ^7.0.0-0", "vite@^2.9.0 || ^3.0.0-0 || ^4.0.0-0 || ^5.0.0-0 || ^6.0.1 || ^7.0.0-0", "vite@^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0", "vite@^6.0.0 || ^7.0.0", "vite@^6.0.0 || ^7.0.0-0", vite@^7.3.1, vite@>=5.4.21, vite@>=6.0: + version "7.3.1" + resolved "https://registry.npmjs.org/vite/-/vite-7.3.1.tgz" + integrity sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA== + dependencies: + esbuild "^0.27.0" + fdir "^6.5.0" + picomatch "^4.0.3" + postcss "^8.5.6" + rollup "^4.43.0" + tinyglobby "^0.2.15" + optionalDependencies: + fsevents "~2.3.3" + +vscode-uri@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.1.0.tgz" + integrity sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ== + +vue-bundle-renderer@^2.2.0: + version "2.2.0" + resolved "https://registry.npmjs.org/vue-bundle-renderer/-/vue-bundle-renderer-2.2.0.tgz" + integrity sha512-sz/0WEdYH1KfaOm0XaBmRZOWgYTEvUDt6yPYaUzl4E52qzgWLlknaPPTTZmp6benaPTlQAI/hN1x3tAzZygycg== + dependencies: + ufo "^1.6.1" + +vue-demi@^0.14.10: + version "0.14.10" + resolved "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.10.tgz" + integrity sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg== + +vue-devtools-stub@^0.1.0: + version "0.1.0" + resolved "https://registry.npmjs.org/vue-devtools-stub/-/vue-devtools-stub-0.1.0.tgz" + integrity sha512-RutnB7X8c5hjq39NceArgXg28WZtZpGc3+J16ljMiYnFhKvd8hITxSWQSQ5bvldxMDU6gG5mkxl1MTQLXckVSQ== + +vue-eslint-parser@^9.0.3, vue-eslint-parser@^9.4.3: + version "9.4.3" + resolved "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.4.3.tgz" + integrity sha512-2rYRLWlIpaiN8xbPiDyXZXRgLGOtWxERV7ND5fFAv5qo1D2N9Fu9MNajBNc6o13lZ+24DAWCkQCvj4klgmcITg== + dependencies: + debug "^4.3.4" + eslint-scope "^7.1.1" + eslint-visitor-keys "^3.3.0" + espree "^9.3.1" + esquery "^1.4.0" + lodash "^4.17.21" + semver "^7.3.6" + +vue-instantsearch@^4.3.2: + version "4.23.1" + resolved "https://registry.npmjs.org/vue-instantsearch/-/vue-instantsearch-4.23.1.tgz" + integrity sha512-5nu1cwsjjmOe/768SLxiOk9WiWlai4TJZ78i7rYmqYAMeEG9dRGy32qGPvl2SVVpaowaR1f9mixU4nIgGxP/Ug== + dependencies: + instantsearch-ui-components "0.17.1" + instantsearch.js "4.87.1" + mitt "^2.1.0" + +vue-json-pretty@^2.5.0: + version "2.5.0" + resolved "https://registry.npmjs.org/vue-json-pretty/-/vue-json-pretty-2.5.0.tgz" + integrity sha512-nZA6qXYaiMaE2J0HkKtkrLcPJoN03SDSBdZWEPiRwoOVySWOfoZCyadhBwBN6wAHTga+c/R49ExGWoKFXnu37A== + +vue-router@^4.6.0, vue-router@^4.6.4: + version "4.6.4" + resolved "https://registry.npmjs.org/vue-router/-/vue-router-4.6.4.tgz" + integrity sha512-Hz9q5sa33Yhduglwz6g9skT8OBPii+4bFn88w6J+J4MfEo4KRRpmiNG/hHHkdbRFlLBOqxN8y8gf2Fb0MTUgVg== + dependencies: + "@vue/devtools-api" "^6.6.4" + +vue@latest: + version "3.5.13" + resolved "https://registry.npmjs.org/vue/-/vue-3.5.13.tgz" + integrity sha512-wmeiSMxkZCSc+PM2w2VRsOYAZC8GdipNFRTsLSfodVqI9mbejKeXEGr8SckuLnrQPGe3oJN5c3K0vpoU9q/wCQ== + dependencies: + "@vue/compiler-dom" "3.5.13" + "@vue/compiler-sfc" "3.5.13" + "@vue/runtime-dom" "3.5.13" + "@vue/server-renderer" "3.5.13" + "@vue/shared" "3.5.13" + +w3c-xmlserializer@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz" + integrity sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA== + dependencies: + xml-name-validator "^5.0.0" + +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz" + integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== + +webidl-conversions@^7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz" + integrity sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g== + +webpack-virtual-modules@^0.6.2: + version "0.6.2" + resolved "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.6.2.tgz" + integrity sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ== + +whatwg-encoding@^3.1.1: + version "3.1.1" + resolved "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz" + integrity sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ== + dependencies: + iconv-lite "0.6.3" + +whatwg-mimetype@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz" + integrity sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg== + +whatwg-url@^14.0.0, whatwg-url@^14.1.0: + version "14.1.0" + resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.1.0.tgz" + integrity sha512-jlf/foYIKywAt3x/XWKZ/3rz8OSJPiWktjmk891alJUEjiVxKX9LEO92qH3hv4aJ0mN3MWPvGMCy8jQi95xK4w== + dependencies: + tr46 "^5.0.0" + webidl-conversions "^7.0.0" + +whatwg-url@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz" + integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.0.0" + +which@^2.0.1: + version "2.0.2" + resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +which@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/which/-/which-5.0.0.tgz" + integrity sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ== + dependencies: + isexe "^3.1.1" + +word-wrap@^1.2.5: + version "1.2.5" + resolved "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz" + integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== + +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": + version "7.0.0" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrap-ansi@^8.1.0: + version "8.1.0" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz" + integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== + dependencies: + ansi-styles "^6.1.0" + string-width "^5.0.1" + strip-ansi "^7.0.1" + +wrappy@1: + version "1.0.2" + resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + +ws@^8.18.0, ws@^8.18.3: + version "8.19.0" + resolved "https://registry.npmjs.org/ws/-/ws-8.19.0.tgz" + integrity sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg== + +wsl-utils@^0.1.0: + version "0.1.0" + resolved "https://registry.npmjs.org/wsl-utils/-/wsl-utils-0.1.0.tgz" + integrity sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw== + dependencies: + is-wsl "^3.1.0" + +xml-name-validator@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz" + integrity sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw== + +xml-name-validator@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz" + integrity sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg== + +xmlchars@^2.2.0: + version "2.2.0" + resolved "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz" + integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== + +xss@^1.0.14: + version "1.0.15" + resolved "https://registry.npmjs.org/xss/-/xss-1.0.15.tgz" + integrity sha512-FVdlVVC67WOIPvfOwhoMETV72f6GbW7aOabBC3WxN/oUdoEMDyLz4OgRv5/gck2ZeNqEQu+Tb0kloovXOfpYVg== + dependencies: + commander "^2.20.3" + cssfilter "0.0.10" + +y18n@^5.0.5: + version "5.0.8" + resolved "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== + +yallist@^3.0.2: + version "3.1.1" + resolved "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== + +yallist@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz" + integrity sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw== + +yaml@^2.3.4, yaml@^2.4.2, yaml@^2.8.2: + version "2.8.2" + resolved "https://registry.npmjs.org/yaml/-/yaml-2.8.2.tgz" + integrity sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A== + +yargs-parser@^21.1.1: + version "21.1.1" + resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz" + integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== + +yargs@^17.2.1, yargs@^17.5.1: + version "17.7.2" + resolved "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz" + integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== + dependencies: + cliui "^8.0.1" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.3" + y18n "^5.0.5" + yargs-parser "^21.1.1" + +ylru@^1.2.0: + version "1.4.0" + resolved "https://registry.npmjs.org/ylru/-/ylru-1.4.0.tgz" + integrity sha512-2OQsPNEmBCvXuFlIni/a+Rn+R2pHW9INm0BxXJ4hVDA8TirqMj+J/Rp9ItLatT/5pZqWwefVrTQcHpixsxnVlA== + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== + +youch-core@^0.3.3: + version "0.3.3" + resolved "https://registry.npmjs.org/youch-core/-/youch-core-0.3.3.tgz" + integrity sha512-ho7XuGjLaJ2hWHoK8yFnsUGy2Y5uDpqSTq1FkHLK4/oqKtyUU1AFbOOxY4IpC9f0fTLjwYbslUz0Po5BpD1wrA== + dependencies: + "@poppinss/exception" "^1.2.2" + error-stack-parser-es "^1.0.5" + +youch@^4.1.0-beta.13: + version "4.1.0-beta.13" + resolved "https://registry.npmjs.org/youch/-/youch-4.1.0-beta.13.tgz" + integrity sha512-3+AG1Xvt+R7M7PSDudhbfbwiyveW6B8PLBIwTyEC598biEYIjHhC89i6DBEvR0EZUjGY3uGSnC429HpIa2Z09g== + dependencies: + "@poppinss/colors" "^4.1.5" + "@poppinss/dumper" "^0.6.5" + "@speed-highlight/core" "^1.2.9" + cookie-es "^2.0.0" + youch-core "^0.3.3" + +zip-stream@^6.0.1: + version "6.0.1" + resolved "https://registry.npmjs.org/zip-stream/-/zip-stream-6.0.1.tgz" + integrity sha512-zK7YHHz4ZXpW89AHXUPbQVGKI7uvkd3hzusTdotCg1UxyaVtg0zFJSTfW/Dq5f7OBBVnq6cZIaC8Ti4hb6dtCA== + dependencies: + archiver-utils "^5.0.0" + compress-commons "^6.0.2" + readable-stream "^4.0.0" + +zod-to-json-schema@3.24.6: + version "3.24.6" + resolved "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.24.6.tgz" + integrity sha512-h/z3PKvcTcTetyjl1fkj79MHNEjm+HpD6NXheWjzOekY7kV+lwDYnHw+ivHkijnCSMz1yJaWBD9vu/Fcmk+vEg== + +zod@^3.21.0, zod@^3.22.4, zod@^3.24.1: + version "3.24.1" + resolved "https://registry.npmjs.org/zod/-/zod-3.24.1.tgz" + integrity sha512-muH7gBL9sI1nciMZV67X5fTKKBLtwpZ5VBp1vsOQzj1MhrBZ4wlVCm3gedKZWLp0Oyel8sIGfeiz54Su+OVT+A== + +"zod@^3.25.76 || ^4": + version "4.3.6" + resolved "https://registry.npmjs.org/zod/-/zod-4.3.6.tgz" + integrity sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==