diff --git a/examples/app-module/src/custom-module.tsx b/examples/app-module/src/custom-module.tsx index 20d79f07..9e2cac92 100644 --- a/examples/app-module/src/custom-module.tsx +++ b/examples/app-module/src/custom-module.tsx @@ -19,6 +19,7 @@ import { import { primitiveComponentsDemoResource } from "./pages/primitives-demo"; import { dropdownComponentsDemoResource } from "./pages/dropdown-demo"; import { formComponentsDemoResource, zodRHFFormDemoResource } from "./pages/form-demo"; +import { dataTableDemoResource } from "./pages/data-table-demo"; export const customPageModule = defineModule({ path: "custom-page", @@ -181,6 +182,17 @@ export const customPageModule = defineModule({ Zod + React Hook Form Demo

+

+ + DataTable Demo (sortable columns, row actions, pagination) + +

); @@ -205,5 +217,6 @@ export const customPageModule = defineModule({ dropdownComponentsDemoResource, formComponentsDemoResource, zodRHFFormDemoResource, + dataTableDemoResource, ], }); diff --git a/examples/app-module/src/pages/data-table-demo.tsx b/examples/app-module/src/pages/data-table-demo.tsx new file mode 100644 index 00000000..a06b6129 --- /dev/null +++ b/examples/app-module/src/pages/data-table-demo.tsx @@ -0,0 +1,259 @@ +import { + defineResource, + Badge, + DataTable, + Pagination, + useDataTable, + useCollectionVariables, + createColumnHelper, + Layout, + type CollectionResult, + type CollectionVariables, + type RowAction, +} from "@tailor-platform/app-shell"; +import { useMemo } from "react"; + +// --------------------------------------------------------------------------- +// Types +// --------------------------------------------------------------------------- + +type Product = { + id: string; + name: string; + category: string; + price: number; + stock: number; + status: "Active" | "Draft" | "Archived"; +}; + +// --------------------------------------------------------------------------- +// Mock metadata (normally generated by app-shell-sdk-plugins) +// --------------------------------------------------------------------------- + +const productMetadata = { + name: "product", + pluralForm: "products", + fields: [ + { name: "id", type: "uuid", required: true }, + { + name: "name", + type: "string", + required: true, + description: "Product name", + }, + { name: "category", type: "string", required: true }, + { name: "price", type: "number", required: true }, + { name: "stock", type: "number", required: false }, + { + name: "status", + type: "enum", + required: true, + enumValues: ["Active", "Draft", "Archived"], + }, + ], +} as const; + +// --------------------------------------------------------------------------- +// Columns (using createColumnHelper + inferColumns) +// --------------------------------------------------------------------------- + +const { column, inferColumns } = createColumnHelper(); +const infer = inferColumns(productMetadata); + +const productColumns = [ + column({ + ...infer("name"), + render: (row) => {row.name}, + }), + column(infer("category")), + column({ + ...infer("price"), + render: (row) => `$${row.price.toFixed(2)}`, + }), + column({ + ...infer("stock"), + render: (row) => row.stock.toLocaleString(), + }), + column({ + ...infer("status"), + render: (row) => { + const variant = + row.status === "Active" + ? ("success" as const) + : row.status === "Draft" + ? ("outline-warning" as const) + : ("neutral" as const); + return {row.status}; + }, + }), +]; + +// --------------------------------------------------------------------------- +// Mock data (CollectionResult format) +// --------------------------------------------------------------------------- + +const mockProducts: CollectionResult = { + edges: [ + { + node: { + id: "p-001", + name: "Ergonomic Chair", + category: "Furniture", + price: 499.99, + stock: 42, + status: "Active", + }, + }, + { + node: { + id: "p-002", + name: "Standing Desk", + category: "Furniture", + price: 899.0, + stock: 15, + status: "Active", + }, + }, + { + node: { + id: "p-003", + name: "Mechanical Keyboard", + category: "Electronics", + price: 159.99, + stock: 230, + status: "Active", + }, + }, + { + node: { + id: "p-004", + name: "USB-C Hub", + category: "Electronics", + price: 79.99, + stock: 0, + status: "Draft", + }, + }, + { + node: { + id: "p-005", + name: "Monitor Arm", + category: "Accessories", + price: 129.0, + stock: 57, + status: "Active", + }, + }, + { + node: { + id: "p-006", + name: "Webcam HD", + category: "Electronics", + price: 89.99, + stock: 120, + status: "Archived", + }, + }, + { + node: { + id: "p-007", + name: "Desk Lamp", + category: "Accessories", + price: 45.0, + stock: 88, + status: "Active", + }, + }, + { + node: { + id: "p-008", + name: "Cable Tray", + category: "Accessories", + price: 29.99, + stock: 200, + status: "Draft", + }, + }, + ], + pageInfo: { + hasNextPage: false, + endCursor: null, + hasPreviousPage: false, + startCursor: null, + }, + total: 8, +}; + +// --------------------------------------------------------------------------- +// Row actions +// --------------------------------------------------------------------------- + +const productRowActions: RowAction[] = [ + { + id: "edit", + label: "Edit", + onClick: (row) => alert(`Edit: ${row.name}`), + }, + { + id: "delete", + label: "Delete", + variant: "destructive", + isDisabled: (row) => row.status === "Active", + onClick: (row) => alert(`Delete: ${row.name}`), + }, +]; + +// --------------------------------------------------------------------------- +// Mock query hook (simulates a real useQuery call) +// --------------------------------------------------------------------------- + +function useProductsQuery(_variables: CollectionVariables) { + return useMemo(() => ({ data: mockProducts, loading: false }), []); +} + +// --------------------------------------------------------------------------- +// Page component +// --------------------------------------------------------------------------- + +const DataTableDemoPage = () => { + const { variables, control } = useCollectionVariables({ + params: { pageSize: 10 }, + }); + + const { data, loading } = useProductsQuery(variables); + + const table = useDataTable({ + columns: productColumns, + data, + loading, + control, + rowActions: productRowActions, + onClickRow: (row) => alert(`Clicked: ${row.name}`), + }); + + return ( + + + +

+ DataTable demo with sortable columns, row actions, and pagination. +

+ + + + + + + +
+
+ ); +}; + +export const dataTableDemoResource = defineResource({ + path: "data-table-demo", + meta: { + title: "DataTable Demo", + }, + component: DataTableDemoPage, +}); diff --git a/packages/core/package.json b/packages/core/package.json index 9044ee83..4862a17a 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -51,7 +51,6 @@ "@base-ui/react": "^1.3.0", "@tailor-platform/app-shell-vite-plugin": "workspace:*", "@tailor-platform/auth-public-client": "^0.5.0", - "@tanstack/react-table": "^8.21.3", "change-case": "^5.4.4", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", diff --git a/packages/core/src/components/data-table/API.md b/packages/core/src/components/data-table/API.md new file mode 100644 index 00000000..a5c60cdf --- /dev/null +++ b/packages/core/src/components/data-table/API.md @@ -0,0 +1,282 @@ +# DataTable API Reference (Source → app-shell) + +This document describes the source DataTable API as-is, with notes on what changes during migration. + +## Compound Component: `DataTable` + +```tsx +export const DataTable = { + Provider, // Context provider wrapping useDataTable return value + Root, // Table container (renders Table.Root internally) + Headers, // Auto-generated header row from columns + sort controls + Body, // Auto-generated rows, or custom children for manual rendering + Row, // Thin wrapper around Table.Row (for custom Body children) + Cell, // Thin wrapper around Table.Cell (for custom Body children) +} as const; +``` + +**Usage pattern:** + +```tsx +const { variables, control } = useCollectionVariables({ params: { pageSize: 20 } }); +const [result] = useQuery({ + query: GET_ORDERS, + variables: { ...variables.pagination, query: variables.query, order: variables.order }, +}); +const table = useDataTable({ columns, data: result.data?.orders, control }); + + + + + + + +; +``` + +**Sub-component props:** + +| Sub-component | Props | +| -------------------- | ------------------------------------------------------------- | +| `DataTable.Provider` | `value: UseDataTableReturn`, `children` | +| `DataTable.Root` | `className?`, `children` | +| `DataTable.Headers` | `className?` (reads columns/sort/rowActions from context) | +| `DataTable.Body` | `className?`, `children?` (if provided, skips auto-rendering) | +| `DataTable.Row` | `ComponentProps<"tr">` (pass-through to `Table.Row`) | +| `DataTable.Cell` | `ComponentProps<"td">` (pass-through to `Table.Cell`) | + +**Migration notes:** + +- `DataTable.Root` will hardcode `astw:border astw:rounded-md astw:bg-card` on wrapper +- Internal `Table.Headers` → `Table.Header`, `Table.HeaderRow` → `Table.Row`, `Table.HeaderCell` → `Table.Head` +- `RowActionsMenu` (internal): replace raw ` + + + + + ); +} diff --git a/packages/core/src/components/data-table/types.ts b/packages/core/src/components/data-table/types.ts new file mode 100644 index 00000000..2ca9daf2 --- /dev/null +++ b/packages/core/src/components/data-table/types.ts @@ -0,0 +1,687 @@ +import type { ReactNode } from "react"; + +// ============================================================================= +// Metadata Types (from generator — self-contained here) +// ============================================================================= + +/** + * Field type mapping for Data View. + */ +export type FieldType = + | "string" + | "number" + | "boolean" + | "uuid" + | "datetime" + | "date" + | "time" + | "enum" + | "array" + | "nested" + | "file"; + +/** + * Metadata for a single field. + */ +export interface FieldMetadata { + readonly name: string; + readonly type: FieldType; + readonly required: boolean; + readonly enumValues?: readonly string[]; + readonly arrayItemType?: FieldType; + readonly description?: string; + readonly relation?: { + readonly fieldName: string; + readonly targetTable: string; + }; +} + +/** + * Metadata for a single table. + */ +export interface TableMetadata { + readonly name: string; + readonly pluralForm: string; + readonly description?: string; + readonly fields: readonly FieldMetadata[]; + readonly relations?: readonly { + readonly relationType: "manyToOne" | "oneToOne" | "oneToMany"; + readonly fieldName: string; + readonly targetTable: string; + readonly foreignKeyField: string; + }[]; +} + +/** + * Map of all tables. + */ +export type TableMetadataMap = { readonly [key: string]: TableMetadata }; + +// ============================================================================= +// Sort & Filter Configuration (Discriminated Unions) +// ============================================================================= + +/** + * Sort configuration for a column. + * The `type` determines how values are compared when sorting. + * The `field` identifies the backend field name used for ordering. + */ +export type SortConfig = + | { field: string; type: "string" } + | { field: string; type: "number" } + | { field: string; type: "date" } + | { field: string; type: "boolean" }; + +/** + * Select option for enum/dropdown filters. + */ +export interface SelectOption { + value: string; + label: string; +} + +/** + * Filter configuration for a column. + * The `type` determines which operators are available. + * The `field` identifies the backend field name used for filtering. + */ +export type FilterConfig = + | { field: string; type: "string" } + | { field: string; type: "number" } + | { field: string; type: "date" } + | { field: string; type: "enum"; options: SelectOption[] } + | { field: string; type: "boolean" } + | { field: string; type: "uuid" }; + +// ============================================================================= +// Filter Operators (Single Source of Truth) +// ============================================================================= + +/** + * Operators available per filter type (Tailor Platform schema). + */ +export const OPERATORS_BY_FILTER_TYPE = { + string: [ + "eq", + "ne", + "contains", + "notContains", + "hasPrefix", + "hasSuffix", + "notHasPrefix", + "notHasSuffix", + "in", + "nin", + ], + number: ["eq", "ne", "gt", "gte", "lt", "lte", "between", "in", "nin"], + date: ["eq", "ne", "gt", "gte", "lt", "lte", "between", "in", "nin"], + enum: ["eq", "ne", "in", "nin"], + boolean: ["eq", "ne"], + uuid: ["eq", "ne", "in", "nin"], +} as const satisfies Record; + +/** + * Maps each filter type to the union of operators it supports. + */ +export type OperatorForFilterType = { + [T in FilterConfig["type"]]: (typeof OPERATORS_BY_FILTER_TYPE)[T][number]; +}; + +/** + * Union of all available filter operators. + */ +export type FilterOperator = OperatorForFilterType[FilterConfig["type"]]; + +/** + * Resolve the operator union for a specific field within a filter type. + */ +export type OperatorForField = [Extract] extends [ + never, +] + ? FilterOperator + : Extract extends { operator: infer O } + ? O + : FilterOperator; + +// ============================================================================= +// Filter Type → FieldType Mapping (type-level) +// ============================================================================= + +/** + * Type-level mapping from `FieldType` (metadata) to `FilterConfig["type"]`. + */ +export type FieldTypeToFilterConfigType = { + string: "string"; + number: "number"; + boolean: "boolean"; + uuid: "uuid"; + datetime: "date"; + date: "date"; + time: "date"; + enum: "enum"; + array: never; + nested: never; + file: never; +}; + +// ============================================================================= +// Filter & Sort State +// ============================================================================= + +/** + * Active filter state. + * + * @typeParam TFieldName - Union of allowed field name strings (default: `string`). + */ +export interface Filter { + field: TFieldName; + operator: FilterOperator; + value: unknown; +} + +/** + * Metadata-aware filter type from a single table metadata object. + */ +export type TableMetadataFilter = + TTable["fields"][number] extends infer F + ? F extends { readonly name: infer N; readonly type: infer T } + ? N extends string + ? T extends keyof FieldTypeToFilterConfigType + ? FieldTypeToFilterConfigType[T] extends never + ? never + : { + field: N; + operator: OperatorForFilterType[FieldTypeToFilterConfigType[T]]; + value: unknown; + } + : never + : never + : never + : never; + +/** + * Metadata-aware filter type. + * + * @deprecated Use `TableMetadataFilter` instead. + */ +export type MetadataFilter< + TMetadata extends TableMetadataMap, + TTableName extends string & keyof TMetadata, +> = TableMetadataFilter; + +/** + * Active sort state for a single field. + */ +export interface SortState { + field: string; + direction: "Asc" | "Desc"; +} + +/** + * Page info from GraphQL response (Tailor Platform standard). + */ +export interface PageInfo { + hasNextPage: boolean; + endCursor: string | null; + hasPreviousPage: boolean; + startCursor: string | null; +} + +// ============================================================================= +// Query Variables (Tailor Platform format) +// ============================================================================= + +/** + * GraphQL query variables in Tailor Platform format. + */ +export interface QueryVariables { + query?: Record; + order?: { field: string; direction: "Asc" | "Desc" }[]; + first?: number | null; + after?: string | null; + last?: number | null; + before?: string | null; +} + +// ============================================================================= +// Collection Variables (split into explicit sub-properties) +// ============================================================================= + +/** + * Pagination variables for cursor-based pagination (Tailor Platform format). + */ +export interface PaginationVariables { + first?: number; + after?: string | null; + last?: number; + before?: string | null; +} + +// --------------------------------------------------------------------------- +// Metadata-aware filter variable types +// --------------------------------------------------------------------------- + +type FieldTypeToTSType = { + string: string; + number: number; + boolean: boolean; + uuid: string; + datetime: string; + date: string; + time: string; + enum: string; +}; + +type ResolveFieldValueType = T extends "enum" + ? F extends { readonly enumValues: readonly (infer V extends string)[] } + ? V + : string + : FieldTypeToTSType[T]; + +type OperatorValueType = TOp extends "in" | "nin" + ? TValue[] + : TOp extends "between" + ? { min: TValue; max: TValue } + : TValue; + +type FilterInputForFieldType = { + [Op in OperatorForFilterType[TFilterConfigType]]?: OperatorValueType; +}; + +/** + * Builds a Tailor Platform QueryInput-compatible type from table metadata. + */ +export type BuildQueryVariables = { + [F in TTable["fields"][number] as F extends { + readonly name: infer N extends string; + readonly type: infer T; + } + ? T extends keyof FieldTypeToFilterConfigType + ? FieldTypeToFilterConfigType[T] extends never + ? never + : N + : never + : never]?: F extends { + readonly type: infer T extends keyof FieldTypeToFilterConfigType & keyof FieldTypeToTSType; + } + ? FieldTypeToFilterConfigType[T] extends infer FCT extends FilterConfig["type"] + ? FilterInputForFieldType> + : never + : never; +}; + +/** + * Collection variables split into explicit sub-properties. + */ +export interface CollectionVariables { + query: Record> | undefined; + order: { field: string; direction: "Asc" | "Desc" }[] | undefined; + pagination: PaginationVariables; +} + +// ============================================================================= +// Collection Result (Tailor Platform standard) +// ============================================================================= + +/** + * GraphQL collection result format (Tailor Platform standard). + */ +export interface CollectionResult { + edges: { node: T }[]; + pageInfo: PageInfo; + total?: number | null; +} + +/** + * Extract the node type from a cursor connection result. + */ +export type NodeType = + NonNullable["edges"][number]["node"]; + +// ============================================================================= +// Column Definitions +// ============================================================================= + +/** + * Options for defining a column (used with `column()` helper). + */ +export interface ColumnOptions> { + label?: string; + render: (row: TRow) => ReactNode; + id?: string; + width?: number; + accessor?: (row: TRow) => unknown; + sort?: SortConfig; + filter?: FilterConfig; +} + +/** + * A column definition (produced by `column()` helper). + */ +export interface Column> { + label?: string; + render: (row: TRow) => ReactNode; + id?: string; + width?: number; + accessor?: (row: TRow) => unknown; + sort?: SortConfig; + filter?: FilterConfig; +} + +/** + * Column definition used by `useDataTable` (same as `Column`). + */ +export type ColumnDefinition> = Column; + +// ============================================================================= +// useCollectionVariables Types +// ============================================================================= + +/** + * Options for `useCollectionVariables` hook. + */ +export interface UseCollectionOptions< + TFieldName extends string = string, + TFilter extends Filter = Filter, +> { + params?: { + initialFilters?: TFilter[]; + initialSort?: { field: TFieldName; direction: "Asc" | "Desc" }[]; + pageSize?: number; + }; +} + +/** + * Collection control interface for UI components to interact with + * filter, sort, and pagination state. + */ +export interface CollectionControl< + TFieldName extends string = string, + TFilter = Filter, +> { + // Filter operations + filters: Filter[]; + addFilter( + field: F, + operator: OperatorForField, + value: unknown, + ): void; + setFilters: (filters: Filter[]) => void; + removeFilter(field: TFieldName): void; + clearFilters: () => void; + + // Sort operations + sortStates: SortState[]; + setSort(field: TFieldName, direction?: "Asc" | "Desc"): void; + clearSort: () => void; + + // Pagination operations + pageSize: number; + setPageSize: (size: number) => void; + cursor: string | null; + paginationDirection: "forward" | "backward"; + nextPage: (endCursor: string) => void; + prevPage: (startCursor: string) => void; + resetPage: () => void; + hasPrevPage: boolean; + hasNextPage: boolean; + setPageInfo: (pageInfo: PageInfo) => void; + currentPage: number; + totalPages: number | null; + goToFirstPage: () => void; + goToLastPage: () => void; + setTotal: (total: number) => void; +} + +/** + * Return type of `useCollectionVariables` hook. + */ +export interface UseCollectionReturn< + TFieldName extends string = string, + TVariables = CollectionVariables, + TFilter = Filter, +> { + variables: TVariables; + control: CollectionControl; +} + +// ============================================================================= +// useDataTable Types +// ============================================================================= + +/** + * Options for `useDataTable` hook. + */ +export interface UseDataTableOptions> { + columns: Column[]; + data: CollectionResult | undefined; + loading?: boolean; + error?: Error | null; + control?: CollectionControl; + onClickRow?: (row: TRow) => void; + rowActions?: RowAction[]; +} + +/** + * Row operations with optimistic update support. + */ +export interface RowOperations> { + updateRow: (rowId: string, fields: Partial) => { rollback: () => void }; + deleteRow: (rowId: string) => { rollback: () => void; deletedRow: TRow }; + insertRow: (row: TRow) => { rollback: () => void }; +} + +// ============================================================================= +// Row Actions +// ============================================================================= + +/** + * A single row action definition for the actions column. + */ +export interface RowAction> { + id: string; + label: string; + icon?: ReactNode; + variant?: "default" | "destructive"; + isDisabled?: (row: TRow) => boolean; + onClick: (row: TRow) => void; +} + +/** + * Return type of `useDataTable` hook. + */ +export interface UseDataTableReturn> { + // Data + rows: TRow[]; + loading: boolean; + error: Error | null; + sortStates: SortState[]; + onSort?: (field: string, direction?: "Asc" | "Desc") => void; + + // Pagination (delegated from collection) + pageInfo: PageInfo; + nextPage: (endCursor: string) => void; + prevPage: (startCursor: string) => void; + hasPrevPage: boolean; + hasNextPage: boolean; + + // Column management + columns: Column[]; + visibleColumns: Column[]; + toggleColumn: (fieldOrId: string) => void; + showAllColumns: () => void; + hideAllColumns: () => void; + isColumnVisible: (fieldOrId: string) => boolean; + + // Row Operations (Optimistic Updates) + updateRow: (rowId: string, fields: Partial) => { rollback: () => void }; + deleteRow: (rowId: string) => { rollback: () => void; deletedRow: TRow }; + insertRow: (row: TRow) => { rollback: () => void }; + + // Control (passthrough for DataTable.Provider) + control: CollectionControl | undefined; + + // Row interaction (passthrough for DataTable.Provider) + onClickRow?: (row: TRow) => void; + rowActions?: RowAction[]; +} + +// ============================================================================= +// Metadata-based Column Inference Types +// ============================================================================= + +/** + * Extract field names from a single table metadata object. + */ +export type TableFieldName = TTable["fields"][number] extends { + readonly name: infer N; +} + ? N extends string + ? N + : never + : never; + +/** + * Extract field names from table metadata map + table name. + * + * @deprecated Use `TableFieldName` instead. + */ +export type FieldName< + TMetadata extends TableMetadataMap, + TTableName extends keyof TMetadata, +> = TableFieldName; + +type OrderableFieldType = "string" | "number" | "boolean" | "datetime" | "date" | "time" | "enum"; + +/** + * Extract only orderable field names from a single table metadata object. + */ +export type TableOrderableFieldName = + Extract extends { + readonly name: infer N; + } + ? N extends string + ? N + : never + : never; + +/** + * Extract only orderable field names from table metadata map + table name. + * + * @deprecated Use `TableOrderableFieldName` instead. + */ +export type OrderableFieldName< + TMetadata extends TableMetadataMap, + TTableName extends keyof TMetadata, +> = TableOrderableFieldName; + +/** + * Find table names in metadata whose fields are a superset of `TFieldName`. + */ +export type MatchingTableName = { + [K in string & keyof TMetadata]: TFieldName extends FieldName ? K : never; +}[string & keyof TMetadata]; + +/** + * Options for metadata-based single field inference. + */ +export interface MetadataFieldOptions { + label?: string; + width?: number; + sort?: boolean; + filter?: boolean; +} + +/** + * Options for metadata-based multi-field definition. + */ +export interface MetadataFieldsOptions { + overrides?: Record>; + sort?: boolean; + filter?: boolean; +} + +// ============================================================================= +// Default Operator Labels +// ============================================================================= + +/** + * Default operator labels used by SearchFilterForm. + */ +export const DEFAULT_OPERATOR_LABELS: Record = { + eq: "=", + ne: "≠", + contains: "contains", + notContains: "not contains", + hasPrefix: "starts with", + hasSuffix: "ends with", + notHasPrefix: "not starts with", + notHasSuffix: "not ends with", + gt: ">", + gte: "≥", + lt: "<", + lte: "≤", + between: "between", + in: "in", + nin: "not in", +}; + +// ============================================================================= +// Type Mapping Utilities +// ============================================================================= + +/** + * Map metadata field type to SortConfig. + * Returns undefined for types that don't support sorting. + */ +export function fieldTypeToSortConfig(field: string, type: FieldType): SortConfig | undefined { + switch (type) { + case "string": + return { field, type: "string" }; + case "number": + return { field, type: "number" }; + case "boolean": + return { field, type: "boolean" }; + case "datetime": + case "date": + case "time": + return { field, type: "date" }; + case "enum": + return { field, type: "string" }; + default: + return undefined; + } +} + +/** + * Map metadata field type to FilterConfig. + * Returns undefined for types that don't support filtering. + */ +export function fieldTypeToFilterConfig( + field: string, + type: FieldType, + enumValues?: readonly string[], +): FilterConfig | undefined { + switch (type) { + case "string": + return { field, type: "string" }; + case "number": + return { field, type: "number" }; + case "boolean": + return { field, type: "boolean" }; + case "uuid": + return { field, type: "uuid" }; + case "datetime": + case "date": + case "time": + return { field, type: "date" }; + case "enum": + return { + field, + type: "enum", + options: (enumValues ?? []).map((v) => ({ value: v, label: v })), + }; + default: + return undefined; + } +} diff --git a/packages/core/src/components/data-table/use-data-table.ts b/packages/core/src/components/data-table/use-data-table.ts new file mode 100644 index 00000000..94f53f63 --- /dev/null +++ b/packages/core/src/components/data-table/use-data-table.ts @@ -0,0 +1,233 @@ +import { useCallback, useEffect, useMemo, useState } from "react"; +import type { Column, PageInfo, SortState, UseDataTableOptions, UseDataTableReturn } from "./types"; + +/** + * Hook that integrates data management, column visibility, row operations, and + * sort/pagination state for the `DataTable.*` compound component. + * + * @example + * ```tsx + * const { variables, control } = useCollectionVariables({ params: { pageSize: 20 } }); + * const [result] = useQuery({ + * query: GET_ORDERS, + * variables: { ...variables.pagination, query: variables.query, order: variables.order }, + * }); + * + * const table = useDataTable({ + * columns, + * data: result.data?.orders, + * loading: result.fetching, + * control, + * }); + * + * + * + * + * + * + * + * ``` + */ +export function useDataTable>( + options: UseDataTableOptions, +): UseDataTableReturn { + const { + columns: allColumns, + data, + loading = false, + error = null, + control, + onClickRow, + rowActions, + } = options; + + // --------------------------------------------------------------------------- + // Data extraction + // --------------------------------------------------------------------------- + const [optimisticRows, setOptimisticRows] = useState(null); + + const sourceRows = useMemo(() => { + return data?.edges?.map((e) => e.node) ?? []; + }, [data]); + + const rows = optimisticRows ?? sourceRows; + + useEffect(() => { + setOptimisticRows(null); + }, [sourceRows]); + + const pageInfo = useMemo(() => { + return ( + data?.pageInfo ?? { + hasNextPage: false, + endCursor: null, + hasPreviousPage: false, + startCursor: null, + } + ); + }, [data]); + + useEffect(() => { + if (data?.pageInfo) { + control?.setPageInfo(data.pageInfo); + } + if (data?.total != null) { + control?.setTotal(data.total); + } + }, [data?.pageInfo, data?.total, control]); + + // --------------------------------------------------------------------------- + // Column visibility management + // --------------------------------------------------------------------------- + const [hiddenColumns, setHiddenColumns] = useState>(new Set()); + + const getColumnKey = useCallback((col: Column): string => { + return col.id ?? col.label ?? ""; + }, []); + + const visibleColumns = useMemo[]>(() => { + return allColumns.filter((col) => !hiddenColumns.has(getColumnKey(col))); + }, [allColumns, hiddenColumns, getColumnKey]); + + const toggleColumn = useCallback((fieldOrId: string) => { + setHiddenColumns((prev) => { + const next = new Set(prev); + if (next.has(fieldOrId)) { + next.delete(fieldOrId); + } else { + next.add(fieldOrId); + } + return next; + }); + }, []); + + const showAllColumns = useCallback(() => { + setHiddenColumns(new Set()); + }, []); + + const hideAllColumns = useCallback(() => { + const allKeys = new Set(allColumns.map(getColumnKey)); + setHiddenColumns(allKeys); + }, [allColumns, getColumnKey]); + + const isColumnVisible = useCallback( + (fieldOrId: string) => !hiddenColumns.has(fieldOrId), + [hiddenColumns], + ); + + // --------------------------------------------------------------------------- + // Pagination (delegated from control) + // --------------------------------------------------------------------------- + const nextPage = useCallback( + (endCursor: string) => { + control?.nextPage(endCursor); + }, + [control], + ); + + const prevPage = useCallback( + (startCursor: string) => { + control?.prevPage(startCursor); + }, + [control], + ); + + const hasPrevPage = control?.hasPrevPage ?? false; + const hasNextPage = control?.hasNextPage ?? false; + + // --------------------------------------------------------------------------- + // Row Operations (Optimistic Updates) + // --------------------------------------------------------------------------- + const updateRow = useCallback( + (rowId: string, fields: Partial) => { + const currentRows = optimisticRows ?? sourceRows; + const updatedRows = currentRows.map((row) => { + if ((row as Record).id === rowId) { + return { ...row, ...fields }; + } + return row; + }); + setOptimisticRows(updatedRows); + + return { + rollback: () => { + setOptimisticRows(null); + }, + }; + }, + [optimisticRows, sourceRows], + ); + + const deleteRow = useCallback( + (rowId: string) => { + const currentRows = optimisticRows ?? sourceRows; + const deletedRow = currentRows.find((row) => (row as Record).id === rowId); + const filteredRows = currentRows.filter( + (row) => (row as Record).id !== rowId, + ); + setOptimisticRows(filteredRows); + + return { + rollback: () => { + setOptimisticRows(null); + }, + deletedRow: deletedRow as TRow, + }; + }, + [optimisticRows, sourceRows], + ); + + const insertRow = useCallback( + (row: TRow) => { + const currentRows = optimisticRows ?? sourceRows; + setOptimisticRows([row, ...currentRows]); + + return { + rollback: () => { + setOptimisticRows(null); + }, + }; + }, + [optimisticRows, sourceRows], + ); + + // --------------------------------------------------------------------------- + // Sort (delegated from control) + // --------------------------------------------------------------------------- + const sortStates = useMemo(() => { + return control?.sortStates ?? []; + }, [control?.sortStates]); + + const onSort = useMemo<((field: string, direction?: "Asc" | "Desc") => void) | undefined>(() => { + if (!control) return undefined; + return (field: string, direction?: "Asc" | "Desc") => control.setSort(field, direction); + }, [control]); + + // --------------------------------------------------------------------------- + // Return + // --------------------------------------------------------------------------- + return { + rows, + loading, + error, + sortStates, + onSort, + pageInfo, + nextPage, + prevPage, + hasPrevPage, + hasNextPage, + columns: allColumns, + visibleColumns, + toggleColumn, + showAllColumns, + hideAllColumns, + isColumnVisible, + updateRow, + deleteRow, + insertRow, + control, + onClickRow, + rowActions, + }; +} diff --git a/packages/core/src/contexts/collection-control-context.tsx b/packages/core/src/contexts/collection-control-context.tsx new file mode 100644 index 00000000..11053916 --- /dev/null +++ b/packages/core/src/contexts/collection-control-context.tsx @@ -0,0 +1,47 @@ +import { createContext, useContext, type ReactNode } from "react"; +import type { CollectionControl } from "@/components/data-table/types"; + +const CollectionControlContext = createContext(null); + +/** + * Provider that shares collection control state via React Context. + * + * @example + * ```tsx + * const { variables, control } = useCollectionVariables({ params: { pageSize: 20 } }); + * + * + * + * ... + * + * + * ``` + */ +export function CollectionControlProvider({ + value, + children, +}: { + value: CollectionControl; + children: ReactNode; +}) { + return ( + {children} + ); +} + +/** + * Hook to access collection control from the nearest `CollectionControlProvider`. + * + * @typeParam TFieldName - Union of allowed field name strings (default: `string`). + * + * @throws Error if used outside of `CollectionControlProvider`. + */ +export function useCollectionControl< + TFieldName extends string = string, +>(): CollectionControl { + const ctx = useContext(CollectionControlContext); + if (!ctx) { + throw new Error("useCollectionControl must be used within "); + } + return ctx as CollectionControl; +} diff --git a/packages/core/src/hooks/use-collection-variables.test.ts b/packages/core/src/hooks/use-collection-variables.test.ts new file mode 100644 index 00000000..74327e55 --- /dev/null +++ b/packages/core/src/hooks/use-collection-variables.test.ts @@ -0,0 +1,440 @@ +import { renderHook, act } from "@testing-library/react"; +import { describe, it, expect } from "vitest"; +import type { TableMetadataMap } from "@/components/data-table/types"; +import { useCollectionVariables } from "./use-collection-variables"; + +describe("useCollectionVariables", () => { + // --------------------------------------------------------------------------- + // Initial state + // --------------------------------------------------------------------------- + describe("initial state", () => { + it("returns default variables with pageSize 20", () => { + const { result } = renderHook(() => useCollectionVariables({})); + expect(result.current.variables.pagination).toEqual({ first: 20 }); + expect(result.current.variables.query).toBeUndefined(); + expect(result.current.variables.order).toBeUndefined(); + expect(result.current.control.filters).toEqual([]); + expect(result.current.control.sortStates).toEqual([]); + expect(result.current.control.cursor).toBeNull(); + expect(result.current.control.hasPrevPage).toBe(false); + }); + + it("uses custom pageSize", () => { + const { result } = renderHook(() => useCollectionVariables({ params: { pageSize: 50 } })); + expect(result.current.variables.pagination.first).toBe(50); + }); + + it("applies initial sort", () => { + const { result } = renderHook(() => + useCollectionVariables({ + params: { + initialSort: [{ field: "createdAt", direction: "Desc" }], + }, + }), + ); + expect(result.current.control.sortStates).toEqual([ + { field: "createdAt", direction: "Desc" }, + ]); + expect(result.current.variables.order).toEqual([{ field: "createdAt", direction: "Desc" }]); + }); + + it("applies initial filters", () => { + const { result } = renderHook(() => + useCollectionVariables({ + params: { + initialFilters: [ + { + field: "status", + operator: "eq", + value: "ACTIVE", + }, + ], + }, + }), + ); + expect(result.current.control.filters).toHaveLength(1); + expect(result.current.variables.query).toEqual({ + status: { eq: "ACTIVE" }, + }); + }); + }); + + // --------------------------------------------------------------------------- + // Filter operations + // --------------------------------------------------------------------------- + describe("filter operations", () => { + it("adds a filter", () => { + const { result } = renderHook(() => useCollectionVariables({})); + + act(() => { + result.current.control.addFilter("status", "eq", "ACTIVE"); + }); + + expect(result.current.control.filters).toHaveLength(1); + expect(result.current.control.filters[0]).toMatchObject({ + field: "status", + operator: "eq", + value: "ACTIVE", + }); + expect(result.current.variables.query).toEqual({ + status: { eq: "ACTIVE" }, + }); + }); + + it("replaces filter for same field", () => { + const { result } = renderHook(() => useCollectionVariables({})); + + act(() => { + result.current.control.addFilter("status", "eq", "ACTIVE"); + }); + act(() => { + result.current.control.addFilter("status", "eq", "INACTIVE"); + }); + + expect(result.current.control.filters).toHaveLength(1); + expect(result.current.control.filters[0].value).toBe("INACTIVE"); + }); + + it("sets filters in bulk", () => { + const { result } = renderHook(() => useCollectionVariables({})); + + act(() => { + result.current.control.setFilters([ + { + field: "status", + operator: "eq", + value: "ACTIVE", + }, + { + field: "amount", + operator: "gte", + value: 1000, + }, + ]); + }); + + expect(result.current.control.filters).toHaveLength(2); + expect(result.current.variables.query).toEqual({ + status: { eq: "ACTIVE" }, + amount: { gte: 1000 }, + }); + }); + + it("removes a filter", () => { + const { result } = renderHook(() => useCollectionVariables({})); + + act(() => { + result.current.control.addFilter("status", "eq", "ACTIVE"); + result.current.control.addFilter("amount", "gte", 1000); + }); + act(() => { + result.current.control.removeFilter("status"); + }); + + expect(result.current.control.filters).toHaveLength(1); + expect(result.current.control.filters[0].field).toBe("amount"); + }); + + it("clears all filters", () => { + const { result } = renderHook(() => useCollectionVariables({})); + + act(() => { + result.current.control.addFilter("status", "eq", "ACTIVE"); + result.current.control.addFilter("amount", "gte", 1000); + }); + act(() => { + result.current.control.clearFilters(); + }); + + expect(result.current.control.filters).toHaveLength(0); + expect(result.current.variables.query).toBeUndefined(); + }); + + it("resets pagination when filters change", () => { + const { result } = renderHook(() => useCollectionVariables({})); + + act(() => { + result.current.control.nextPage("cursor1"); + }); + expect(result.current.control.cursor).toBe("cursor1"); + + act(() => { + result.current.control.addFilter("status", "eq", "ACTIVE"); + }); + expect(result.current.control.cursor).toBeNull(); + expect(result.current.control.hasPrevPage).toBe(false); + }); + }); + + // --------------------------------------------------------------------------- + // Sort operations + // --------------------------------------------------------------------------- + describe("sort operations", () => { + it("sets sort", () => { + const { result } = renderHook(() => useCollectionVariables({})); + + act(() => { + result.current.control.setSort("createdAt", "Desc"); + }); + + expect(result.current.control.sortStates).toEqual([ + { field: "createdAt", direction: "Desc" }, + ]); + expect(result.current.variables.order).toEqual([{ field: "createdAt", direction: "Desc" }]); + }); + + it("appends sort for different fields", () => { + const { result } = renderHook(() => useCollectionVariables({})); + + act(() => { + result.current.control.setSort("createdAt", "Desc"); + }); + act(() => { + result.current.control.setSort("name", "Asc"); + }); + + expect(result.current.control.sortStates).toEqual([ + { field: "createdAt", direction: "Desc" }, + { field: "name", direction: "Asc" }, + ]); + }); + + it("replaces direction for existing field", () => { + const { result } = renderHook(() => useCollectionVariables({})); + + act(() => { + result.current.control.setSort("createdAt", "Desc"); + }); + act(() => { + result.current.control.setSort("name", "Asc"); + }); + act(() => { + result.current.control.setSort("createdAt", "Asc"); + }); + + expect(result.current.control.sortStates).toEqual([ + { field: "name", direction: "Asc" }, + { field: "createdAt", direction: "Asc" }, + ]); + }); + + it("removes sort when direction is undefined", () => { + const { result } = renderHook(() => useCollectionVariables({})); + + act(() => { + result.current.control.setSort("createdAt", "Desc"); + }); + act(() => { + result.current.control.setSort("name", "Asc"); + }); + act(() => { + result.current.control.setSort("createdAt"); + }); + + expect(result.current.control.sortStates).toEqual([{ field: "name", direction: "Asc" }]); + }); + + it("clears sort", () => { + const { result } = renderHook(() => useCollectionVariables({})); + + act(() => { + result.current.control.setSort("createdAt", "Desc"); + }); + act(() => { + result.current.control.clearSort(); + }); + + expect(result.current.control.sortStates).toEqual([]); + expect(result.current.variables.order).toBeUndefined(); + }); + }); + + // --------------------------------------------------------------------------- + // Pagination operations + // --------------------------------------------------------------------------- + describe("pagination operations", () => { + it("navigates to next page (forward)", () => { + const { result } = renderHook(() => useCollectionVariables({})); + + act(() => { + result.current.control.nextPage("cursor1"); + }); + + expect(result.current.control.cursor).toBe("cursor1"); + expect(result.current.control.paginationDirection).toBe("forward"); + expect(result.current.variables.pagination.after).toBe("cursor1"); + expect(result.current.variables.pagination.first).toBe(20); + expect(result.current.variables.pagination.last).toBeUndefined(); + expect(result.current.variables.pagination.before).toBeUndefined(); + }); + + it("navigates to previous page (backward)", () => { + const { result } = renderHook(() => useCollectionVariables({})); + + act(() => { + result.current.control.prevPage("cursor1"); + }); + + expect(result.current.control.cursor).toBe("cursor1"); + expect(result.current.control.paginationDirection).toBe("backward"); + expect(result.current.variables.pagination.before).toBe("cursor1"); + expect(result.current.variables.pagination.last).toBe(20); + expect(result.current.variables.pagination.first).toBeUndefined(); + expect(result.current.variables.pagination.after).toBeUndefined(); + }); + + it("switches direction on nextPage after prevPage", () => { + const { result } = renderHook(() => useCollectionVariables({})); + + act(() => { + result.current.control.prevPage("cursorB"); + }); + expect(result.current.control.paginationDirection).toBe("backward"); + + act(() => { + result.current.control.nextPage("cursorA"); + }); + expect(result.current.control.paginationDirection).toBe("forward"); + expect(result.current.variables.pagination.after).toBe("cursorA"); + expect(result.current.variables.pagination.first).toBe(20); + }); + + it("resets page to forward direction", () => { + const { result } = renderHook(() => useCollectionVariables({})); + + act(() => { + result.current.control.prevPage("cursor1"); + }); + act(() => { + result.current.control.resetPage(); + }); + + expect(result.current.control.cursor).toBeNull(); + expect(result.current.control.paginationDirection).toBe("forward"); + }); + + it("tracks hasPrevPage from currentPage and hasNextPage from setPageInfo", () => { + const { result } = renderHook(() => useCollectionVariables({})); + + expect(result.current.control.hasPrevPage).toBe(false); + expect(result.current.control.hasNextPage).toBe(false); + + act(() => { + result.current.control.nextPage("cursor-end"); + }); + + expect(result.current.control.hasPrevPage).toBe(true); + + act(() => { + result.current.control.setPageInfo({ + hasNextPage: true, + endCursor: "end", + hasPreviousPage: false, + startCursor: "start", + }); + }); + + expect(result.current.control.hasNextPage).toBe(true); + }); + }); + + // --------------------------------------------------------------------------- + // variables + // --------------------------------------------------------------------------- + describe("variables", () => { + it("generates complete variables with filters, sort, and cursor", () => { + const { result } = renderHook(() => + useCollectionVariables({ + params: { + pageSize: 10, + initialFilters: [ + { + field: "status", + operator: "eq", + value: "ACTIVE", + }, + ], + initialSort: [{ field: "createdAt", direction: "Desc" }], + }, + }), + ); + + act(() => { + result.current.control.nextPage("abc123"); + }); + + expect(result.current.variables).toEqual({ + query: { status: { eq: "ACTIVE" } }, + order: [{ field: "createdAt", direction: "Desc" }], + pagination: { + first: 10, + after: "abc123", + }, + }); + }); + + it("omits undefined fields from pagination", () => { + const { result } = renderHook(() => useCollectionVariables({})); + const { pagination } = result.current.variables; + expect(pagination).toEqual({ first: 20 }); + expect("after" in pagination).toBe(false); + expect("last" in pagination).toBe(false); + expect("before" in pagination).toBe(false); + }); + + it("returns undefined for query and order when empty", () => { + const { result } = renderHook(() => useCollectionVariables({ params: { pageSize: 10 } })); + + expect(result.current.variables.query).toBeUndefined(); + expect(result.current.variables.order).toBeUndefined(); + expect(result.current.variables.pagination).toEqual({ first: 10 }); + }); + }); + + // --------------------------------------------------------------------------- + // Metadata-typed overload + // --------------------------------------------------------------------------- + describe("metadata-typed overload", () => { + const testMetadata = { + task: { + name: "task", + pluralForm: "tasks", + fields: [ + { name: "id", type: "uuid", required: true }, + { name: "title", type: "string", required: true }, + { + name: "status", + type: "enum", + required: true, + enumValues: ["todo", "in_progress", "done"], + }, + { name: "dueDate", type: "date", required: false }, + { name: "count", type: "number", required: false }, + ], + }, + } as const satisfies TableMetadataMap; + + it("works with tableMetadata", () => { + const { result } = renderHook(() => + useCollectionVariables({ + tableMetadata: testMetadata.task, + params: { pageSize: 10 }, + }), + ); + expect(result.current.variables.pagination).toEqual({ first: 10 }); + }); + + it("applies typed initialSort", () => { + const { result } = renderHook(() => + useCollectionVariables({ + tableMetadata: testMetadata.task, + params: { + initialSort: [{ field: "dueDate", direction: "Desc" }], + }, + }), + ); + + expect(result.current.control.sortStates).toEqual([{ field: "dueDate", direction: "Desc" }]); + }); + }); +}); diff --git a/packages/core/src/hooks/use-collection-variables.ts b/packages/core/src/hooks/use-collection-variables.ts new file mode 100644 index 00000000..a1446dc9 --- /dev/null +++ b/packages/core/src/hooks/use-collection-variables.ts @@ -0,0 +1,303 @@ +import { useCallback, useMemo, useState } from "react"; +import type { + BuildQueryVariables, + CollectionControl, + CollectionVariables, + Filter, + FilterOperator, + PageInfo, + PaginationVariables, + SortState, + TableFieldName, + TableMetadata, + TableMetadataFilter, + TableOrderableFieldName, + UseCollectionOptions, + UseCollectionReturn, +} from "@/components/data-table/types"; + +// ----------------------------------------------------------------------------- +// Overload signatures +// ----------------------------------------------------------------------------- + +/** + * Hook for managing collection query parameters (filters, sort, pagination) + * with metadata-based field name typing and automatic `fieldType` detection. + * + * Returns `variables` with `query`, `order`, and `pagination` sub-properties + * that can be mapped to GraphQL query variables. + * + * @example + * ```tsx + * import { tableMetadata } from "./generated/data-viewer-metadata.generated"; + * + * const { variables } = useCollectionVariables({ + * tableMetadata: tableMetadata.task, + * params: { pageSize: 20 }, + * }); + * const { query, order, pagination } = variables; + * const [result] = useQuery({ + * query: GET_TASKS, + * variables: { ...pagination, query, order }, + * }); + * ``` + */ +export function useCollectionVariables( + options: UseCollectionOptions, TableMetadataFilter> & { + tableMetadata: TTable; + }, +): UseCollectionReturn< + TableFieldName, + { + query: BuildQueryVariables | undefined; + order: + | { + field: TableOrderableFieldName; + direction: "Asc" | "Desc"; + }[] + | undefined; + pagination: PaginationVariables; + }, + TableMetadataFilter +>; + +/** + * Hook for managing collection query parameters (filters, sort, pagination). + * + * Returns `variables` with `query`, `order`, and `pagination` sub-properties + * that can be mapped to GraphQL query variables. + * + * @example + * ```tsx + * const { variables } = useCollectionVariables({ params: { pageSize: 20 } }); + * const { query, order, pagination } = variables; + * const [result] = useQuery({ + * query: GET_ORDERS, + * variables: { ...pagination, query, order }, + * }); + * ``` + */ +export function useCollectionVariables( + options: UseCollectionOptions & { + tableMetadata?: never; + }, +): UseCollectionReturn; + +// ----------------------------------------------------------------------------- +// Implementation +// ----------------------------------------------------------------------------- +export function useCollectionVariables( + options: UseCollectionOptions & { + tableMetadata?: TableMetadata; + }, +): UseCollectionReturn { + const { params = {} } = options; + const { initialFilters = [], initialSort = [], pageSize: initialPageSize = 20 } = params; + + // --------------------------------------------------------------------------- + // State + // --------------------------------------------------------------------------- + const [filters, setFiltersState] = useState(initialFilters); + const [sortStates, setSortStates] = useState(initialSort); + const [pageSize, setPageSizeState] = useState(initialPageSize); + const [cursor, setCursor] = useState(null); + const [paginationDirection, setPaginationDirection] = useState<"forward" | "backward">("forward"); + const [currentPageInfo, setCurrentPageInfo] = useState({ + hasNextPage: false, + endCursor: null, + hasPreviousPage: false, + startCursor: null, + }); + const [currentPage, setCurrentPage] = useState(1); + const [total, setTotalState] = useState(null); + + // --------------------------------------------------------------------------- + // Filter operations + // --------------------------------------------------------------------------- + const addFilter = useCallback((field: string, operator: FilterOperator, value: unknown) => { + setFiltersState((prev) => { + const existing = prev.findIndex((f) => f.field === field); + const newFilter: Filter = { field, operator, value }; + if (existing >= 0) { + const updated = [...prev]; + updated[existing] = newFilter; + return updated; + } + return [...prev, newFilter]; + }); + setCursor(null); + setPaginationDirection("forward"); + setCurrentPage(1); + }, []); + + const setFilters = useCallback((newFilters: Filter[]) => { + setFiltersState(newFilters); + setCursor(null); + setPaginationDirection("forward"); + setCurrentPage(1); + }, []); + + const removeFilter = useCallback((field: string) => { + setFiltersState((prev) => prev.filter((f) => f.field !== field)); + setCursor(null); + setPaginationDirection("forward"); + setCurrentPage(1); + }, []); + + const clearFilters = useCallback(() => { + setFiltersState([]); + setCursor(null); + setPaginationDirection("forward"); + setCurrentPage(1); + }, []); + + // --------------------------------------------------------------------------- + // Sort operations + // --------------------------------------------------------------------------- + const setSort = useCallback((field: string, direction?: "Asc" | "Desc") => { + setSortStates((prev) => { + if (direction === undefined) { + return prev.filter((s) => s.field !== field); + } + const newState: SortState = { field, direction }; + const filtered = prev.filter((s) => s.field !== field); + return [...filtered, newState]; + }); + setCursor(null); + setPaginationDirection("forward"); + setCurrentPage(1); + }, []); + + const clearSort = useCallback(() => { + setSortStates([]); + setCursor(null); + setPaginationDirection("forward"); + setCurrentPage(1); + }, []); + + // --------------------------------------------------------------------------- + // Pagination operations + // --------------------------------------------------------------------------- + const nextPage = useCallback((endCursor: string) => { + setCursor(endCursor); + setPaginationDirection("forward"); + setCurrentPage((p) => p + 1); + }, []); + + const prevPage = useCallback((startCursor: string) => { + setCursor(startCursor); + setPaginationDirection("backward"); + setCurrentPage((p) => Math.max(1, p - 1)); + }, []); + + const resetPage = useCallback(() => { + setCursor(null); + setPaginationDirection("forward"); + setCurrentPage(1); + }, []); + + const setPageSize = useCallback((size: number) => { + setPageSizeState(size); + setCursor(null); + setPaginationDirection("forward"); + setCurrentPage(1); + }, []); + + const setPageInfo = useCallback((pageInfo: PageInfo) => { + setCurrentPageInfo(pageInfo); + }, []); + + const setTotal = useCallback((value: number) => { + setTotalState(value); + }, []); + + const totalPages = total !== null ? Math.max(1, Math.ceil(total / pageSize)) : null; + + const goToFirstPage = useCallback(() => { + setCursor(null); + setPaginationDirection("forward"); + setCurrentPage(1); + }, []); + + const goToLastPage = useCallback(() => { + setCursor(null); + setPaginationDirection("backward"); + setCurrentPage(totalPages ?? 1); + }, [totalPages]); + + const hasPrevPage = currentPage > 1; + const hasNextPage = totalPages !== null ? currentPage < totalPages : currentPageInfo.hasNextPage; + + // --------------------------------------------------------------------------- + // Build collection variables (Tailor Platform format) + // --------------------------------------------------------------------------- + const queryVars = useMemo(() => { + if (filters.length === 0) return undefined; + const filterQuery: Record> = {}; + for (const filter of filters) { + filterQuery[filter.field] = { [filter.operator]: filter.value }; + } + return filterQuery; + }, [filters]); + + const orderVars = useMemo(() => { + if (sortStates.length === 0) return undefined; + return sortStates.map((s) => ({ + field: s.field, + direction: s.direction, + })); + }, [sortStates]); + + const paginationVars = useMemo(() => { + const p: PaginationVariables = {}; + if (paginationDirection === "forward") { + p.first = pageSize; + if (cursor) p.after = cursor; + } else { + p.last = pageSize; + if (cursor) p.before = cursor; + } + return p; + }, [pageSize, cursor, paginationDirection]); + + const variables = useMemo( + () => ({ + query: queryVars, + order: orderVars, + pagination: paginationVars, + }), + [queryVars, orderVars, paginationVars], + ); + + // --------------------------------------------------------------------------- + // Return + // --------------------------------------------------------------------------- + return { + variables, + control: { + filters, + addFilter: addFilter as CollectionControl["addFilter"], + setFilters, + removeFilter, + clearFilters, + sortStates, + setSort, + clearSort, + pageSize, + setPageSize, + cursor, + paginationDirection, + nextPage, + prevPage, + resetPage, + hasPrevPage, + hasNextPage, + setPageInfo, + currentPage, + totalPages, + goToFirstPage, + goToLastPage, + setTotal, + }, + }; +} diff --git a/packages/core/src/hooks/use-collection-variables.typetest.ts b/packages/core/src/hooks/use-collection-variables.typetest.ts new file mode 100644 index 00000000..d7449b69 --- /dev/null +++ b/packages/core/src/hooks/use-collection-variables.typetest.ts @@ -0,0 +1,171 @@ +/** + * Compile-time type tests for `BuildQueryVariables`. + * + * These tests verify that `BuildQueryVariables` produces the correct + * filter input types from table metadata. + * + * To run: `npx tsc --noEmit` — any assertion that evaluates to `never` + * will cause a compile error, ensuring the test cases stay enforced. + */ + +import type { + BuildQueryVariables, + TableFieldName, + TableMetadata, + TableOrderableFieldName, +} from "@/components/data-table/types"; + +// ============================================================================= +// 1. BuildQueryVariables produces correct filter types per field type +// ============================================================================= + +type TestTable = { + readonly name: "test"; + readonly pluralForm: "tests"; + readonly fields: readonly [ + { readonly name: "id"; readonly type: "uuid"; readonly required: true }, + { + readonly name: "title"; + readonly type: "string"; + readonly required: true; + }, + { + readonly name: "amount"; + readonly type: "number"; + readonly required: false; + }, + { + readonly name: "status"; + readonly type: "enum"; + readonly required: true; + readonly enumValues: readonly ["active", "inactive"]; + }, + { + readonly name: "isActive"; + readonly type: "boolean"; + readonly required: false; + }, + { + readonly name: "createdAt"; + readonly type: "datetime"; + readonly required: false; + }, + { readonly name: "tags"; readonly type: "array"; readonly required: false }, + { + readonly name: "config"; + readonly type: "nested"; + readonly required: false; + }, + ]; +}; + +// Verify TestTable is assignable to TableMetadata +type AssertValidTable = TestTable extends TableMetadata ? true : never; +export const assertValidTable: AssertValidTable = true; + +type TestQuery = BuildQueryVariables; + +// ✅ String fields produce string operators +type AssertStringField = TestQuery extends { + title?: { eq?: string; contains?: string }; +} + ? true + : never; +export const assertStringField: AssertStringField = true; + +// ✅ Number fields produce number operators with between +type AssertNumberField = TestQuery extends { + amount?: { eq?: number; gt?: number; between?: { min: number; max: number } }; +} + ? true + : never; +export const assertNumberField: AssertNumberField = true; + +// ✅ Enum fields produce literal union types from enumValues +type AssertEnumField = TestQuery extends { + status?: { + eq?: "active" | "inactive"; + in?: ("active" | "inactive")[]; + nin?: ("active" | "inactive")[]; + }; +} + ? true + : never; +export const assertEnumField: AssertEnumField = true; + +// ✅ Boolean fields produce eq/ne operators +type AssertBooleanField = TestQuery extends { + isActive?: { eq?: boolean; ne?: boolean }; +} + ? true + : never; +export const assertBooleanField: AssertBooleanField = true; + +// ✅ UUID fields produce eq/ne/in/nin operators +type AssertUuidField = TestQuery extends { + id?: { eq?: string; ne?: string; in?: string[]; nin?: string[] }; +} + ? true + : never; +export const assertUuidField: AssertUuidField = true; + +// ✅ Datetime fields produce date operators +type AssertDatetimeField = TestQuery extends { + createdAt?: { + eq?: string; + gt?: string; + between?: { min: string; max: string }; + }; +} + ? true + : never; +export const assertDatetimeField: AssertDatetimeField = true; + +// ✅ Array and nested fields are excluded (not filterable) +type AssertNoArrayField = "tags" extends keyof TestQuery ? never : true; +export const assertNoArrayField: AssertNoArrayField = true; + +type AssertNoNestedField = "config" extends keyof TestQuery ? never : true; +export const assertNoNestedField: AssertNoNestedField = true; + +// ============================================================================= +// 2. TableFieldName extracts all field names +// ============================================================================= + +type TestFieldNames = TableFieldName; +type AssertFieldNames = + | "id" + | "title" + | "amount" + | "status" + | "isActive" + | "createdAt" + | "tags" + | "config" extends TestFieldNames + ? true + : never; +export const assertFieldNames: AssertFieldNames = true; + +// ============================================================================= +// 3. TableOrderableFieldName excludes non-orderable types +// ============================================================================= + +type TestOrderableNames = TableOrderableFieldName; + +// uuid is NOT orderable +type AssertNoUuidOrder = "id" extends TestOrderableNames ? never : true; +export const assertNoUuidOrder: AssertNoUuidOrder = true; + +// array and nested are NOT orderable +type AssertNoArrayOrder = "tags" extends TestOrderableNames ? never : true; +export const assertNoArrayOrder: AssertNoArrayOrder = true; + +// string, number, enum, boolean, datetime ARE orderable +type AssertStringOrderable = "title" extends TestOrderableNames ? true : never; +export const assertStringOrderable: AssertStringOrderable = true; + +type AssertNumberOrderable = "amount" extends TestOrderableNames ? true : never; +export const assertNumberOrderable: AssertNumberOrderable = true; + +type AssertEnumOrderable = "status" extends TestOrderableNames ? true : never; +export const assertEnumOrderable: AssertEnumOrderable = true; diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index 765996a1..92108827 100644 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -107,3 +107,59 @@ export { Select, type SelectAsyncFetcher } from "./components/select-standalone" export { Combobox, type ComboboxAsyncFetcher } from "./components/combobox-standalone"; export { Autocomplete, type AutocompleteAsyncFetcher } from "./components/autocomplete-standalone"; export { type MappedItem, type ItemGroup } from "./components/dropdown-items"; + +// DataTable +export { + DataTable, + useDataTable, + useDataTableContext, + Pagination, + createColumnHelper, + dataTableLabels, + OPERATORS_BY_FILTER_TYPE, + DEFAULT_OPERATOR_LABELS, + fieldTypeToSortConfig, + fieldTypeToFilterConfig, + type Column, + type ColumnOptions, + type ColumnDefinition, + type SortConfig, + type FilterConfig, + type SortState, + type Filter, + type FilterOperator, + type SelectOption, + type PageInfo, + type RowAction, + type RowOperations, + type CollectionVariables, + type CollectionControl, + type CollectionResult, + type NodeType, + type QueryVariables, + type PaginationVariables, + type UseCollectionOptions, + type UseCollectionReturn, + type UseDataTableOptions, + type UseDataTableReturn, + type FieldType, + type FieldMetadata, + type TableMetadata, + type TableMetadataMap, + type BuildQueryVariables, + type TableMetadataFilter, + type MetadataFilter, + type TableFieldName, + type TableOrderableFieldName, + type OrderableFieldName, + type FieldName, + type MatchingTableName, + type MetadataFieldOptions, + type MetadataFieldsOptions, + type PaginationProps, +} from "./components/data-table"; +export { useCollectionVariables } from "./hooks/use-collection-variables"; +export { + CollectionControlProvider, + useCollectionControl, +} from "./contexts/collection-control-context"; diff --git a/packages/core/src/test-utils.tsx b/packages/core/src/test-utils.tsx new file mode 100644 index 00000000..8f473df4 --- /dev/null +++ b/packages/core/src/test-utils.tsx @@ -0,0 +1,21 @@ +import type { ReactNode } from "react"; +import { AppShellConfigContext, buildConfigurations } from "@/contexts/appshell-context"; + +/** + * Test wrapper that provides AppShellConfigContext for components/hooks + * that depend on `useAppShellConfig()` (e.g., `useT()` from `defineI18nLabels`). + */ +export function createAppShellWrapper(locale = "en") { + const configurations = buildConfigurations({ + modules: [], + locale, + }); + + return function AppShellWrapper({ children }: { children: ReactNode }) { + return ( + + {children} + + ); + }; +} diff --git a/packages/sdk-plugins/.oxlintrc.jsonc b/packages/sdk-plugins/.oxlintrc.jsonc new file mode 100644 index 00000000..cf68e211 --- /dev/null +++ b/packages/sdk-plugins/.oxlintrc.jsonc @@ -0,0 +1,9 @@ +{ + "$schema": "../../node_modules/oxlint/configuration_schema.json", + "plugins": ["typescript", "unicorn", "oxc"], + "categories": { + "correctness": "error", + "suspicious": "error", + }, + "ignorePatterns": ["dist", "node_modules"], +} diff --git a/packages/sdk-plugins/package.json b/packages/sdk-plugins/package.json new file mode 100644 index 00000000..190cb87d --- /dev/null +++ b/packages/sdk-plugins/package.json @@ -0,0 +1,54 @@ +{ + "name": "@tailor-platform/app-shell-sdk-plugins", + "version": "0.1.0", + "description": "Tailor Platform SDK plugins for AppShell (metadata generator)", + "keywords": [ + "app-shell", + "metadata-generator", + "sdk-plugin", + "tailor-platform" + ], + "homepage": "https://github.com/tailor-platform/app-shell/tree/main/packages/sdk-plugins#readme", + "bugs": { + "url": "https://github.com/tailor-platform" + }, + "license": "MIT", + "repository": { + "type": "git", + "url": "https://github.com/tailor-platform/app-shell", + "directory": "packages/sdk-plugins" + }, + "files": [ + "dist/**" + ], + "type": "module", + "exports": { + ".": { + "types": "./dist/index.d.mts", + "default": "./dist/index.mjs" + } + }, + "publishConfig": { + "access": "public" + }, + "scripts": { + "dev": "tsdown --watch", + "build": "tsdown", + "lint": "oxlint -c .oxlintrc.jsonc", + "test": "vitest run", + "type-check": "tsc --incremental" + }, + "dependencies": { + "@tailor-platform/app-shell": "workspace:*" + }, + "devDependencies": { + "@tailor-platform/sdk": "^1.33.0", + "oxlint": "catalog:", + "tsdown": "^0.21.7", + "typescript": "^5", + "vitest": "^4" + }, + "peerDependencies": { + "@tailor-platform/sdk": ">= 1.0.0" + } +} diff --git a/packages/sdk-plugins/src/index.ts b/packages/sdk-plugins/src/index.ts new file mode 100644 index 00000000..f05e88ef --- /dev/null +++ b/packages/sdk-plugins/src/index.ts @@ -0,0 +1 @@ +export { appShellMetadataPlugin, type AppShellMetadataPluginOptions } from "./metadata-plugin"; diff --git a/packages/sdk-plugins/src/metadata-plugin.test.ts b/packages/sdk-plugins/src/metadata-plugin.test.ts new file mode 100644 index 00000000..02e321ba --- /dev/null +++ b/packages/sdk-plugins/src/metadata-plugin.test.ts @@ -0,0 +1,566 @@ +import { describe, it, expect } from "vitest"; +import { appShellMetadataPlugin } from "./metadata-plugin"; + +/** + * Minimal mock for TailorDBReadyContext. + * We only need the fields that the plugin reads. + */ +function createMockContext( + types: Record< + string, + { + name: string; + pluralForm: string; + description?: string; + fields: Record< + string, + { + name: string; + config: { + type: string; + required?: boolean; + description?: string; + array?: boolean; + allowedValues?: { value: string }[]; + rawRelation?: { + type: string; + toward: { type: string; as?: string }; + backward?: string; + }; + }; + relation?: { + targetType: string; + forwardName: string; + backwardName: string; + key: string; + unique: boolean; + }; + } + >; + forwardRelationships: Record< + string, + { + name: string; + targetType: string; + targetField: string; + sourceField: string; + isArray: boolean; + description: string; + } + >; + backwardRelationships: Record< + string, + { + name: string; + targetType: string; + targetField: string; + sourceField: string; + isArray: boolean; + description: string; + } + >; + settings: { pluralForm?: string }; + permissions: {}; + } + >, +) { + return { + tailordb: [ + { + namespace: "test", + types, + sourceInfo: new Map(), + pluginAttachments: new Map(), + }, + ], + baseDir: "/tmp", + configPath: "/tmp/tailor.config.ts", + pluginConfig: {}, + }; +} + +describe("appShellMetadataPlugin", () => { + it("returns a plugin with correct id and description", () => { + const plugin = appShellMetadataPlugin(); + expect(plugin.id).toBe("app-shell-metadata"); + expect(plugin.description).toContain("AppShell"); + }); + + it("generates metadata for simple types", () => { + const plugin = appShellMetadataPlugin({ distPath: "out.ts" }); + const context = createMockContext({ + Order: { + name: "Order", + pluralForm: "Orders", + description: "Purchase orders", + fields: { + id: { + name: "id", + config: { type: "uuid", required: true }, + }, + title: { + name: "title", + config: { + type: "string", + required: true, + description: "Order title", + }, + }, + amount: { + name: "amount", + config: { type: "float", required: false }, + }, + isActive: { + name: "isActive", + config: { type: "boolean", required: false }, + }, + }, + forwardRelationships: {}, + backwardRelationships: {}, + settings: {}, + permissions: {}, + }, + }); + + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const result = plugin.onTailorDBReady!(context as any); + expect(result).toEqual({ + files: [ + { + path: "out.ts", + content: expect.stringContaining("export const tableMetadata"), + }, + ], + }); + + const content = (result as { files: { content: string }[] }).files[0].content; + expect(content).toContain('"order"'); + expect(content).toContain('"orders"'); + expect(content).toContain('"Purchase orders"'); + expect(content).toContain('"Order title"'); + + // Parse the generated metadata + const metadataMatch = content.match(/export const tableMetadata = ({[\s\S]*?}) as const;/); + expect(metadataMatch).not.toBeNull(); + const metadata = JSON.parse(metadataMatch![1]); + + expect(metadata.order).toBeDefined(); + expect(metadata.order.name).toBe("order"); + expect(metadata.order.pluralForm).toBe("orders"); + expect(metadata.order.description).toBe("Purchase orders"); + expect(metadata.order.fields).toHaveLength(4); + + const titleField = metadata.order.fields.find((f: { name: string }) => f.name === "title"); + expect(titleField).toEqual({ + name: "title", + type: "string", + required: true, + description: "Order title", + }); + + const amountField = metadata.order.fields.find((f: { name: string }) => f.name === "amount"); + expect(amountField).toEqual({ + name: "amount", + type: "number", + required: false, + }); + }); + + it("maps field types correctly", () => { + const plugin = appShellMetadataPlugin(); + const context = createMockContext({ + TestType: { + name: "TestType", + pluralForm: "TestTypes", + fields: { + intField: { + name: "intField", + config: { type: "integer", required: false }, + }, + floatField: { + name: "floatField", + config: { type: "float", required: false }, + }, + decimalField: { + name: "decimalField", + config: { type: "decimal", required: false }, + }, + dateField: { + name: "dateField", + config: { type: "date", required: false }, + }, + dtField: { + name: "dtField", + config: { type: "datetime", required: false }, + }, + arrayField: { + name: "arrayField", + config: { type: "string", required: false, array: true }, + }, + }, + forwardRelationships: {}, + backwardRelationships: {}, + settings: {}, + permissions: {}, + }, + }); + + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const result = plugin.onTailorDBReady!(context as any); + const content = (result as { files: { content: string }[] }).files[0].content; + const metadata = JSON.parse( + content.match(/export const tableMetadata = ({[\s\S]*?}) as const;/)![1], + ); + const fields = metadata.testType.fields; + + expect(fields.find((f: { name: string }) => f.name === "intField").type).toBe("number"); + expect(fields.find((f: { name: string }) => f.name === "floatField").type).toBe("number"); + expect(fields.find((f: { name: string }) => f.name === "decimalField").type).toBe("number"); + expect(fields.find((f: { name: string }) => f.name === "dateField").type).toBe("date"); + expect(fields.find((f: { name: string }) => f.name === "dtField").type).toBe("datetime"); + + const arrayField = fields.find((f: { name: string }) => f.name === "arrayField"); + expect(arrayField.type).toBe("array"); + expect(arrayField.arrayItemType).toBe("string"); + }); + + it("handles enum fields", () => { + const plugin = appShellMetadataPlugin(); + const context = createMockContext({ + Item: { + name: "Item", + pluralForm: "Items", + fields: { + status: { + name: "status", + config: { + type: "enum", + required: true, + allowedValues: [{ value: "DRAFT" }, { value: "ACTIVE" }, { value: "ARCHIVED" }], + }, + }, + }, + forwardRelationships: {}, + backwardRelationships: {}, + settings: {}, + permissions: {}, + }, + }); + + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const result = plugin.onTailorDBReady!(context as any); + const content = (result as { files: { content: string }[] }).files[0].content; + const metadata = JSON.parse( + content.match(/export const tableMetadata = ({[\s\S]*?}) as const;/)![1], + ); + + const statusField = metadata.item.fields[0]; + expect(statusField.type).toBe("enum"); + expect(statusField.enumValues).toEqual(["DRAFT", "ACTIVE", "ARCHIVED"]); + }); + + it("handles manyToOne relationships", () => { + const plugin = appShellMetadataPlugin(); + const context = createMockContext({ + OrderItem: { + name: "OrderItem", + pluralForm: "OrderItems", + fields: { + id: { + name: "id", + config: { type: "uuid", required: true }, + }, + orderId: { + name: "orderId", + config: { + type: "uuid", + required: true, + rawRelation: { + type: "n-1", + toward: { type: "Order", as: "order" }, + backward: "orderItems", + }, + }, + }, + }, + forwardRelationships: { + order: { + name: "order", + targetType: "Order", + targetField: "id", + sourceField: "orderId", + isArray: false, + description: "", + }, + }, + backwardRelationships: {}, + settings: {}, + permissions: {}, + }, + }); + + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const result = plugin.onTailorDBReady!(context as any); + const content = (result as { files: { content: string }[] }).files[0].content; + const metadata = JSON.parse( + content.match(/export const tableMetadata = ({[\s\S]*?}) as const;/)![1], + ); + + // Field-level relation + const orderIdField = metadata.orderItem.fields.find( + (f: { name: string }) => f.name === "orderId", + ); + expect(orderIdField.relation).toEqual({ + fieldName: "order", + targetTable: "order", + }); + + // Table-level relation + expect(metadata.orderItem.relations).toHaveLength(1); + expect(metadata.orderItem.relations[0]).toEqual({ + fieldName: "order", + targetTable: "order", + relationType: "manyToOne", + foreignKeyField: "orderId", + }); + }); + + it("handles oneToOne relationships", () => { + const plugin = appShellMetadataPlugin(); + const context = createMockContext({ + User: { + name: "User", + pluralForm: "Users", + fields: { + id: { + name: "id", + config: { type: "uuid", required: true }, + }, + profileId: { + name: "profileId", + config: { + type: "uuid", + required: true, + rawRelation: { + type: "1-1", + toward: { type: "Profile" }, + }, + }, + }, + }, + forwardRelationships: { + profile: { + name: "profile", + targetType: "Profile", + targetField: "id", + sourceField: "profileId", + isArray: false, + description: "", + }, + }, + backwardRelationships: {}, + settings: {}, + permissions: {}, + }, + }); + + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const result = plugin.onTailorDBReady!(context as any); + const content = (result as { files: { content: string }[] }).files[0].content; + const metadata = JSON.parse( + content.match(/export const tableMetadata = ({[\s\S]*?}) as const;/)![1], + ); + + expect(metadata.user.relations[0].relationType).toBe("oneToOne"); + expect(metadata.user.relations[0].foreignKeyField).toBe("profileId"); + }); + + it("handles backward (oneToMany) relationships", () => { + const plugin = appShellMetadataPlugin(); + const context = createMockContext({ + Order: { + name: "Order", + pluralForm: "Orders", + fields: { + id: { + name: "id", + config: { type: "uuid", required: true }, + }, + }, + forwardRelationships: {}, + backwardRelationships: { + orderItems: { + name: "orderItems", + targetType: "OrderItem", + targetField: "orderId", + sourceField: "orderId", + isArray: true, + description: "", + }, + }, + settings: {}, + permissions: {}, + }, + }); + + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const result = plugin.onTailorDBReady!(context as any); + const content = (result as { files: { content: string }[] }).files[0].content; + const metadata = JSON.parse( + content.match(/export const tableMetadata = ({[\s\S]*?}) as const;/)![1], + ); + + expect(metadata.order.relations).toHaveLength(1); + expect(metadata.order.relations[0]).toEqual({ + fieldName: "orderItems", + targetTable: "orderItem", + relationType: "oneToMany", + foreignKeyField: "orderId", + }); + }); + + it("generates tableNames export", () => { + const plugin = appShellMetadataPlugin(); + const context = createMockContext({ + Order: { + name: "Order", + pluralForm: "Orders", + fields: {}, + forwardRelationships: {}, + backwardRelationships: {}, + settings: {}, + permissions: {}, + }, + Product: { + name: "Product", + pluralForm: "Products", + fields: {}, + forwardRelationships: {}, + backwardRelationships: {}, + settings: {}, + permissions: {}, + }, + }); + + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const result = plugin.onTailorDBReady!(context as any); + const content = (result as { files: { content: string }[] }).files[0].content; + + expect(content).toContain("export const tableNames"); + expect(content).toContain('"order"'); + expect(content).toContain('"product"'); + expect(content).toContain("export type TableName"); + }); + + it("uses default distPath", () => { + const plugin = appShellMetadataPlugin(); + const context = createMockContext({ + Foo: { + name: "Foo", + pluralForm: "Foos", + fields: {}, + forwardRelationships: {}, + backwardRelationships: {}, + settings: {}, + permissions: {}, + }, + }); + + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const result = plugin.onTailorDBReady!(context as any); + expect((result as { files: { path: string }[] }).files[0].path).toBe( + "app-shell-metadata.generated.ts", + ); + }); + + it("handles multiple namespaces", () => { + const plugin = appShellMetadataPlugin(); + const context = { + tailordb: [ + { + namespace: "ns1", + types: { + Order: { + name: "Order", + pluralForm: "Orders", + fields: { + id: { + name: "id", + config: { type: "uuid", required: true }, + }, + }, + forwardRelationships: {}, + backwardRelationships: {}, + settings: {}, + permissions: {}, + }, + }, + sourceInfo: new Map(), + pluginAttachments: new Map(), + }, + { + namespace: "ns2", + types: { + Product: { + name: "Product", + pluralForm: "Products", + fields: { + id: { + name: "id", + config: { type: "uuid", required: true }, + }, + }, + forwardRelationships: {}, + backwardRelationships: {}, + settings: {}, + permissions: {}, + }, + }, + sourceInfo: new Map(), + pluginAttachments: new Map(), + }, + ], + baseDir: "/tmp", + configPath: "/tmp/tailor.config.ts", + pluginConfig: {}, + }; + + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const result = plugin.onTailorDBReady!(context as any); + const content = (result as { files: { content: string }[] }).files[0].content; + const metadata = JSON.parse( + content.match(/export const tableMetadata = ({[\s\S]*?}) as const;/)![1], + ); + + expect(Object.keys(metadata)).toEqual(["order", "product"]); + }); + + it("omits relations array when no relations exist", () => { + const plugin = appShellMetadataPlugin(); + const context = createMockContext({ + Simple: { + name: "Simple", + pluralForm: "Simples", + fields: { + name: { + name: "name", + config: { type: "string", required: true }, + }, + }, + forwardRelationships: {}, + backwardRelationships: {}, + settings: {}, + permissions: {}, + }, + }); + + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const result = plugin.onTailorDBReady!(context as any); + const content = (result as { files: { content: string }[] }).files[0].content; + const metadata = JSON.parse( + content.match(/export const tableMetadata = ({[\s\S]*?}) as const;/)![1], + ); + + expect(metadata.simple.relations).toBeUndefined(); + }); +}); diff --git a/packages/sdk-plugins/src/metadata-plugin.ts b/packages/sdk-plugins/src/metadata-plugin.ts new file mode 100644 index 00000000..864f6750 --- /dev/null +++ b/packages/sdk-plugins/src/metadata-plugin.ts @@ -0,0 +1,191 @@ +import type { Plugin, TailorDBReadyContext } from "@tailor-platform/sdk"; +import type { FieldType, FieldMetadata, TableMetadata } from "@tailor-platform/app-shell"; + +/** + * Options for the AppShell metadata plugin. + */ +export interface AppShellMetadataPluginOptions { + /** + * Output file path relative to project root. + * @default "app-shell-metadata.generated.ts" + */ + distPath?: string; +} + +/** + * Map TailorDB field type to AppShell FieldType. + */ +function mapFieldType( + tailorType: string, + isArray?: boolean, +): { type: FieldType; arrayItemType?: FieldType } { + const typeMap: Record = { + string: "string", + integer: "number", + float: "number", + decimal: "number", + boolean: "boolean", + uuid: "uuid", + datetime: "datetime", + date: "date", + time: "time", + enum: "enum", + nested: "nested", + file: "file", + }; + + const mappedType = typeMap[tailorType] ?? "string"; + + if (isArray) { + return { type: "array", arrayItemType: mappedType }; + } + + return { type: mappedType }; +} + +/** + * Convert PascalCase to camelCase. + */ +function toCamelCase(str: string): string { + return str.charAt(0).toLowerCase() + str.slice(1); +} + +/** + * Creates a Tailor Platform SDK plugin that generates table metadata + * for AppShell's `inferColumns()` and `createColumnHelper()`. + * + * Register with `definePlugins()` in your `tailor.config.ts`: + * + * ```ts + * import { definePlugins } from "@tailor-platform/sdk"; + * import { appShellMetadataPlugin } from "@tailor-platform/app-shell-sdk-plugins"; + * + * export const plugins = definePlugins( + * appShellMetadataPlugin({ + * distPath: "src/generated/app-shell-metadata.generated.ts", + * }), + * ); + * ``` + * + * Then run `tailor-sdk generate` to produce the metadata file. + */ +export function appShellMetadataPlugin( + options: AppShellMetadataPluginOptions = {}, +): Plugin { + const { distPath = "app-shell-metadata.generated.ts" } = options; + + return { + id: "app-shell-metadata", + description: + "Generates table metadata for AppShell DataTable (inferColumns, createColumnHelper)", + pluginConfig: options, + + onTailorDBReady(context: TailorDBReadyContext) { + const metadataMap: Record = {}; + + for (const ns of context.tailordb) { + for (const [_typeName, type] of Object.entries(ns.types)) { + const fields: FieldMetadata[] = []; + const relations: TableMetadata["relations"] extends readonly (infer R)[] | undefined + ? R[] + : never = []; + + // Process fields + for (const [fieldName, field] of Object.entries(type.fields)) { + const config = field.config; + const { type: fieldType, arrayItemType } = mapFieldType(config.type, config.array); + + // Extract relation info from rawRelation + let fieldRelation: FieldMetadata["relation"] | undefined; + if (config.rawRelation) { + const raw = config.rawRelation; + const isForeignKey = + raw.type === "manyToOne" || + raw.type === "n-1" || + raw.type === "N-1" || + raw.type === "oneToOne" || + raw.type === "1-1"; + + if (isForeignKey && raw.toward) { + const targetTableName = toCamelCase(raw.toward.type); + const relationFieldName = raw.toward.as ?? toCamelCase(raw.toward.type); + fieldRelation = { + fieldName: relationFieldName, + targetTable: targetTableName, + }; + } + } + + // Enum values + const enumValues = + config.allowedValues && config.allowedValues.length > 0 + ? config.allowedValues.map((v) => (typeof v === "string" ? v : v.value)) + : undefined; + + const fieldMetadata: FieldMetadata = { + name: fieldName, + type: fieldType, + required: config.required ?? false, + ...(config.description && { description: config.description }), + ...(enumValues && { enumValues }), + ...(arrayItemType && { arrayItemType }), + ...(fieldRelation && { relation: fieldRelation }), + }; + + fields.push(fieldMetadata); + } + + // Process forward relationships (manyToOne / oneToOne) + for (const [relName, rel] of Object.entries(type.forwardRelationships)) { + const fkField = type.fields[rel.sourceField]; + const isOneToOne = + fkField?.config.rawRelation?.type === "1-1" || + fkField?.config.rawRelation?.type === "oneToOne"; + + relations.push({ + fieldName: relName, + targetTable: toCamelCase(rel.targetType), + relationType: isOneToOne ? "oneToOne" : "manyToOne", + foreignKeyField: rel.sourceField, + }); + } + + // Process backward relationships (oneToMany) + for (const [relName, rel] of Object.entries(type.backwardRelationships)) { + relations.push({ + fieldName: relName, + targetTable: toCamelCase(rel.targetType), + relationType: "oneToMany", + foreignKeyField: rel.sourceField, + }); + } + + const camelName = toCamelCase(type.name); + metadataMap[camelName] = { + name: camelName, + pluralForm: toCamelCase(type.pluralForm), + ...(type.description && { description: type.description }), + fields, + ...(relations.length > 0 && { relations }), + }; + } + } + + const content = [ + "// This file is auto-generated by app-shell-metadata plugin", + "// Do not edit manually", + "", + `export const tableMetadata = ${JSON.stringify(metadataMap, null, 2)} as const;`, + "", + `export const tableNames = ${JSON.stringify(Object.keys(metadataMap), null, 2)} as const;`, + "", + `export type TableName = (typeof tableNames)[number];`, + "", + ].join("\n"); + + return { + files: [{ path: distPath, content }], + }; + }, + }; +} diff --git a/packages/sdk-plugins/tsconfig.json b/packages/sdk-plugins/tsconfig.json new file mode 100644 index 00000000..111d2a0e --- /dev/null +++ b/packages/sdk-plugins/tsconfig.json @@ -0,0 +1,16 @@ +{ + "compilerOptions": { + "target": "ES2023", + "lib": ["ES2023"], + "module": "ESNext", + "moduleResolution": "Bundler", + "skipLibCheck": true, + "noEmit": true, + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true + }, + "include": ["src"] +} diff --git a/packages/sdk-plugins/tsdown.config.ts b/packages/sdk-plugins/tsdown.config.ts new file mode 100644 index 00000000..212c045b --- /dev/null +++ b/packages/sdk-plugins/tsdown.config.ts @@ -0,0 +1,8 @@ +import { defineConfig } from "tsdown"; + +export default defineConfig({ + entry: { + index: "src/index.ts", + }, + format: ["esm"], +}); diff --git a/packages/sdk-plugins/vitest.config.ts b/packages/sdk-plugins/vitest.config.ts new file mode 100644 index 00000000..39159d4f --- /dev/null +++ b/packages/sdk-plugins/vitest.config.ts @@ -0,0 +1,7 @@ +import { defineConfig } from "vitest/config"; + +export default defineConfig({ + test: { + globals: false, + }, +}); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index fe39a07d..910690e2 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -43,7 +43,7 @@ importers: version: 1.56.0 turbo: specifier: ^2.8.21 - version: 2.8.21 + version: 2.9.1 examples/app-module: dependencies: @@ -77,7 +77,7 @@ importers: version: 19.2.3(@types/react@19.2.13) tsup: specifier: ^8.5.1 - version: 8.5.1(@microsoft/api-extractor@7.55.2(@types/node@25.5.0))(jiti@2.6.1)(postcss@8.5.8)(typescript@5.9.3)(yaml@2.7.0) + version: 8.5.1(@microsoft/api-extractor@7.55.2(@types/node@25.5.0))(@swc/core@1.12.11)(jiti@2.6.1)(postcss@8.5.8)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.7.0) typescript: specifier: ^5 version: 5.9.3 @@ -92,7 +92,7 @@ importers: version: link:../app-module next: specifier: 16.1.6 - version: 16.1.6(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 16.1.6(@opentelemetry/api@1.9.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) react: specifier: ^19.2.4 version: 19.2.4 @@ -145,7 +145,7 @@ importers: devDependencies: '@tailwindcss/vite': specifier: ^4.2.2 - version: 4.2.2(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.7.0)) + version: 4.2.2(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.7.0)) '@types/react': specifier: 'catalog:' version: 19.2.13 @@ -154,13 +154,13 @@ importers: version: 19.2.3(@types/react@19.2.13) '@vitejs/plugin-react': specifier: 'catalog:' - version: 5.2.0(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.7.0)) + version: 5.2.0(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.7.0)) typescript: specifier: ~5.9.3 version: 5.9.3 vite: specifier: 'catalog:' - version: 7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.7.0) + version: 7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.7.0) packages/core: dependencies: @@ -173,9 +173,6 @@ importers: '@tailor-platform/auth-public-client': specifier: ^0.5.0 version: 0.5.0 - '@tanstack/react-table': - specifier: ^8.21.3 - version: 8.21.3(react-dom@19.2.4(react@19.2.4))(react@19.2.4) change-case: specifier: ^5.4.4 version: 5.4.4 @@ -236,7 +233,7 @@ importers: version: 19.2.3(@types/react@19.2.13) '@vitejs/plugin-react': specifier: 'catalog:' - version: 5.2.0(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.7.0)) + version: 5.2.0(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.7.0)) happy-dom: specifier: ^20.6.2 version: 20.6.2 @@ -254,19 +251,41 @@ importers: version: 5.9.3 vite: specifier: 'catalog:' - version: 7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.7.0) + version: 7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.7.0) vite-plugin-dts: specifier: ^4.5.0 - version: 4.5.4(@types/node@25.5.0)(rollup@4.60.0)(typescript@5.9.3)(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.7.0)) + version: 4.5.4(@types/node@25.5.0)(rollup@4.60.0)(typescript@5.9.3)(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.7.0)) vite-plugin-externalize-deps: specifier: ^0.10.0 - version: 0.10.0(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.7.0)) + version: 0.10.0(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.7.0)) vite-tsconfig-paths: specifier: ^6.1.1 - version: 6.1.1(typescript@5.9.3)(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.7.0)) + version: 6.1.1(typescript@5.9.3)(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.7.0)) vitest: specifier: ^4.1.0 - version: 4.1.0(@types/node@25.5.0)(happy-dom@20.6.2)(jsdom@27.0.0)(msw@2.11.2(@types/node@25.5.0)(typescript@5.9.3))(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.7.0)) + version: 4.1.0(@opentelemetry/api@1.9.0)(@types/node@25.5.0)(happy-dom@20.6.2)(jsdom@27.0.0)(msw@2.11.2(@types/node@25.5.0)(typescript@5.9.3))(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.7.0)) + + packages/sdk-plugins: + dependencies: + '@tailor-platform/app-shell': + specifier: workspace:* + version: link:../core + devDependencies: + '@tailor-platform/sdk': + specifier: ^1.33.0 + version: 1.33.0(@types/node@25.5.0)(@types/react@19.2.13)(graphql@16.13.2)(typescript@5.9.3)(valibot@1.1.0(typescript@5.9.3)) + oxlint: + specifier: 'catalog:' + version: 1.56.0 + tsdown: + specifier: ^0.21.7 + version: 0.21.7(typescript@5.9.3) + typescript: + specifier: ^5 + version: 5.9.3 + vitest: + specifier: ^4 + version: 4.1.0(@opentelemetry/api@1.9.0)(@types/node@25.5.0)(happy-dom@20.6.2)(jsdom@27.0.0)(msw@2.11.2(@types/node@25.5.0)(typescript@5.9.3))(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.7.0)) packages/vite-plugin: dependencies: @@ -279,19 +298,31 @@ importers: version: 25.5.0 tsdown: specifier: ^0.21.7 - version: 0.21.7(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(typescript@5.9.3) + version: 0.21.7(typescript@5.9.3) typescript: specifier: ^5 version: 5.9.3 vite: specifier: ^7.3.1 - version: 7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.7.0) + version: 7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.7.0) vitest: specifier: ^4.1.0 - version: 4.1.0(@types/node@25.5.0)(happy-dom@20.6.2)(jsdom@27.0.0)(msw@2.11.2(@types/node@25.5.0)(typescript@5.9.3))(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.7.0)) + version: 4.1.0(@opentelemetry/api@1.9.0)(@types/node@25.5.0)(happy-dom@20.6.2)(jsdom@27.0.0)(msw@2.11.2(@types/node@25.5.0)(typescript@5.9.3))(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.7.0)) packages: + '@0no-co/graphql.web@1.2.0': + resolution: {integrity: sha512-/1iHy9TTr63gE1YcR5idjx8UREz1s0kFhydf3bBLCXyqjhkIc6igAzTOx3zPifCwFR87tsh/4Pa9cNts6d2otw==} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 + peerDependenciesMeta: + graphql: + optional: true + + '@alcalzone/ansi-tokenize@0.1.3': + resolution: {integrity: sha512-3yWxPTq3UQ/FY9p1ErPxIyfT64elWaMvM9lIHnaqpyft63tkxodF5aUElYHrdisWve5cETkh1+KBw1yJuW0aRw==} + engines: {node: '>=14.13.1'} + '@alloc/quick-lru@5.2.0': resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} engines: {node: '>=10'} @@ -422,6 +453,10 @@ packages: resolution: {integrity: sha512-mOm5ZrYmphGfqVWoH5YYMTITb3cDXsFgmvFlvkvWDMsR9X8RFnt7a0Wb6yNIdoFsiMO9WjYLq+U/FMtqIYAF8Q==} engines: {node: ^20.19.0 || >=22.12.0} + '@badgateway/oauth2-client@3.3.1': + resolution: {integrity: sha512-7R4mZocEt8nOIMCz9cQyxsrY7n/jhFW9YUW6Er9ySnBzH92wA0KmQUR1cT2encq2Lix6kRD2GyQRAmT1dWtwzg==} + engines: {node: '>= 18'} + '@base-ui/react@1.3.0': resolution: {integrity: sha512-FwpKqZbPz14AITp1CVgf4AjhKPe1OeeVKSBMdgD10zbFlj3QSWelmtCMLi2+/PFZZcIm3l87G7rwtCZJwHyXWA==} engines: {node: '>=14.0.0'} @@ -443,6 +478,9 @@ packages: '@types/react': optional: true + '@bufbuild/protobuf@2.11.0': + resolution: {integrity: sha512-sBXGT13cpmPR5BMgHE6UEEfEaShh5Ror6rfN3yEK5si7QVrtZg8LEPQb0VVhiLRUslD2yLnXtnRzG035J/mZXQ==} + '@bundled-es-modules/cookie@2.0.1': resolution: {integrity: sha512-8o+5fRPLNbjbdGRRmJj3h6Hh1AQJf2dk3qQ/5ZFb+PXkRNiSoMGGUKlsgLfrxneb72axVJyIYji64E2+nNfYyw==} @@ -504,6 +542,18 @@ packages: '@changesets/write@0.4.0': resolution: {integrity: sha512-CdTLvIOPiCNuH71pyDu3rA+Q0n65cmAbXnwWH84rKGiFumFzkmHNT8KHTMEchcxN+Kl8I54xGUhJ7l3E7X396Q==} + '@connectrpc/connect-node@2.1.1': + resolution: {integrity: sha512-s3TfsI1XF+n+1z6MBS9rTnFsxxR4Rw5wmdEnkQINli81ESGxcsfaEet8duzq8LVuuCupmhUsgpRo0Nv9pZkufg==} + engines: {node: '>=20'} + peerDependencies: + '@bufbuild/protobuf': ^2.7.0 + '@connectrpc/connect': 2.1.1 + + '@connectrpc/connect@2.1.1': + resolution: {integrity: sha512-JzhkaTvM73m2K1URT6tv53k2RwngSmCXLZJgK580qNQOXRzZRR/BCMfZw3h+90JpnG6XksP5bYT+cz0rpUzUWQ==} + peerDependencies: + '@bufbuild/protobuf': ^2.7.0 + '@csstools/color-helpers@6.0.2': resolution: {integrity: sha512-LMGQLS9EuADloEFkcTBR3BwV/CGHV7zyDxVRtVDTwdI2Ca4it0CCVTT9wCkxSgokjE5Ho41hEPgb8OEUwoXr6Q==} engines: {node: '>=20.19.0'} @@ -528,8 +578,8 @@ packages: peerDependencies: '@csstools/css-tokenizer': ^4.0.0 - '@csstools/css-syntax-patches-for-csstree@1.1.2': - resolution: {integrity: sha512-5GkLzz4prTIpoyeUiIu3iV6CSG3Plo7xRVOFPKI7FVEJ3mZ0A8SwK0XU3Gl7xAkiQ+mDyam+NNp875/C5y+jSA==} + '@csstools/css-syntax-patches-for-csstree@1.1.1': + resolution: {integrity: sha512-BvqN0AMWNAnLk9G8jnUT77D+mUbY/H2b3uDTvg2isJkHaOufUE2R3AOwxWo7VBQKT1lOdwdvorddo2B/lk64+w==} peerDependencies: css-tree: ^3.2.1 peerDependenciesMeta: @@ -540,6 +590,10 @@ packages: resolution: {integrity: sha512-QxULHAm7cNu72w97JUNCBFODFaXpbDg+dP8b/oWFAZ2MTRppA3U00Y2L1HqaS4J6yBqxwa/Y3nMBaxVKbB/NsA==} engines: {node: '>=20.19.0'} + '@dependents/detective-less@5.0.1': + resolution: {integrity: sha512-Y6+WUMsTFWE5jb20IFP4YGa5IrGY/+a/FbOSjDF/wz9gepU2hwCYSXRHP/vPwBvwcY3SVMASt4yXxbXNXigmZQ==} + engines: {node: '>=18'} + '@emnapi/core@1.9.0': resolution: {integrity: sha512-0DQ98G9ZQZOxfUcQn1waV2yS8aWdZ6kJMbYCJB3oUBecjWYO1fqJ+a1DRfPF3O5JEkwqwP1A9QEN/9mYm2Yd0w==} @@ -1025,6 +1079,28 @@ packages: resolution: {integrity: sha512-S8qNSZiYzFd0wAcyG5AXCvUHC5Sr7xpZ9wZ2py9XR88jUz8wooStVx5M6dRzczbBWjic9NP7+rY0Xi7qqK/aMQ==} engines: {node: '>=18'} + '@inquirer/ansi@2.0.4': + resolution: {integrity: sha512-DpcZrQObd7S0R/U3bFdkcT5ebRwbTTC4D3tCc1vsJizmgPLxNJBo+AAFmrZwe8zk30P2QzgzGWZ3Q9uJwWuhIg==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + + '@inquirer/checkbox@4.3.2': + resolution: {integrity: sha512-VXukHf0RR1doGe6Sm4F0Em7SWYLTHSsbGfJdS9Ja2bX5/D5uwVOEjr07cncLROdBvmnvCATYEWlHqYmXv2IlQA==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/checkbox@5.1.2': + resolution: {integrity: sha512-PubpMPO2nJgMufkoB3P2wwxNXEMUXnBIKi/ACzDUYfaoPuM7gSTmuxJeMscoLVEsR4qqrCMf5p0SiYGWnVJ8kw==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + '@inquirer/confirm@5.1.21': resolution: {integrity: sha512-KR8edRkIsUayMXV+o3Gv+q4jlhENF9nMYUZs9PA2HzrXeHI8M5uDag70U7RJn9yyiMZSbtF5/UexBtAVtZGSbQ==} engines: {node: '>=18'} @@ -1034,6 +1110,15 @@ packages: '@types/node': optional: true + '@inquirer/confirm@6.0.10': + resolution: {integrity: sha512-tiNyA73pgpQ0FQ7axqtoLUe4GDYjNCDcVsbgcA5anvwg2z6i+suEngLKKJrWKJolT//GFPZHwN30binDIHgSgQ==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + '@inquirer/core@10.3.2': resolution: {integrity: sha512-43RTuEbfP8MbKzedNqBrlhhNKVwoK//vUFNW3Q3vZ88BLcrs4kYpGg+B2mm5p2K/HfygoCxuKwJJiv8PbGmE0A==} engines: {node: '>=18'} @@ -1043,6 +1128,51 @@ packages: '@types/node': optional: true + '@inquirer/core@11.1.7': + resolution: {integrity: sha512-1BiBNDk9btIwYIzNZpkikIHXWeNzNncJePPqwDyVMhXhD1ebqbpn1mKGctpoqAbzywZfdG0O4tvmsGIcOevAPQ==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/editor@4.2.23': + resolution: {integrity: sha512-aLSROkEwirotxZ1pBaP8tugXRFCxW94gwrQLxXfrZsKkfjOYC1aRvAZuhpJOb5cu4IBTJdsCigUlf2iCOu4ZDQ==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/editor@5.0.10': + resolution: {integrity: sha512-VJx4XyaKea7t8hEApTw5dxeIyMtWXre2OiyJcICCRZI4hkoHsMoCnl/KbUnJJExLbH9csLLHMVR144ZhFE1CwA==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/expand@4.0.23': + resolution: {integrity: sha512-nRzdOyFYnpeYTTR2qFwEVmIWypzdAx/sIkCMeTNTcflFOovfqUk+HcFhQQVBftAh9gmGrpFj6QcGEqrDMDOiew==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/expand@5.0.10': + resolution: {integrity: sha512-fC0UHJPXsTRvY2fObiwuQYaAnHrp3aDqfwKUJSdfpgv18QUG054ezGbaRNStk/BKD5IPijeMKWej8VV8O5Q/eQ==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + '@inquirer/external-editor@1.0.3': resolution: {integrity: sha512-RWbSrDiYmO4LbejWY7ttpxczuwQyZLBUyygsA9Nsv95hpzUWwnNTVQmAq3xuh7vNwCp07UTmE5i11XAEExx4RA==} engines: {node: '>=18'} @@ -1052,10 +1182,149 @@ packages: '@types/node': optional: true + '@inquirer/external-editor@2.0.4': + resolution: {integrity: sha512-Prenuv9C1PHj2Itx0BcAOVBTonz02Hc2Nd2DbU67PdGUaqn0nPCnV34oDyyoaZHnmfRxkpuhh/u51ThkrO+RdA==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + '@inquirer/figures@1.0.15': resolution: {integrity: sha512-t2IEY+unGHOzAaVM5Xx6DEWKeXlDDcNPeDyUpsRc6CUhBfU3VQOEl+Vssh7VNp1dR8MdUJBWhuObjXCsVpjN5g==} engines: {node: '>=18'} + '@inquirer/figures@2.0.4': + resolution: {integrity: sha512-eLBsjlS7rPS3WEhmOmh1znQ5IsQrxWzxWDxO51e4urv+iVrSnIHbq4zqJIOiyNdYLa+BVjwOtdetcQx1lWPpiQ==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + + '@inquirer/input@4.3.1': + resolution: {integrity: sha512-kN0pAM4yPrLjJ1XJBjDxyfDduXOuQHrBB8aLDMueuwUGn+vNpF7Gq7TvyVxx8u4SHlFFj4trmj+a2cbpG4Jn1g==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/input@5.0.10': + resolution: {integrity: sha512-nvZ6qEVeX/zVtZ1dY2hTGDQpVGD3R7MYPLODPgKO8Y+RAqxkrP3i/3NwF3fZpLdaMiNuK0z2NaYIx9tPwiSegQ==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/number@3.0.23': + resolution: {integrity: sha512-5Smv0OK7K0KUzUfYUXDXQc9jrf8OHo4ktlEayFlelCjwMXz0299Y8OrI+lj7i4gCBY15UObk76q0QtxjzFcFcg==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/number@4.0.10': + resolution: {integrity: sha512-Ht8OQstxiS3APMGjHV0aYAjRAysidWdwurWEo2i8yI5xbhOBWqizT0+MU1S2GCcuhIBg+3SgWVjEoXgfhY+XaA==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/password@4.0.23': + resolution: {integrity: sha512-zREJHjhT5vJBMZX/IUbyI9zVtVfOLiTO66MrF/3GFZYZ7T4YILW5MSkEYHceSii/KtRk+4i3RE7E1CUXA2jHcA==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/password@5.0.10': + resolution: {integrity: sha512-QbNyvIE8q2GTqKLYSsA8ATG+eETo+m31DSR0+AU7x3d2FhaTWzqQek80dj3JGTo743kQc6mhBR0erMjYw5jQ0A==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/prompts@7.10.1': + resolution: {integrity: sha512-Dx/y9bCQcXLI5ooQ5KyvA4FTgeo2jYj/7plWfV5Ak5wDPKQZgudKez2ixyfz7tKXzcJciTxqLeK7R9HItwiByg==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/prompts@8.3.2': + resolution: {integrity: sha512-yFroiSj2iiBFlm59amdTvAcQFvWS6ph5oKESls/uqPBect7rTU2GbjyZO2DqxMGuIwVA8z0P4K6ViPcd/cp+0w==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/rawlist@4.1.11': + resolution: {integrity: sha512-+LLQB8XGr3I5LZN/GuAHo+GpDJegQwuPARLChlMICNdwW7OwV2izlCSCxN6cqpL0sMXmbKbFcItJgdQq5EBXTw==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/rawlist@5.2.6': + resolution: {integrity: sha512-jfw0MLJ5TilNsa9zlJ6nmRM0ZFVZhhTICt4/6CU2Dv1ndY7l3sqqo1gIYZyMMDw0LvE1u1nzJNisfHEhJIxq5w==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/search@3.2.2': + resolution: {integrity: sha512-p2bvRfENXCZdWF/U2BXvnSI9h+tuA8iNqtUKb9UWbmLYCRQxd8WkvwWvYn+3NgYaNwdUkHytJMGG4MMLucI1kA==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/search@4.1.6': + resolution: {integrity: sha512-3/6kTRae98hhDevENScy7cdFEuURnSpM3JbBNg8yfXLw88HgTOl+neUuy/l9W0No5NzGsLVydhBzTIxZP7yChQ==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/select@4.4.2': + resolution: {integrity: sha512-l4xMuJo55MAe+N7Qr4rX90vypFwCajSakx59qe/tMaC1aEHWLyw68wF4o0A4SLAY4E0nd+Vt+EyskeDIqu1M6w==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/select@5.1.2': + resolution: {integrity: sha512-kTK8YIkHV+f02y7bWCh7E0u2/11lul5WepVTclr3UMBtBr05PgcZNWfMa7FY57ihpQFQH/spLMHTcr0rXy50tA==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + '@inquirer/type@3.0.10': resolution: {integrity: sha512-BvziSRxfz5Ov8ch0z/n3oijRSEcEsHnhggm4xFZe93DHcUCTlutlq9Ox4SVENAfcRD22UQq7T/atg9Wr3k09eA==} engines: {node: '>=18'} @@ -1065,6 +1334,15 @@ packages: '@types/node': optional: true + '@inquirer/type@4.0.4': + resolution: {integrity: sha512-PamArxO3cFJZoOzspzo6cxVlLeIftyBsZw/S9bKY5DzxqJVZgjoj1oP8d0rskKtp7sZxBycsoer1g6UeJV1BBA==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + '@isaacs/balanced-match@4.0.1': resolution: {integrity: sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==} engines: {node: 20 || >=22} @@ -1073,6 +1351,10 @@ packages: resolution: {integrity: sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==} engines: {node: 20 || >=22} + '@isaacs/cliui@9.0.0': + resolution: {integrity: sha512-AokJm4tuBHillT+FpMtxQ60n8ObyXBatq7jD2/JA9dxbDDokKQm8KMht5ibGzLVU9IJDIKK4TPKgMHEYMn3lMg==} + engines: {node: '>=18'} + '@jridgewell/gen-mapping@0.3.13': resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} @@ -1089,6 +1371,10 @@ packages: '@jridgewell/trace-mapping@0.3.31': resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} + '@liam-hq/cli@0.7.24': + resolution: {integrity: sha512-kb2tcAFYEJ3twbTYnCYEYn1AnjDaCnpP4inSiZR5kh46ZTKlAlt0DZ+61GePLsR+lWBCuPjqOjraHPJ9pxy+Ng==} + hasBin: true + '@manypkg/find-root@1.1.0': resolution: {integrity: sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==} @@ -1112,11 +1398,84 @@ packages: resolution: {integrity: sha512-2+BzZbjRO7Ct61k8fMNHEtoKjeWI9pIlHFTqBwZ5icHpqszIgEZbjb1MW5Z0+bITTCTl3gk4PDBxs9tA/csXvA==} engines: {node: '>=18'} - '@napi-rs/wasm-runtime@1.1.2': - resolution: {integrity: sha512-sNXv5oLJ7ob93xkZ1XnxisYhGYXfaG9f65/ZgYuAu3qt7b3NadcOEhLvx28hv31PgX8SZJRYrAIPQilQmFpLVw==} - peerDependencies: - '@emnapi/core': ^1.7.1 - '@emnapi/runtime': ^1.7.1 + '@napi-rs/keyring-darwin-arm64@1.2.0': + resolution: {integrity: sha512-CA83rDeyONDADO25JLZsh3eHY8yTEtm/RS6ecPsY+1v+dSawzT9GywBMu2r6uOp1IEhQs/xAfxgybGAFr17lSA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + + '@napi-rs/keyring-darwin-x64@1.2.0': + resolution: {integrity: sha512-dBHjtKRCj4ByfnfqIKIJLo3wueQNJhLRyuxtX/rR4K/XtcS7VLlRD01XXizjpre54vpmObj63w+ZpHG+mGM8uA==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + + '@napi-rs/keyring-freebsd-x64@1.2.0': + resolution: {integrity: sha512-DPZFr11pNJSnaoh0dzSUNF+T6ORhy3CkzUT3uGixbA71cAOPJ24iG8e8QrLOkuC/StWrAku3gBnth2XMWOcR3Q==} + engines: {node: '>= 10'} + cpu: [x64] + os: [freebsd] + + '@napi-rs/keyring-linux-arm-gnueabihf@1.2.0': + resolution: {integrity: sha512-8xv6DyEMlvRdqJzp4F39RLUmmTQsLcGYYv/3eIfZNZN1O5257tHxTrFYqAsny659rJJK2EKeSa7PhrSibQqRWQ==} + engines: {node: '>= 10'} + cpu: [arm] + os: [linux] + + '@napi-rs/keyring-linux-arm64-gnu@1.2.0': + resolution: {integrity: sha512-Pu2V6Py+PBt7inryEecirl+t+ti8bhZphjP+W68iVaXHUxLdWmkgL9KI1VkbRHbx5k8K5Tew9OP218YfmVguIA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@napi-rs/keyring-linux-arm64-musl@1.2.0': + resolution: {integrity: sha512-8TDymrpC4P1a9iDEaegT7RnrkmrJN5eNZh3Im3UEV5PPYGtrb82CRxsuFohthCWQW81O483u1bu+25+XA4nKUw==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@napi-rs/keyring-linux-riscv64-gnu@1.2.0': + resolution: {integrity: sha512-awsB5XI1MYL7fwfjMDGmKOWvNgJEO7mM7iVEMS0fO39f0kVJnOSjlu7RHcXAF0LOx+0VfF3oxbWqJmZbvRCRHw==} + engines: {node: '>= 10'} + cpu: [riscv64] + os: [linux] + + '@napi-rs/keyring-linux-x64-gnu@1.2.0': + resolution: {integrity: sha512-8E+7z4tbxSJXxIBqA+vfB1CGajpCDRyTyqXkBig5NtASrv4YXcntSo96Iah2QDR5zD3dSTsmbqJudcj9rKKuHQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@napi-rs/keyring-linux-x64-musl@1.2.0': + resolution: {integrity: sha512-8RZ8yVEnmWr/3BxKgBSzmgntI7lNEsY7xouNfOsQkuVAiCNmxzJwETspzK3PQ2FHtDxgz5vHQDEBVGMyM4hUHA==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@napi-rs/keyring-win32-arm64-msvc@1.2.0': + resolution: {integrity: sha512-AoqaDZpQ6KPE19VBLpxyORcp+yWmHI9Xs9Oo0PJ4mfHma4nFSLVdhAubJCxdlNptHe5va7ghGCHj3L9Akiv4cQ==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + + '@napi-rs/keyring-win32-ia32-msvc@1.2.0': + resolution: {integrity: sha512-EYL+EEI6bCsYi3LfwcQdnX3P/R76ENKNn+3PmpGheBsUFLuh0gQuP7aMVHM4rTw6UVe+L3vCLZSptq/oeacz0A==} + engines: {node: '>= 10'} + cpu: [ia32] + os: [win32] + + '@napi-rs/keyring-win32-x64-msvc@1.2.0': + resolution: {integrity: sha512-xFlx/TsmqmCwNU9v+AVnEJgoEAlBYgzFF5Ihz1rMpPAt4qQWWkMd4sCyM1gMJ1A/GnRqRegDiQpwaxGUHFtFbA==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + + '@napi-rs/keyring@1.2.0': + resolution: {integrity: sha512-d0d4Oyxm+v980PEq1ZH2PmS6cvpMIRc17eYpiU47KgW+lzxklMu6+HOEOPmxrpnF/XQZ0+Q78I2mgMhbIIo/dg==} + engines: {node: '>= 10'} + + '@napi-rs/wasm-runtime@1.1.1': + resolution: {integrity: sha512-p64ah1M1ld8xjWv3qbvFwHiFVWrq1yFvV4f7w+mzaqiR4IlSgkqhcRdHwsGgomwzBH51sRY4NEowLxnaBjcW/A==} '@next/env@16.1.6': resolution: {integrity: sha512-N1ySLuZjnAtN3kFnwhAwPvZah8RJxKasD7x1f8shFqhncnWZn4JMfg37diLNuoHsLAlrDfM3g4mawVdtAG8XLQ==} @@ -1190,23 +1549,217 @@ packages: '@open-draft/until@2.1.0': resolution: {integrity: sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg==} - '@oxc-project/types@0.122.0': - resolution: {integrity: sha512-oLAl5kBpV4w69UtFZ9xqcmTi+GENWOcPF7FCrczTiBbmC0ibXxCwyvZGbO39rCVEuLGAZM84DH0pUIyyv/YJzA==} + '@opentelemetry/api-logs@0.213.0': + resolution: {integrity: sha512-zRM5/Qj6G84Ej3F1yt33xBVY/3tnMxtL1fiDIxYbDWYaZ/eudVw3/PBiZ8G7JwUxXxjW8gU4g6LnOyfGKYHYgw==} + engines: {node: '>=8.0.0'} - '@oxfmt/binding-android-arm-eabi@0.41.0': - resolution: {integrity: sha512-REfrqeMKGkfMP+m/ScX4f5jJBSmVNYcpoDF8vP8f8eYPDuPGZmzp56NIUsYmx3h7f6NzC6cE3gqh8GDWrJHCKw==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm] - os: [android] + '@opentelemetry/api@1.9.0': + resolution: {integrity: sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==} + engines: {node: '>=8.0.0'} - '@oxfmt/binding-android-arm64@0.41.0': - resolution: {integrity: sha512-s0b1dxNgb2KomspFV2LfogC2XtSJB42POXF4bMCLJyvQmAGos4ZtjGPfQreToQEaY0FQFjz3030ggI36rF1q5g==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [android] + '@opentelemetry/context-async-hooks@2.6.0': + resolution: {integrity: sha512-L8UyDwqpTcbkIK5cgwDRDYDoEhQoj8wp8BwsO19w3LB1Z41yEQm2VJyNfAi9DrLP/YTqXqWpKHyZfR9/tFYo1Q==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' - '@oxfmt/binding-darwin-arm64@0.41.0': - resolution: {integrity: sha512-EGXGualADbv/ZmamE7/2DbsrYmjoPlAmHEpTL4vapLF4EfVD6fr8/uQDFnPJkUBjiSWFJZtFNsGeN1B6V3owmA==} + '@opentelemetry/core@2.6.0': + resolution: {integrity: sha512-HLM1v2cbZ4TgYN6KEOj+Bbj8rAKriOdkF9Ed3tG25FoprSiQl7kYc+RRT6fUZGOvx0oMi5U67GoFdT+XUn8zEg==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + + '@opentelemetry/exporter-trace-otlp-proto@0.213.0': + resolution: {integrity: sha512-six3vPq3sL+ge1iZOfKEg+RHuFQhGb8ZTdlvD234w/0gi8ty/qKD46qoGpKvM3amy5yYunWBKiFBW47WaVS26w==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/otlp-exporter-base@0.213.0': + resolution: {integrity: sha512-MegxAP1/n09Ob2dQvY5NBDVjAFkZRuKtWKxYev1R2M8hrsgXzQGkaMgoEKeUOyQ0FUyYcO29UOnYdQWmWa0PXg==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/otlp-transformer@0.213.0': + resolution: {integrity: sha512-RSuAlxFFPjeK4d5Y6ps8L2WhaQI6CXWllIjvo5nkAlBpmq2XdYWEBGiAbOF4nDs8CX4QblJDv5BbMUft3sEfDw==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/resources@2.6.0': + resolution: {integrity: sha512-D4y/+OGe3JSuYUCBxtH5T9DSAWNcvCb/nQWIga8HNtXTVPQn59j0nTBAgaAXxUVBDl40mG3Tc76b46wPlZaiJQ==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.3.0 <1.10.0' + + '@opentelemetry/sdk-logs@0.213.0': + resolution: {integrity: sha512-00xlU3GZXo3kXKve4DLdrAL0NAFUaZ9appU/mn00S/5kSUdAvyYsORaDUfR04Mp2CLagAOhrzfUvYozY/EZX2g==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.4.0 <1.10.0' + + '@opentelemetry/sdk-metrics@2.6.0': + resolution: {integrity: sha512-CicxWZxX6z35HR83jl+PLgtFgUrKRQ9LCXyxgenMnz5A1lgYWfAog7VtdOvGkJYyQgMNPhXQwkYrDLujk7z1Iw==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.9.0 <1.10.0' + + '@opentelemetry/sdk-trace-base@2.6.0': + resolution: {integrity: sha512-g/OZVkqlxllgFM7qMKqbPV9c1DUPhQ7d4n3pgZFcrnrNft9eJXZM2TNHTPYREJBrtNdRytYyvwjgL5geDKl3EQ==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.3.0 <1.10.0' + + '@opentelemetry/sdk-trace-node@2.6.0': + resolution: {integrity: sha512-YhswtasmsbIGEFvLGvR9p/y3PVRTfFf+mgY8van4Ygpnv4sA3vooAjvh+qAn9PNWxs4/IwGGqiQS0PPsaRJ0vQ==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + + '@opentelemetry/semantic-conventions@1.40.0': + resolution: {integrity: sha512-cifvXDhcqMwwTlTK04GBNeIe7yyo28Mfby85QXFe1Yk8nmi36Ab/5UQwptOx84SsoGNRg+EVSjwzfSZMy6pmlw==} + engines: {node: '>=14'} + + '@oxc-parser/binding-android-arm-eabi@0.121.0': + resolution: {integrity: sha512-n07FQcySwOlzap424/PLMtOkbS7xOu8nsJduKL8P3COGHKgKoDYXwoAHCbChfgFpHnviehrLWIPX0lKGtbEk/A==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [android] + + '@oxc-parser/binding-android-arm64@0.121.0': + resolution: {integrity: sha512-/Dd1xIXboYAicw+twT2utxPD7bL8qh7d3ej0qvaYIMj3/EgIrGR+tSnjCUkiCT6g6uTC0neSS4JY8LxhdSU/sA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [android] + + '@oxc-parser/binding-darwin-arm64@0.121.0': + resolution: {integrity: sha512-A0jNEvv7QMtCO1yk205t3DWU9sWUjQ2KNF0hSVO5W9R9r/R1BIvzG01UQAfmtC0dQm7sCrs5puixurKSfr2bRQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [darwin] + + '@oxc-parser/binding-darwin-x64@0.121.0': + resolution: {integrity: sha512-SsHzipdxTKUs3I9EOAPmnIimEeJOemqRlRDOp9LIj+96wtxZejF51gNibmoGq8KoqbT1ssAI5po/E3J+vEtXGA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [darwin] + + '@oxc-parser/binding-freebsd-x64@0.121.0': + resolution: {integrity: sha512-v1APOTkCp+RWOIDAHRoaeW/UoaHF15a60E8eUL6kUQXh+i4K7PBwq2Wi7jm8p0ymID5/m/oC1w3W31Z/+r7HQw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [freebsd] + + '@oxc-parser/binding-linux-arm-gnueabihf@0.121.0': + resolution: {integrity: sha512-PmqPQuqHZyFVWA4ycr0eu4VnTMmq9laOHZd+8R359w6kzuNZPvmmunmNJ8ybkm769A0nCoVp3TJ6dUz7B3FYIQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@oxc-parser/binding-linux-arm-musleabihf@0.121.0': + resolution: {integrity: sha512-vF24htj+MOH+Q7y9A8NuC6pUZu8t/C2Fr/kDOi2OcNf28oogr2xadBPXAbml802E8wRAVfbta6YLDQTearz+jw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@oxc-parser/binding-linux-arm64-gnu@0.121.0': + resolution: {integrity: sha512-wjH8cIG2Lu/3d64iZpbYr73hREMgKAfu7fqpXjgM2S16y2zhTfDIp8EQjxO8vlDtKP5Rc7waZW72lh8nZtWrpA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + + '@oxc-parser/binding-linux-arm64-musl@0.121.0': + resolution: {integrity: sha512-qT663J/W8yQFw3dtscbEi9LKJevr20V7uWs2MPGTnvNZ3rm8anhhE16gXGpxDOHeg9raySaSHKhd4IGa3YZvuw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + + '@oxc-parser/binding-linux-ppc64-gnu@0.121.0': + resolution: {integrity: sha512-mYNe4NhVvDBbPkAP8JaVS8lC1dsoJZWH5WCjpw5E+sjhk1R08wt3NnXYUzum7tIiWPfgQxbCMcoxgeemFASbRw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ppc64] + os: [linux] + + '@oxc-parser/binding-linux-riscv64-gnu@0.121.0': + resolution: {integrity: sha512-+QiFoGxhAbaI/amqX567784cDyyuZIpinBrJNxUzb+/L2aBRX67mN6Jv40pqduHf15yYByI+K5gUEygCuv0z9w==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [riscv64] + os: [linux] + + '@oxc-parser/binding-linux-riscv64-musl@0.121.0': + resolution: {integrity: sha512-9ykEgyTa5JD/Uhv2sttbKnCfl2PieUfOjyxJC/oDL2UO0qtXOtjPLl7H8Kaj5G7p3hIvFgu3YWvAxvE0sqY+hQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [riscv64] + os: [linux] + + '@oxc-parser/binding-linux-s390x-gnu@0.121.0': + resolution: {integrity: sha512-DB1EW5VHZdc1lIRjOI3bW/wV6R6y0xlfvdVrqj6kKi7Ayu2U3UqUBdq9KviVkcUGd5Oq+dROqvUEEFRXGAM7EQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [s390x] + os: [linux] + + '@oxc-parser/binding-linux-x64-gnu@0.121.0': + resolution: {integrity: sha512-s4lfobX9p4kPTclvMiH3gcQUd88VlnkMTF6n2MTMDAyX5FPNRhhRSFZK05Ykhf8Zy5NibV4PbGR6DnK7FGNN6A==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + + '@oxc-parser/binding-linux-x64-musl@0.121.0': + resolution: {integrity: sha512-P9KlyTpuBuMi3NRGpJO8MicuGZfOoqZVRP1WjOecwx8yk4L/+mrCRNc5egSi0byhuReblBF2oVoDSMgV9Bj4Hw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + + '@oxc-parser/binding-openharmony-arm64@0.121.0': + resolution: {integrity: sha512-R+4jrWOfF2OAPPhj3Eb3U5CaKNAH9/btMveMULIrcNW/hjfysFQlF8wE0GaVBr81dWz8JLgQlsxwctoL78JwXw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [openharmony] + + '@oxc-parser/binding-wasm32-wasi@0.121.0': + resolution: {integrity: sha512-5TFISkPTymKvsmIlKasPVTPuWxzCcrT8pM+p77+mtQbIZDd1UC8zww4CJcRI46kolmgrEX6QpKO8AvWMVZ+ifw==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + + '@oxc-parser/binding-win32-arm64-msvc@0.121.0': + resolution: {integrity: sha512-V0pxh4mql4XTt3aiEtRNUeBAUFOw5jzZNxPABLaOKAWrVzSr9+XUaB095lY7jqMf5t8vkfh8NManGB28zanYKw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [win32] + + '@oxc-parser/binding-win32-ia32-msvc@0.121.0': + resolution: {integrity: sha512-4Ob1qvYMPnlF2N9rdmKdkQFdrq16QVcQwBsO8yiPZXof0fHKFF+LmQV501XFbi7lHyrKm8rlJRfQ/M8bZZPVLw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ia32] + os: [win32] + + '@oxc-parser/binding-win32-x64-msvc@0.121.0': + resolution: {integrity: sha512-BOp1KCzdboB1tPqoCPXgntgFs0jjeSyOXHzgxVFR7B/qfr3F8r4YDacHkTOUNXtDgM8YwKnkf3rE5gwALYX7NA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [win32] + + '@oxc-project/types@0.121.0': + resolution: {integrity: sha512-CGtOARQb9tyv7ECgdAlFxi0Fv7lmzvmlm2rpD/RdijOO9rfk/JvB1CjT8EnoD+tjna/IYgKKw3IV7objRb+aYw==} + + '@oxc-project/types@0.122.0': + resolution: {integrity: sha512-oLAl5kBpV4w69UtFZ9xqcmTi+GENWOcPF7FCrczTiBbmC0ibXxCwyvZGbO39rCVEuLGAZM84DH0pUIyyv/YJzA==} + + '@oxfmt/binding-android-arm-eabi@0.41.0': + resolution: {integrity: sha512-REfrqeMKGkfMP+m/ScX4f5jJBSmVNYcpoDF8vP8f8eYPDuPGZmzp56NIUsYmx3h7f6NzC6cE3gqh8GDWrJHCKw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [android] + + '@oxfmt/binding-android-arm64@0.41.0': + resolution: {integrity: sha512-s0b1dxNgb2KomspFV2LfogC2XtSJB42POXF4bMCLJyvQmAGos4ZtjGPfQreToQEaY0FQFjz3030ggI36rF1q5g==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [android] + + '@oxfmt/binding-darwin-arm64@0.41.0': + resolution: {integrity: sha512-EGXGualADbv/ZmamE7/2DbsrYmjoPlAmHEpTL4vapLF4EfVD6fr8/uQDFnPJkUBjiSWFJZtFNsGeN1B6V3owmA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] @@ -1421,6 +1974,83 @@ packages: cpu: [x64] os: [win32] + '@prisma/config@6.8.2': + resolution: {integrity: sha512-ZJY1fF4qRBPdLQ/60wxNtX+eu89c3AkYEcP7L3jkp0IPXCNphCYxikTg55kPJLDOG6P0X+QG5tCv6CmsBRZWFQ==} + + '@prisma/debug@6.8.2': + resolution: {integrity: sha512-4muBSSUwJJ9BYth5N8tqts8JtiLT8QI/RSAzEogwEfpbYGFo9mYsInsVo8dqXdPO2+Rm5OG5q0qWDDE3nyUbVg==} + + '@prisma/dmmf@6.8.2': + resolution: {integrity: sha512-okGJF/7hQZam/2wt+Y0hPyNxyY5S+L0FzAgtL932Q3YxUWHusRllrN39bCV45oF3QWY992g7rTWYdL2Rynt1qg==} + + '@prisma/driver-adapter-utils@6.8.2': + resolution: {integrity: sha512-5+CzN/41gBsRmA3ekbVy1TXnSImSPBtMlxWAttVH6tg94bv4zGGRmyk5tUCdT83nl0hG1Sq2oMXR7ml6aqILvw==} + + '@prisma/engines-version@6.8.0-43.2060c79ba17c6bb9f5823312b6f6b7f4a845738e': + resolution: {integrity: sha512-Rkik9lMyHpFNGaLpPF3H5q5TQTkm/aE7DsGM5m92FZTvWQsvmi6Va8On3pWvqLHOt5aPUvFb/FeZTmphI4CPiQ==} + + '@prisma/engines@6.8.2': + resolution: {integrity: sha512-XqAJ//LXjqYRQ1RRabs79KOY4+v6gZOGzbcwDQl0D6n9WBKjV7qdrbd042CwSK0v0lM9MSHsbcFnU2Yn7z8Zlw==} + + '@prisma/fetch-engine@6.8.2': + resolution: {integrity: sha512-lCvikWOgaLOfqXGacEKSNeenvj0n3qR5QvZUOmPE2e1Eh8cMYSobxonCg9rqM6FSdTfbpqp9xwhSAOYfNqSW0g==} + + '@prisma/generator-helper@6.8.2': + resolution: {integrity: sha512-KBLW47sbwFBKKYMiICIAEWsG6TdpPapPT7e7hpmpF3xMgYAm6YIXu4JGwfQVDY9Vbcb+0vPdPdSEQtInYOOe5g==} + + '@prisma/generator@6.8.2': + resolution: {integrity: sha512-yExkvgqiKg1WHzjYttz40g5DsOtud8RhapM0Mum6pw+wrDoQyhSAxs5NHyFCV+9VPvRd2v+jAP2CTT07bsibjw==} + + '@prisma/get-platform@6.8.2': + resolution: {integrity: sha512-vXSxyUgX3vm1Q70QwzwkjeYfRryIvKno1SXbIqwSptKwqKzskINnDUcx85oX+ys6ooN2ATGSD0xN2UTfg6Zcow==} + + '@prisma/internals@6.8.2': + resolution: {integrity: sha512-lDZrOCUW+ubBTXfEgun969eHVc+Uiq2W7YfF/bWZ0hGX2wLGQsgLGXsRw6AxyvWNXR85BbSPQ2qVHzKtWP9qXA==} + peerDependencies: + typescript: '>=5.1.0' + peerDependenciesMeta: + typescript: + optional: true + + '@prisma/prisma-schema-wasm@6.8.0-43.2060c79ba17c6bb9f5823312b6f6b7f4a845738e': + resolution: {integrity: sha512-s2pYG3FWY1ICGN6TVu/DrzwZWzn4oyeOZnJI8CG5fJey7i3r8EtxiBB9R9ahwL0Kqg+5KAYn37V2kVCu/9+Y/g==} + + '@prisma/schema-engine-wasm@6.8.0-43.2060c79ba17c6bb9f5823312b6f6b7f4a845738e': + resolution: {integrity: sha512-2NEk/2meUvvpcI+Sn9DdCjKDGWRxYPnHbLI6u05ZI2TIIgk/QwdAryn+xgO9VebmWSjpQoUhaIM+KCioKU1y5w==} + + '@prisma/schema-files-loader@6.8.2': + resolution: {integrity: sha512-JRXJ08xfA1cP30kgP15AMCOKZchy2ss2oN6nSHxN745euh2tijpzvW4yCD4Q/1ZtnDkfKae45Tcpx0Ytab7RPA==} + + '@protobufjs/aspromise@1.1.2': + resolution: {integrity: sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==} + + '@protobufjs/base64@1.1.2': + resolution: {integrity: sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==} + + '@protobufjs/codegen@2.0.4': + resolution: {integrity: sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==} + + '@protobufjs/eventemitter@1.1.0': + resolution: {integrity: sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==} + + '@protobufjs/fetch@1.1.0': + resolution: {integrity: sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==} + + '@protobufjs/float@1.0.2': + resolution: {integrity: sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==} + + '@protobufjs/inquire@1.1.0': + resolution: {integrity: sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==} + + '@protobufjs/path@1.1.2': + resolution: {integrity: sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==} + + '@protobufjs/pool@1.1.0': + resolution: {integrity: sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==} + + '@protobufjs/utf8@1.1.0': + resolution: {integrity: sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==} + '@quansync/fs@1.0.0': resolution: {integrity: sha512-4TJ3DFtlf1L5LDMaM6CanJ/0lckGNtJcMjQ1NAV6zDmA0tEHKZtxNKin8EgPaVX1YzljbxckyT2tJrpQKAtngQ==} @@ -1814,13 +2444,100 @@ packages: '@standard-schema/utils@0.3.0': resolution: {integrity: sha512-e7Mew686owMaPJVNNLs55PUvgz371nKgwsc4vxE49zsODpJEnxgxRo2y/OKrqueavXgZNMDVj3DdHFlaSAeU8g==} + '@swc/core-darwin-arm64@1.12.11': + resolution: {integrity: sha512-J19Jj9Y5x/N0loExH7W0OI9OwwoVyxutDdkyq1o/kgXyBqmmzV7Y/Q9QekI2Fm/qc5mNeAdP7aj4boY4AY/JPw==} + engines: {node: '>=10'} + cpu: [arm64] + os: [darwin] + + '@swc/core-darwin-x64@1.12.11': + resolution: {integrity: sha512-PTuUQrfStQ6cjW+uprGO2lpQHy84/l0v+GqRqq8s/jdK55rFRjMfCeyf6FAR0l6saO5oNOQl+zWR1aNpj8pMQw==} + engines: {node: '>=10'} + cpu: [x64] + os: [darwin] + + '@swc/core-linux-arm-gnueabihf@1.12.11': + resolution: {integrity: sha512-poxBq152HsupOtnZilenvHmxZ9a8SRj4LtfxUnkMDNOGrZR9oxbQNwEzNKfi3RXEcXz+P8c0Rai1ubBazXv8oQ==} + engines: {node: '>=10'} + cpu: [arm] + os: [linux] + + '@swc/core-linux-arm64-gnu@1.12.11': + resolution: {integrity: sha512-y1HNamR/D0Hc8xIE910ysyLe269UYiGaQPoLjQS0phzWFfWdMj9bHM++oydVXZ4RSWycO7KyJ3uvw4NilvyMKQ==} + engines: {node: '>=10'} + cpu: [arm64] + os: [linux] + + '@swc/core-linux-arm64-musl@1.12.11': + resolution: {integrity: sha512-LlBxPh/32pyQsu2emMEOFRm7poEFLsw12Y1mPY7FWZiZeptomKSOSHRzKDz9EolMiV4qhK1caP1lvW4vminYgQ==} + engines: {node: '>=10'} + cpu: [arm64] + os: [linux] + + '@swc/core-linux-x64-gnu@1.12.11': + resolution: {integrity: sha512-bOjiZB8O/1AzHkzjge1jqX62HGRIpOHqFUrGPfAln/NC6NR+Z2A78u3ixV7k5KesWZFhCV0YVGJL+qToL27myA==} + engines: {node: '>=10'} + cpu: [x64] + os: [linux] + + '@swc/core-linux-x64-musl@1.12.11': + resolution: {integrity: sha512-4dzAtbT/m3/UjF045+33gLiHd8aSXJDoqof7gTtu4q0ZyAf7XJ3HHspz+/AvOJLVo4FHHdFcdXhmo/zi1nFn8A==} + engines: {node: '>=10'} + cpu: [x64] + os: [linux] + + '@swc/core-win32-arm64-msvc@1.12.11': + resolution: {integrity: sha512-h8HiwBZErKvCAmjW92JvQp0iOqm6bncU4ac5jxBGkRApabpUenNJcj3h2g5O6GL5K6T9/WhnXE5gyq/s1fhPQg==} + engines: {node: '>=10'} + cpu: [arm64] + os: [win32] + + '@swc/core-win32-ia32-msvc@1.12.11': + resolution: {integrity: sha512-1pwr325mXRNUhxTtXmx1IokV5SiRL+6iDvnt3FRXj+X5UvXXKtg2zeyftk+03u8v8v8WUr5I32hIypVJPTNxNg==} + engines: {node: '>=10'} + cpu: [ia32] + os: [win32] + + '@swc/core-win32-x64-msvc@1.12.11': + resolution: {integrity: sha512-5gggWo690Gvs7XiPxAmb5tHwzB9RTVXUV7AWoGb6bmyUd1OXYaebQF0HAOtade5jIoNhfQMQJ7QReRgt/d2jAA==} + engines: {node: '>=10'} + cpu: [x64] + os: [win32] + + '@swc/core@1.12.11': + resolution: {integrity: sha512-P3GM+0lqjFctcp5HhR9mOcvLSX3SptI9L1aux0Fuvgt8oH4f92rCUrkodAa0U2ktmdjcyIiG37xg2mb/dSCYSA==} + engines: {node: '>=10'} + peerDependencies: + '@swc/helpers': '>=0.5.17' + peerDependenciesMeta: + '@swc/helpers': + optional: true + + '@swc/counter@0.1.3': + resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} + '@swc/helpers@0.5.15': resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==} + '@swc/types@0.1.26': + resolution: {integrity: sha512-lyMwd7WGgG79RS7EERZV3T8wMdmPq3xwyg+1nmAM64kIhx5yl+juO2PYIHb7vTiPgPCj8LYjsNV2T5wiQHUEaw==} + '@tailor-platform/auth-public-client@0.5.0': resolution: {integrity: sha512-yDfzrQZaUKc45VWjTJiZAtRr+XyMtduyKifLnIIxBxXPu52Ubedri7ccIOJ7FJ5ID3nk/kOAWzjWU+/fyg7Fog==} engines: {node: '>=18.0.0'} + '@tailor-platform/function-kysely-tailordb@0.1.3': + resolution: {integrity: sha512-02Qb3zfhRQSYCiZ7LmSQj3V+b7bzrGCqbRzRqzinszZh/Nwi+hfGNGCpwbeLlGs3g17udAHmmPMBzeORy8Ajtw==} + peerDependencies: + kysely: '>= 0.24.0 < 1' + + '@tailor-platform/function-types@0.8.3': + resolution: {integrity: sha512-dSObI4z8OvcLbqeWE8napvPRk402eYVkyLu2u12povraQNzA0xTD5/9k3W4NbTwAcmMT5MxZRtBRN4xw2jAPsw==} + + '@tailor-platform/sdk@1.33.0': + resolution: {integrity: sha512-Z53bcm+y/rAyGwcpC5/u0FzvGA7HdXBRvz270r/HCORO+iaa9Lm4RXVUqJ12jYj6mOnNWXERMbMExjRDDAcnIA==} + hasBin: true + '@tailwindcss/node@4.2.2': resolution: {integrity: sha512-pXS+wJ2gZpVXqFaUEjojq7jzMpTGf8rU6ipJz5ovJV6PUGmlJ+jvIwGrzdHdQ80Sg+wmQxUFuoW1UAAwHNEdFA==} @@ -1914,17 +2631,6 @@ packages: peerDependencies: vite: ^5.2.0 || ^6 || ^7 || ^8 - '@tanstack/react-table@8.21.3': - resolution: {integrity: sha512-5nNMTSETP4ykGegmVkhjcS8tTLW6Vl4axfEGQN3v0zdHYbK4UfoqfPChclTrJ4EoK9QynqAu9oUf8VEmrpZ5Ww==} - engines: {node: '>=12'} - peerDependencies: - react: '>=16.8' - react-dom: '>=16.8' - - '@tanstack/table-core@8.21.3': - resolution: {integrity: sha512-ldZXEhOBb8Is7xLs01fR3YEc3DERiz5silj8tnGkFZytt1abEvl/GhUmCE0PMLaMPTa3Jk4HbKmRlHmu+gCftg==} - engines: {node: '>=12'} - '@testing-library/dom@10.4.1': resolution: {integrity: sha512-o4PXJQidqJl82ckFaXUeoAW+XysPLauYI43Abki5hABd853iMhitooc6znOnczgbTYmEP6U6/y1ZyKAIsvMKGg==} engines: {node: '>=18'} @@ -1950,36 +2656,61 @@ packages: peerDependencies: '@testing-library/dom': '>=7.21.4' + '@toiroakr/lines-db@0.9.1': + resolution: {integrity: sha512-eDnWE17nLSgBBchpFfmwon45yFf1ekTHLrN1X+pF2/B/zw34QH+rgWvqklrGpg1m1JQZavCLKWactTlVsxV3QQ==} + hasBin: true + peerDependencies: + valibot: '>=1.0.0' + peerDependenciesMeta: + valibot: + optional: true + + '@ts-graphviz/adapter@2.0.6': + resolution: {integrity: sha512-kJ10lIMSWMJkLkkCG5gt927SnGZcBuG0s0HHswGzcHTgvtUe7yk5/3zTEr0bafzsodsOq5Gi6FhQeV775nC35Q==} + engines: {node: '>=18'} + + '@ts-graphviz/ast@2.0.7': + resolution: {integrity: sha512-e6+2qtNV99UT6DJSoLbHfkzfyqY84aIuoV8Xlb9+hZAjgpum8iVHprGeAMQ4rF6sKUAxrmY8rfF/vgAwoPc3gw==} + engines: {node: '>=18'} + + '@ts-graphviz/common@2.1.5': + resolution: {integrity: sha512-S6/9+T6x8j6cr/gNhp+U2olwo1n0jKj/682QVqsh7yXWV6ednHYqxFw0ZsY3LyzT0N8jaZ6jQY9YD99le3cmvg==} + engines: {node: '>=18'} + + '@ts-graphviz/core@2.0.7': + resolution: {integrity: sha512-w071DSzP94YfN6XiWhOxnLpYT3uqtxJBDYdh6Jdjzt+Ce6DNspJsPQgpC7rbts/B8tEkq0LHoYuIF/O5Jh5rPg==} + engines: {node: '>=18'} + '@ts-morph/common@0.28.1': resolution: {integrity: sha512-W74iWf7ILp1ZKNYXY5qbddNaml7e9Sedv5lvU1V8lftlitkc9Pq1A+jlH23ltDgWYeZFFEqGCD1Ies9hqu3O+g==} - '@turbo/darwin-64@2.8.21': - resolution: {integrity: sha512-kfGoM0Iw8ZNZpbds+4IzOe0hjvHldqJwUPRAjXJi3KBxg/QOZL95N893SRoMtf2aJ+jJ3dk32yPkp8rvcIjP9g==} + '@turbo/darwin-64@2.9.1': + resolution: {integrity: sha512-d1zTcIf6VWT7cdfjhi0X36C2PRsUi2HdEwYzVgkLHmuuYtL+1Y1Zu3JdlouoB/NjG2vX3q4NnKLMNhDOEweoIg==} cpu: [x64] os: [darwin] - '@turbo/darwin-arm64@2.8.21': - resolution: {integrity: sha512-o9HEflxUEyr987x0cTUzZBhDOyL6u95JmdmlkH2VyxAw7zq2sdtM5e72y9ufv2N5SIoOBw1fVn9UES5VY5H6vQ==} + '@turbo/darwin-arm64@2.9.1': + resolution: {integrity: sha512-AwJ4mA++Kpem33Lcov093hS1LrgqbKxqq5FCReoqsA8ayEG6eAJAo8ItDd9qQTdBiXxZH8GHCspLAMIe1t3Xyw==} cpu: [arm64] os: [darwin] - '@turbo/linux-64@2.8.21': - resolution: {integrity: sha512-uTxlCcXWy5h1fSSymP8XSJ+AudzEHMDV3IDfKX7+DGB8kgJ+SLoTUAH7z4OFA7I/l2sznz0upPdbNNZs91YMag==} + '@turbo/linux-64@2.9.1': + resolution: {integrity: sha512-HT9SjKkjEw9uvlgly/qwCGEm4wOXOwQPSPS+wkg+/O1Qan3F1uU/0PFYzxl3m4lfuV3CP9wr2Dq5dPrUX+B9Ag==} cpu: [x64] os: [linux] - '@turbo/linux-arm64@2.8.21': - resolution: {integrity: sha512-cdHIcxNcihHHkCHp0Y4Zb60K4Qz+CK4xw1gb6s/t/9o4SMeMj+hTBCtoW6QpPnl9xPYmxuTou8Zw6+cylTnREg==} + '@turbo/linux-arm64@2.9.1': + resolution: {integrity: sha512-+4s5GZs3kjxc1KMhLBhoQy4UBkXjOhgidA9ipNllkA4JLivSqUCuOgU1Xbyp6vzYrsqHJ9vvwo/2mXgEtD6ZHg==} cpu: [arm64] os: [linux] - '@turbo/windows-64@2.8.21': - resolution: {integrity: sha512-/iBj4OzbqEY8CX+eaeKbBTMZv2CLXNrt0692F7HnK7LcyYwyDecaAiSET6ZzL4opT7sbwkKvzAC/fhqT3Quu1A==} + '@turbo/windows-64@2.9.1': + resolution: {integrity: sha512-ZO7GCyQd5HV564XWHc9KysjanFfM3DmnWquyEByu+hQMq42g9OMU/fYOCfHS6Xj2aXkIg2FHJeRV+iAck2YrbQ==} cpu: [x64] os: [win32] - '@turbo/windows-arm64@2.8.21': - resolution: {integrity: sha512-95tMA/ZbIidJFUUtkmqioQ1gf3n3I1YbRP3ZgVdWTVn2qVbkodcIdGXBKRHHrIbRsLRl99SiHi/L7IxhpZDagQ==} + '@turbo/windows-arm64@2.9.1': + resolution: {integrity: sha512-BjX2fdz38mBb/H94JXrD5cJ+mEq8NmsCbYdC42JzQebJ0X8EdNgyFoEhOydPGViOmaRmhhdZnPZKKn6wahSpcA==} cpu: [arm64] os: [win32] @@ -2016,12 +2747,18 @@ packages: '@types/estree@1.0.8': resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} + '@types/gradient-string@1.1.6': + resolution: {integrity: sha512-LkaYxluY4G5wR1M4AKQUal2q61Di1yVVCw42ImFTuaIoQVgmV0WP1xUaLB8zwb47mp82vWTpePI9JmrjEnJ7nQ==} + '@types/jsesc@2.5.1': resolution: {integrity: sha512-9VN+6yxLOPLOav+7PwjZbxiID2bVaeq0ED4qSQmdQTdjnXJSaCVKTR58t15oqH1H5t8Ng2ZX1SabJVoN9Q34bw==} '@types/node@12.20.55': resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} + '@types/node@22.13.11': + resolution: {integrity: sha512-iEUCUJoU0i3VnrCmgoWCXttklWcvoCIx4jzcP22fioIVSdTmjgoEvmAO/QPw6TcS9k5FrNgn4w7q5lGOd1CT5g==} + '@types/node@25.5.0': resolution: {integrity: sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw==} @@ -2036,12 +2773,44 @@ packages: '@types/statuses@2.0.6': resolution: {integrity: sha512-xMAgYwceFhRA2zY+XbEA7mxYbA093wdiW8Vu6gZPGWy9cmOyU9XesH1tNcEWsKFd5Vzrqx5T3D38PWx1FIIXkA==} + '@types/tinycolor2@1.4.6': + resolution: {integrity: sha512-iEN8J0BoMnsWBqjVbWH/c0G0Hh7O21lpR2/+PrvAVgWdzL7eexIFm4JN/Wn10PTcmNdtS6U67r499mlWMXOxNw==} + '@types/whatwg-mimetype@3.0.2': resolution: {integrity: sha512-c2AKvDT8ToxLIOUlN51gTiHXflsfIFisS4pO7pDPoKouJCESkhZnEy623gwP9laCy5lnLDAw1vAzu2vM2YLOrA==} '@types/ws@8.18.1': resolution: {integrity: sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==} + '@typescript-eslint/project-service@8.57.2': + resolution: {integrity: sha512-FuH0wipFywXRTHf+bTTjNyuNQQsQC3qh/dYzaM4I4W0jrCqjCVuUh99+xd9KamUfmCGPvbO8NDngo/vsnNVqgw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.0.0' + + '@typescript-eslint/tsconfig-utils@8.57.2': + resolution: {integrity: sha512-3Lm5DSM+DCowsUOJC+YqHHnKEfFh5CoGkj5Z31NQSNF4l5wdOwqGn99wmwN/LImhfY3KJnmordBq/4+VDe2eKw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.0.0' + + '@typescript-eslint/types@8.57.2': + resolution: {integrity: sha512-/iZM6FnM4tnx9csuTxspMW4BOSegshwX5oBDznJ7S4WggL7Vczz5d2W11ecc4vRrQMQHXRSxzrCsyG5EsPPTbA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/typescript-estree@8.57.2': + resolution: {integrity: sha512-2MKM+I6g8tJxfSmFKOnHv2t8Sk3T6rF20A1Puk0svLK+uVapDZB/4pfAeB7nE83uAZrU6OxW+HmOd5wHVdXwXA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.0.0' + + '@typescript-eslint/visitor-keys@8.57.2': + resolution: {integrity: sha512-zhahknjobV2FiD6Ee9iLbS7OV9zi10rG26odsQdfBO/hjSzUQbkIYgda+iNKK1zNiW2ey+Lf8MU5btN17V3dUw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@urql/core@6.0.1': + resolution: {integrity: sha512-FZDiQk6jxbj5hixf2rEPv0jI+IZz0EqqGW8mJBEug68/zHTtT+f34guZDmyjJZyiWbj0vL165LoMr/TkeDHaug==} + '@vitejs/plugin-react@5.2.0': resolution: {integrity: sha512-YmKkfhOAi3wsB1PhJq5Scj3GXMn3WvtQ/JC0xoopuHoXSdmtdStOpFrYaT1kie2YgFBcIe64ROzMYRjCrYOdYw==} engines: {node: ^20.19.0 || >=22.12.0} @@ -2089,9 +2858,21 @@ packages: '@vue/compiler-core@3.5.25': resolution: {integrity: sha512-vay5/oQJdsNHmliWoZfHPoVZZRmnSWhug0BYT34njkYTPqClh3DNWLkZNJBVSjsNMrg0CCrBfoKkjZQPM/QVUw==} + '@vue/compiler-core@3.5.31': + resolution: {integrity: sha512-k/ueL14aNIEy5Onf0OVzR8kiqF/WThgLdFhxwa4e/KF/0qe38IwIdofoSWBTvvxQOesaz6riAFAUaYjoF9fLLQ==} + '@vue/compiler-dom@3.5.25': resolution: {integrity: sha512-4We0OAcMZsKgYoGlMjzYvaoErltdFI2/25wqanuTu+S4gismOTRTBPi4IASOjxWdzIwrYSjnqONfKvuqkXzE2Q==} + '@vue/compiler-dom@3.5.31': + resolution: {integrity: sha512-BMY/ozS/xxjYqRFL+tKdRpATJYDTTgWSo0+AJvJNg4ig+Hgb0dOsHPXvloHQ5hmlivUqw1Yt2pPIqp4e0v1GUw==} + + '@vue/compiler-sfc@3.5.31': + resolution: {integrity: sha512-M8wpPgR9UJ8MiRGjppvx9uWJfLV7A/T+/rL8s/y3QG3u0c2/YZgff3d6SuimKRIhcYnWg5fTfDMlz2E6seUW8Q==} + + '@vue/compiler-ssr@3.5.31': + resolution: {integrity: sha512-h0xIMxrt/LHOvJKMri+vdYT92BrK3HFLtDqq9Pr/lVVfE4IyKZKvWf0vJFW10Yr6nX02OR4MkJwI0c1HDa1hog==} + '@vue/compiler-vue2@2.7.16': resolution: {integrity: sha512-qYC3Psj9S/mfu9uVi5WvNZIzq+xnXMhOwbTFKKDD7b1lhpnn71jXSFdTQ+WsIEk0ONCd7VV2IMm7ONl6tbQ86A==} @@ -2106,6 +2887,12 @@ packages: '@vue/shared@3.5.25': resolution: {integrity: sha512-AbOPdQQnAnzs58H2FrrDxYj/TJfmeS2jdfEEhgiKINy+bnOANmVizIEgq1r+C5zsbs6l1CCQxtcj71rwNQ4jWg==} + '@vue/shared@3.5.31': + resolution: {integrity: sha512-nBxuiuS9Lj5bPkPbWogPUnjxxWpkRniX7e5UBQDWl6Fsf4roq9wwV+cR7ezQ4zXswNvPIlsdj1slcLB7XCsRAw==} + + '@zeit/schemas@2.36.0': + resolution: {integrity: sha512-7kjMwcChYEzMKjeex9ZFXkt1AyNov9R5HZtjBKVsmVpw7pa7ZtlCGvCBC2vnnXctaYN+aRI61HjIqeetZW5ROg==} + acorn@8.15.0: resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} engines: {node: '>=0.4.0'} @@ -2142,17 +2929,35 @@ packages: ajv@8.13.0: resolution: {integrity: sha512-PRA911Blj99jR5RMeTunVbNXMF6Lp4vZXnk5GQjcnUWUTsrXtekg/pnmFFI2u/I36Y/2bITGS30GZCXei6uNkA==} + ajv@8.18.0: + resolution: {integrity: sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==} + alien-signals@0.4.14: resolution: {integrity: sha512-itUAVzhczTmP2U5yX67xVpsbbOiquusbWVyA9N+sy6+r6YVbFkahXvNCeEPWEOMhwDYwbVbGHFkVL03N9I5g+Q==} + ansi-align@3.0.1: + resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==} + ansi-colors@4.1.3: resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} engines: {node: '>=6'} + ansi-escapes@4.3.2: + resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} + engines: {node: '>=8'} + + ansi-escapes@7.3.0: + resolution: {integrity: sha512-BvU8nYgGQBxcmMuEeUEmNTvrMVjJNSH7RgW24vXexN4Ven6qCvy4TntnvlnwnMLTVlcRQQdbRY8NKnaIoeWDNg==} + engines: {node: '>=18'} + ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} + ansi-regex@6.2.2: + resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==} + engines: {node: '>=12'} + ansi-styles@4.3.0: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} @@ -2161,6 +2966,10 @@ packages: resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} engines: {node: '>=10'} + ansi-styles@6.2.3: + resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==} + engines: {node: '>=12'} + ansis@4.2.0: resolution: {integrity: sha512-HqZ5rWlFjGiV0tDm3UxxgNRqsOTniqoKZu0pIAfh7TZQMGuZK+hH0drySty0si0QXj1ieop4+SkSfPZBPPkHig==} engines: {node: '>=14'} @@ -2168,6 +2977,15 @@ packages: any-promise@1.3.0: resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} + app-module-path@2.2.0: + resolution: {integrity: sha512-gkco+qxENJV+8vFcDiiFhuoSvRXb2a/QPqpSoWhVz829VNJfOTnELbBmPmNKFxf3xdNnw4DWCkzkDaavcX/1YQ==} + + arch@2.2.0: + resolution: {integrity: sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==} + + arg@5.0.2: + resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} + argparse@1.0.10: resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} @@ -2189,9 +3007,28 @@ packages: resolution: {integrity: sha512-trmleAnZ2PxN/loHWVhhx1qeOHSRXq4TDsBBxq3GqeJitfk3+jTQ+v/C1km/KYq9M7wKqCewMh+/NAvVH7m+bw==} engines: {node: '>=20.19.0'} + ast-module-types@6.0.1: + resolution: {integrity: sha512-WHw67kLXYbZuHTmcdbIrVArCq5wxo6NEuj3hiYAWr8mwJeC+C2mMCIBIWCiDoCye/OF/xelc+teJ1ERoWmnEIA==} + engines: {node: '>=18'} + + astral-regex@2.0.0: + resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} + engines: {node: '>=8'} + + auto-bind@5.0.1: + resolution: {integrity: sha512-ooviqdwwgfIfNmDwo94wlshcdzfO64XV0Cg6oDsDYBJfITDz1EngD2z7DkbvCWn+XIMsIqW27sEVF6qcpJrRcg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + balanced-match@4.0.4: + resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} + engines: {node: 18 || 20 || >=22} + + base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + baseline-browser-mapping@2.9.18: resolution: {integrity: sha512-e23vBV1ZLfjb9apvfPk4rHVu2ry6RIr2Wfs+O324okSidrX7pTAnEJPCh/O5BtRlr7QtZI7ktOP3vsqr7Z5XoA==} hasBin: true @@ -2210,8 +3047,22 @@ packages: birpc@4.0.0: resolution: {integrity: sha512-LShSxJP0KTmd101b6DRyGBj57LZxSDYWKitQNW/mi8GRMvZb078Uf9+pveax1DrVL89vm7mWe+TovdI/UDOuPw==} - brace-expansion@2.0.2: - resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==} + bl@4.1.0: + resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} + + boxen@7.0.0: + resolution: {integrity: sha512-j//dBVuyacJbvW+tvZ9HuH03fZ46QcaKvvhZickZqtB271DxJ7SNRSNxrV/dZX0085m7hISRZWbzWlJvx/rHSg==} + engines: {node: '>=14.16'} + + brace-expansion@1.1.13: + resolution: {integrity: sha512-9ZLprWS6EENmhEOpjCYW2c8VkmOvckIJZfkr7rBW6dObmfgJ/L1GpSYW5Hpo9lDz4D1+n0Ckz8rU7FwHDQiG/w==} + + brace-expansion@2.0.2: + resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==} + + brace-expansion@5.0.5: + resolution: {integrity: sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==} + engines: {node: 18 || 20 || >=22} braces@3.0.3: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} @@ -2222,12 +3073,27 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true + buffer@5.7.1: + resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + + bundle-name@4.1.0: + resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==} + engines: {node: '>=18'} + bundle-require@5.1.0: resolution: {integrity: sha512-3WrrOuZiyaaZPWiEt4G3+IffISVC9HYlWueJEBWED4ZH4aIAC2PnkdnuRrR94M+w6yGWn4AglWtJtBI8YqvgoA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} peerDependencies: esbuild: '>=0.18' + bytes@3.0.0: + resolution: {integrity: sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==} + engines: {node: '>= 0.8'} + + bytes@3.1.2: + resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} + engines: {node: '>= 0.8'} + cac@6.7.14: resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} engines: {node: '>=8'} @@ -2236,6 +3102,10 @@ packages: resolution: {integrity: sha512-tixWYgm5ZoOD+3g6UTea91eow5z6AAHaho3g0V9CNSNb45gM8SmflpAc+GRd1InC4AqN/07Unrgp56Y94N9hJQ==} engines: {node: '>=20.19.0'} + camelcase@7.0.1: + resolution: {integrity: sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==} + engines: {node: '>=14.16'} + caniuse-lite@1.0.30001766: resolution: {integrity: sha512-4C0lfJ0/YPjJQHagaE9x2Elb69CIqEPZeG0anQt9SIvIoOH4a4uaRl73IavyO+0qZh6MDLH//DrXThEYKHkmYA==} @@ -2246,6 +3116,22 @@ packages: resolution: {integrity: sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==} engines: {node: '>=18'} + chalk-template@0.4.0: + resolution: {integrity: sha512-/ghrgmhfY8RaSdeo43hNXxpoHAtxdbskUHjPpfqUWGttFgycUhYPGx3YZBCnUCvOa7Doivn1IZec3DEGFoMgLg==} + engines: {node: '>=12'} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + chalk@5.0.1: + resolution: {integrity: sha512-Fo07WOYGqMfCWHOzSXOt2CxDbC6skS/jO9ynEcmpANMoPrD+W1r1K6Vx7iNm+AQmETU1Xr2t+n8nzkV9t6xh3w==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + + chalk@5.6.2: + resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + change-case@5.4.4: resolution: {integrity: sha512-HRQyTk2/YPEkt9TnUPbOpr64Uw3KOicFWPVBb+xiHvd6eBx/qPr9xqfBFDT8P2vWsvvz4jbEkfDe71W3VyNu2w==} @@ -2256,9 +3142,41 @@ packages: resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} engines: {node: '>= 14.16.0'} + chokidar@5.0.0: + resolution: {integrity: sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==} + engines: {node: '>= 20.19.0'} + class-variance-authority@0.7.1: resolution: {integrity: sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==} + cli-boxes@3.0.0: + resolution: {integrity: sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==} + engines: {node: '>=10'} + + cli-cursor@3.1.0: + resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} + engines: {node: '>=8'} + + cli-cursor@4.0.0: + resolution: {integrity: sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + cli-cursor@5.0.0: + resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==} + engines: {node: '>=18'} + + cli-spinners@2.9.2: + resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} + engines: {node: '>=6'} + + cli-spinners@3.4.0: + resolution: {integrity: sha512-bXfOC4QcT1tKXGorxL3wbJm6XJPDqEnij2gQ2m7ESQuE+/z9YFIWnl/5RpTiKWbMq3EVKR4fRLJGn6DVfu0mpw==} + engines: {node: '>=18.20'} + + cli-truncate@4.0.0: + resolution: {integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==} + engines: {node: '>=18'} + cli-width@4.1.0: resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==} engines: {node: '>= 12'} @@ -2266,10 +3184,18 @@ packages: client-only@0.0.1: resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} + clipboardy@3.0.0: + resolution: {integrity: sha512-Su+uU5sr1jkUy1sGRpLKjKrvEOVXgSgiSInwa/qeID6aJ07yh+5NWc3h2QfjHjBnfX4LhtFcuAWKUsJ3r+fjbg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + cliui@8.0.1: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} engines: {node: '>=12'} + clone@1.0.4: + resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} + engines: {node: '>=0.8'} + clsx@2.1.1: resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} engines: {node: '>=6'} @@ -2277,6 +3203,10 @@ packages: code-block-writer@13.0.3: resolution: {integrity: sha512-Oofo0pq3IKnsFtuHqSF7TqBfr71aeyZDVJ0HpmqB7FBM2qEigL0iPONSCZSO9pE9dZTAxANe5XHG9Uy0YMv8cg==} + code-excerpt@4.0.0: + resolution: {integrity: sha512-xxodCmBen3iy2i0WtAK8FlFNrRzjUqjRsMfho58xT/wvZU1YTM3fCnRjcy1gJPMepaRlgm/0e6w8SpWHpn3/cA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + color-convert@2.0.1: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} engines: {node: '>=7.0.0'} @@ -2284,26 +3214,67 @@ packages: color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + commander@12.1.0: + resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} + engines: {node: '>=18'} + + commander@13.1.0: + resolution: {integrity: sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==} + engines: {node: '>=18'} + + commander@14.0.3: + resolution: {integrity: sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw==} + engines: {node: '>=20'} + + commander@2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + commander@4.1.1: resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} engines: {node: '>= 6'} + commander@7.2.0: + resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} + engines: {node: '>= 10'} + + commondir@1.0.1: + resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} + compare-versions@6.1.1: resolution: {integrity: sha512-4hm4VPpIecmlg59CHXnRDnqGplJFrbLG4aFEl5vl6cK1u76ws3LLvX7ikFnTDl5vo39sjWD6AaDPYodJp/NNHg==} + compressible@2.0.18: + resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==} + engines: {node: '>= 0.6'} + + compression@1.8.1: + resolution: {integrity: sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w==} + engines: {node: '>= 0.8.0'} + + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + confbox@0.1.8: resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==} - confbox@0.2.2: - resolution: {integrity: sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ==} + confbox@0.2.4: + resolution: {integrity: sha512-ysOGlgTFbN2/Y6Cg3Iye8YKulHw+R2fNXHrgSmXISQdMnomY6eNDprVdW9R5xBguEqI954+S6709UyiO7B+6OQ==} consola@3.4.2: resolution: {integrity: sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==} engines: {node: ^14.18.0 || >=16.10.0} + content-disposition@0.5.2: + resolution: {integrity: sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA==} + engines: {node: '>= 0.6'} + convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + convert-to-spaces@2.0.1: + resolution: {integrity: sha512-rcQ1bsQO9799wq24uE5AM2tAILy4gXGIK/njFWcVQkGNZ96edlpY+A7bjwvzjYvLDyzmG1MmMLZhpcsb+klNMQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + cookie@0.7.2: resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} engines: {node: '>= 0.6'} @@ -2331,9 +3302,20 @@ packages: resolution: {integrity: sha512-euIQENZg6x8mj3fO6o9+fOW8MimUI4PpD/fZBhJfeioZVy9TUpM4UY7KjQNVZFlqwJ0UdzRDzkycB997HEq1BQ==} engines: {node: '>=20'} + date-fns@4.1.0: + resolution: {integrity: sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==} + de-indent@1.0.2: resolution: {integrity: sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==} + debug@2.6.9: + resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + debug@4.4.3: resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} engines: {node: '>=6.0'} @@ -2346,9 +3328,33 @@ packages: decimal.js@10.6.0: resolution: {integrity: sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==} + deep-extend@0.6.0: + resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} + engines: {node: '>=4.0.0'} + + default-browser-id@5.0.1: + resolution: {integrity: sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==} + engines: {node: '>=18'} + + default-browser@5.5.0: + resolution: {integrity: sha512-H9LMLr5zwIbSxrmvikGuI/5KGhZ8E2zH3stkMgM5LpOWDutGM2JZaj460Udnf1a+946zc7YBgrqEWwbk7zHvGw==} + engines: {node: '>=18'} + + defaults@1.0.4: + resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} + + define-lazy-prop@3.0.0: + resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} + engines: {node: '>=12'} + defu@6.1.4: resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} + dependency-tree@11.4.0: + resolution: {integrity: sha512-r4wZ1pfv8eQrnoWbIGdrJTVmlb0dkXdwBjKsotKO4gmfqrOsAMG+0+cfA5EZ3NO8umc85twXOl1eO27E5pjTzw==} + engines: {node: '>=18'} + hasBin: true + dequal@2.0.3: resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} engines: {node: '>=6'} @@ -2361,6 +3367,49 @@ packages: resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} engines: {node: '>=8'} + detective-amd@6.0.1: + resolution: {integrity: sha512-TtyZ3OhwUoEEIhTFoc1C9IyJIud3y+xYkSRjmvCt65+ycQuc3VcBrPRTMWoO/AnuCyOB8T5gky+xf7Igxtjd3g==} + engines: {node: '>=18'} + hasBin: true + + detective-cjs@6.1.0: + resolution: {integrity: sha512-Qt3S4IddVNDb+71lm+jmt5NznIsgcKlibTnrw9Zr91rT9vRwKp+73+ImqLTNrQj4YuOxnzrC7GwIAVwF7136XQ==} + engines: {node: '>=18'} + + detective-es6@5.0.1: + resolution: {integrity: sha512-XusTPuewnSUdoxRSx8OOI6xIA/uld/wMQwYsouvFN2LAg7HgP06NF1lHRV3x6BZxyL2Kkoih4ewcq8hcbGtwew==} + engines: {node: '>=18'} + + detective-postcss@7.0.1: + resolution: {integrity: sha512-bEOVpHU9picRZux5XnwGsmCN4+8oZo7vSW0O0/Enq/TO5R2pIAP2279NsszpJR7ocnQt4WXU0+nnh/0JuK4KHQ==} + engines: {node: ^14.0.0 || >=16.0.0} + peerDependencies: + postcss: ^8.4.47 + + detective-sass@6.0.1: + resolution: {integrity: sha512-jSGPO8QDy7K7pztUmGC6aiHkexBQT4GIH+mBAL9ZyBmnUIOFbkfZnO8wPRRJFP/QP83irObgsZHCoDHZ173tRw==} + engines: {node: '>=18'} + + detective-scss@5.0.1: + resolution: {integrity: sha512-MAyPYRgS6DCiS6n6AoSBJXLGVOydsr9huwXORUlJ37K3YLyiN0vYHpzs3AdJOgHobBfispokoqrEon9rbmKacg==} + engines: {node: '>=18'} + + detective-stylus@5.0.1: + resolution: {integrity: sha512-Dgn0bUqdGbE3oZJ+WCKf8Dmu7VWLcmRJGc6RCzBgG31DLIyai9WAoEhYRgIHpt/BCRMrnXLbGWGPQuBUrnF0TA==} + engines: {node: '>=18'} + + detective-typescript@14.0.0: + resolution: {integrity: sha512-pgN43/80MmWVSEi5LUuiVvO/0a9ss5V7fwVfrJ4QzAQRd3cwqU1SfWGXJFcNKUqoD5cS+uIovhw5t/0rSeC5Mw==} + engines: {node: '>=18'} + peerDependencies: + typescript: ^5.4.4 + + detective-vue2@2.2.0: + resolution: {integrity: sha512-sVg/t6O2z1zna8a/UIV6xL5KUa2cMTQbdTIIvqNM0NIPswp52fe43Nwmbahzj3ww4D844u/vC2PYfiGLvD3zFA==} + engines: {node: '>=18'} + peerDependencies: + typescript: ^5.4.4 + diff@8.0.2: resolution: {integrity: sha512-sSuxWU5j5SR9QQji/o2qMvqRNYRDOcBTgsJ/DeCf4iSN4gW+gNMXM7wFIP+fdXZxoNiAnHUTGjCr+TSWXdRDKg==} engines: {node: '>=0.3.1'} @@ -2369,6 +3418,9 @@ packages: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} + discontinuous-range@1.0.0: + resolution: {integrity: sha512-c68LpLbO+7kP/b1Hr1qs8/BJ09F5khZGTxqxZuhzxpmwJKOgRFHJWIb9/KmqnqHhLdO55aOxFH/EGBvUQbL/RQ==} + dom-accessibility-api@0.5.16: resolution: {integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==} @@ -2381,12 +3433,21 @@ packages: oxc-resolver: optional: true + eastasianwidth@0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + electron-to-chromium@1.5.286: resolution: {integrity: sha512-9tfDXhJ4RKFNerfjdCcZfufu49vg620741MNs26a9+bhLThdB+plgMeou98CAaHu/WATj2iHOOHTp1hWtABj2A==} + emoji-regex@10.6.0: + resolution: {integrity: sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==} + emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + empathic@2.0.0: resolution: {integrity: sha512-i6UzDscO/XfAcNYD75CfICkmfLedpyPDdozrLMmQc5ORaQcdMoc21OnlEylMIqI7U8eniKrPMxxtj8k0vhmJhA==} engines: {node: '>=14'} @@ -2411,6 +3472,10 @@ packages: resolution: {integrity: sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==} engines: {node: '>=0.12'} + environment@1.1.0: + resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==} + engines: {node: '>=18'} + es-module-lexer@2.0.0: resolution: {integrity: sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw==} @@ -2431,17 +3496,42 @@ packages: resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} engines: {node: '>=6'} + escape-string-regexp@2.0.0: + resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} + engines: {node: '>=8'} + + escodegen@2.1.0: + resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==} + engines: {node: '>=6.0'} + hasBin: true + + eslint-visitor-keys@5.0.1: + resolution: {integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + esprima@4.0.1: resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} engines: {node: '>=4'} hasBin: true + estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + estree-walker@2.0.2: resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} estree-walker@3.0.3: resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} + esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + + execa@5.1.1: + resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} + engines: {node: '>=10'} + expect-type@1.3.0: resolution: {integrity: sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==} engines: {node: '>=12.0.0'} @@ -2459,6 +3549,18 @@ packages: resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} engines: {node: '>=8.6.0'} + fast-string-truncated-width@3.0.3: + resolution: {integrity: sha512-0jjjIEL6+0jag3l2XWWizO64/aZVtpiGE3t0Zgqxv0DPuxiMjvB3M24fCyhZUO4KomJQPj3LTSUnDP3GpdwC0g==} + + fast-string-width@3.0.2: + resolution: {integrity: sha512-gX8LrtNEI5hq8DVUfRQMbr5lpaS4nMIWV+7XEbXk2b8kiQIizgnlr12B4dA3ZEx3308ze0O4Q1R+cHts8kyUJg==} + + fast-uri@3.1.0: + resolution: {integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==} + + fast-wrap-ansi@0.2.0: + resolution: {integrity: sha512-rLV8JHxTyhVmFYhBJuMujcrHqOT2cnO5Zxj37qROj23CP39GXubJRBUFF0z8KFK77Uc0SukZUf7JZhsVEQ6n8w==} + fastq@1.20.1: resolution: {integrity: sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==} @@ -2471,10 +3573,19 @@ packages: picomatch: optional: true + filing-cabinet@5.2.0: + resolution: {integrity: sha512-eNrCJGdYQY0tV+ACNesQ7vb2aMxD76NM7THayMn0Z5XBt1Tonr4vbVN+FbhHfekKGQG9O5UaciDDR7+dw8P9ZA==} + engines: {node: '>=18'} + hasBin: true + fill-range@7.1.1: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} + find-up-simple@1.0.1: + resolution: {integrity: sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ==} + engines: {node: '>=18'} + find-up@4.1.0: resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} engines: {node: '>=8'} @@ -2482,6 +3593,14 @@ packages: fix-dts-default-cjs-exports@1.0.1: resolution: {integrity: sha512-pVIECanWFC61Hzl2+oOCtoJ3F17kglZC/6N94eRWycFgBH35hHx0Li604ZIzhseh97mf2p0cv7vVrOZGoqhlEg==} + foreground-child@3.3.1: + resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} + engines: {node: '>=14'} + + fs-extra@11.3.0: + resolution: {integrity: sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==} + engines: {node: '>=14.14'} + fs-extra@11.3.4: resolution: {integrity: sha512-CTXd6rk/M3/ULNQj8FBqBWHYBVYybQ3VPBw0xGKFe3tuH7ytT6ACnvzpIQ3UZtB8yvUKC2cXn1a+x+5EVQLovA==} engines: {node: '>=14.14'} @@ -2506,10 +3625,28 @@ packages: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} engines: {node: '>=6.9.0'} + get-amd-module-type@6.0.1: + resolution: {integrity: sha512-MtjsmYiCXcYDDrGqtNbeIYdAl85n+5mSv2r3FbzER/YV3ZILw4HNNIw34HuV5pyl0jzs6GFYU1VHVEefhgcNHQ==} + engines: {node: '>=18'} + get-caller-file@2.0.5: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} + get-east-asian-width@1.5.0: + resolution: {integrity: sha512-CQ+bEO+Tva/qlmw24dCejulK5pMzVnUOFOijVogd3KQs07HnRIgp8TGipvCCRT06xeYEbpbgwaCxglFyiuIcmA==} + engines: {node: '>=18'} + + get-own-enumerable-property-symbols@3.0.2: + resolution: {integrity: sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==} + + get-stream@6.0.1: + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} + engines: {node: '>=10'} + + get-tsconfig@4.13.6: + resolution: {integrity: sha512-shZT/QMiSHc/YBLxxOkMtgSid5HFoauqCE3/exfsEcwg1WkeqjG+V40yBbBrsD+jW2HDXcs28xOfcbm2jI8Ddw==} + get-tsconfig@4.13.7: resolution: {integrity: sha512-7tN6rFgBlMgpBML5j8typ92BKFi2sFQvIdpAqLA2beia5avZDrMs0FLZiM5etShWq5irVyGcGMEA1jcDaK7A/Q==} @@ -2517,6 +3654,16 @@ packages: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} + glob@11.1.0: + resolution: {integrity: sha512-vuNwKSaKiqm7g0THUBu2x7ckSs3XJLXE+2ssL7/MfTGPLLcrJQ/4Uq1CjPTtO5cCIiRxqvN6Twy1qOwhL0Xjcw==} + engines: {node: 20 || >=22} + deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me + hasBin: true + + globals@17.4.0: + resolution: {integrity: sha512-hjrNztw/VajQwOLsMNT1cbJiH2muO3OROCHnbehc8eY5JyD2gqz4AcMHPqgaOR59DjgUjYAYLeH699g/eWi2jw==} + engines: {node: '>=18'} + globby@11.1.0: resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} engines: {node: '>=10'} @@ -2524,9 +3671,18 @@ packages: globrex@0.1.2: resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==} + gonzales-pe@4.3.0: + resolution: {integrity: sha512-otgSPpUmdWJ43VXyiNgEYE4luzHCL2pz4wQ0OnDluC6Eg4Ko3Vexy/SrSynglw/eR+OhkzmqFCZa/OFa/RgAOQ==} + engines: {node: '>=0.6.0'} + hasBin: true + graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + gradient-string@2.0.2: + resolution: {integrity: sha512-rEDCuqUQ4tbD78TpzsMtt5OIf0cBCSDWSJtUDaF6JsAh+k0v9r++NzxNEG87oDZx9ZwGhD8DaezR2L/yrw0Jdw==} + engines: {node: '>=10'} + graphql@16.13.2: resolution: {integrity: sha512-5bJ+nf/UCpAjHM8i06fl7eLyVC9iuNAjm9qzkiu2ZGhM0VscSvS6WDPfAwkdkBuoXGM9FJSbKl6wylMwP9Ktig==} engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} @@ -2569,6 +3725,10 @@ packages: resolution: {integrity: sha512-tsYlhAYpjCKa//8rXZ9DqKEawhPoSytweBC2eNvcaDK+57RZLHGqNs3PZTQO6yekLFSuvA6AlnAfrw1uBvtb+Q==} hasBin: true + human-signals@2.1.0: + resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} + engines: {node: '>=10.17.0'} + iconv-lite@0.6.3: resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} engines: {node: '>=0.10.0'} @@ -2577,6 +3737,9 @@ packages: resolution: {integrity: sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==} engines: {node: '>=0.10.0'} + ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + ignore@5.3.2: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} @@ -2589,10 +3752,62 @@ packages: resolution: {integrity: sha512-B6Lc2s6yApwnD2/pMzFh/d5AVjdsDXjgkeJ766FmFuJELIGHNycKRj+l3A39yZPM4CchqNCB4RITEAYB1KUM6A==} engines: {node: '>=20.19.0'} + indent-string@5.0.0: + resolution: {integrity: sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==} + engines: {node: '>=12'} + + inflection@3.0.2: + resolution: {integrity: sha512-+Bg3+kg+J6JUWn8J6bzFmOWkTQ6L/NHfDRSYU+EVvuKHDxUDHAXgqixHfVlzuBQaPOTac8hn43aPhMNk6rMe3g==} + engines: {node: '>=18.0.0'} + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + ini@1.3.8: + resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} + + ink-gradient@3.0.0: + resolution: {integrity: sha512-OVyPBovBxE1tFcBhSamb+P1puqDP6pG3xFe2W9NiLgwUZd9RbcjBeR7twLbliUT9navrUstEf1ZcPKKvx71BsQ==} + engines: {node: '>=16'} + peerDependencies: + ink: '>=4' + + ink@6.0.1: + resolution: {integrity: sha512-vhhFrCodTHZAPPSdMYzLEbeI0Ug37R9j6yA0kLKok9kSK53lQtj/RJhEQJUjq6OwT4N33nxqSRd/7yXhEhVPIw==} + engines: {node: '>=20'} + peerDependencies: + '@types/react': '>=19.0.0' + react: '>=19.0.0' + react-devtools-core: ^4.19.1 + peerDependenciesMeta: + '@types/react': + optional: true + react-devtools-core: + optional: true + + inquirer@12.6.3: + resolution: {integrity: sha512-eX9beYAjr1MqYsIjx1vAheXsRk1jbZRvHLcBu5nA9wX0rXR1IfCZLnVLp4Ym4mrhqmh7AuANwcdtgQ291fZDfQ==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + is-core-module@2.16.1: resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} engines: {node: '>= 0.4'} + is-docker@2.2.1: + resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} + engines: {node: '>=8'} + hasBin: true + + is-docker@3.0.0: + resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + hasBin: true + is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} @@ -2601,10 +3816,40 @@ packages: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} + is-fullwidth-code-point@4.0.0: + resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==} + engines: {node: '>=12'} + + is-fullwidth-code-point@5.1.0: + resolution: {integrity: sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==} + engines: {node: '>=18'} + is-glob@4.0.3: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} + is-in-ci@1.0.0: + resolution: {integrity: sha512-eUuAjybVTHMYWm/U+vBO1sY/JOCgoPCXRxzdju0K+K0BiGW0SChEL1MLC0PoCIR1OlPo5YAp8HuQoUlsWEICwg==} + engines: {node: '>=18'} + hasBin: true + + is-in-ssh@1.0.0: + resolution: {integrity: sha512-jYa6Q9rH90kR1vKB6NM7qqd1mge3Fx4Dhw5TVlK1MUBqhEOuCagrEHMevNuCcbECmXZ0ThXkRm+Ymr51HwEPAw==} + engines: {node: '>=20'} + + is-inside-container@1.0.0: + resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} + engines: {node: '>=14.16'} + hasBin: true + + is-interactive@1.0.0: + resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} + engines: {node: '>=8'} + + is-interactive@2.0.0: + resolution: {integrity: sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==} + engines: {node: '>=12'} + is-node-process@1.2.0: resolution: {integrity: sha512-Vg4o6/fqPxIjtxgUH5QLJhwZ7gW5diGCVlXpuUfELC62CuxM1iHcRe51f2W1FDy04Ai4KJkagKjx3XaqyfRKXw==} @@ -2612,20 +3857,67 @@ packages: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} + is-obj@1.0.1: + resolution: {integrity: sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==} + engines: {node: '>=0.10.0'} + + is-port-reachable@4.0.0: + resolution: {integrity: sha512-9UoipoxYmSk6Xy7QFgRv2HDyaysmgSG75TFQs6S+3pDM7ZhKTF/bskZV+0UlABHzKjNVhPjYCLfeZUEg1wXxig==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + is-potential-custom-element-name@1.0.1: resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} + is-regexp@1.0.0: + resolution: {integrity: sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==} + engines: {node: '>=0.10.0'} + + is-stream@2.0.1: + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} + is-subdir@1.2.0: resolution: {integrity: sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw==} engines: {node: '>=4'} + is-unicode-supported@0.1.0: + resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} + engines: {node: '>=10'} + + is-unicode-supported@2.1.0: + resolution: {integrity: sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==} + engines: {node: '>=18'} + + is-url-superb@4.0.0: + resolution: {integrity: sha512-GI+WjezhPPcbM+tqE9LnmsY5qqjwHzTvjJ36wxYX5ujNXefSUJ/T17r5bqDV8yLhcgB59KTPNOc9O9cmHTPWsA==} + engines: {node: '>=10'} + + is-url@1.2.4: + resolution: {integrity: sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==} + is-windows@1.0.2: resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} engines: {node: '>=0.10.0'} + is-wsl@2.2.0: + resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} + engines: {node: '>=8'} + + is-wsl@3.1.1: + resolution: {integrity: sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw==} + engines: {node: '>=16'} + isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + jackspeak@4.2.3: + resolution: {integrity: sha512-ykkVRwrYvFm1nb2AJfKKYPr0emF6IiXDYUaFx4Zn9ZuIH7MrzEZ3sD5RlqGXNRpHtvUHJyOnCEFxOlNDtGo7wg==} + engines: {node: 20 || >=22} + + jiti@2.4.2: + resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==} + hasBin: true + jiti@2.6.1: resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} hasBin: true @@ -2679,9 +3971,17 @@ packages: jsonfile@6.2.0: resolution: {integrity: sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==} + kleur@3.0.3: + resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} + engines: {node: '>=6'} + kolorist@1.8.0: resolution: {integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==} + kysely@0.28.14: + resolution: {integrity: sha512-SU3lgh0rPvq7upc6vvdVrCsSMUG1h3ChvHVOY7wJ2fw4C9QEB7X3d5eyYEyULUX7UQtxZJtZXGuT6U2US72UYA==} + engines: {node: '>=20.0.0'} + lightningcss-android-arm64@1.32.0: resolution: {integrity: sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==} engines: {node: '>= 12.0.0'} @@ -2774,9 +4074,27 @@ packages: lodash.startcase@4.4.0: resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} + lodash.truncate@4.4.2: + resolution: {integrity: sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==} + lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + log-symbols@4.1.0: + resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} + engines: {node: '>=10'} + + log-symbols@7.0.1: + resolution: {integrity: sha512-ja1E3yCr9i/0hmBVaM0bfwDjnGy8I/s6PP4DFp+yP+a+mrHO4Rm7DtmnqROTUkHIkqffC84YY7AeqX6oFk0WFg==} + engines: {node: '>=18'} + + long@5.3.2: + resolution: {integrity: sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==} + + loose-envify@1.4.0: + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + hasBin: true + lru-cache@11.2.7: resolution: {integrity: sha512-aY/R+aEsRelme17KGQa/1ZSIpLpNYYrhcrepKTZgE+W3WM16YMCaPwOHLHsmopZHELU0Ojin1lPVxKR0MihncA==} engines: {node: 20 || >=22} @@ -2797,12 +4115,25 @@ packages: resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} hasBin: true + madge@8.0.0: + resolution: {integrity: sha512-9sSsi3TBPhmkTCIpVQF0SPiChj1L7Rq9kU2KDG1o6v2XH9cCw086MopjVCD+vuoL5v8S77DTbVopTO8OUiQpIw==} + engines: {node: '>=18'} + hasBin: true + peerDependencies: + typescript: ^5.4.4 + peerDependenciesMeta: + typescript: + optional: true + magic-string@0.30.21: resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} mdn-data@2.27.1: resolution: {integrity: sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ==} + merge-stream@2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + merge2@1.4.1: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} @@ -2811,24 +4142,78 @@ packages: resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} engines: {node: '>=8.6'} + mime-db@1.33.0: + resolution: {integrity: sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==} + engines: {node: '>= 0.6'} + + mime-db@1.54.0: + resolution: {integrity: sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==} + engines: {node: '>= 0.6'} + + mime-types@2.1.18: + resolution: {integrity: sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==} + engines: {node: '>= 0.6'} + + mime-types@3.0.2: + resolution: {integrity: sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==} + engines: {node: '>=18'} + + mimic-fn@2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} + + mimic-function@5.0.1: + resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==} + engines: {node: '>=18'} + minimatch@10.0.3: resolution: {integrity: sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==} engines: {node: 20 || >=22} + minimatch@10.2.4: + resolution: {integrity: sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==} + engines: {node: 18 || 20 || >=22} + + minimatch@3.1.5: + resolution: {integrity: sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==} + minimatch@9.0.5: resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} engines: {node: '>=16 || 14 >=14.17'} + minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + + minipass@7.1.3: + resolution: {integrity: sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==} + engines: {node: '>=16 || 14 >=14.17'} + mlly@1.8.0: resolution: {integrity: sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g==} mlly@1.8.2: resolution: {integrity: sha512-d+ObxMQFmbt10sretNDytwt85VrbkhhUA/JBGm1MPaWJ65Cl4wOgLaB1NYvJSZ0Ef03MMEU/0xpPMXUIQ29UfA==} + module-definition@6.0.1: + resolution: {integrity: sha512-FeVc50FTfVVQnolk/WQT8MX+2WVcDnTGiq6Wo+/+lJ2ET1bRVi3HG3YlJUfqagNMc/kUlFSoR96AJkxGpKz13g==} + engines: {node: '>=18'} + hasBin: true + + module-lookup-amd@9.1.1: + resolution: {integrity: sha512-JzXhQvud8K3yT9l24XTDMXMQ4/LD9a9oXBcbLP0ubdvBpVrGFsybm5+2PDIl0negUYP1l88fCgjQzoMMg247+Q==} + engines: {node: '>=18'} + hasBin: true + + moo@0.5.3: + resolution: {integrity: sha512-m2fmM2dDm7GZQsY7KK2cme8agi+AAljILjQnof7p1ZMDe6dQ4bdnSMx0cPppudoeNv5hEFQirN6u+O4fDE0IWA==} + mri@1.2.0: resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} engines: {node: '>=4'} + ms@2.0.0: + resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} + ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} @@ -2845,10 +4230,18 @@ packages: muggle-string@0.4.1: resolution: {integrity: sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==} + multiline-ts@4.0.1: + resolution: {integrity: sha512-urYEajhpUHVlGH8EYEeYnBHlVJ2ddbaQZ/lvZ1OnZFbb2mZDSDDzHoOCa9w5G7S21Wl/1FgJX6ku5OWzZgIoUg==} + engines: {node: '>=18.18.0'} + mute-stream@2.0.0: resolution: {integrity: sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==} engines: {node: ^18.17.0 || >=20.5.0} + mute-stream@3.0.0: + resolution: {integrity: sha512-dkEJPVvun4FryqBmZ5KhDo0K9iDXAwn08tMLDinNdRBNPcYEDiWYysLcc6k3mjTMlbP9KyylvRpd4wFtwrT9rw==} + engines: {node: ^20.17.0 || >=22.9.0} + mz@2.7.0: resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} @@ -2857,6 +4250,18 @@ packages: engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true + nearley@2.20.1: + resolution: {integrity: sha512-+Mc8UaAebFzgV+KpI5n7DasuuQCHA89dmwm7JXw3TV43ukfNQ9DnBH3Mdb2g/I4Fdxc26pwimBWvjIw0UAILSQ==} + hasBin: true + + negotiator@0.6.4: + resolution: {integrity: sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==} + engines: {node: '>= 0.6'} + + neverthrow@8.2.0: + resolution: {integrity: sha512-kOCT/1MCPAxY5iUV3wytNFUMUolzuwd/VF/1KCx7kf6CutrOsTie+84zTGTpgQycjvfLdBBdvBvFLqFD2c0wkQ==} + engines: {node: '>=18'} + next-themes@0.4.6: resolution: {integrity: sha512-pZvgD5L0IEvX5/9GWyHMf3m8BKiVQwsCMHfoFosXtXBMnaS0ZnIJ9ST4b4NqLVKDEm8QBxoNNGNaBv2JNF6XNA==} peerDependencies: @@ -2887,6 +4292,14 @@ packages: node-releases@2.0.27: resolution: {integrity: sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==} + node-source-walk@7.0.1: + resolution: {integrity: sha512-3VW/8JpPqPvnJvseXowjZcirPisssnBuDikk6JIZ8jQzF7KJQX52iPFX4RYYxLycYH7IbMRSPUOga/esVjy5Yg==} + engines: {node: '>=18'} + + npm-run-path@4.0.1: + resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} + engines: {node: '>=8'} + oauth4webapi@3.8.5: resolution: {integrity: sha512-A8jmyUckVhRJj5lspguklcl90Ydqk61H3dcU0oLhH3Yv13KpAliKTt5hknpGGPZSSfOwGyraNEFmofDYH+1kSg==} @@ -2897,15 +4310,43 @@ packages: obug@2.1.1: resolution: {integrity: sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==} + on-headers@1.1.0: + resolution: {integrity: sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==} + engines: {node: '>= 0.8'} + + onetime@5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} + + onetime@7.0.0: + resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==} + engines: {node: '>=18'} + + open@11.0.0: + resolution: {integrity: sha512-smsWv2LzFjP03xmvFoJ331ss6h+jixfA4UUV/Bsiyuu4YJPfN+FIQGOIiv4w9/+MoHkfkJ22UIaQWRVFRfH6Vw==} + engines: {node: '>=20'} + openid-client@6.8.1: resolution: {integrity: sha512-VoYT6enBo6Vj2j3Q5Ec0AezS+9YGzQo1f5Xc42lreMGlfP4ljiXPKVDvCADh+XHCV/bqPu/wWSiCVXbJKvrODw==} + ora@5.4.1: + resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} + engines: {node: '>=10'} + + ora@9.3.0: + resolution: {integrity: sha512-lBX72MWFduWEf7v7uWf5DHp9Jn5BI8bNPGuFgtXMmr2uDz2Gz2749y3am3agSDdkhHPHYmmxEGSKH85ZLGzgXw==} + engines: {node: '>=20'} + outdent@0.5.0: resolution: {integrity: sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q==} outvariant@1.4.3: resolution: {integrity: sha512-+Sl2UErvtsoajRDKCE5/dBz4DIvHXQQnAxtQTF04OJxY0+DyZXSo5P5Bb7XYWOh81syohlYL24hbDwxedPUJCA==} + oxc-parser@0.121.0: + resolution: {integrity: sha512-ek9o58+SCv6AV7nchiAcUJy1DNE2CC5WRdBcO0mF+W4oRjNQfPO7b3pLjTHSFECpHkKGOZSQxx3hk8viIL5YCg==} + engines: {node: ^20.19.0 || >=22.12.0} + oxfmt@0.41.0: resolution: {integrity: sha512-sKLdJZdQ3bw6x9qKiT7+eID4MNEXlDHf5ZacfIircrq6Qwjk0L6t2/JQlZZrVHTXJawK3KaMuBoJnEJPcqCEdg==} engines: {node: ^20.19.0 || >=22.12.0} @@ -2929,6 +4370,10 @@ packages: resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} engines: {node: '>=6'} + p-limit@7.3.0: + resolution: {integrity: sha512-7cIXg/Z0M5WZRblrsOla88S4wAK+zOQQWeBYfV3qJuJXMr+LnbYjaadrFaS0JILfEDPVqHyKnZ1Z/1d6J9VVUw==} + engines: {node: '>=20'} + p-locate@4.1.0: resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} engines: {node: '>=8'} @@ -2941,12 +4386,23 @@ packages: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} engines: {node: '>=6'} + package-json-from-dist@1.0.1: + resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} + package-manager-detector@0.2.11: resolution: {integrity: sha512-BEnLolu+yuz22S56CU1SUKq3XC3PkwD5wv4ikR4MfGvnRVcmzXR9DwSlW2fEamyTPyXHomBJRzgapeuBvRNzJQ==} + parse-ms@2.1.0: + resolution: {integrity: sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA==} + engines: {node: '>=6'} + parse5@7.3.0: resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==} + patch-console@2.0.0: + resolution: {integrity: sha512-0YNdUceMdaQwoKce1gatDScmMo5pu/tfABfnzEqeG0gtTmd7mh/WcwgUjtAeOU7N8nFFlbQBnFK2gXW5fGvmMA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + path-browserify@1.0.1: resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} @@ -2954,6 +4410,9 @@ packages: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} + path-is-inside@1.0.2: + resolution: {integrity: sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==} + path-key@3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} @@ -2961,6 +4420,13 @@ packages: path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + path-scurry@2.0.2: + resolution: {integrity: sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==} + engines: {node: 18 || 20 || >=22} + + path-to-regexp@3.3.0: + resolution: {integrity: sha512-qyCH421YQPS2WFDxDjftfc1ZR5WKQzVzqsp4n9M2kQhVOo/ByahFoUNJfl58kOcEGfQ//7weFTDhm+ss8Ecxgw==} + path-to-regexp@6.3.0: resolution: {integrity: sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==} @@ -2971,11 +4437,14 @@ packages: pathe@2.0.3: resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} + pgsql-ast-parser@12.0.2: + resolution: {integrity: sha512-1WWa96Sw6h4uv9GLw98EzH/+xoBTC8j2TwV/AMW3E+Ir/fHOu/jLLbj6kPiz3y2bGISTKNYvKWwHoqvQ5FLuAw==} + picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} - picomatch@2.3.2: - resolution: {integrity: sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==} + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} picomatch@4.0.3: @@ -3000,6 +4469,16 @@ packages: pkg-types@2.3.0: resolution: {integrity: sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==} + pluralize@8.0.0: + resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} + engines: {node: '>=4'} + + politty@0.4.12: + resolution: {integrity: sha512-tgDYQO47DhjyAQr06cctcbDj32H4YQXemnIPUYL7Hj68FLTvWx8M7RU79XbfSvJAJKZfKQl2vO/nNUcagxijkw==} + engines: {node: '>=18'} + peerDependencies: + zod: ^4.2.1 + postcss-load-config@6.0.1: resolution: {integrity: sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==} engines: {node: '>= 18'} @@ -3018,6 +4497,12 @@ packages: yaml: optional: true + postcss-values-parser@6.0.2: + resolution: {integrity: sha512-YLJpK0N1brcNJrs9WatuJFtHaV9q5aAOj+S4DI5S7jgHlRfm0PIbDCAFRYMQD5SHq7Fy6xsDhyutgS0QOAs0qw==} + engines: {node: '>=10'} + peerDependencies: + postcss: ^8.2.9 + postcss@8.4.31: resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} engines: {node: ^10 || ^12 || >=14} @@ -3026,6 +4511,15 @@ packages: resolution: {integrity: sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg==} engines: {node: ^10 || ^12 || >=14} + powershell-utils@0.1.0: + resolution: {integrity: sha512-dM0jVuXJPsDN6DvRpea484tCUaMiXWjuCn++HGTqUWzGDjv5tZkEZldAJ/UMlqRYGFrD/etByo4/xOuC/snX2A==} + engines: {node: '>=20'} + + precinct@12.2.0: + resolution: {integrity: sha512-NFBMuwIfaJ4SocE9YXPU/n4AcNSoFMVFjP72nvl3cx69j/ke61/hPOWFREVxLkFhhEGnA8ZuVfTqJBa+PK3b5w==} + engines: {node: '>=18'} + hasBin: true + prettier@2.8.8: resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} engines: {node: '>=10.13.0'} @@ -3035,6 +4529,21 @@ packages: resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + pretty-ms@7.0.1: + resolution: {integrity: sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q==} + engines: {node: '>=10'} + + prompts@2.4.2: + resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} + engines: {node: '>= 6'} + + prop-types@15.8.1: + resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} + + protobufjs@7.5.4: + resolution: {integrity: sha512-CvexbZtbov6jW2eXAvLukXjXUW1TzFaivC46BpWc/3BpcCysb5Vffu+B3XHMm8lVEuy2Mm4XGex8hBSg1yapPg==} + engines: {node: '>=12.0.0'} + punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} @@ -3048,6 +4557,29 @@ packages: queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + quote-unquote@1.0.0: + resolution: {integrity: sha512-twwRO/ilhlG/FIgYeKGFqyHhoEhqgnKVkcmqMKi2r524gz3ZbDTcyFt38E9xjJI2vT+KbRNHVbnJ/e0I25Azwg==} + + railroad-diagrams@1.0.0: + resolution: {integrity: sha512-cz93DjNeLY0idrCNOH6PviZGRN9GJhsdm9hpn1YCS879fj4W+x5IFJhhkRZcwVgMmFF7R82UA/7Oh+R8lLZg6A==} + + randexp@0.4.6: + resolution: {integrity: sha512-80WNmd9DA0tmZrw9qQa62GPPWfuXJknrmVmLcxvq4uZBdYqb1wYoKTmnlGUchvVWe0XiLupYkBoXVOxz3C8DYQ==} + engines: {node: '>=0.12'} + + range-parser@1.2.0: + resolution: {integrity: sha512-kA5WQoNVo4t9lNx2kQNFCxKeBl5IbbSNBl1M/tLkw9WCn+hxNBAW5Qh8gdhs63CJnhjJ2zQWFoqPJP2sK1AV5A==} + engines: {node: '>= 0.6'} + + rc@1.2.8: + resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} + hasBin: true + + react-dom@19.1.1: + resolution: {integrity: sha512-Dlq/5LAZgF0Gaz6yiqZCf6VCcZs1ghAJyrsu84Q/GT0gV+mCxbfmKNoGRKBYMJ8IEdGPqu49YWXD02GCknEDkw==} + peerDependencies: + react: ^19.1.1 + react-dom@19.2.1: resolution: {integrity: sha512-ibrK8llX2a4eOskq1mXKu/TGZj9qzomO+sNfO98M6d9zIPOEhlBkMkBUBLd1vgS0gQsLDBzA+8jJBVXDnfHmJg==} peerDependencies: @@ -3064,9 +4596,18 @@ packages: peerDependencies: react: ^16.8.0 || ^17 || ^18 || ^19 + react-is@16.13.1: + resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} + react-is@17.0.2: resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} + react-reconciler@0.32.0: + resolution: {integrity: sha512-2NPMOzgTlG0ZWdIf3qG+dcbLSoAc/uLfOwckc3ofy5sSK0pLJqnQLpUFxvGcN2rlXSjnVtGeeFLNimCQEj5gOQ==} + engines: {node: '>=0.10.0'} + peerDependencies: + react: ^19.1.0 + react-refresh@0.18.0: resolution: {integrity: sha512-QgT5//D3jfjJb6Gsjxv0Slpj23ip+HtOpnNgnb2S5zU3CB26G/IDPGoy4RJB42wzFE46DRsstbW6tKHoKbhAxw==} engines: {node: '>=0.10.0'} @@ -3081,6 +4622,10 @@ packages: react-dom: optional: true + react@19.1.1: + resolution: {integrity: sha512-w8nqGImo45dmMIfljjMwOGtbmC/mk4CMYhWIicdSflH91J9TyCyczcPFXJzrZ/ZXcgGRFeP6BU0BEJTw6tZdfQ==} + engines: {node: '>=0.10.0'} + react@19.2.4: resolution: {integrity: sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ==} engines: {node: '>=0.10.0'} @@ -3089,10 +4634,25 @@ packages: resolution: {integrity: sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==} engines: {node: '>=6'} + readable-stream@3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} + engines: {node: '>= 6'} + readdirp@4.1.2: resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} engines: {node: '>= 14.18.0'} + readdirp@5.0.0: + resolution: {integrity: sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==} + engines: {node: '>= 20.19.0'} + + registry-auth-token@3.3.2: + resolution: {integrity: sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ==} + + registry-url@3.1.0: + resolution: {integrity: sha512-ZbgR5aZEdf4UKZVBPYIgaglBmSF2Hi94s2PcIHhRGFjKYu+chjJdYfHn4rt3hB6eCKLJ8giVIIfgMa1ehDfZKA==} + engines: {node: '>=0.10.0'} + require-directory@2.1.1: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} @@ -3101,9 +4661,22 @@ packages: resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} engines: {node: '>=0.10.0'} + requirejs-config-file@4.0.0: + resolution: {integrity: sha512-jnIre8cbWOyvr8a5F2KuqBnY+SDA4NXr/hzEZJG79Mxm2WiFQz2dzhC8ibtPJS7zkmBEl1mxSwp5HhC1W4qpxw==} + engines: {node: '>=10.13.0'} + + requirejs@2.3.8: + resolution: {integrity: sha512-7/cTSLOdYkNBNJcDMWf+luFvMriVm7eYxp4BcFCsAX0wF421Vyce5SXP17c+Jd5otXKGNehIonFlyQXSowL6Mw==} + engines: {node: '>=0.4.0'} + hasBin: true + reselect@5.1.1: resolution: {integrity: sha512-K/BG6eIky/SBpzfHZv/dd+9JBFiS4SWV7FIujVyJRux6e45+73RaUHXLmIR1f7WOMaQ0U1km6qwklRQxpJJY0w==} + resolve-dependency-path@4.0.1: + resolution: {integrity: sha512-YQftIIC4vzO9UMhO/sCgXukNyiwVRCVaxiWskCBy7Zpqkplm8kTAISZ8O1MoKW1ca6xzgLUBjZTcDgypXvXxiQ==} + engines: {node: '>=18'} + resolve-from@5.0.0: resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} engines: {node: '>=8'} @@ -3121,6 +4694,22 @@ packages: engines: {node: '>= 0.4'} hasBin: true + restore-cursor@3.1.0: + resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} + engines: {node: '>=8'} + + restore-cursor@4.0.0: + resolution: {integrity: sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + restore-cursor@5.1.0: + resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==} + engines: {node: '>=18'} + + ret@0.1.15: + resolution: {integrity: sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==} + engines: {node: '>=0.12'} + rettime@0.7.0: resolution: {integrity: sha512-LPRKoHnLKd/r3dVxcwO7vhCW+orkOGj9ViueosEBK6ie89CijnfRlhaDhHq/3Hxu4CkWQtxwlBG0mzTQY6uQjw==} @@ -3165,16 +4754,41 @@ packages: rrweb-cssom@0.8.0: resolution: {integrity: sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==} + run-applescript@7.1.0: + resolution: {integrity: sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==} + engines: {node: '>=18'} + + run-async@3.0.0: + resolution: {integrity: sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==} + engines: {node: '>=0.12.0'} + run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + rxjs@7.8.2: + resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==} + + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + sass-lookup@6.1.1: + resolution: {integrity: sha512-12dvZdQYTeKZ1ypjuiijZYuMZ1m0F+4+BkRX5yJi2WA9W3DBUrcdCt7bVuKlagHl11n8eYtalWDle+m98Ol2DA==} + engines: {node: '>=18'} + hasBin: true + saxes@6.0.0: resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} engines: {node: '>=v12.22.7'} + scheduler@0.23.2: + resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==} + + scheduler@0.26.0: + resolution: {integrity: sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==} + scheduler@0.27.0: resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==} @@ -3197,6 +4811,14 @@ packages: engines: {node: '>=10'} hasBin: true + serve-handler@6.1.7: + resolution: {integrity: sha512-CinAq1xWb0vR3twAv9evEU8cNWkXCb9kd5ePAHUKJBkOsUpR1wt/CvGdeca7vqumL1U5cSaeVQ6zZMxiJ3yWsg==} + + serve@14.2.6: + resolution: {integrity: sha512-QEjUSA+sD4Rotm1znR8s50YqA3kYpRGPmtd5GlFxbaL9n/FdUNbqMhxClqdditSk0LlZyA/dhud6XNRTOC9x2Q==} + engines: {node: '>= 14'} + hasBin: true + set-cookie-parser@2.7.2: resolution: {integrity: sha512-oeM1lpU/UvhTxw+g3cIfxXHyJRc/uidd3yK1P242gzHds0udQBYzs3y8j4gCCW+ZJ7ad0yctld8RYO+bdurlvw==} @@ -3215,14 +4837,32 @@ packages: siginfo@2.0.0: resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} + signal-exit@3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + signal-exit@4.1.0: resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} engines: {node: '>=14'} + sisteransi@1.0.5: + resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} + slash@3.0.0: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} + slice-ansi@4.0.0: + resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} + engines: {node: '>=10'} + + slice-ansi@5.0.0: + resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==} + engines: {node: '>=12'} + + slice-ansi@7.1.2: + resolution: {integrity: sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==} + engines: {node: '>=18'} + sonner@2.0.7: resolution: {integrity: sha512-W6ZN4p58k8aDKA4XPcx2hpIQXBRAgyiWVkYhT7CvK6D3iAu7xjvVyhQHg2/iaKJZ1XVJ4r7XuwGL+WGEK37i9w==} peerDependencies: @@ -3247,6 +4887,10 @@ packages: sprintf-js@1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + stack-utils@2.0.6: + resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} + engines: {node: '>=10'} + stackback@0.0.2: resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} @@ -3257,6 +4901,13 @@ packages: std-env@4.0.0: resolution: {integrity: sha512-zUMPtQ/HBY3/50VbpkupYHbRroTRZJPRLvreamgErJVys0ceuzMkD44J/QjqhHjOzK42GQ3QZIeFG1OYfOtKqQ==} + stdin-discarder@0.3.1: + resolution: {integrity: sha512-reExS1kSGoElkextOcPkel4NE99S0BWxjUHQeDFnR8S993JxpPX7KU4MNmO19NXhlJp+8dmdCbKQVNgLJh2teA==} + engines: {node: '>=18'} + + stream-to-array@2.3.0: + resolution: {integrity: sha512-UsZtOYEn4tWU2RGLOXr/o/xjRBftZRlG3dEWoaHr8j4GuypJ3isitGbVyjQKAuMu+xbiop8q224TjiZWc4XTZA==} + strict-event-emitter@0.5.1: resolution: {integrity: sha512-vMgjE/GGEPEFnhFub6pa4FmJBRBVOLpIII2hvCZ8Kzb7K0hlHo7mQv6xYrBvCL2LtAIBwFUK8wvuJgTVSQ5MFQ==} @@ -3268,14 +4919,45 @@ packages: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} + string-width@5.1.2: + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} + + string-width@7.2.0: + resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} + engines: {node: '>=18'} + + string-width@8.2.0: + resolution: {integrity: sha512-6hJPQ8N0V0P3SNmP6h2J99RLuzrWz2gvT7VnK5tKvrNqJoyS9W4/Fb8mo31UiPvy00z7DQXkP2hnKBVav76thw==} + engines: {node: '>=20'} + + string_decoder@1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + + stringify-object@3.3.0: + resolution: {integrity: sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==} + engines: {node: '>=4'} + strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} + strip-ansi@7.2.0: + resolution: {integrity: sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==} + engines: {node: '>=12'} + strip-bom@3.0.0: resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} engines: {node: '>=4'} + strip-final-newline@2.0.0: + resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} + engines: {node: '>=6'} + + strip-json-comments@2.0.1: + resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} + engines: {node: '>=0.10.0'} + strip-json-comments@3.1.1: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} @@ -3293,11 +4975,20 @@ packages: babel-plugin-macros: optional: true + stylus-lookup@6.1.0: + resolution: {integrity: sha512-5QSwgxAzXPMN+yugy61C60PhoANdItfdjSEZR8siFwz7yL9jTmV0UBKDCfn3K8GkGB4g0Y9py7vTCX8rFu4/pQ==} + engines: {node: '>=18'} + hasBin: true + sucrase@3.35.1: resolution: {integrity: sha512-DhuTmvZWux4H1UOnWMB3sk0sbaCVOoQZjv8u1rDoTV0HTdGem9hkAZtl4JZy8P2z4Bg0nT+YMeOFyVr4zcG5Tw==} engines: {node: '>=16 || 14 >=14.17'} hasBin: true + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + supports-color@8.1.1: resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} engines: {node: '>=10'} @@ -3312,6 +5003,14 @@ packages: tabbable@6.4.0: resolution: {integrity: sha512-05PUHKSNE8ou2dwIxTngl4EzcnsCDZGJ/iCLtDflR/SHB/ny14rXc+qU5P4mG9JkusiV7EivzY9Mhm55AzAvCg==} + table@6.9.0: + resolution: {integrity: sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A==} + engines: {node: '>=10.0.0'} + + tagged-tag@1.0.0: + resolution: {integrity: sha512-yEFYrVhod+hdNyx7g5Bnkkb0G6si8HJurOoOEgC8B/O0uXLHlaey/65KRv6cuWBNhBgHKAROVpc7QyYqE5gFng==} + engines: {node: '>=20'} + tailwind-merge@3.5.0: resolution: {integrity: sha512-I8K9wewnVDkL1NTGoqWmVEIlUcB9gFriAEkXkfCjX5ib8ezGxtR3xD7iZIxrfArjEsH7F1CHD4RFUtxefdqV/A==} @@ -3336,6 +5035,9 @@ packages: tinybench@2.9.0: resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} + tinycolor2@1.6.0: + resolution: {integrity: sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==} + tinyexec@0.3.2: resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} @@ -3347,6 +5049,9 @@ packages: resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} engines: {node: '>=12.0.0'} + tinygradient@1.1.5: + resolution: {integrity: sha512-8nIfc2vgQ4TeLnk2lFj4tRLvvJwEfQuabdsmvDdQPT0xlk9TaNtpGd6nNRxXoK6vQhN6RSzj+Cnp5tTQmpxmbw==} + tinypool@2.1.0: resolution: {integrity: sha512-Pugqs6M0m7Lv1I7FtxN4aoyToKg1C4tu+/381vH35y8oENM/Ai7f7C4StcoK4/+BSw9ebcS8jRiVrORFKCALLw==} engines: {node: ^20.0.0 || >=22.0.0} @@ -3378,6 +5083,19 @@ packages: resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} hasBin: true + ts-api-utils@2.5.0: + resolution: {integrity: sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==} + engines: {node: '>=18.12'} + peerDependencies: + typescript: '>=4.8.4' + + ts-cron-validator@1.1.5: + resolution: {integrity: sha512-vqk4cGxcOK5Dsdg3xF8X2J61BZqdfDdBzdP0Mz5Hf1LXiC6dHk9UNK7QMl4zuT4tMo74O4FhLs7dvtHo/GcR1Q==} + + ts-graphviz@2.1.6: + resolution: {integrity: sha512-XyLVuhBVvdJTJr2FJJV2L1pc4MwSjMhcunRVgDE9k4wbb2ee7ORYnPewxMWUav12vxyfUM686MSGsqnVRIInuw==} + engines: {node: '>=18'} + ts-interface-checker@0.1.13: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} @@ -3394,6 +5112,10 @@ packages: typescript: optional: true + tsconfig-paths@4.2.0: + resolution: {integrity: sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==} + engines: {node: '>=6'} + tsdown@0.21.7: resolution: {integrity: sha512-ukKIxKQzngkWvOYJAyptudclkm4VQqbjq+9HF5K5qDO8GJsYtMh8gIRwicbnZEnvFPr6mquFwYAVZ8JKt3rY2g==} engines: {node: '>=20.19.0'} @@ -3444,17 +5166,34 @@ packages: typescript: optional: true - turbo@2.8.21: - resolution: {integrity: sha512-FlJ8OD5Qcp0jTAM7E4a/RhUzRNds2GzKlyxHKA6N247VLy628rrxAGlMpIXSz6VB430+TiQDJ/SMl6PL1lu6wQ==} + tsx@4.21.0: + resolution: {integrity: sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==} + engines: {node: '>=18.0.0'} + hasBin: true + + turbo@2.9.1: + resolution: {integrity: sha512-TO9du8MwLTAKoXcGezekh9cPJabJUb0+8KxtpMR6kXdRASrmJ8qXf2GkVbCREgzbMQakzfNcux9cZtxheDY4RQ==} hasBin: true tw-animate-css@1.4.0: resolution: {integrity: sha512-7bziOlRqH0hJx80h/3mbicLW7o8qLsH5+RaLR2t+OHM3D0JlWGODQKQ4cxbK7WlvmUxpcj6Kgu6EKqjrGFe3QQ==} + type-fest@0.21.3: + resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} + engines: {node: '>=10'} + + type-fest@2.19.0: + resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} + engines: {node: '>=12.20'} + type-fest@4.41.0: resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} engines: {node: '>=16'} + type-fest@5.5.0: + resolution: {integrity: sha512-PlBfpQwiUvGViBNX84Yxwjsdhd1TUlXr6zjX7eoirtCPIr08NAmxwa+fcYBTeRQxHo9YC9wwF3m9i700sHma8g==} + engines: {node: '>=20'} + typescript@5.8.2: resolution: {integrity: sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==} engines: {node: '>=14.17'} @@ -3474,6 +5213,9 @@ packages: unconfig-core@7.5.0: resolution: {integrity: sha512-Su3FauozOGP44ZmKdHy2oE6LPjk51M/TRRjHv2HNCWiDvfvCoxC2lno6jevMA91MYAdCdwP05QnWdWpSbncX/w==} + undici-types@6.20.0: + resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==} + undici-types@7.18.2: resolution: {integrity: sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==} @@ -3501,6 +5243,9 @@ packages: peerDependencies: browserslist: '>= 4.21.0' + update-check@1.5.4: + resolution: {integrity: sha512-5YHsflzHP4t1G+8WGPlvKbJEbAJGCgw+Em+dGR1KmBUbr1J36SJBqlHLjR7oob7sco5hWHGQVcr9B2poIVDDTQ==} + uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} @@ -3509,6 +5254,21 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + + valibot@1.1.0: + resolution: {integrity: sha512-Nk8lX30Qhu+9txPYTwM0cFlWLdPFsFr6LblzqIySfbZph9+BFsAHsNvHOymEviUepeIW6KFHzpX8TKhbptBXXw==} + peerDependencies: + typescript: '>=5' + peerDependenciesMeta: + typescript: + optional: true + + vary@1.1.2: + resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} + engines: {node: '>= 0.8'} + vite-plugin-dts@4.5.4: resolution: {integrity: sha512-d4sOM8M/8z7vRXHHq/ebbblfaxENjogAAekcfcDCCwAyvGqnPrc7f4NZbvItS+g4WTgerW0xDwSz5qz11JT3vg==} peerDependencies: @@ -3610,6 +5370,13 @@ packages: resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==} engines: {node: '>=18'} + walkdir@0.4.1: + resolution: {integrity: sha512-3eBwRyEln6E1MSzcxcVpQIhRG8Q1jLvEqRmCZqS3dsfXEDR/AhOF4d+jHg1qvDCpYaVRZjENPQyrVxAkQqxPgQ==} + engines: {node: '>=6.0.0'} + + wcwidth@1.0.1: + resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} + webidl-conversions@8.0.1: resolution: {integrity: sha512-BMhLD/Sw+GbJC21C/UgyaZX41nPt8bUTg+jWyDeg7e7YN4xOM05YPSIXceACnXVtqyEw/LMClUQMtMZ+PGGpqQ==} engines: {node: '>=20'} @@ -3645,6 +5412,17 @@ packages: engines: {node: '>=8'} hasBin: true + widest-line@4.0.1: + resolution: {integrity: sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==} + engines: {node: '>=12'} + + widest-line@5.0.0: + resolution: {integrity: sha512-c9bZp7b5YtRj2wOe6dlj32MK+Bx/M/d+9VB2SHM1OtsUHR0aV0tdP6DWh/iMt0kWi1t5g1Iudu6hQRNd1A4PVA==} + engines: {node: '>=18'} + + wonka@6.3.6: + resolution: {integrity: sha512-MXH+6mDHAZ2GuMpgKS055FR6v0xVP3XwquxIMYXgiW+FejHQlMGlvVRZT4qMCxR+bEo/FCtIdKxwej9WV3YQag==} + wrap-ansi@6.2.0: resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} engines: {node: '>=8'} @@ -3653,6 +5431,14 @@ packages: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} engines: {node: '>=10'} + wrap-ansi@8.1.0: + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} + engines: {node: '>=12'} + + wrap-ansi@9.0.2: + resolution: {integrity: sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==} + engines: {node: '>=18'} + ws@8.19.0: resolution: {integrity: sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg==} engines: {node: '>=10.0.0'} @@ -3677,6 +5463,14 @@ packages: utf-8-validate: optional: true + wsl-utils@0.3.1: + resolution: {integrity: sha512-g/eziiSUNBSsdDJtCLB8bdYEUMj4jR7AGeUo96p/3dTafgjHhpF4RiCFPiRILwjQoDXx5MqkBr4fwWtR3Ky4Wg==} + engines: {node: '>=20'} + + xdg-basedir@5.1.0: + resolution: {integrity: sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ==} + engines: {node: '>=12'} + xml-name-validator@5.0.0: resolution: {integrity: sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==} engines: {node: '>=18'} @@ -3707,15 +5501,35 @@ packages: resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} engines: {node: '>=12'} + yocto-queue@1.2.2: + resolution: {integrity: sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ==} + engines: {node: '>=12.20'} + yoctocolors-cjs@2.1.3: resolution: {integrity: sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw==} engines: {node: '>=18'} + yoctocolors@2.1.2: + resolution: {integrity: sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug==} + engines: {node: '>=18'} + + yoga-layout@3.2.1: + resolution: {integrity: sha512-0LPOt3AxKqMdFBZA3HBAt/t/8vIKq7VaQYbuA8WxCgung+p9TVyKRYdpvCb80HcdTN2NkbIKbhNwKUfm3tQywQ==} + zod@4.3.6: resolution: {integrity: sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==} snapshots: + '@0no-co/graphql.web@1.2.0(graphql@16.13.2)': + optionalDependencies: + graphql: 16.13.2 + + '@alcalzone/ansi-tokenize@0.1.3': + dependencies: + ansi-styles: 6.2.3 + is-fullwidth-code-point: 4.0.0 + '@alloc/quick-lru@5.2.0': {} '@asamuzakjp/css-color@4.1.2': @@ -3754,7 +5568,7 @@ snapshots: '@babel/helper-compilation-targets': 7.28.6 '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0) '@babel/helpers': 7.28.6 - '@babel/parser': 7.29.0 + '@babel/parser': 7.29.2 '@babel/template': 7.28.6 '@babel/traverse': 7.29.0 '@babel/types': 7.29.0 @@ -3769,7 +5583,7 @@ snapshots: '@babel/generator@7.29.1': dependencies: - '@babel/parser': 7.29.0 + '@babel/parser': 7.29.2 '@babel/types': 7.29.0 '@jridgewell/gen-mapping': 0.3.13 '@jridgewell/trace-mapping': 0.3.31 @@ -3856,7 +5670,7 @@ snapshots: '@babel/template@7.28.6': dependencies: '@babel/code-frame': 7.29.0 - '@babel/parser': 7.29.0 + '@babel/parser': 7.29.2 '@babel/types': 7.29.0 '@babel/traverse@7.29.0': @@ -3864,7 +5678,7 @@ snapshots: '@babel/code-frame': 7.29.0 '@babel/generator': 7.29.1 '@babel/helper-globals': 7.28.0 - '@babel/parser': 7.29.0 + '@babel/parser': 7.29.2 '@babel/template': 7.28.6 '@babel/types': 7.29.0 debug: 4.4.3 @@ -3881,6 +5695,8 @@ snapshots: '@babel/helper-string-parser': 8.0.0-rc.3 '@babel/helper-validator-identifier': 8.0.0-rc.3 + '@badgateway/oauth2-client@3.3.1': {} + '@base-ui/react@1.3.0(@types/react@19.2.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: '@babel/runtime': 7.28.6 @@ -3905,6 +5721,8 @@ snapshots: optionalDependencies: '@types/react': 19.2.13 + '@bufbuild/protobuf@2.11.0': {} + '@bundled-es-modules/cookie@2.0.1': dependencies: cookie: 0.7.2 @@ -4058,6 +5876,15 @@ snapshots: human-id: 4.1.3 prettier: 2.8.8 + '@connectrpc/connect-node@2.1.1(@bufbuild/protobuf@2.11.0)(@connectrpc/connect@2.1.1(@bufbuild/protobuf@2.11.0))': + dependencies: + '@bufbuild/protobuf': 2.11.0 + '@connectrpc/connect': 2.1.1(@bufbuild/protobuf@2.11.0) + + '@connectrpc/connect@2.1.1(@bufbuild/protobuf@2.11.0)': + dependencies: + '@bufbuild/protobuf': 2.11.0 + '@csstools/color-helpers@6.0.2': optional: true @@ -4080,7 +5907,7 @@ snapshots: '@csstools/css-tokenizer': 4.0.0 optional: true - '@csstools/css-syntax-patches-for-csstree@1.1.2(css-tree@3.2.1)': + '@csstools/css-syntax-patches-for-csstree@1.1.1(css-tree@3.2.1)': optionalDependencies: css-tree: 3.2.1 optional: true @@ -4088,6 +5915,11 @@ snapshots: '@csstools/css-tokenizer@4.0.0': optional: true + '@dependents/detective-less@5.0.1': + dependencies: + gonzales-pe: 4.3.0 + node-source-walk: 7.0.1 + '@emnapi/core@1.9.0': dependencies: '@emnapi/wasi-threads': 1.2.0 @@ -4384,45 +6216,249 @@ snapshots: '@img/sharp-win32-x64@0.34.5': optional: true - '@inquirer/ansi@1.0.2': - optional: true + '@inquirer/ansi@1.0.2': {} + + '@inquirer/ansi@2.0.4': {} + + '@inquirer/checkbox@4.3.2(@types/node@25.5.0)': + dependencies: + '@inquirer/ansi': 1.0.2 + '@inquirer/core': 10.3.2(@types/node@25.5.0) + '@inquirer/figures': 1.0.15 + '@inquirer/type': 3.0.10(@types/node@25.5.0) + yoctocolors-cjs: 2.1.3 + optionalDependencies: + '@types/node': 25.5.0 + + '@inquirer/checkbox@5.1.2(@types/node@25.5.0)': + dependencies: + '@inquirer/ansi': 2.0.4 + '@inquirer/core': 11.1.7(@types/node@25.5.0) + '@inquirer/figures': 2.0.4 + '@inquirer/type': 4.0.4(@types/node@25.5.0) + optionalDependencies: + '@types/node': 25.5.0 + + '@inquirer/confirm@5.1.21(@types/node@25.5.0)': + dependencies: + '@inquirer/core': 10.3.2(@types/node@25.5.0) + '@inquirer/type': 3.0.10(@types/node@25.5.0) + optionalDependencies: + '@types/node': 25.5.0 + + '@inquirer/confirm@6.0.10(@types/node@25.5.0)': + dependencies: + '@inquirer/core': 11.1.7(@types/node@25.5.0) + '@inquirer/type': 4.0.4(@types/node@25.5.0) + optionalDependencies: + '@types/node': 25.5.0 + + '@inquirer/core@10.3.2(@types/node@25.5.0)': + dependencies: + '@inquirer/ansi': 1.0.2 + '@inquirer/figures': 1.0.15 + '@inquirer/type': 3.0.10(@types/node@25.5.0) + cli-width: 4.1.0 + mute-stream: 2.0.0 + signal-exit: 4.1.0 + wrap-ansi: 6.2.0 + yoctocolors-cjs: 2.1.3 + optionalDependencies: + '@types/node': 25.5.0 + + '@inquirer/core@11.1.7(@types/node@25.5.0)': + dependencies: + '@inquirer/ansi': 2.0.4 + '@inquirer/figures': 2.0.4 + '@inquirer/type': 4.0.4(@types/node@25.5.0) + cli-width: 4.1.0 + fast-wrap-ansi: 0.2.0 + mute-stream: 3.0.0 + signal-exit: 4.1.0 + optionalDependencies: + '@types/node': 25.5.0 + + '@inquirer/editor@4.2.23(@types/node@25.5.0)': + dependencies: + '@inquirer/core': 10.3.2(@types/node@25.5.0) + '@inquirer/external-editor': 1.0.3(@types/node@25.5.0) + '@inquirer/type': 3.0.10(@types/node@25.5.0) + optionalDependencies: + '@types/node': 25.5.0 + + '@inquirer/editor@5.0.10(@types/node@25.5.0)': + dependencies: + '@inquirer/core': 11.1.7(@types/node@25.5.0) + '@inquirer/external-editor': 2.0.4(@types/node@25.5.0) + '@inquirer/type': 4.0.4(@types/node@25.5.0) + optionalDependencies: + '@types/node': 25.5.0 + + '@inquirer/expand@4.0.23(@types/node@25.5.0)': + dependencies: + '@inquirer/core': 10.3.2(@types/node@25.5.0) + '@inquirer/type': 3.0.10(@types/node@25.5.0) + yoctocolors-cjs: 2.1.3 + optionalDependencies: + '@types/node': 25.5.0 + + '@inquirer/expand@5.0.10(@types/node@25.5.0)': + dependencies: + '@inquirer/core': 11.1.7(@types/node@25.5.0) + '@inquirer/type': 4.0.4(@types/node@25.5.0) + optionalDependencies: + '@types/node': 25.5.0 + + '@inquirer/external-editor@1.0.3(@types/node@25.5.0)': + dependencies: + chardet: 2.1.1 + iconv-lite: 0.7.2 + optionalDependencies: + '@types/node': 25.5.0 + + '@inquirer/external-editor@2.0.4(@types/node@25.5.0)': + dependencies: + chardet: 2.1.1 + iconv-lite: 0.7.2 + optionalDependencies: + '@types/node': 25.5.0 + + '@inquirer/figures@1.0.15': {} + + '@inquirer/figures@2.0.4': {} + + '@inquirer/input@4.3.1(@types/node@25.5.0)': + dependencies: + '@inquirer/core': 10.3.2(@types/node@25.5.0) + '@inquirer/type': 3.0.10(@types/node@25.5.0) + optionalDependencies: + '@types/node': 25.5.0 + + '@inquirer/input@5.0.10(@types/node@25.5.0)': + dependencies: + '@inquirer/core': 11.1.7(@types/node@25.5.0) + '@inquirer/type': 4.0.4(@types/node@25.5.0) + optionalDependencies: + '@types/node': 25.5.0 + + '@inquirer/number@3.0.23(@types/node@25.5.0)': + dependencies: + '@inquirer/core': 10.3.2(@types/node@25.5.0) + '@inquirer/type': 3.0.10(@types/node@25.5.0) + optionalDependencies: + '@types/node': 25.5.0 + + '@inquirer/number@4.0.10(@types/node@25.5.0)': + dependencies: + '@inquirer/core': 11.1.7(@types/node@25.5.0) + '@inquirer/type': 4.0.4(@types/node@25.5.0) + optionalDependencies: + '@types/node': 25.5.0 + + '@inquirer/password@4.0.23(@types/node@25.5.0)': + dependencies: + '@inquirer/ansi': 1.0.2 + '@inquirer/core': 10.3.2(@types/node@25.5.0) + '@inquirer/type': 3.0.10(@types/node@25.5.0) + optionalDependencies: + '@types/node': 25.5.0 + + '@inquirer/password@5.0.10(@types/node@25.5.0)': + dependencies: + '@inquirer/ansi': 2.0.4 + '@inquirer/core': 11.1.7(@types/node@25.5.0) + '@inquirer/type': 4.0.4(@types/node@25.5.0) + optionalDependencies: + '@types/node': 25.5.0 + + '@inquirer/prompts@7.10.1(@types/node@25.5.0)': + dependencies: + '@inquirer/checkbox': 4.3.2(@types/node@25.5.0) + '@inquirer/confirm': 5.1.21(@types/node@25.5.0) + '@inquirer/editor': 4.2.23(@types/node@25.5.0) + '@inquirer/expand': 4.0.23(@types/node@25.5.0) + '@inquirer/input': 4.3.1(@types/node@25.5.0) + '@inquirer/number': 3.0.23(@types/node@25.5.0) + '@inquirer/password': 4.0.23(@types/node@25.5.0) + '@inquirer/rawlist': 4.1.11(@types/node@25.5.0) + '@inquirer/search': 3.2.2(@types/node@25.5.0) + '@inquirer/select': 4.4.2(@types/node@25.5.0) + optionalDependencies: + '@types/node': 25.5.0 + + '@inquirer/prompts@8.3.2(@types/node@25.5.0)': + dependencies: + '@inquirer/checkbox': 5.1.2(@types/node@25.5.0) + '@inquirer/confirm': 6.0.10(@types/node@25.5.0) + '@inquirer/editor': 5.0.10(@types/node@25.5.0) + '@inquirer/expand': 5.0.10(@types/node@25.5.0) + '@inquirer/input': 5.0.10(@types/node@25.5.0) + '@inquirer/number': 4.0.10(@types/node@25.5.0) + '@inquirer/password': 5.0.10(@types/node@25.5.0) + '@inquirer/rawlist': 5.2.6(@types/node@25.5.0) + '@inquirer/search': 4.1.6(@types/node@25.5.0) + '@inquirer/select': 5.1.2(@types/node@25.5.0) + optionalDependencies: + '@types/node': 25.5.0 + + '@inquirer/rawlist@4.1.11(@types/node@25.5.0)': + dependencies: + '@inquirer/core': 10.3.2(@types/node@25.5.0) + '@inquirer/type': 3.0.10(@types/node@25.5.0) + yoctocolors-cjs: 2.1.3 + optionalDependencies: + '@types/node': 25.5.0 + + '@inquirer/rawlist@5.2.6(@types/node@25.5.0)': + dependencies: + '@inquirer/core': 11.1.7(@types/node@25.5.0) + '@inquirer/type': 4.0.4(@types/node@25.5.0) + optionalDependencies: + '@types/node': 25.5.0 - '@inquirer/confirm@5.1.21(@types/node@25.5.0)': + '@inquirer/search@3.2.2(@types/node@25.5.0)': dependencies: '@inquirer/core': 10.3.2(@types/node@25.5.0) + '@inquirer/figures': 1.0.15 '@inquirer/type': 3.0.10(@types/node@25.5.0) + yoctocolors-cjs: 2.1.3 optionalDependencies: '@types/node': 25.5.0 - optional: true - '@inquirer/core@10.3.2(@types/node@25.5.0)': + '@inquirer/search@4.1.6(@types/node@25.5.0)': + dependencies: + '@inquirer/core': 11.1.7(@types/node@25.5.0) + '@inquirer/figures': 2.0.4 + '@inquirer/type': 4.0.4(@types/node@25.5.0) + optionalDependencies: + '@types/node': 25.5.0 + + '@inquirer/select@4.4.2(@types/node@25.5.0)': dependencies: '@inquirer/ansi': 1.0.2 + '@inquirer/core': 10.3.2(@types/node@25.5.0) '@inquirer/figures': 1.0.15 '@inquirer/type': 3.0.10(@types/node@25.5.0) - cli-width: 4.1.0 - mute-stream: 2.0.0 - signal-exit: 4.1.0 - wrap-ansi: 6.2.0 yoctocolors-cjs: 2.1.3 optionalDependencies: '@types/node': 25.5.0 - optional: true - '@inquirer/external-editor@1.0.3(@types/node@25.5.0)': + '@inquirer/select@5.1.2(@types/node@25.5.0)': dependencies: - chardet: 2.1.1 - iconv-lite: 0.7.2 + '@inquirer/ansi': 2.0.4 + '@inquirer/core': 11.1.7(@types/node@25.5.0) + '@inquirer/figures': 2.0.4 + '@inquirer/type': 4.0.4(@types/node@25.5.0) optionalDependencies: '@types/node': 25.5.0 - '@inquirer/figures@1.0.15': - optional: true - '@inquirer/type@3.0.10(@types/node@25.5.0)': optionalDependencies: '@types/node': 25.5.0 - optional: true + + '@inquirer/type@4.0.4(@types/node@25.5.0)': + optionalDependencies: + '@types/node': 25.5.0 '@isaacs/balanced-match@4.0.1': {} @@ -4430,6 +6466,8 @@ snapshots: dependencies: '@isaacs/balanced-match': 4.0.1 + '@isaacs/cliui@9.0.0': {} + '@jridgewell/gen-mapping@0.3.13': dependencies: '@jridgewell/sourcemap-codec': 1.5.5 @@ -4449,6 +6487,29 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.5 + '@liam-hq/cli@0.7.24(@types/node@25.5.0)(@types/react@19.2.13)(typescript@5.9.3)': + dependencies: + '@prisma/internals': 6.8.2(typescript@5.9.3) + '@swc/core': 1.12.11 + commander: 13.1.0 + glob: 11.1.0 + ink: 6.0.1(@types/react@19.2.13)(react@19.1.1) + ink-gradient: 3.0.0(ink@6.0.1(@types/react@19.2.13)(react@19.1.1)) + inquirer: 12.6.3(@types/node@25.5.0) + neverthrow: 8.2.0 + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) + valibot: 1.1.0(typescript@5.9.3) + yoctocolors: 2.1.2 + transitivePeerDependencies: + - '@swc/helpers' + - '@types/node' + - '@types/react' + - bufferutil + - react-devtools-core + - typescript + - utf-8-validate + '@manypkg/find-root@1.1.0': dependencies: '@babel/runtime': 7.28.6 @@ -4511,7 +6572,58 @@ snapshots: strict-event-emitter: 0.5.1 optional: true - '@napi-rs/wasm-runtime@1.1.2(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)': + '@napi-rs/keyring-darwin-arm64@1.2.0': + optional: true + + '@napi-rs/keyring-darwin-x64@1.2.0': + optional: true + + '@napi-rs/keyring-freebsd-x64@1.2.0': + optional: true + + '@napi-rs/keyring-linux-arm-gnueabihf@1.2.0': + optional: true + + '@napi-rs/keyring-linux-arm64-gnu@1.2.0': + optional: true + + '@napi-rs/keyring-linux-arm64-musl@1.2.0': + optional: true + + '@napi-rs/keyring-linux-riscv64-gnu@1.2.0': + optional: true + + '@napi-rs/keyring-linux-x64-gnu@1.2.0': + optional: true + + '@napi-rs/keyring-linux-x64-musl@1.2.0': + optional: true + + '@napi-rs/keyring-win32-arm64-msvc@1.2.0': + optional: true + + '@napi-rs/keyring-win32-ia32-msvc@1.2.0': + optional: true + + '@napi-rs/keyring-win32-x64-msvc@1.2.0': + optional: true + + '@napi-rs/keyring@1.2.0': + optionalDependencies: + '@napi-rs/keyring-darwin-arm64': 1.2.0 + '@napi-rs/keyring-darwin-x64': 1.2.0 + '@napi-rs/keyring-freebsd-x64': 1.2.0 + '@napi-rs/keyring-linux-arm-gnueabihf': 1.2.0 + '@napi-rs/keyring-linux-arm64-gnu': 1.2.0 + '@napi-rs/keyring-linux-arm64-musl': 1.2.0 + '@napi-rs/keyring-linux-riscv64-gnu': 1.2.0 + '@napi-rs/keyring-linux-x64-gnu': 1.2.0 + '@napi-rs/keyring-linux-x64-musl': 1.2.0 + '@napi-rs/keyring-win32-arm64-msvc': 1.2.0 + '@napi-rs/keyring-win32-ia32-msvc': 1.2.0 + '@napi-rs/keyring-win32-x64-msvc': 1.2.0 + + '@napi-rs/wasm-runtime@1.1.1': dependencies: '@emnapi/core': 1.9.0 '@emnapi/runtime': 1.9.0 @@ -4568,6 +6680,147 @@ snapshots: '@open-draft/until@2.1.0': optional: true + '@opentelemetry/api-logs@0.213.0': + dependencies: + '@opentelemetry/api': 1.9.0 + + '@opentelemetry/api@1.9.0': {} + + '@opentelemetry/context-async-hooks@2.6.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + + '@opentelemetry/core@2.6.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/semantic-conventions': 1.40.0 + + '@opentelemetry/exporter-trace-otlp-proto@0.213.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.6.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-exporter-base': 0.213.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.213.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.6.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 2.6.0(@opentelemetry/api@1.9.0) + + '@opentelemetry/otlp-exporter-base@0.213.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.6.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.213.0(@opentelemetry/api@1.9.0) + + '@opentelemetry/otlp-transformer@0.213.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/api-logs': 0.213.0 + '@opentelemetry/core': 2.6.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.6.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-logs': 0.213.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-metrics': 2.6.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 2.6.0(@opentelemetry/api@1.9.0) + protobufjs: 7.5.4 + + '@opentelemetry/resources@2.6.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.6.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.40.0 + + '@opentelemetry/sdk-logs@0.213.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/api-logs': 0.213.0 + '@opentelemetry/core': 2.6.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.6.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.40.0 + + '@opentelemetry/sdk-metrics@2.6.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.6.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.6.0(@opentelemetry/api@1.9.0) + + '@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.6.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.6.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.40.0 + + '@opentelemetry/sdk-trace-node@2.6.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/context-async-hooks': 2.6.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 2.6.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 2.6.0(@opentelemetry/api@1.9.0) + + '@opentelemetry/semantic-conventions@1.40.0': {} + + '@oxc-parser/binding-android-arm-eabi@0.121.0': + optional: true + + '@oxc-parser/binding-android-arm64@0.121.0': + optional: true + + '@oxc-parser/binding-darwin-arm64@0.121.0': + optional: true + + '@oxc-parser/binding-darwin-x64@0.121.0': + optional: true + + '@oxc-parser/binding-freebsd-x64@0.121.0': + optional: true + + '@oxc-parser/binding-linux-arm-gnueabihf@0.121.0': + optional: true + + '@oxc-parser/binding-linux-arm-musleabihf@0.121.0': + optional: true + + '@oxc-parser/binding-linux-arm64-gnu@0.121.0': + optional: true + + '@oxc-parser/binding-linux-arm64-musl@0.121.0': + optional: true + + '@oxc-parser/binding-linux-ppc64-gnu@0.121.0': + optional: true + + '@oxc-parser/binding-linux-riscv64-gnu@0.121.0': + optional: true + + '@oxc-parser/binding-linux-riscv64-musl@0.121.0': + optional: true + + '@oxc-parser/binding-linux-s390x-gnu@0.121.0': + optional: true + + '@oxc-parser/binding-linux-x64-gnu@0.121.0': + optional: true + + '@oxc-parser/binding-linux-x64-musl@0.121.0': + optional: true + + '@oxc-parser/binding-openharmony-arm64@0.121.0': + optional: true + + '@oxc-parser/binding-wasm32-wasi@0.121.0': + dependencies: + '@napi-rs/wasm-runtime': 1.1.1 + optional: true + + '@oxc-parser/binding-win32-arm64-msvc@0.121.0': + optional: true + + '@oxc-parser/binding-win32-ia32-msvc@0.121.0': + optional: true + + '@oxc-parser/binding-win32-x64-msvc@0.121.0': + optional: true + + '@oxc-project/types@0.121.0': {} + '@oxc-project/types@0.122.0': {} '@oxfmt/binding-android-arm-eabi@0.41.0': @@ -4684,6 +6937,96 @@ snapshots: '@oxlint/binding-win32-x64-msvc@1.56.0': optional: true + '@prisma/config@6.8.2': + dependencies: + jiti: 2.4.2 + + '@prisma/debug@6.8.2': {} + + '@prisma/dmmf@6.8.2': {} + + '@prisma/driver-adapter-utils@6.8.2': + dependencies: + '@prisma/debug': 6.8.2 + + '@prisma/engines-version@6.8.0-43.2060c79ba17c6bb9f5823312b6f6b7f4a845738e': {} + + '@prisma/engines@6.8.2': + dependencies: + '@prisma/debug': 6.8.2 + '@prisma/engines-version': 6.8.0-43.2060c79ba17c6bb9f5823312b6f6b7f4a845738e + '@prisma/fetch-engine': 6.8.2 + '@prisma/get-platform': 6.8.2 + + '@prisma/fetch-engine@6.8.2': + dependencies: + '@prisma/debug': 6.8.2 + '@prisma/engines-version': 6.8.0-43.2060c79ba17c6bb9f5823312b6f6b7f4a845738e + '@prisma/get-platform': 6.8.2 + + '@prisma/generator-helper@6.8.2': + dependencies: + '@prisma/debug': 6.8.2 + '@prisma/dmmf': 6.8.2 + '@prisma/generator': 6.8.2 + + '@prisma/generator@6.8.2': {} + + '@prisma/get-platform@6.8.2': + dependencies: + '@prisma/debug': 6.8.2 + + '@prisma/internals@6.8.2(typescript@5.9.3)': + dependencies: + '@prisma/config': 6.8.2 + '@prisma/debug': 6.8.2 + '@prisma/dmmf': 6.8.2 + '@prisma/driver-adapter-utils': 6.8.2 + '@prisma/engines': 6.8.2 + '@prisma/fetch-engine': 6.8.2 + '@prisma/generator': 6.8.2 + '@prisma/generator-helper': 6.8.2 + '@prisma/get-platform': 6.8.2 + '@prisma/prisma-schema-wasm': 6.8.0-43.2060c79ba17c6bb9f5823312b6f6b7f4a845738e + '@prisma/schema-engine-wasm': 6.8.0-43.2060c79ba17c6bb9f5823312b6f6b7f4a845738e + '@prisma/schema-files-loader': 6.8.2 + arg: 5.0.2 + prompts: 2.4.2 + optionalDependencies: + typescript: 5.9.3 + + '@prisma/prisma-schema-wasm@6.8.0-43.2060c79ba17c6bb9f5823312b6f6b7f4a845738e': {} + + '@prisma/schema-engine-wasm@6.8.0-43.2060c79ba17c6bb9f5823312b6f6b7f4a845738e': {} + + '@prisma/schema-files-loader@6.8.2': + dependencies: + '@prisma/prisma-schema-wasm': 6.8.0-43.2060c79ba17c6bb9f5823312b6f6b7f4a845738e + fs-extra: 11.3.0 + + '@protobufjs/aspromise@1.1.2': {} + + '@protobufjs/base64@1.1.2': {} + + '@protobufjs/codegen@2.0.4': {} + + '@protobufjs/eventemitter@1.1.0': {} + + '@protobufjs/fetch@1.1.0': + dependencies: + '@protobufjs/aspromise': 1.1.2 + '@protobufjs/inquire': 1.1.0 + + '@protobufjs/float@1.0.2': {} + + '@protobufjs/inquire@1.1.0': {} + + '@protobufjs/path@1.1.2': {} + + '@protobufjs/pool@1.1.0': {} + + '@protobufjs/utf8@1.1.0': {} + '@quansync/fs@1.0.0': dependencies: quansync: 1.0.0 @@ -4724,12 +7067,9 @@ snapshots: '@rolldown/binding-openharmony-arm64@1.0.0-rc.12': optional: true - '@rolldown/binding-wasm32-wasi@1.0.0-rc.12(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)': + '@rolldown/binding-wasm32-wasi@1.0.0-rc.12': dependencies: - '@napi-rs/wasm-runtime': 1.1.2(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0) - transitivePeerDependencies: - - '@emnapi/core' - - '@emnapi/runtime' + '@napi-rs/wasm-runtime': 1.1.1 optional: true '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.12': @@ -4943,14 +7283,136 @@ snapshots: '@standard-schema/utils@0.3.0': {} + '@swc/core-darwin-arm64@1.12.11': + optional: true + + '@swc/core-darwin-x64@1.12.11': + optional: true + + '@swc/core-linux-arm-gnueabihf@1.12.11': + optional: true + + '@swc/core-linux-arm64-gnu@1.12.11': + optional: true + + '@swc/core-linux-arm64-musl@1.12.11': + optional: true + + '@swc/core-linux-x64-gnu@1.12.11': + optional: true + + '@swc/core-linux-x64-musl@1.12.11': + optional: true + + '@swc/core-win32-arm64-msvc@1.12.11': + optional: true + + '@swc/core-win32-ia32-msvc@1.12.11': + optional: true + + '@swc/core-win32-x64-msvc@1.12.11': + optional: true + + '@swc/core@1.12.11': + dependencies: + '@swc/counter': 0.1.3 + '@swc/types': 0.1.26 + optionalDependencies: + '@swc/core-darwin-arm64': 1.12.11 + '@swc/core-darwin-x64': 1.12.11 + '@swc/core-linux-arm-gnueabihf': 1.12.11 + '@swc/core-linux-arm64-gnu': 1.12.11 + '@swc/core-linux-arm64-musl': 1.12.11 + '@swc/core-linux-x64-gnu': 1.12.11 + '@swc/core-linux-x64-musl': 1.12.11 + '@swc/core-win32-arm64-msvc': 1.12.11 + '@swc/core-win32-ia32-msvc': 1.12.11 + '@swc/core-win32-x64-msvc': 1.12.11 + + '@swc/counter@0.1.3': {} + '@swc/helpers@0.5.15': dependencies: tslib: 2.8.1 + '@swc/types@0.1.26': + dependencies: + '@swc/counter': 0.1.3 + '@tailor-platform/auth-public-client@0.5.0': dependencies: openid-client: 6.8.1 + '@tailor-platform/function-kysely-tailordb@0.1.3(kysely@0.28.14)': + dependencies: + kysely: 0.28.14 + + '@tailor-platform/function-types@0.8.3': {} + + '@tailor-platform/sdk@1.33.0(@types/node@25.5.0)(@types/react@19.2.13)(graphql@16.13.2)(typescript@5.9.3)(valibot@1.1.0(typescript@5.9.3))': + dependencies: + '@0no-co/graphql.web': 1.2.0(graphql@16.13.2) + '@badgateway/oauth2-client': 3.3.1 + '@bufbuild/protobuf': 2.11.0 + '@connectrpc/connect': 2.1.1(@bufbuild/protobuf@2.11.0) + '@connectrpc/connect-node': 2.1.1(@bufbuild/protobuf@2.11.0)(@connectrpc/connect@2.1.1(@bufbuild/protobuf@2.11.0)) + '@inquirer/core': 11.1.7(@types/node@25.5.0) + '@inquirer/prompts': 8.3.2(@types/node@25.5.0) + '@liam-hq/cli': 0.7.24(@types/node@25.5.0)(@types/react@19.2.13)(typescript@5.9.3) + '@napi-rs/keyring': 1.2.0 + '@opentelemetry/api': 1.9.0 + '@opentelemetry/exporter-trace-otlp-proto': 0.213.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.6.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-node': 2.6.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.40.0 + '@oxc-project/types': 0.121.0 + '@standard-schema/spec': 1.1.0 + '@tailor-platform/function-kysely-tailordb': 0.1.3(kysely@0.28.14) + '@tailor-platform/function-types': 0.8.3 + '@toiroakr/lines-db': 0.9.1(valibot@1.1.0(typescript@5.9.3)) + '@urql/core': 6.0.1(graphql@16.13.2) + chalk: 5.6.2 + chokidar: 5.0.0 + confbox: 0.2.4 + date-fns: 4.1.0 + es-toolkit: 1.45.1 + find-up-simple: 1.0.1 + globals: 17.4.0 + inflection: 3.0.2 + kysely: 0.28.14 + madge: 8.0.0(typescript@5.9.3) + mime-types: 3.0.2 + multiline-ts: 4.0.1 + open: 11.0.0 + ora: 9.3.0 + oxc-parser: 0.121.0 + p-limit: 7.3.0 + pathe: 2.0.3 + pgsql-ast-parser: 12.0.2 + pkg-types: 2.3.0 + politty: 0.4.12(zod@4.3.6) + rolldown: 1.0.0-rc.12 + semver: 7.7.4 + serve: 14.2.6 + std-env: 4.0.0 + table: 6.9.0 + ts-cron-validator: 1.1.5 + tsx: 4.21.0 + type-fest: 5.5.0 + xdg-basedir: 5.1.0 + zod: 4.3.6 + transitivePeerDependencies: + - '@swc/helpers' + - '@types/node' + - '@types/react' + - bufferutil + - graphql + - react-devtools-core + - supports-color + - typescript + - utf-8-validate + - valibot + '@tailwindcss/node@4.2.2': dependencies: '@jridgewell/remapping': 2.3.5 @@ -5020,20 +7482,12 @@ snapshots: postcss: 8.5.8 tailwindcss: 4.2.2 - '@tailwindcss/vite@4.2.2(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.7.0))': + '@tailwindcss/vite@4.2.2(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.7.0))': dependencies: '@tailwindcss/node': 4.2.2 '@tailwindcss/oxide': 4.2.2 tailwindcss: 4.2.2 - vite: 7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.7.0) - - '@tanstack/react-table@8.21.3(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': - dependencies: - '@tanstack/table-core': 8.21.3 - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - - '@tanstack/table-core@8.21.3': {} + vite: 7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.7.0) '@testing-library/dom@10.4.1': dependencies: @@ -5060,28 +7514,51 @@ snapshots: dependencies: '@testing-library/dom': 10.4.1 + '@toiroakr/lines-db@0.9.1(valibot@1.1.0(typescript@5.9.3))': + dependencies: + '@standard-schema/spec': 1.1.0 + commander: 14.0.3 + tsx: 4.21.0 + optionalDependencies: + valibot: 1.1.0(typescript@5.9.3) + + '@ts-graphviz/adapter@2.0.6': + dependencies: + '@ts-graphviz/common': 2.1.5 + + '@ts-graphviz/ast@2.0.7': + dependencies: + '@ts-graphviz/common': 2.1.5 + + '@ts-graphviz/common@2.1.5': {} + + '@ts-graphviz/core@2.0.7': + dependencies: + '@ts-graphviz/ast': 2.0.7 + '@ts-graphviz/common': 2.1.5 + '@ts-morph/common@0.28.1': dependencies: minimatch: 10.0.3 path-browserify: 1.0.1 tinyglobby: 0.2.15 - '@turbo/darwin-64@2.8.21': + '@turbo/darwin-64@2.9.1': optional: true - '@turbo/darwin-arm64@2.8.21': + '@turbo/darwin-arm64@2.9.1': optional: true - '@turbo/linux-64@2.8.21': + '@turbo/linux-64@2.9.1': optional: true - '@turbo/linux-arm64@2.8.21': + '@turbo/linux-arm64@2.9.1': optional: true - '@turbo/windows-64@2.8.21': + '@turbo/windows-64@2.9.1': optional: true - '@turbo/windows-arm64@2.8.21': + '@turbo/windows-arm64@2.9.1': optional: true '@tybys/wasm-util@0.10.1': @@ -5095,7 +7572,7 @@ snapshots: '@types/babel__core@7.20.5': dependencies: - '@babel/parser': 7.29.0 + '@babel/parser': 7.29.2 '@babel/types': 7.29.0 '@types/babel__generator': 7.27.0 '@types/babel__template': 7.4.4 @@ -5107,7 +7584,7 @@ snapshots: '@types/babel__template@7.4.4': dependencies: - '@babel/parser': 7.29.0 + '@babel/parser': 7.29.2 '@babel/types': 7.29.0 '@types/babel__traverse@7.28.0': @@ -5126,10 +7603,18 @@ snapshots: '@types/estree@1.0.8': {} + '@types/gradient-string@1.1.6': + dependencies: + '@types/tinycolor2': 1.4.6 + '@types/jsesc@2.5.1': {} '@types/node@12.20.55': {} + '@types/node@22.13.11': + dependencies: + undici-types: 6.20.0 + '@types/node@25.5.0': dependencies: undici-types: 7.18.2 @@ -5138,20 +7623,64 @@ snapshots: dependencies: '@types/react': 19.2.13 - '@types/react@19.2.13': + '@types/react@19.2.13': + dependencies: + csstype: 3.2.3 + + '@types/statuses@2.0.6': + optional: true + + '@types/tinycolor2@1.4.6': {} + + '@types/whatwg-mimetype@3.0.2': {} + + '@types/ws@8.18.1': + dependencies: + '@types/node': 25.5.0 + + '@typescript-eslint/project-service@8.57.2(typescript@5.9.3)': + dependencies: + '@typescript-eslint/tsconfig-utils': 8.57.2(typescript@5.9.3) + '@typescript-eslint/types': 8.57.2 + debug: 4.4.3 + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/tsconfig-utils@8.57.2(typescript@5.9.3)': + dependencies: + typescript: 5.9.3 + + '@typescript-eslint/types@8.57.2': {} + + '@typescript-eslint/typescript-estree@8.57.2(typescript@5.9.3)': + dependencies: + '@typescript-eslint/project-service': 8.57.2(typescript@5.9.3) + '@typescript-eslint/tsconfig-utils': 8.57.2(typescript@5.9.3) + '@typescript-eslint/types': 8.57.2 + '@typescript-eslint/visitor-keys': 8.57.2 + debug: 4.4.3 + minimatch: 10.2.4 + semver: 7.7.4 + tinyglobby: 0.2.15 + ts-api-utils: 2.5.0(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/visitor-keys@8.57.2': dependencies: - csstype: 3.2.3 - - '@types/statuses@2.0.6': - optional: true - - '@types/whatwg-mimetype@3.0.2': {} + '@typescript-eslint/types': 8.57.2 + eslint-visitor-keys: 5.0.1 - '@types/ws@8.18.1': + '@urql/core@6.0.1(graphql@16.13.2)': dependencies: - '@types/node': 25.5.0 + '@0no-co/graphql.web': 1.2.0(graphql@16.13.2) + wonka: 6.3.6 + transitivePeerDependencies: + - graphql - '@vitejs/plugin-react@5.2.0(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.7.0))': + '@vitejs/plugin-react@5.2.0(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.7.0))': dependencies: '@babel/core': 7.29.0 '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.29.0) @@ -5159,7 +7688,7 @@ snapshots: '@rolldown/pluginutils': 1.0.0-rc.3 '@types/babel__core': 7.20.5 react-refresh: 0.18.0 - vite: 7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.7.0) + vite: 7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.7.0) transitivePeerDependencies: - supports-color @@ -5172,14 +7701,14 @@ snapshots: chai: 6.2.2 tinyrainbow: 3.1.0 - '@vitest/mocker@4.1.0(msw@2.11.2(@types/node@25.5.0)(typescript@5.9.3))(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.7.0))': + '@vitest/mocker@4.1.0(msw@2.11.2(@types/node@25.5.0)(typescript@5.9.3))(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.7.0))': dependencies: '@vitest/spy': 4.1.0 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: msw: 2.11.2(@types/node@25.5.0)(typescript@5.9.3) - vite: 7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.7.0) + vite: 7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.7.0) '@vitest/pretty-format@4.1.0': dependencies: @@ -5219,17 +7748,47 @@ snapshots: '@vue/compiler-core@3.5.25': dependencies: - '@babel/parser': 7.29.2 + '@babel/parser': 7.29.0 '@vue/shared': 3.5.25 entities: 4.5.0 estree-walker: 2.0.2 source-map-js: 1.2.1 + '@vue/compiler-core@3.5.31': + dependencies: + '@babel/parser': 7.29.2 + '@vue/shared': 3.5.31 + entities: 7.0.1 + estree-walker: 2.0.2 + source-map-js: 1.2.1 + '@vue/compiler-dom@3.5.25': dependencies: '@vue/compiler-core': 3.5.25 '@vue/shared': 3.5.25 + '@vue/compiler-dom@3.5.31': + dependencies: + '@vue/compiler-core': 3.5.31 + '@vue/shared': 3.5.31 + + '@vue/compiler-sfc@3.5.31': + dependencies: + '@babel/parser': 7.29.2 + '@vue/compiler-core': 3.5.31 + '@vue/compiler-dom': 3.5.31 + '@vue/compiler-ssr': 3.5.31 + '@vue/shared': 3.5.31 + estree-walker: 2.0.2 + magic-string: 0.30.21 + postcss: 8.5.8 + source-map-js: 1.2.1 + + '@vue/compiler-ssr@3.5.31': + dependencies: + '@vue/compiler-dom': 3.5.31 + '@vue/shared': 3.5.31 + '@vue/compiler-vue2@2.7.16': dependencies: de-indent: 1.0.2 @@ -5250,6 +7809,10 @@ snapshots: '@vue/shared@3.5.25': {} + '@vue/shared@3.5.31': {} + + '@zeit/schemas@2.36.0': {} + acorn@8.15.0: {} acorn@8.16.0: {} @@ -5279,23 +7842,51 @@ snapshots: require-from-string: 2.0.2 uri-js: 4.4.1 + ajv@8.18.0: + dependencies: + fast-deep-equal: 3.1.3 + fast-uri: 3.1.0 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + alien-signals@0.4.14: {} + ansi-align@3.0.1: + dependencies: + string-width: 4.2.3 + ansi-colors@4.1.3: {} + ansi-escapes@4.3.2: + dependencies: + type-fest: 0.21.3 + + ansi-escapes@7.3.0: + dependencies: + environment: 1.1.0 + ansi-regex@5.0.1: {} + ansi-regex@6.2.2: {} + ansi-styles@4.3.0: dependencies: color-convert: 2.0.1 - optional: true ansi-styles@5.2.0: {} + ansi-styles@6.2.3: {} + ansis@4.2.0: {} any-promise@1.3.0: {} + app-module-path@2.2.0: {} + + arch@2.2.0: {} + + arg@5.0.2: {} + argparse@1.0.10: dependencies: sprintf-js: 1.0.3 @@ -5316,8 +7907,18 @@ snapshots: estree-walker: 3.0.3 pathe: 2.0.3 + ast-module-types@6.0.1: {} + + astral-regex@2.0.0: {} + + auto-bind@5.0.1: {} + balanced-match@1.0.2: {} + balanced-match@4.0.4: {} + + base64-js@1.5.1: {} + baseline-browser-mapping@2.9.18: {} baseline-browser-mapping@2.9.19: {} @@ -5333,10 +7934,36 @@ snapshots: birpc@4.0.0: {} + bl@4.1.0: + dependencies: + buffer: 5.7.1 + inherits: 2.0.4 + readable-stream: 3.6.2 + + boxen@7.0.0: + dependencies: + ansi-align: 3.0.1 + camelcase: 7.0.1 + chalk: 5.6.2 + cli-boxes: 3.0.0 + string-width: 5.1.2 + type-fest: 2.19.0 + widest-line: 4.0.1 + wrap-ansi: 8.1.0 + + brace-expansion@1.1.13: + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + brace-expansion@2.0.2: dependencies: balanced-match: 1.0.2 + brace-expansion@5.0.5: + dependencies: + balanced-match: 4.0.4 + braces@3.0.3: dependencies: fill-range: 7.1.1 @@ -5349,21 +7976,49 @@ snapshots: node-releases: 2.0.27 update-browserslist-db: 1.2.3(browserslist@4.28.1) + buffer@5.7.1: + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + + bundle-name@4.1.0: + dependencies: + run-applescript: 7.1.0 + bundle-require@5.1.0(esbuild@0.27.4): dependencies: esbuild: 0.27.4 load-tsconfig: 0.2.5 + bytes@3.0.0: {} + + bytes@3.1.2: {} + cac@6.7.14: {} cac@7.0.0: {} + camelcase@7.0.1: {} + caniuse-lite@1.0.30001766: {} caniuse-lite@1.0.30001770: {} chai@6.2.2: {} + chalk-template@0.4.0: + dependencies: + chalk: 4.1.2 + + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + chalk@5.0.1: {} + + chalk@5.6.2: {} + change-case@5.4.4: {} chardet@2.1.1: {} @@ -5372,15 +8027,47 @@ snapshots: dependencies: readdirp: 4.1.2 + chokidar@5.0.0: + dependencies: + readdirp: 5.0.0 + class-variance-authority@0.7.1: dependencies: clsx: 2.1.1 - cli-width@4.1.0: - optional: true + cli-boxes@3.0.0: {} + + cli-cursor@3.1.0: + dependencies: + restore-cursor: 3.1.0 + + cli-cursor@4.0.0: + dependencies: + restore-cursor: 4.0.0 + + cli-cursor@5.0.0: + dependencies: + restore-cursor: 5.1.0 + + cli-spinners@2.9.2: {} + + cli-spinners@3.4.0: {} + + cli-truncate@4.0.0: + dependencies: + slice-ansi: 5.0.0 + string-width: 7.2.0 + + cli-width@4.1.0: {} client-only@0.0.1: {} + clipboardy@3.0.0: + dependencies: + arch: 2.2.0 + execa: 5.1.1 + is-wsl: 2.2.0 + cliui@8.0.1: dependencies: string-width: 4.2.3 @@ -5388,30 +8075,68 @@ snapshots: wrap-ansi: 7.0.0 optional: true + clone@1.0.4: {} + clsx@2.1.1: {} code-block-writer@13.0.3: {} + code-excerpt@4.0.0: + dependencies: + convert-to-spaces: 2.0.1 + color-convert@2.0.1: dependencies: color-name: 1.1.4 - optional: true - color-name@1.1.4: - optional: true + color-name@1.1.4: {} + + commander@12.1.0: {} + + commander@13.1.0: {} + + commander@14.0.3: {} + + commander@2.20.3: {} commander@4.1.1: {} + commander@7.2.0: {} + + commondir@1.0.1: {} + compare-versions@6.1.1: {} + compressible@2.0.18: + dependencies: + mime-db: 1.54.0 + + compression@1.8.1: + dependencies: + bytes: 3.1.2 + compressible: 2.0.18 + debug: 2.6.9 + negotiator: 0.6.4 + on-headers: 1.1.0 + safe-buffer: 5.2.1 + vary: 1.1.2 + transitivePeerDependencies: + - supports-color + + concat-map@0.0.1: {} + confbox@0.1.8: {} - confbox@0.2.2: {} + confbox@0.2.4: {} consola@3.4.2: {} + content-disposition@0.5.2: {} + convert-source-map@2.0.0: {} + convert-to-spaces@2.0.1: {} + cookie@0.7.2: optional: true @@ -5432,7 +8157,7 @@ snapshots: cssstyle@5.3.7: dependencies: '@asamuzakjp/css-color': 4.1.2 - '@csstools/css-syntax-patches-for-csstree': 1.1.2(css-tree@3.2.1) + '@csstools/css-syntax-patches-for-csstree': 1.1.1(css-tree@3.2.1) css-tree: 3.2.1 lru-cache: 11.2.7 optional: true @@ -5445,8 +8170,14 @@ snapshots: whatwg-url: 15.1.0 optional: true + date-fns@4.1.0: {} + de-indent@1.0.2: {} + debug@2.6.9: + dependencies: + ms: 2.0.0 + debug@4.4.3: dependencies: ms: 2.1.3 @@ -5454,28 +8185,115 @@ snapshots: decimal.js@10.6.0: optional: true + deep-extend@0.6.0: {} + + default-browser-id@5.0.1: {} + + default-browser@5.5.0: + dependencies: + bundle-name: 4.1.0 + default-browser-id: 5.0.1 + + defaults@1.0.4: + dependencies: + clone: 1.0.4 + + define-lazy-prop@3.0.0: {} + defu@6.1.4: {} + dependency-tree@11.4.0: + dependencies: + commander: 12.1.0 + filing-cabinet: 5.2.0 + precinct: 12.2.0 + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + dequal@2.0.3: {} detect-indent@6.1.0: {} detect-libc@2.1.2: {} + detective-amd@6.0.1: + dependencies: + ast-module-types: 6.0.1 + escodegen: 2.1.0 + get-amd-module-type: 6.0.1 + node-source-walk: 7.0.1 + + detective-cjs@6.1.0: + dependencies: + ast-module-types: 6.0.1 + node-source-walk: 7.0.1 + + detective-es6@5.0.1: + dependencies: + node-source-walk: 7.0.1 + + detective-postcss@7.0.1(postcss@8.5.8): + dependencies: + is-url: 1.2.4 + postcss: 8.5.8 + postcss-values-parser: 6.0.2(postcss@8.5.8) + + detective-sass@6.0.1: + dependencies: + gonzales-pe: 4.3.0 + node-source-walk: 7.0.1 + + detective-scss@5.0.1: + dependencies: + gonzales-pe: 4.3.0 + node-source-walk: 7.0.1 + + detective-stylus@5.0.1: {} + + detective-typescript@14.0.0(typescript@5.9.3): + dependencies: + '@typescript-eslint/typescript-estree': 8.57.2(typescript@5.9.3) + ast-module-types: 6.0.1 + node-source-walk: 7.0.1 + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + detective-vue2@2.2.0(typescript@5.9.3): + dependencies: + '@dependents/detective-less': 5.0.1 + '@vue/compiler-sfc': 3.5.31 + detective-es6: 5.0.1 + detective-sass: 6.0.1 + detective-scss: 5.0.1 + detective-stylus: 5.0.1 + detective-typescript: 14.0.0(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + diff@8.0.2: {} dir-glob@3.0.1: dependencies: path-type: 4.0.0 + discontinuous-range@1.0.0: {} + dom-accessibility-api@0.5.16: {} dts-resolver@2.1.3: {} + eastasianwidth@0.2.0: {} + electron-to-chromium@1.5.286: {} - emoji-regex@8.0.0: - optional: true + emoji-regex@10.6.0: {} + + emoji-regex@8.0.0: {} + + emoji-regex@9.2.2: {} empathic@2.0.0: {} @@ -5496,6 +8314,8 @@ snapshots: entities@7.0.1: {} + environment@1.1.0: {} + es-module-lexer@2.0.0: {} es-toolkit@1.45.1: {} @@ -5560,14 +8380,42 @@ snapshots: escalade@3.2.0: {} + escape-string-regexp@2.0.0: {} + + escodegen@2.1.0: + dependencies: + esprima: 4.0.1 + estraverse: 5.3.0 + esutils: 2.0.3 + optionalDependencies: + source-map: 0.6.1 + + eslint-visitor-keys@5.0.1: {} + esprima@4.0.1: {} + estraverse@5.3.0: {} + estree-walker@2.0.2: {} estree-walker@3.0.3: dependencies: '@types/estree': 1.0.8 + esutils@2.0.3: {} + + execa@5.1.1: + dependencies: + cross-spawn: 7.0.6 + get-stream: 6.0.1 + human-signals: 2.1.0 + is-stream: 2.0.1 + merge-stream: 2.0.0 + npm-run-path: 4.0.1 + onetime: 5.1.2 + signal-exit: 3.0.7 + strip-final-newline: 2.0.0 + expect-type@1.3.0: {} exsolve@1.0.8: {} @@ -5584,6 +8432,18 @@ snapshots: merge2: 1.4.1 micromatch: 4.0.8 + fast-string-truncated-width@3.0.3: {} + + fast-string-width@3.0.2: + dependencies: + fast-string-truncated-width: 3.0.3 + + fast-uri@3.1.0: {} + + fast-wrap-ansi@0.2.0: + dependencies: + fast-string-width: 3.0.2 + fastq@1.20.1: dependencies: reusify: 1.1.0 @@ -5592,10 +8452,26 @@ snapshots: optionalDependencies: picomatch: 4.0.3 + filing-cabinet@5.2.0: + dependencies: + app-module-path: 2.2.0 + commander: 12.1.0 + enhanced-resolve: 5.20.1 + module-definition: 6.0.1 + module-lookup-amd: 9.1.1 + resolve: 1.22.11 + resolve-dependency-path: 4.0.1 + sass-lookup: 6.1.1 + stylus-lookup: 6.1.0 + tsconfig-paths: 4.2.0 + typescript: 5.9.3 + fill-range@7.1.1: dependencies: to-regex-range: 5.0.1 + find-up-simple@1.0.1: {} + find-up@4.1.0: dependencies: locate-path: 5.0.0 @@ -5607,6 +8483,17 @@ snapshots: mlly: 1.8.2 rollup: 4.60.0 + foreground-child@3.3.1: + dependencies: + cross-spawn: 7.0.6 + signal-exit: 4.1.0 + + fs-extra@11.3.0: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.2.0 + universalify: 2.0.1 + fs-extra@11.3.4: dependencies: graceful-fs: 4.2.11 @@ -5632,9 +8519,24 @@ snapshots: gensync@1.0.0-beta.2: {} + get-amd-module-type@6.0.1: + dependencies: + ast-module-types: 6.0.1 + node-source-walk: 7.0.1 + get-caller-file@2.0.5: optional: true + get-east-asian-width@1.5.0: {} + + get-own-enumerable-property-symbols@3.0.2: {} + + get-stream@6.0.1: {} + + get-tsconfig@4.13.6: + dependencies: + resolve-pkg-maps: 1.0.0 + get-tsconfig@4.13.7: dependencies: resolve-pkg-maps: 1.0.0 @@ -5643,6 +8545,17 @@ snapshots: dependencies: is-glob: 4.0.3 + glob@11.1.0: + dependencies: + foreground-child: 3.3.1 + jackspeak: 4.2.3 + minimatch: 10.2.4 + minipass: 7.1.3 + package-json-from-dist: 1.0.1 + path-scurry: 2.0.2 + + globals@17.4.0: {} + globby@11.1.0: dependencies: array-union: 2.1.0 @@ -5654,8 +8567,17 @@ snapshots: globrex@0.1.2: {} + gonzales-pe@4.3.0: + dependencies: + minimist: 1.2.8 + graceful-fs@4.2.11: {} + gradient-string@2.0.2: + dependencies: + chalk: 4.1.2 + tinygradient: 1.1.5 + graphql@16.13.2: {} happy-dom@20.6.2: @@ -5706,6 +8628,8 @@ snapshots: human-id@4.1.3: {} + human-signals@2.1.0: {} + iconv-lite@0.6.3: dependencies: safer-buffer: 2.1.2 @@ -5715,41 +8639,155 @@ snapshots: dependencies: safer-buffer: 2.1.2 + ieee754@1.2.1: {} + ignore@5.3.2: {} import-lazy@4.0.0: {} import-without-cache@0.2.5: {} + indent-string@5.0.0: {} + + inflection@3.0.2: {} + + inherits@2.0.4: {} + + ini@1.3.8: {} + + ink-gradient@3.0.0(ink@6.0.1(@types/react@19.2.13)(react@19.1.1)): + dependencies: + '@types/gradient-string': 1.1.6 + gradient-string: 2.0.2 + ink: 6.0.1(@types/react@19.2.13)(react@19.1.1) + prop-types: 15.8.1 + strip-ansi: 7.2.0 + + ink@6.0.1(@types/react@19.2.13)(react@19.1.1): + dependencies: + '@alcalzone/ansi-tokenize': 0.1.3 + ansi-escapes: 7.3.0 + ansi-styles: 6.2.3 + auto-bind: 5.0.1 + chalk: 5.6.2 + cli-boxes: 3.0.0 + cli-cursor: 4.0.0 + cli-truncate: 4.0.0 + code-excerpt: 4.0.0 + es-toolkit: 1.45.1 + indent-string: 5.0.0 + is-in-ci: 1.0.0 + patch-console: 2.0.0 + react: 19.1.1 + react-reconciler: 0.32.0(react@19.1.1) + scheduler: 0.23.2 + signal-exit: 3.0.7 + slice-ansi: 7.1.2 + stack-utils: 2.0.6 + string-width: 7.2.0 + type-fest: 4.41.0 + widest-line: 5.0.0 + wrap-ansi: 9.0.2 + ws: 8.20.0 + yoga-layout: 3.2.1 + optionalDependencies: + '@types/react': 19.2.13 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + inquirer@12.6.3(@types/node@25.5.0): + dependencies: + '@inquirer/core': 10.3.2(@types/node@25.5.0) + '@inquirer/prompts': 7.10.1(@types/node@25.5.0) + '@inquirer/type': 3.0.10(@types/node@25.5.0) + ansi-escapes: 4.3.2 + mute-stream: 2.0.0 + run-async: 3.0.0 + rxjs: 7.8.2 + optionalDependencies: + '@types/node': 25.5.0 + is-core-module@2.16.1: dependencies: hasown: 2.0.2 + is-docker@2.2.1: {} + + is-docker@3.0.0: {} + is-extglob@2.1.1: {} - is-fullwidth-code-point@3.0.0: - optional: true + is-fullwidth-code-point@3.0.0: {} + + is-fullwidth-code-point@4.0.0: {} + + is-fullwidth-code-point@5.1.0: + dependencies: + get-east-asian-width: 1.5.0 is-glob@4.0.3: dependencies: is-extglob: 2.1.1 + is-in-ci@1.0.0: {} + + is-in-ssh@1.0.0: {} + + is-inside-container@1.0.0: + dependencies: + is-docker: 3.0.0 + + is-interactive@1.0.0: {} + + is-interactive@2.0.0: {} + is-node-process@1.2.0: optional: true is-number@7.0.0: {} + is-obj@1.0.1: {} + + is-port-reachable@4.0.0: {} + is-potential-custom-element-name@1.0.1: optional: true + is-regexp@1.0.0: {} + + is-stream@2.0.1: {} + is-subdir@1.2.0: dependencies: better-path-resolve: 1.0.0 + is-unicode-supported@0.1.0: {} + + is-unicode-supported@2.1.0: {} + + is-url-superb@4.0.0: {} + + is-url@1.2.4: {} + is-windows@1.0.2: {} + is-wsl@2.2.0: + dependencies: + is-docker: 2.2.1 + + is-wsl@3.1.1: + dependencies: + is-inside-container: 1.0.0 + isexe@2.0.0: {} + jackspeak@4.2.3: + dependencies: + '@isaacs/cliui': 9.0.0 + + jiti@2.4.2: {} + jiti@2.6.1: {} jju@1.4.0: {} @@ -5813,8 +8851,12 @@ snapshots: optionalDependencies: graceful-fs: 4.2.11 + kleur@3.0.3: {} + kolorist@1.8.0: {} + kysely@0.28.14: {} + lightningcss-android-arm64@1.32.0: optional: true @@ -5882,10 +8924,27 @@ snapshots: lodash.startcase@4.4.0: {} + lodash.truncate@4.4.2: {} + lodash@4.17.21: {} - lru-cache@11.2.7: - optional: true + log-symbols@4.1.0: + dependencies: + chalk: 4.1.2 + is-unicode-supported: 0.1.0 + + log-symbols@7.0.1: + dependencies: + is-unicode-supported: 2.1.0 + yoctocolors: 2.1.2 + + long@5.3.2: {} + + loose-envify@1.4.0: + dependencies: + js-tokens: 4.0.0 + + lru-cache@11.2.7: {} lru-cache@5.1.1: dependencies: @@ -5901,6 +8960,25 @@ snapshots: lz-string@1.5.0: {} + madge@8.0.0(typescript@5.9.3): + dependencies: + chalk: 4.1.2 + commander: 7.2.0 + commondir: 1.0.1 + debug: 4.4.3 + dependency-tree: 11.4.0 + ora: 5.4.1 + pluralize: 8.0.0 + pretty-ms: 7.0.1 + rc: 1.2.8 + stream-to-array: 2.3.0 + ts-graphviz: 2.1.6 + walkdir: 0.4.1 + optionalDependencies: + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + magic-string@0.30.21: dependencies: '@jridgewell/sourcemap-codec': 1.5.5 @@ -5908,21 +8986,51 @@ snapshots: mdn-data@2.27.1: optional: true + merge-stream@2.0.0: {} + merge2@1.4.1: {} micromatch@4.0.8: dependencies: braces: 3.0.3 - picomatch: 2.3.2 + picomatch: 2.3.1 + + mime-db@1.33.0: {} + + mime-db@1.54.0: {} + + mime-types@2.1.18: + dependencies: + mime-db: 1.33.0 + + mime-types@3.0.2: + dependencies: + mime-db: 1.54.0 + + mimic-fn@2.1.0: {} + + mimic-function@5.0.1: {} minimatch@10.0.3: dependencies: '@isaacs/brace-expansion': 5.0.0 + minimatch@10.2.4: + dependencies: + brace-expansion: 5.0.5 + + minimatch@3.1.5: + dependencies: + brace-expansion: 1.1.13 + minimatch@9.0.5: dependencies: brace-expansion: 2.0.2 + minimist@1.2.8: {} + + minipass@7.1.3: {} + mlly@1.8.0: dependencies: acorn: 8.15.0 @@ -5937,8 +9045,23 @@ snapshots: pkg-types: 1.3.1 ufo: 1.6.3 + module-definition@6.0.1: + dependencies: + ast-module-types: 6.0.1 + node-source-walk: 7.0.1 + + module-lookup-amd@9.1.1: + dependencies: + commander: 12.1.0 + requirejs: 2.3.8 + requirejs-config-file: 4.0.0 + + moo@0.5.3: {} + mri@1.2.0: {} + ms@2.0.0: {} + ms@2.1.3: {} msw@2.11.2(@types/node@25.5.0)(typescript@5.9.3): @@ -5970,8 +9093,11 @@ snapshots: muggle-string@0.4.1: {} - mute-stream@2.0.0: - optional: true + multiline-ts@4.0.1: {} + + mute-stream@2.0.0: {} + + mute-stream@3.0.0: {} mz@2.7.0: dependencies: @@ -5981,12 +9107,25 @@ snapshots: nanoid@3.3.11: {} + nearley@2.20.1: + dependencies: + commander: 2.20.3 + moo: 0.5.3 + railroad-diagrams: 1.0.0 + randexp: 0.4.6 + + negotiator@0.6.4: {} + + neverthrow@8.2.0: + optionalDependencies: + '@rollup/rollup-linux-x64-gnu': 4.60.0 + next-themes@0.4.6(react-dom@19.2.4(react@19.2.4))(react@19.2.4): dependencies: react: 19.2.4 react-dom: 19.2.4(react@19.2.4) - next@16.1.6(react-dom@19.2.4(react@19.2.4))(react@19.2.4): + next@16.1.6(@opentelemetry/api@1.9.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4): dependencies: '@next/env': 16.1.6 '@swc/helpers': 0.5.15 @@ -6005,6 +9144,7 @@ snapshots: '@next/swc-linux-x64-musl': 16.1.6 '@next/swc-win32-arm64-msvc': 16.1.6 '@next/swc-win32-x64-msvc': 16.1.6 + '@opentelemetry/api': 1.9.0 sharp: 0.34.5 transitivePeerDependencies: - '@babel/core' @@ -6012,22 +9152,97 @@ snapshots: node-releases@2.0.27: {} + node-source-walk@7.0.1: + dependencies: + '@babel/parser': 7.29.2 + + npm-run-path@4.0.1: + dependencies: + path-key: 3.1.1 + oauth4webapi@3.8.5: {} object-assign@4.1.1: {} obug@2.1.1: {} + on-headers@1.1.0: {} + + onetime@5.1.2: + dependencies: + mimic-fn: 2.1.0 + + onetime@7.0.0: + dependencies: + mimic-function: 5.0.1 + + open@11.0.0: + dependencies: + default-browser: 5.5.0 + define-lazy-prop: 3.0.0 + is-in-ssh: 1.0.0 + is-inside-container: 1.0.0 + powershell-utils: 0.1.0 + wsl-utils: 0.3.1 + openid-client@6.8.1: dependencies: jose: 6.1.3 oauth4webapi: 3.8.5 + ora@5.4.1: + dependencies: + bl: 4.1.0 + chalk: 4.1.2 + cli-cursor: 3.1.0 + cli-spinners: 2.9.2 + is-interactive: 1.0.0 + is-unicode-supported: 0.1.0 + log-symbols: 4.1.0 + strip-ansi: 6.0.1 + wcwidth: 1.0.1 + + ora@9.3.0: + dependencies: + chalk: 5.6.2 + cli-cursor: 5.0.0 + cli-spinners: 3.4.0 + is-interactive: 2.0.0 + is-unicode-supported: 2.1.0 + log-symbols: 7.0.1 + stdin-discarder: 0.3.1 + string-width: 8.2.0 + outdent@0.5.0: {} outvariant@1.4.3: optional: true + oxc-parser@0.121.0: + dependencies: + '@oxc-project/types': 0.121.0 + optionalDependencies: + '@oxc-parser/binding-android-arm-eabi': 0.121.0 + '@oxc-parser/binding-android-arm64': 0.121.0 + '@oxc-parser/binding-darwin-arm64': 0.121.0 + '@oxc-parser/binding-darwin-x64': 0.121.0 + '@oxc-parser/binding-freebsd-x64': 0.121.0 + '@oxc-parser/binding-linux-arm-gnueabihf': 0.121.0 + '@oxc-parser/binding-linux-arm-musleabihf': 0.121.0 + '@oxc-parser/binding-linux-arm64-gnu': 0.121.0 + '@oxc-parser/binding-linux-arm64-musl': 0.121.0 + '@oxc-parser/binding-linux-ppc64-gnu': 0.121.0 + '@oxc-parser/binding-linux-riscv64-gnu': 0.121.0 + '@oxc-parser/binding-linux-riscv64-musl': 0.121.0 + '@oxc-parser/binding-linux-s390x-gnu': 0.121.0 + '@oxc-parser/binding-linux-x64-gnu': 0.121.0 + '@oxc-parser/binding-linux-x64-musl': 0.121.0 + '@oxc-parser/binding-openharmony-arm64': 0.121.0 + '@oxc-parser/binding-wasm32-wasi': 0.121.0 + '@oxc-parser/binding-win32-arm64-msvc': 0.121.0 + '@oxc-parser/binding-win32-ia32-msvc': 0.121.0 + '@oxc-parser/binding-win32-x64-msvc': 0.121.0 + oxfmt@0.41.0: dependencies: tinypool: 2.1.0 @@ -6082,6 +9297,10 @@ snapshots: dependencies: p-try: 2.2.0 + p-limit@7.3.0: + dependencies: + yocto-queue: 1.2.2 + p-locate@4.1.0: dependencies: p-limit: 2.3.0 @@ -6090,23 +9309,38 @@ snapshots: p-try@2.2.0: {} + package-json-from-dist@1.0.1: {} + package-manager-detector@0.2.11: dependencies: quansync: 0.2.11 + parse-ms@2.1.0: {} + parse5@7.3.0: dependencies: entities: 6.0.1 optional: true + patch-console@2.0.0: {} + path-browserify@1.0.1: {} path-exists@4.0.0: {} + path-is-inside@1.0.2: {} + path-key@3.1.1: {} path-parse@1.0.7: {} + path-scurry@2.0.2: + dependencies: + lru-cache: 11.2.7 + minipass: 7.1.3 + + path-to-regexp@3.3.0: {} + path-to-regexp@6.3.0: optional: true @@ -6114,9 +9348,14 @@ snapshots: pathe@2.0.3: {} + pgsql-ast-parser@12.0.2: + dependencies: + moo: 0.5.3 + nearley: 2.20.1 + picocolors@1.1.1: {} - picomatch@2.3.2: {} + picomatch@2.3.1: {} picomatch@4.0.3: {} @@ -6134,18 +9373,33 @@ snapshots: pkg-types@2.3.0: dependencies: - confbox: 0.2.2 + confbox: 0.2.4 exsolve: 1.0.8 pathe: 2.0.3 - postcss-load-config@6.0.1(jiti@2.6.1)(postcss@8.5.8)(yaml@2.7.0): + pluralize@8.0.0: {} + + politty@0.4.12(zod@4.3.6): + dependencies: + string-width: 8.2.0 + zod: 4.3.6 + + postcss-load-config@6.0.1(jiti@2.6.1)(postcss@8.5.8)(tsx@4.21.0)(yaml@2.7.0): dependencies: lilconfig: 3.1.3 optionalDependencies: jiti: 2.6.1 postcss: 8.5.8 + tsx: 4.21.0 yaml: 2.7.0 + postcss-values-parser@6.0.2(postcss@8.5.8): + dependencies: + color-name: 1.1.4 + is-url-superb: 4.0.0 + postcss: 8.5.8 + quote-unquote: 1.0.0 + postcss@8.4.31: dependencies: nanoid: 3.3.11 @@ -6158,6 +9412,28 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.2.1 + powershell-utils@0.1.0: {} + + precinct@12.2.0: + dependencies: + '@dependents/detective-less': 5.0.1 + commander: 12.1.0 + detective-amd: 6.0.1 + detective-cjs: 6.1.0 + detective-es6: 5.0.1 + detective-postcss: 7.0.1(postcss@8.5.8) + detective-sass: 6.0.1 + detective-scss: 5.0.1 + detective-stylus: 5.0.1 + detective-typescript: 14.0.0(typescript@5.9.3) + detective-vue2: 2.2.0(typescript@5.9.3) + module-definition: 6.0.1 + node-source-walk: 7.0.1 + postcss: 8.5.8 + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + prettier@2.8.8: {} pretty-format@27.5.1: @@ -6166,6 +9442,36 @@ snapshots: ansi-styles: 5.2.0 react-is: 17.0.2 + pretty-ms@7.0.1: + dependencies: + parse-ms: 2.1.0 + + prompts@2.4.2: + dependencies: + kleur: 3.0.3 + sisteransi: 1.0.5 + + prop-types@15.8.1: + dependencies: + loose-envify: 1.4.0 + object-assign: 4.1.1 + react-is: 16.13.1 + + protobufjs@7.5.4: + dependencies: + '@protobufjs/aspromise': 1.1.2 + '@protobufjs/base64': 1.1.2 + '@protobufjs/codegen': 2.0.4 + '@protobufjs/eventemitter': 1.1.0 + '@protobufjs/fetch': 1.1.0 + '@protobufjs/float': 1.0.2 + '@protobufjs/inquire': 1.1.0 + '@protobufjs/path': 1.1.2 + '@protobufjs/pool': 1.1.0 + '@protobufjs/utf8': 1.1.0 + '@types/node': 22.13.11 + long: 5.3.2 + punycode@2.3.1: {} quansync@0.2.11: {} @@ -6174,6 +9480,29 @@ snapshots: queue-microtask@1.2.3: {} + quote-unquote@1.0.0: {} + + railroad-diagrams@1.0.0: {} + + randexp@0.4.6: + dependencies: + discontinuous-range: 1.0.0 + ret: 0.1.15 + + range-parser@1.2.0: {} + + rc@1.2.8: + dependencies: + deep-extend: 0.6.0 + ini: 1.3.8 + minimist: 1.2.8 + strip-json-comments: 2.0.1 + + react-dom@19.1.1(react@19.1.1): + dependencies: + react: 19.1.1 + scheduler: 0.26.0 + react-dom@19.2.1(react@19.2.4): dependencies: react: 19.2.4 @@ -6188,8 +9517,15 @@ snapshots: dependencies: react: 19.2.4 + react-is@16.13.1: {} + react-is@17.0.2: {} + react-reconciler@0.32.0(react@19.1.1): + dependencies: + react: 19.1.1 + scheduler: 0.26.0 + react-refresh@0.18.0: {} react-router@7.13.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4): @@ -6200,6 +9536,8 @@ snapshots: optionalDependencies: react-dom: 19.2.4(react@19.2.4) + react@19.1.1: {} + react@19.2.4: {} read-yaml-file@1.1.0: @@ -6209,15 +9547,41 @@ snapshots: pify: 4.0.1 strip-bom: 3.0.0 + readable-stream@3.6.2: + dependencies: + inherits: 2.0.4 + string_decoder: 1.3.0 + util-deprecate: 1.0.2 + readdirp@4.1.2: {} + readdirp@5.0.0: {} + + registry-auth-token@3.3.2: + dependencies: + rc: 1.2.8 + safe-buffer: 5.2.1 + + registry-url@3.1.0: + dependencies: + rc: 1.2.8 + require-directory@2.1.1: optional: true require-from-string@2.0.2: {} + requirejs-config-file@4.0.0: + dependencies: + esprima: 4.0.1 + stringify-object: 3.3.0 + + requirejs@2.3.8: {} + reselect@5.1.1: {} + resolve-dependency-path@4.0.1: {} + resolve-from@5.0.0: {} resolve-pkg-maps@1.0.0: {} @@ -6234,12 +9598,29 @@ snapshots: path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 + restore-cursor@3.1.0: + dependencies: + onetime: 5.1.2 + signal-exit: 3.0.7 + + restore-cursor@4.0.0: + dependencies: + onetime: 5.1.2 + signal-exit: 3.0.7 + + restore-cursor@5.1.0: + dependencies: + onetime: 7.0.0 + signal-exit: 4.1.0 + + ret@0.1.15: {} + rettime@0.7.0: optional: true reusify@1.1.0: {} - rolldown-plugin-dts@0.23.2(rolldown@1.0.0-rc.12(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0))(typescript@5.9.3): + rolldown-plugin-dts@0.23.2(rolldown@1.0.0-rc.12)(typescript@5.9.3): dependencies: '@babel/generator': 8.0.0-rc.3 '@babel/helper-validator-identifier': 8.0.0-rc.3 @@ -6251,13 +9632,13 @@ snapshots: get-tsconfig: 4.13.7 obug: 2.1.1 picomatch: 4.0.4 - rolldown: 1.0.0-rc.12(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0) + rolldown: 1.0.0-rc.12 optionalDependencies: typescript: 5.9.3 transitivePeerDependencies: - oxc-resolver - rolldown@1.0.0-rc.12(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0): + rolldown@1.0.0-rc.12: dependencies: '@oxc-project/types': 0.122.0 '@rolldown/pluginutils': 1.0.0-rc.12 @@ -6274,12 +9655,9 @@ snapshots: '@rolldown/binding-linux-x64-gnu': 1.0.0-rc.12 '@rolldown/binding-linux-x64-musl': 1.0.0-rc.12 '@rolldown/binding-openharmony-arm64': 1.0.0-rc.12 - '@rolldown/binding-wasm32-wasi': 1.0.0-rc.12(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0) + '@rolldown/binding-wasm32-wasi': 1.0.0-rc.12 '@rolldown/binding-win32-arm64-msvc': 1.0.0-rc.12 '@rolldown/binding-win32-x64-msvc': 1.0.0-rc.12 - transitivePeerDependencies: - - '@emnapi/core' - - '@emnapi/runtime' rollup@4.57.0: dependencies: @@ -6346,17 +9724,38 @@ snapshots: rrweb-cssom@0.8.0: optional: true + run-applescript@7.1.0: {} + + run-async@3.0.0: {} + run-parallel@1.2.0: dependencies: queue-microtask: 1.2.3 + rxjs@7.8.2: + dependencies: + tslib: 2.8.1 + + safe-buffer@5.2.1: {} + safer-buffer@2.1.2: {} + sass-lookup@6.1.1: + dependencies: + commander: 12.1.0 + enhanced-resolve: 5.20.1 + saxes@6.0.0: dependencies: xmlchars: 2.2.0 optional: true + scheduler@0.23.2: + dependencies: + loose-envify: 1.4.0 + + scheduler@0.26.0: {} + scheduler@0.27.0: {} semver@6.3.1: {} @@ -6370,6 +9769,32 @@ snapshots: semver@7.7.4: {} + serve-handler@6.1.7: + dependencies: + bytes: 3.0.0 + content-disposition: 0.5.2 + mime-types: 2.1.18 + minimatch: 3.1.5 + path-is-inside: 1.0.2 + path-to-regexp: 3.3.0 + range-parser: 1.2.0 + + serve@14.2.6: + dependencies: + '@zeit/schemas': 2.36.0 + ajv: 8.18.0 + arg: 5.0.2 + boxen: 7.0.0 + chalk: 5.0.1 + chalk-template: 0.4.0 + clipboardy: 3.0.0 + compression: 1.8.1 + is-port-reachable: 4.0.0 + serve-handler: 6.1.7 + update-check: 1.5.4 + transitivePeerDependencies: + - supports-color + set-cookie-parser@2.7.2: {} sharp@0.34.5: @@ -6412,10 +9837,30 @@ snapshots: siginfo@2.0.0: {} + signal-exit@3.0.7: {} + signal-exit@4.1.0: {} + sisteransi@1.0.5: {} + slash@3.0.0: {} + slice-ansi@4.0.0: + dependencies: + ansi-styles: 4.3.0 + astral-regex: 2.0.0 + is-fullwidth-code-point: 3.0.0 + + slice-ansi@5.0.0: + dependencies: + ansi-styles: 6.2.3 + is-fullwidth-code-point: 4.0.0 + + slice-ansi@7.1.2: + dependencies: + ansi-styles: 6.2.3 + is-fullwidth-code-point: 5.1.0 + sonner@2.0.7(react-dom@19.2.4(react@19.2.4))(react@19.2.4): dependencies: react: 19.2.4 @@ -6434,6 +9879,10 @@ snapshots: sprintf-js@1.0.3: {} + stack-utils@2.0.6: + dependencies: + escape-string-regexp: 2.0.0 + stackback@0.0.2: {} statuses@2.0.2: @@ -6441,6 +9890,12 @@ snapshots: std-env@4.0.0: {} + stdin-discarder@0.3.1: {} + + stream-to-array@2.3.0: + dependencies: + any-promise: 1.3.0 + strict-event-emitter@0.5.1: optional: true @@ -6451,14 +9906,48 @@ snapshots: emoji-regex: 8.0.0 is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.1 - optional: true + + string-width@5.1.2: + dependencies: + eastasianwidth: 0.2.0 + emoji-regex: 9.2.2 + strip-ansi: 7.2.0 + + string-width@7.2.0: + dependencies: + emoji-regex: 10.6.0 + get-east-asian-width: 1.5.0 + strip-ansi: 7.2.0 + + string-width@8.2.0: + dependencies: + get-east-asian-width: 1.5.0 + strip-ansi: 7.2.0 + + string_decoder@1.3.0: + dependencies: + safe-buffer: 5.2.1 + + stringify-object@3.3.0: + dependencies: + get-own-enumerable-property-symbols: 3.0.2 + is-obj: 1.0.1 + is-regexp: 1.0.0 strip-ansi@6.0.1: dependencies: ansi-regex: 5.0.1 + strip-ansi@7.2.0: + dependencies: + ansi-regex: 6.2.2 + strip-bom@3.0.0: {} + strip-final-newline@2.0.0: {} + + strip-json-comments@2.0.1: {} + strip-json-comments@3.1.1: {} styled-jsx@5.1.6(react@19.2.4): @@ -6466,6 +9955,10 @@ snapshots: client-only: 0.0.1 react: 19.2.4 + stylus-lookup@6.1.0: + dependencies: + commander: 12.1.0 + sucrase@3.35.1: dependencies: '@jridgewell/gen-mapping': 0.3.13 @@ -6476,6 +9969,10 @@ snapshots: tinyglobby: 0.2.15 ts-interface-checker: 0.1.13 + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 + supports-color@8.1.1: dependencies: has-flag: 4.0.0 @@ -6487,6 +9984,16 @@ snapshots: tabbable@6.4.0: {} + table@6.9.0: + dependencies: + ajv: 8.13.0 + lodash.truncate: 4.4.2 + slice-ansi: 4.0.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + tagged-tag@1.0.0: {} + tailwind-merge@3.5.0: {} tailwindcss@4.2.2: {} @@ -6505,6 +10012,8 @@ snapshots: tinybench@2.9.0: {} + tinycolor2@1.6.0: {} + tinyexec@0.3.2: {} tinyexec@1.0.4: {} @@ -6514,6 +10023,11 @@ snapshots: fdir: 6.5.0(picomatch@4.0.3) picomatch: 4.0.3 + tinygradient@1.1.5: + dependencies: + '@types/tinycolor2': 1.4.6 + tinycolor2: 1.6.0 + tinypool@2.1.0: {} tinyrainbow@3.1.0: {} @@ -6542,6 +10056,19 @@ snapshots: tree-kill@1.2.2: {} + ts-api-utils@2.5.0(typescript@5.9.3): + dependencies: + typescript: 5.9.3 + + ts-cron-validator@1.1.5: {} + + ts-graphviz@2.1.6: + dependencies: + '@ts-graphviz/adapter': 2.0.6 + '@ts-graphviz/ast': 2.0.7 + '@ts-graphviz/common': 2.1.5 + '@ts-graphviz/core': 2.0.7 + ts-interface-checker@0.1.13: {} ts-morph@27.0.2: @@ -6553,7 +10080,13 @@ snapshots: optionalDependencies: typescript: 5.9.3 - tsdown@0.21.7(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0)(typescript@5.9.3): + tsconfig-paths@4.2.0: + dependencies: + json5: 2.2.3 + minimist: 1.2.8 + strip-bom: 3.0.0 + + tsdown@0.21.7(typescript@5.9.3): dependencies: ansis: 4.2.0 cac: 7.0.0 @@ -6563,19 +10096,17 @@ snapshots: import-without-cache: 0.2.5 obug: 2.1.1 picomatch: 4.0.4 - rolldown: 1.0.0-rc.12(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0) - rolldown-plugin-dts: 0.23.2(rolldown@1.0.0-rc.12(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0))(typescript@5.9.3) + rolldown: 1.0.0-rc.12 + rolldown-plugin-dts: 0.23.2(rolldown@1.0.0-rc.12)(typescript@5.9.3) semver: 7.7.4 tinyexec: 1.0.4 tinyglobby: 0.2.15 tree-kill: 1.2.2 unconfig-core: 7.5.0 - unrun: 0.2.34(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0) + unrun: 0.2.34 optionalDependencies: typescript: 5.9.3 transitivePeerDependencies: - - '@emnapi/core' - - '@emnapi/runtime' - '@ts-macro/tsc' - '@typescript/native-preview' - oxc-resolver @@ -6584,7 +10115,7 @@ snapshots: tslib@2.8.1: {} - tsup@8.5.1(@microsoft/api-extractor@7.55.2(@types/node@25.5.0))(jiti@2.6.1)(postcss@8.5.8)(typescript@5.9.3)(yaml@2.7.0): + tsup@8.5.1(@microsoft/api-extractor@7.55.2(@types/node@25.5.0))(@swc/core@1.12.11)(jiti@2.6.1)(postcss@8.5.8)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.7.0): dependencies: bundle-require: 5.1.0(esbuild@0.27.4) cac: 6.7.14 @@ -6595,7 +10126,7 @@ snapshots: fix-dts-default-cjs-exports: 1.0.1 joycon: 3.1.1 picocolors: 1.1.1 - postcss-load-config: 6.0.1(jiti@2.6.1)(postcss@8.5.8)(yaml@2.7.0) + postcss-load-config: 6.0.1(jiti@2.6.1)(postcss@8.5.8)(tsx@4.21.0)(yaml@2.7.0) resolve-from: 5.0.0 rollup: 4.60.0 source-map: 0.7.6 @@ -6605,6 +10136,7 @@ snapshots: tree-kill: 1.2.2 optionalDependencies: '@microsoft/api-extractor': 7.55.2(@types/node@25.5.0) + '@swc/core': 1.12.11 postcss: 8.5.8 typescript: 5.9.3 transitivePeerDependencies: @@ -6613,19 +10145,33 @@ snapshots: - tsx - yaml - turbo@2.8.21: + tsx@4.21.0: + dependencies: + esbuild: 0.27.4 + get-tsconfig: 4.13.6 + optionalDependencies: + fsevents: 2.3.3 + + turbo@2.9.1: optionalDependencies: - '@turbo/darwin-64': 2.8.21 - '@turbo/darwin-arm64': 2.8.21 - '@turbo/linux-64': 2.8.21 - '@turbo/linux-arm64': 2.8.21 - '@turbo/windows-64': 2.8.21 - '@turbo/windows-arm64': 2.8.21 + '@turbo/darwin-64': 2.9.1 + '@turbo/darwin-arm64': 2.9.1 + '@turbo/linux-64': 2.9.1 + '@turbo/linux-arm64': 2.9.1 + '@turbo/windows-64': 2.9.1 + '@turbo/windows-arm64': 2.9.1 tw-animate-css@1.4.0: {} - type-fest@4.41.0: - optional: true + type-fest@0.21.3: {} + + type-fest@2.19.0: {} + + type-fest@4.41.0: {} + + type-fest@5.5.0: + dependencies: + tagged-tag: 1.0.0 typescript@5.8.2: {} @@ -6640,18 +10186,17 @@ snapshots: '@quansync/fs': 1.0.0 quansync: 1.0.0 + undici-types@6.20.0: {} + undici-types@7.18.2: {} universalify@0.1.2: {} universalify@2.0.1: {} - unrun@0.2.34(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0): + unrun@0.2.34: dependencies: - rolldown: 1.0.0-rc.12(@emnapi/core@1.9.0)(@emnapi/runtime@1.9.0) - transitivePeerDependencies: - - '@emnapi/core' - - '@emnapi/runtime' + rolldown: 1.0.0-rc.12 update-browserslist-db@1.2.3(browserslist@4.28.1): dependencies: @@ -6659,6 +10204,11 @@ snapshots: escalade: 3.2.0 picocolors: 1.1.1 + update-check@1.5.4: + dependencies: + registry-auth-token: 3.3.2 + registry-url: 3.1.0 + uri-js@4.4.1: dependencies: punycode: 2.3.1 @@ -6667,7 +10217,15 @@ snapshots: dependencies: react: 19.2.4 - vite-plugin-dts@4.5.4(@types/node@25.5.0)(rollup@4.60.0)(typescript@5.9.3)(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.7.0)): + util-deprecate@1.0.2: {} + + valibot@1.1.0(typescript@5.9.3): + optionalDependencies: + typescript: 5.9.3 + + vary@1.1.2: {} + + vite-plugin-dts@4.5.4(@types/node@25.5.0)(rollup@4.60.0)(typescript@5.9.3)(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.7.0)): dependencies: '@microsoft/api-extractor': 7.55.2(@types/node@25.5.0) '@rollup/pluginutils': 5.3.0(rollup@4.60.0) @@ -6680,27 +10238,27 @@ snapshots: magic-string: 0.30.21 typescript: 5.9.3 optionalDependencies: - vite: 7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.7.0) + vite: 7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.7.0) transitivePeerDependencies: - '@types/node' - rollup - supports-color - vite-plugin-externalize-deps@0.10.0(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.7.0)): + vite-plugin-externalize-deps@0.10.0(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.7.0)): dependencies: - vite: 7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.7.0) + vite: 7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.7.0) - vite-tsconfig-paths@6.1.1(typescript@5.9.3)(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.7.0)): + vite-tsconfig-paths@6.1.1(typescript@5.9.3)(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.7.0)): dependencies: debug: 4.4.3 globrex: 0.1.2 tsconfck: 3.1.6(typescript@5.9.3) - vite: 7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.7.0) + vite: 7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.7.0) transitivePeerDependencies: - supports-color - typescript - vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.7.0): + vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.7.0): dependencies: esbuild: 0.27.2 fdir: 6.5.0(picomatch@4.0.3) @@ -6713,12 +10271,13 @@ snapshots: fsevents: 2.3.3 jiti: 2.6.1 lightningcss: 1.32.0 + tsx: 4.21.0 yaml: 2.7.0 - vitest@4.1.0(@types/node@25.5.0)(happy-dom@20.6.2)(jsdom@27.0.0)(msw@2.11.2(@types/node@25.5.0)(typescript@5.9.3))(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.7.0)): + vitest@4.1.0(@opentelemetry/api@1.9.0)(@types/node@25.5.0)(happy-dom@20.6.2)(jsdom@27.0.0)(msw@2.11.2(@types/node@25.5.0)(typescript@5.9.3))(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.7.0)): dependencies: '@vitest/expect': 4.1.0 - '@vitest/mocker': 4.1.0(msw@2.11.2(@types/node@25.5.0)(typescript@5.9.3))(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.7.0)) + '@vitest/mocker': 4.1.0(msw@2.11.2(@types/node@25.5.0)(typescript@5.9.3))(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.7.0)) '@vitest/pretty-format': 4.1.0 '@vitest/runner': 4.1.0 '@vitest/snapshot': 4.1.0 @@ -6735,9 +10294,10 @@ snapshots: tinyexec: 1.0.4 tinyglobby: 0.2.15 tinyrainbow: 3.1.0 - vite: 7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.32.0)(yaml@2.7.0) + vite: 7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.7.0) why-is-node-running: 2.3.0 optionalDependencies: + '@opentelemetry/api': 1.9.0 '@types/node': 25.5.0 happy-dom: 20.6.2 jsdom: 27.0.0 @@ -6751,6 +10311,12 @@ snapshots: xml-name-validator: 5.0.0 optional: true + walkdir@0.4.1: {} + + wcwidth@1.0.1: + dependencies: + defaults: 1.0.4 + webidl-conversions@8.0.1: optional: true @@ -6782,12 +10348,21 @@ snapshots: siginfo: 2.0.0 stackback: 0.0.2 + widest-line@4.0.1: + dependencies: + string-width: 5.1.2 + + widest-line@5.0.0: + dependencies: + string-width: 7.2.0 + + wonka@6.3.6: {} + wrap-ansi@6.2.0: dependencies: ansi-styles: 4.3.0 string-width: 4.2.3 strip-ansi: 6.0.1 - optional: true wrap-ansi@7.0.0: dependencies: @@ -6796,10 +10371,28 @@ snapshots: strip-ansi: 6.0.1 optional: true + wrap-ansi@8.1.0: + dependencies: + ansi-styles: 6.2.3 + string-width: 5.1.2 + strip-ansi: 7.2.0 + + wrap-ansi@9.0.2: + dependencies: + ansi-styles: 6.2.3 + string-width: 7.2.0 + strip-ansi: 7.2.0 + ws@8.19.0: {} - ws@8.20.0: - optional: true + ws@8.20.0: {} + + wsl-utils@0.3.1: + dependencies: + is-wsl: 3.1.1 + powershell-utils: 0.1.0 + + xdg-basedir@5.1.0: {} xml-name-validator@5.0.0: optional: true @@ -6831,7 +10424,12 @@ snapshots: yargs-parser: 21.1.1 optional: true - yoctocolors-cjs@2.1.3: - optional: true + yocto-queue@1.2.2: {} + + yoctocolors-cjs@2.1.3: {} + + yoctocolors@2.1.2: {} + + yoga-layout@3.2.1: {} zod@4.3.6: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 36eb1955..258705bf 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -9,4 +9,7 @@ catalog: "@types/react": ^19 "@types/react-dom": ^19 "@vitejs/plugin-react": ^5.2.0 + tsdown: ^0.21.7 + typescript: ^5 vite: ^7.3.1 + vitest: ^4.1.0