diff --git a/CLAUDE.md b/CLAUDE.md
new file mode 100644
index 000000000..907fe7cd1
--- /dev/null
+++ b/CLAUDE.md
@@ -0,0 +1,125 @@
+# CLAUDE.md
+
+This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
+
+## Build & Development Commands
+
+```bash
+# Install dependencies
+pnpm install
+
+# Build all packages
+pnpm build
+
+# Build all packages (dev mode - faster, no optimizations)
+pnpm build:dev
+
+# Lint all packages (auto-fix enabled)
+pnpm lint
+
+# Clean build artifacts
+pnpm clean
+
+# Update dependencies interactively
+pnpm deps
+```
+
+### Per-Package Commands
+
+Navigate to any package directory (e.g., `cd pgpm/cli`) and run:
+
+```bash
+pnpm build # Build the package
+pnpm lint # Lint with auto-fix
+pnpm test # Run tests
+pnpm test:watch # Run tests in watch mode
+pnpm dev # Run in development mode (where available)
+```
+
+### Running a Single Test File
+
+```bash
+cd packages/cli
+pnpm test -- path/to/test.test.ts
+# or with pattern matching:
+pnpm test -- --testNamePattern="test name pattern"
+```
+
+## Project Architecture
+
+This is a **pnpm monorepo** using Lerna for versioning/publishing. The workspace is organized into domain-specific directories:
+
+### Core Package Groups
+
+| Directory | Purpose |
+|-----------|---------|
+| `pgpm/` | PostgreSQL Package Manager - CLI, core engine, types |
+| `graphql/` | GraphQL layer - server, codegen, React hooks, testing |
+| `graphile/` | PostGraphile plugins - filters, i18n, meta-schema, PostGIS |
+| `postgres/` | PostgreSQL utilities - introspection, testing, seeding, AST |
+| `packages/` | Shared utilities - CLI, ORM, query builder |
+| `uploads/` | File streaming - S3, ETags, content-type detection |
+| `jobs/` | Job scheduling and worker infrastructure |
+
+### Key Packages
+
+**pgpm (PostgreSQL Package Manager)**
+- `pgpm/cli` - Main CLI tool (`pgpm` command)
+- `pgpm/core` - Migration engine, dependency resolution, deployment
+
+**GraphQL Stack**
+- `graphql/server` - Express + PostGraphile API server
+- `graphql/codegen` - SDK generator (React Query hooks or Prisma-like ORM)
+- `graphql/query` - Fluent GraphQL query builder
+
+**Testing Infrastructure**
+- `postgres/pgsql-test` - Isolated PostgreSQL test environments with transaction rollback
+- `graphile/graphile-test` - GraphQL testing utilities
+
+### Testing Pattern
+
+Tests use `pgsql-test` for database testing with per-test transaction rollback:
+
+```typescript
+import { getConnections } from 'pgsql-test';
+
+let db, teardown;
+
+beforeAll(async () => {
+ ({ db, teardown } = await getConnections());
+});
+
+beforeEach(() => db.beforeEach());
+afterEach(() => db.afterEach());
+afterAll(() => teardown());
+
+test('example', async () => {
+ db.setContext({ role: 'authenticated', 'jwt.claims.user_id': '123' });
+ const result = await db.query('SELECT current_user_id()');
+ expect(result.rows[0].current_user_id).toBe('123');
+});
+```
+
+### Database Configuration
+
+Tests require PostgreSQL. Standard PG environment variables:
+- `PGHOST` (default: localhost)
+- `PGPORT` (default: 5432)
+- `PGUSER` (default: postgres)
+- `PGPASSWORD` (default: password)
+
+For S3/MinIO tests: `MINIO_ENDPOINT`, `AWS_ACCESS_KEY`, `AWS_SECRET_KEY`, `AWS_REGION`
+
+### Build System
+
+- Uses `makage` for TypeScript compilation (handles both CJS and ESM output)
+- Jest with ts-jest for testing
+- ESLint with TypeScript support
+- Each package has its own `tsconfig.json` extending root config
+
+### Code Conventions
+
+- TypeScript with `strict: true` (but `strictNullChecks: false`)
+- Target: ES2022, Module: CommonJS
+- Packages publish to npm from `dist/` directory
+- Workspace dependencies use `workspace:^` protocol
diff --git a/graphql/codegen/README.md b/graphql/codegen/README.md
index 95f5d54d1..d88cf7ad1 100644
--- a/graphql/codegen/README.md
+++ b/graphql/codegen/README.md
@@ -837,12 +837,12 @@ import { useCreateCarMutation, useCarsQuery } from './generated/hooks';
function CreateCarWithInvalidation() {
const queryClient = useQueryClient();
-
+
const createCar = useCreateCarMutation({
onSuccess: () => {
// Invalidate all car queries to refetch
queryClient.invalidateQueries({ queryKey: ['cars'] });
-
+
// Or invalidate specific queries
queryClient.invalidateQueries({ queryKey: ['cars', { first: 10 }] });
},
@@ -852,6 +852,151 @@ function CreateCarWithInvalidation() {
}
```
+### Centralized Query Keys
+
+The codegen generates a centralized query key factory following the [lukemorales query-key-factory](https://tanstack.com/query/docs/framework/react/community/lukemorales-query-key-factory) pattern. This provides type-safe cache management with autocomplete support.
+
+#### Generated Files
+
+| File | Purpose |
+|------|---------|
+| `query-keys.ts` | Query key factories for all entities |
+| `mutation-keys.ts` | Mutation key factories for tracking in-flight mutations |
+| `invalidation.ts` | Type-safe cache invalidation helpers |
+
+#### Using Query Keys
+
+```tsx
+import { userKeys, invalidate } from './generated/hooks';
+import { useQueryClient } from '@tanstack/react-query';
+
+// Query key structure
+userKeys.all // ['user']
+userKeys.lists() // ['user', 'list']
+userKeys.list({ first: 10 }) // ['user', 'list', { first: 10 }]
+userKeys.details() // ['user', 'detail']
+userKeys.detail('user-123') // ['user', 'detail', 'user-123']
+
+// Granular cache invalidation
+const queryClient = useQueryClient();
+
+// Invalidate ALL user queries
+queryClient.invalidateQueries({ queryKey: userKeys.all });
+
+// Invalidate only list queries
+queryClient.invalidateQueries({ queryKey: userKeys.lists() });
+
+// Invalidate a specific user
+queryClient.invalidateQueries({ queryKey: userKeys.detail(userId) });
+```
+
+#### Invalidation Helpers
+
+Type-safe invalidation utilities:
+
+```tsx
+import { invalidate, remove } from './generated/hooks';
+
+// Invalidate queries (triggers refetch)
+invalidate.user.all(queryClient);
+invalidate.user.lists(queryClient);
+invalidate.user.detail(queryClient, userId);
+
+// Remove from cache (for delete operations)
+remove.user(queryClient, userId);
+```
+
+#### Mutation Key Tracking
+
+Track in-flight mutations with `useIsMutating`:
+
+```tsx
+import { useIsMutating } from '@tanstack/react-query';
+import { userMutationKeys } from './generated/hooks';
+
+function UserList() {
+ // Check if any user mutations are in progress
+ const isMutating = useIsMutating({ mutationKey: userMutationKeys.all });
+
+ // Check if a specific user is being deleted
+ const isDeleting = useIsMutating({
+ mutationKey: userMutationKeys.delete(userId)
+ });
+
+ return (
+
+ {isMutating > 0 && }
+
+
+ );
+}
+```
+
+#### Optimistic Updates with Query Keys
+
+```tsx
+import { useCreateUserMutation, userKeys } from './generated/hooks';
+
+const createUser = useCreateUserMutation({
+ onMutate: async (newUser) => {
+ // Cancel outgoing refetches
+ await queryClient.cancelQueries({ queryKey: userKeys.lists() });
+
+ // Snapshot previous value
+ const previous = queryClient.getQueryData(userKeys.list());
+
+ // Optimistically update cache
+ queryClient.setQueryData(userKeys.list(), (old) => ({
+ ...old,
+ users: {
+ ...old.users,
+ nodes: [...old.users.nodes, { id: 'temp', ...newUser.input.user }]
+ },
+ }));
+
+ return { previous };
+ },
+ onError: (err, variables, context) => {
+ // Rollback on error
+ queryClient.setQueryData(userKeys.list(), context.previous);
+ },
+ onSettled: () => {
+ // Refetch after mutation
+ queryClient.invalidateQueries({ queryKey: userKeys.lists() });
+ },
+});
+```
+
+#### Configuration
+
+Query key generation is enabled by default. Configure in your config file:
+
+```typescript
+// graphql-sdk.config.ts
+export default defineConfig({
+ endpoint: 'https://api.example.com/graphql',
+
+ queryKeys: {
+ // Generate scope-aware keys (default: true)
+ generateScopedKeys: true,
+
+ // Generate mutation keys (default: true)
+ generateMutationKeys: true,
+
+ // Generate invalidation helpers (default: true)
+ generateCascadeHelpers: true,
+
+ // Define entity relationships for cascade invalidation
+ relationships: {
+ table: { parent: 'database', foreignKey: 'databaseId' },
+ field: { parent: 'table', foreignKey: 'tableId' },
+ },
+ },
+});
+```
+
+For detailed documentation on query key factory design and implementation, see [docs/QUERY-KEY-FACTORY.md](./docs/QUERY-KEY-FACTORY.md).
+
### Prefetching
```tsx
diff --git a/graphql/codegen/docs/QUERY-KEY-FACTORY.md b/graphql/codegen/docs/QUERY-KEY-FACTORY.md
new file mode 100644
index 000000000..390927bdf
--- /dev/null
+++ b/graphql/codegen/docs/QUERY-KEY-FACTORY.md
@@ -0,0 +1,420 @@
+# Query Key Factory Design Document
+
+This document describes the centralized query key factory feature for `@constructive-io/graphql-codegen`, following the [lukemorales query-key-factory](https://tanstack.com/query/docs/framework/react/community/lukemorales-query-key-factory) pattern.
+
+## Overview
+
+The query key factory provides:
+
+- **Centralized query keys** - Single source of truth for all React Query cache keys
+- **Type-safe key access** - Full TypeScript autocomplete support
+- **Hierarchical invalidation** - Invalidate all queries for an entity with one call
+- **Mutation key tracking** - Track in-flight mutations for optimistic updates
+- **Cache invalidation helpers** - Type-safe utilities for cache management
+
+## Generated Files
+
+When `queryKeys.generateScopedKeys` is enabled (default), the following files are generated:
+
+| File | Purpose |
+|------|---------|
+| `query-keys.ts` | Centralized query key factories for all entities |
+| `mutation-keys.ts` | Mutation key factories for tracking mutations |
+| `invalidation.ts` | Type-safe cache invalidation helpers |
+
+## Architecture
+
+### Query Key Structure
+
+Query keys follow a hierarchical pattern:
+
+```typescript
+// Entity key factory
+export const userKeys = {
+ all: ['user'] as const,
+ lists: () => [...userKeys.all, 'list'] as const,
+ list: (variables?: object) => [...userKeys.lists(), variables] as const,
+ details: () => [...userKeys.all, 'detail'] as const,
+ detail: (id: string | number) => [...userKeys.details(), id] as const,
+} as const;
+```
+
+This enables granular cache invalidation:
+
+```typescript
+// Invalidate ALL user queries
+queryClient.invalidateQueries({ queryKey: userKeys.all });
+
+// Invalidate only user list queries
+queryClient.invalidateQueries({ queryKey: userKeys.lists() });
+
+// Invalidate a specific user
+queryClient.invalidateQueries({ queryKey: userKeys.detail(userId) });
+```
+
+### Mutation Key Structure
+
+Mutation keys track in-flight mutations:
+
+```typescript
+export const userMutationKeys = {
+ all: ['mutation', 'user'] as const,
+ create: () => ['mutation', 'user', 'create'] as const,
+ update: (id: string | number) => ['mutation', 'user', 'update', id] as const,
+ delete: (id: string | number) => ['mutation', 'user', 'delete', id] as const,
+} as const;
+```
+
+Usage with `useIsMutating`:
+
+```typescript
+import { useIsMutating } from '@tanstack/react-query';
+
+// Check if any user mutations are in progress
+const isMutating = useIsMutating({ mutationKey: userMutationKeys.all });
+
+// Check if a specific user is being updated
+const isUpdating = useIsMutating({ mutationKey: userMutationKeys.update(userId) });
+```
+
+### Invalidation Helpers
+
+Type-safe cache invalidation utilities:
+
+```typescript
+export const invalidate = {
+ user: {
+ all: (queryClient: QueryClient) =>
+ queryClient.invalidateQueries({ queryKey: userKeys.all }),
+ lists: (queryClient: QueryClient) =>
+ queryClient.invalidateQueries({ queryKey: userKeys.lists() }),
+ detail: (queryClient: QueryClient, id: string | number) =>
+ queryClient.invalidateQueries({ queryKey: userKeys.detail(id) }),
+ },
+};
+
+// Usage
+invalidate.user.all(queryClient);
+invalidate.user.detail(queryClient, userId);
+```
+
+## Configuration
+
+### Config Options
+
+```typescript
+// graphql-codegen.config.ts
+export default defineConfig({
+ queryKeys: {
+ // Key structure style (default: 'hierarchical')
+ style: 'hierarchical',
+
+ // Entity relationships for cascade invalidation
+ relationships: {
+ table: { parent: 'database', foreignKey: 'databaseId' },
+ field: { parent: 'table', foreignKey: 'tableId' },
+ },
+
+ // Generate scope-aware keys (default: true)
+ generateScopedKeys: true,
+
+ // Generate cascade invalidation helpers (default: true)
+ generateCascadeHelpers: true,
+
+ // Generate mutation keys (default: true)
+ generateMutationKeys: true,
+ },
+});
+```
+
+### Relationship Configuration
+
+For parent-child entity relationships, configure the `relationships` option to enable scoped queries and cascade invalidation:
+
+```typescript
+relationships: {
+ // Child entity -> parent relationship
+ database: { parent: 'organization', foreignKey: 'organizationId' },
+ table: { parent: 'database', foreignKey: 'databaseId' },
+ field: {
+ parent: 'table',
+ foreignKey: 'tableId',
+ ancestors: ['database', 'organization'], // For deep cascade
+ },
+}
+```
+
+This generates scoped key factories:
+
+```typescript
+export const tableKeys = {
+ all: ['table'] as const,
+
+ // Scoped by parent
+ byDatabase: (databaseId: string) => ['table', { databaseId }] as const,
+
+ // Scope-aware helpers
+ lists: (scope?: TableScope) => [...tableKeys.scoped(scope), 'list'] as const,
+ detail: (id: string | number, scope?: TableScope) =>
+ [...tableKeys.details(scope), id] as const,
+} as const;
+```
+
+## Hook Integration
+
+Generated hooks automatically use centralized keys:
+
+```typescript
+// Generated useUsersQuery hook
+export function useUsersQuery(variables?: UsersQueryVariables, options?: ...) {
+ return useQuery({
+ queryKey: userKeys.list(variables), // Uses centralized key
+ queryFn: () => execute(...),
+ ...options,
+ });
+}
+
+// Generated useCreateUserMutation hook
+export function useCreateUserMutation(options?: ...) {
+ const queryClient = useQueryClient();
+
+ return useMutation({
+ mutationKey: userMutationKeys.all, // Uses centralized key
+ mutationFn: (variables) => execute(...),
+ onSuccess: () => {
+ // Auto-invalidates list queries
+ queryClient.invalidateQueries({ queryKey: userKeys.lists() });
+ },
+ ...options,
+ });
+}
+```
+
+## Type Design Decisions
+
+### Variables Type: `object` vs `Record`
+
+Query key functions use `object` for variables:
+
+```typescript
+list: (variables?: object) => [...userKeys.lists(), variables] as const,
+```
+
+**Why not `Record`?**
+
+TypeScript interfaces don't satisfy `Record` because they lack an index signature:
+
+```typescript
+interface UserFilter { name?: string; }
+
+// Error: Index signature missing
+const fn = (vars: Record) => {};
+fn({ name: 'test' } as UserFilter); // Type error!
+
+// Works with 'object'
+const fn2 = (vars: object) => {};
+fn2({ name: 'test' } as UserFilter); // OK
+```
+
+### ID Type: `string | number`
+
+Detail key functions accept both string and number IDs:
+
+```typescript
+detail: (id: string | number) => [...userKeys.details(), id] as const,
+```
+
+This supports both UUID primary keys (`string`) and serial/integer primary keys (`number`).
+
+### Mutation Keys: Static vs Dynamic
+
+Mutation hooks use static keys (`mutationKeys.all`) rather than per-mutation keys:
+
+```typescript
+// Generated hook uses static key
+return useMutation({
+ mutationKey: userMutationKeys.all, // Not: userMutationKeys.create()
+ mutationFn: (variables) => execute(...),
+});
+```
+
+**Why?**
+
+React Query's `mutationKey` is evaluated when `useMutation` is called, not per-mutation. The `variables` parameter is only available inside `mutationFn`, so dynamic keys like `mutationKeys.delete(variables.id)` would fail.
+
+Users who need per-mutation tracking can:
+1. Use `onMutate` callbacks to track specific mutations
+2. Override `mutationKey` in options when calling the hook
+
+## Scalar Type Handling
+
+### Why Hardcoded Mappings?
+
+GraphQL introspection only provides scalar **names**, not TypeScript type mappings:
+
+```json
+{
+ "kind": "SCALAR",
+ "name": "UUID",
+ "description": "A universally unique identifier as defined by RFC 4122."
+}
+```
+
+There's no field indicating `UUID` → `string` or `JSON` → `unknown`. The GraphQL spec leaves scalar implementation to the server.
+
+### Current Approach
+
+Scalars are mapped in `src/cli/codegen/scalars.ts`:
+
+```typescript
+export const SCALAR_TS_MAP: Record = {
+ // Standard GraphQL
+ String: 'string',
+ Int: 'number',
+ Float: 'number',
+ Boolean: 'boolean',
+ ID: 'string',
+
+ // PostGraphile
+ UUID: 'string',
+ Datetime: 'string',
+ JSON: 'unknown',
+ BigInt: 'string',
+
+ // Geometry (PostGIS)
+ GeoJSON: 'unknown',
+ GeometryPoint: 'unknown',
+
+ // ... more scalars
+};
+```
+
+Unknown scalars default to `unknown` (type-safe fallback).
+
+### Adding Custom Scalars
+
+To add a new scalar, update `SCALAR_TS_MAP` in `scalars.ts`:
+
+```typescript
+// Add custom scalar mapping
+MyCustomScalar: 'string',
+GeometryPolygon: '{ type: string; coordinates: number[][] }',
+```
+
+## File Structure
+
+```
+generated/
+├── index.ts # Main barrel export
+├── client.ts # GraphQL client with configure() and execute()
+├── types.ts # Entity interfaces and filter types
+├── schema-types.ts # Input/payload/enum types from schema
+├── query-keys.ts # Centralized query key factories
+├── mutation-keys.ts # Mutation key factories
+├── invalidation.ts # Cache invalidation helpers
+├── queries/
+│ ├── index.ts # Query hooks barrel
+│ ├── useUsersQuery.ts # List query hook
+│ ├── useUserQuery.ts # Single item query hook
+│ └── ...
+└── mutations/
+ ├── index.ts # Mutation hooks barrel
+ ├── useCreateUserMutation.ts
+ ├── useUpdateUserMutation.ts
+ ├── useDeleteUserMutation.ts
+ └── ...
+```
+
+## Usage Examples
+
+### Basic Query with Cache Key
+
+```typescript
+import { useUsersQuery, userKeys } from './generated';
+
+function UserList() {
+ const { data } = useUsersQuery({ first: 10 });
+
+ // Manual cache access using same key
+ const cachedData = queryClient.getQueryData(userKeys.list({ first: 10 }));
+}
+```
+
+### Prefetching
+
+```typescript
+import { prefetchUsersQuery, userKeys } from './generated';
+
+// In a route loader or server component
+await prefetchUsersQuery(queryClient, { first: 10 });
+```
+
+### Optimistic Updates
+
+```typescript
+import { useCreateUserMutation, userKeys } from './generated';
+
+const mutation = useCreateUserMutation({
+ onMutate: async (newUser) => {
+ // Cancel outgoing refetches
+ await queryClient.cancelQueries({ queryKey: userKeys.lists() });
+
+ // Snapshot previous value
+ const previous = queryClient.getQueryData(userKeys.list());
+
+ // Optimistically update
+ queryClient.setQueryData(userKeys.list(), (old) => ({
+ ...old,
+ users: { ...old.users, nodes: [...old.users.nodes, newUser] },
+ }));
+
+ return { previous };
+ },
+ onError: (err, variables, context) => {
+ // Rollback on error
+ queryClient.setQueryData(userKeys.list(), context.previous);
+ },
+});
+```
+
+### Cascade Invalidation (with relationships configured)
+
+```typescript
+import { invalidate, tableKeys } from './generated';
+
+// When a database is updated, invalidate all its tables
+function onDatabaseUpdate(databaseId: string) {
+ // Invalidate tables scoped to this database
+ queryClient.invalidateQueries({
+ queryKey: tableKeys.byDatabase(databaseId)
+ });
+}
+```
+
+## Implementation Files
+
+| Source File | Purpose |
+|-------------|---------|
+| `src/cli/codegen/query-keys.ts` | Query key factory generator |
+| `src/cli/codegen/mutation-keys.ts` | Mutation key factory generator |
+| `src/cli/codegen/invalidation.ts` | Invalidation helpers generator |
+| `src/cli/codegen/queries.ts` | Query hook generator (uses centralized keys) |
+| `src/cli/codegen/mutations.ts` | Mutation hook generator (uses centralized keys) |
+| `src/cli/codegen/scalars.ts` | Scalar type mappings |
+| `src/types/config.ts` | Configuration types (`QueryKeyConfig`) |
+
+## Testing
+
+Run the test suite:
+
+```bash
+pnpm test
+```
+
+Generate example SDK and verify TypeScript:
+
+```bash
+pnpm example:codegen:sdk
+cd examples/output/generated-sdk
+npx tsc --noEmit
+```
diff --git a/graphql/codegen/examples/react-query-sdk.ts b/graphql/codegen/examples/react-query-sdk.ts
index 48c66780d..e13a7ee07 100644
--- a/graphql/codegen/examples/react-query-sdk.ts
+++ b/graphql/codegen/examples/react-query-sdk.ts
@@ -183,7 +183,7 @@ async function main() {
TablesQueryResult,
TablesQueryVariables
>(tablesQueryDocument, {
- first: 5,
+ first: 10,
filter: tableFilter,
orderBy: ['NAME_ASC'],
});
diff --git a/graphql/codegen/package.json b/graphql/codegen/package.json
index 39ee1421e..ce147cc23 100644
--- a/graphql/codegen/package.json
+++ b/graphql/codegen/package.json
@@ -49,14 +49,15 @@
"example:orm": "tsx examples/orm-sdk.ts"
},
"dependencies": {
+ "@babel/generator": "^7.28.5",
+ "@babel/types": "^7.28.5",
"ajv": "^8.17.1",
"commander": "^12.1.0",
"gql-ast": "workspace:^",
"graphql": "15.10.1",
"inflekt": "^0.2.0",
"jiti": "^2.6.1",
- "prettier": "^3.7.4",
- "ts-morph": "^27.0.2"
+ "prettier": "^3.7.4"
},
"peerDependencies": {
"@tanstack/react-query": "^5.0.0",
@@ -72,6 +73,7 @@
},
"devDependencies": {
"@tanstack/react-query": "^5.90.16",
+ "@types/babel__generator": "^7.27.0",
"@types/jest": "^29.5.14",
"@types/node": "^20.19.27",
"@types/react": "^19.2.7",
diff --git a/graphql/codegen/src/__tests__/codegen/__snapshots__/input-types-generator.test.ts.snap b/graphql/codegen/src/__tests__/codegen/__snapshots__/input-types-generator.test.ts.snap
index 4f4fac804..f0d630e95 100644
--- a/graphql/codegen/src/__tests__/codegen/__snapshots__/input-types-generator.test.ts.snap
+++ b/graphql/codegen/src/__tests__/codegen/__snapshots__/input-types-generator.test.ts.snap
@@ -2,15 +2,11 @@
exports[`generateInputTypesFile generates complete types file for multiple tables with relations 1`] = `
"/**
-* GraphQL types for ORM client
-* @generated by @constructive-io/graphql-codegen
-* DO NOT EDIT - changes will be overwritten
-*/
-
-// ============================================================================
-// Scalar Filter Types
-// ============================================================================
-
+ * GraphQL types for ORM client
+ * @generated by @constructive-io/graphql-codegen
+ * DO NOT EDIT - changes will be overwritten
+ */
+// ============ Scalar Filter Types ============
export interface StringFilter {
isNull?: boolean;
equalTo?: string;
@@ -40,7 +36,6 @@ export interface StringFilter {
likeInsensitive?: string;
notLikeInsensitive?: string;
}
-
export interface IntFilter {
isNull?: boolean;
equalTo?: number;
@@ -54,7 +49,6 @@ export interface IntFilter {
greaterThan?: number;
greaterThanOrEqualTo?: number;
}
-
export interface FloatFilter {
isNull?: boolean;
equalTo?: number;
@@ -68,13 +62,11 @@ export interface FloatFilter {
greaterThan?: number;
greaterThanOrEqualTo?: number;
}
-
export interface BooleanFilter {
isNull?: boolean;
equalTo?: boolean;
notEqualTo?: boolean;
}
-
export interface UUIDFilter {
isNull?: boolean;
equalTo?: string;
@@ -84,7 +76,6 @@ export interface UUIDFilter {
in?: string[];
notIn?: string[];
}
-
export interface DatetimeFilter {
isNull?: boolean;
equalTo?: string;
@@ -98,7 +89,6 @@ export interface DatetimeFilter {
greaterThan?: string;
greaterThanOrEqualTo?: string;
}
-
export interface DateFilter {
isNull?: boolean;
equalTo?: string;
@@ -112,7 +102,6 @@ export interface DateFilter {
greaterThan?: string;
greaterThanOrEqualTo?: string;
}
-
export interface JSONFilter {
isNull?: boolean;
equalTo?: Record;
@@ -125,7 +114,6 @@ export interface JSONFilter {
containsAllKeys?: string[];
containsAnyKeys?: string[];
}
-
export interface BigIntFilter {
isNull?: boolean;
equalTo?: string;
@@ -139,7 +127,6 @@ export interface BigIntFilter {
greaterThan?: string;
greaterThanOrEqualTo?: string;
}
-
export interface BigFloatFilter {
isNull?: boolean;
equalTo?: string;
@@ -153,13 +140,11 @@ export interface BigFloatFilter {
greaterThan?: string;
greaterThanOrEqualTo?: string;
}
-
export interface BitStringFilter {
isNull?: boolean;
equalTo?: string;
notEqualTo?: string;
}
-
export interface InternetAddressFilter {
isNull?: boolean;
equalTo?: string;
@@ -178,15 +163,10 @@ export interface InternetAddressFilter {
containedByOrEqualTo?: string;
containsOrContainedBy?: string;
}
-
export interface FullTextFilter {
matches?: string;
}
-
-// ============================================================================
-// Entity Types
-// ============================================================================
-
+// ============ Entity Types ============
export interface User {
id: string;
email?: string | null;
@@ -196,7 +176,6 @@ export interface User {
createdAt?: string | null;
metadata?: Record | null;
}
-
export interface Post {
id: string;
title?: string | null;
@@ -205,7 +184,6 @@ export interface Post {
publishedAt?: string | null;
tags?: string | null;
}
-
export interface Comment {
id: string;
body?: string | null;
@@ -213,57 +191,36 @@ export interface Comment {
authorId?: string | null;
createdAt?: string | null;
}
-
-// ============================================================================
-// Relation Helper Types
-// ============================================================================
-
+// ============ Relation Helper Types ============
export interface ConnectionResult {
nodes: T[];
totalCount: number;
pageInfo: PageInfo;
}
-
export interface PageInfo {
hasNextPage: boolean;
hasPreviousPage: boolean;
startCursor?: string | null;
endCursor?: string | null;
}
-
-// ============================================================================
-// Entity Relation Types
-// ============================================================================
-
+// ============ Entity Relation Types ============
export interface UserRelations {
posts?: ConnectionResult;
comments?: ConnectionResult;
}
-
export interface PostRelations {
author?: User | null;
comments?: ConnectionResult;
}
-
export interface CommentRelations {
post?: Post | null;
author?: User | null;
}
-
-// ============================================================================
-// Entity Types With Relations
-// ============================================================================
-
+// ============ Entity Types With Relations ============
export type UserWithRelations = User & UserRelations;
-
export type PostWithRelations = Post & PostRelations;
-
export type CommentWithRelations = Comment & CommentRelations;
-
-// ============================================================================
-// Entity Select Types
-// ============================================================================
-
+// ============ Entity Select Types ============
export type UserSelect = {
id?: boolean;
email?: boolean;
@@ -273,19 +230,18 @@ export type UserSelect = {
createdAt?: boolean;
metadata?: boolean;
posts?: boolean | {
- select?: PostSelect;
- first?: number;
- filter?: PostFilter;
- orderBy?: PostsOrderBy[];
+ select?: PostSelect;
+ first?: number;
+ filter?: PostFilter;
+ orderBy?: PostsOrderBy[];
};
comments?: boolean | {
- select?: CommentSelect;
- first?: number;
- filter?: CommentFilter;
- orderBy?: CommentsOrderBy[];
- };
+ select?: CommentSelect;
+ first?: number;
+ filter?: CommentFilter;
+ orderBy?: CommentsOrderBy[];
};
-
+};
export type PostSelect = {
id?: boolean;
title?: boolean;
@@ -293,29 +249,30 @@ export type PostSelect = {
authorId?: boolean;
publishedAt?: boolean;
tags?: boolean;
- author?: boolean | { select?: UserSelect };
- comments?: boolean | {
- select?: CommentSelect;
- first?: number;
- filter?: CommentFilter;
- orderBy?: CommentsOrderBy[];
+ author?: boolean | {
+ select?: UserSelect;
};
+ comments?: boolean | {
+ select?: CommentSelect;
+ first?: number;
+ filter?: CommentFilter;
+ orderBy?: CommentsOrderBy[];
};
-
+};
export type CommentSelect = {
id?: boolean;
body?: boolean;
postId?: boolean;
authorId?: boolean;
createdAt?: boolean;
- post?: boolean | { select?: PostSelect };
- author?: boolean | { select?: UserSelect };
+ post?: boolean | {
+ select?: PostSelect;
};
-
-// ============================================================================
-// Table Filter Types
-// ============================================================================
-
+ author?: boolean | {
+ select?: UserSelect;
+ };
+};
+// ============ Table Filter Types ============
export interface UserFilter {
id?: UUIDFilter;
email?: StringFilter;
@@ -328,7 +285,6 @@ export interface UserFilter {
or?: UserFilter[];
not?: UserFilter;
}
-
export interface PostFilter {
id?: UUIDFilter;
title?: StringFilter;
@@ -340,7 +296,6 @@ export interface PostFilter {
or?: PostFilter[];
not?: PostFilter;
}
-
export interface CommentFilter {
id?: UUIDFilter;
body?: StringFilter;
@@ -351,11 +306,7 @@ export interface CommentFilter {
or?: CommentFilter[];
not?: CommentFilter;
}
-
-// ============================================================================
-// Table Condition Types
-// ============================================================================
-
+// ============ Table Condition Types ============
export interface UserCondition {
id?: string | null;
email?: string | null;
@@ -365,7 +316,6 @@ export interface UserCondition {
createdAt?: string | null;
metadata?: unknown | null;
}
-
export interface PostCondition {
id?: string | null;
title?: string | null;
@@ -374,7 +324,6 @@ export interface PostCondition {
publishedAt?: string | null;
tags?: string | null;
}
-
export interface CommentCondition {
id?: string | null;
body?: string | null;
@@ -382,21 +331,11 @@ export interface CommentCondition {
authorId?: string | null;
createdAt?: string | null;
}
-
-// ============================================================================
-// OrderBy Types
-// ============================================================================
-
-export type UsersOrderBy = 'PRIMARY_KEY_ASC' | 'PRIMARY_KEY_DESC' | 'NATURAL' | 'ID_ASC' | 'ID_DESC' | 'EMAIL_ASC' | 'EMAIL_DESC' | 'NAME_ASC' | 'NAME_DESC' | 'AGE_ASC' | 'AGE_DESC' | 'IS_ACTIVE_ASC' | 'IS_ACTIVE_DESC' | 'CREATED_AT_ASC' | 'CREATED_AT_DESC' | 'METADATA_ASC' | 'METADATA_DESC';
-
-export type PostsOrderBy = 'PRIMARY_KEY_ASC' | 'PRIMARY_KEY_DESC' | 'NATURAL' | 'ID_ASC' | 'ID_DESC' | 'TITLE_ASC' | 'TITLE_DESC' | 'CONTENT_ASC' | 'CONTENT_DESC' | 'AUTHOR_ID_ASC' | 'AUTHOR_ID_DESC' | 'PUBLISHED_AT_ASC' | 'PUBLISHED_AT_DESC' | 'TAGS_ASC' | 'TAGS_DESC';
-
-export type CommentsOrderBy = 'PRIMARY_KEY_ASC' | 'PRIMARY_KEY_DESC' | 'NATURAL' | 'ID_ASC' | 'ID_DESC' | 'BODY_ASC' | 'BODY_DESC' | 'POST_ID_ASC' | 'POST_ID_DESC' | 'AUTHOR_ID_ASC' | 'AUTHOR_ID_DESC' | 'CREATED_AT_ASC' | 'CREATED_AT_DESC';
-
-// ============================================================================
-// CRUD Input Types
-// ============================================================================
-
+// ============ OrderBy Types ============
+export type UsersOrderBy = "PRIMARY_KEY_ASC" | "PRIMARY_KEY_DESC" | "NATURAL" | "ID_ASC" | "ID_DESC" | "EMAIL_ASC" | "EMAIL_DESC" | "NAME_ASC" | "NAME_DESC" | "AGE_ASC" | "AGE_DESC" | "IS_ACTIVE_ASC" | "IS_ACTIVE_DESC" | "CREATED_AT_ASC" | "CREATED_AT_DESC" | "METADATA_ASC" | "METADATA_DESC";
+export type PostsOrderBy = "PRIMARY_KEY_ASC" | "PRIMARY_KEY_DESC" | "NATURAL" | "ID_ASC" | "ID_DESC" | "TITLE_ASC" | "TITLE_DESC" | "CONTENT_ASC" | "CONTENT_DESC" | "AUTHOR_ID_ASC" | "AUTHOR_ID_DESC" | "PUBLISHED_AT_ASC" | "PUBLISHED_AT_DESC" | "TAGS_ASC" | "TAGS_DESC";
+export type CommentsOrderBy = "PRIMARY_KEY_ASC" | "PRIMARY_KEY_DESC" | "NATURAL" | "ID_ASC" | "ID_DESC" | "BODY_ASC" | "BODY_DESC" | "POST_ID_ASC" | "POST_ID_DESC" | "AUTHOR_ID_ASC" | "AUTHOR_ID_DESC" | "CREATED_AT_ASC" | "CREATED_AT_DESC";
+// ============ CRUD Input Types ============
export interface CreateUserInput {
clientMutationId?: string;
user: {
@@ -407,7 +346,6 @@ export interface CreateUserInput {
metadata?: Record;
};
}
-
export interface UserPatch {
email?: string | null;
name?: string | null;
@@ -415,18 +353,15 @@ export interface UserPatch {
isActive?: boolean | null;
metadata?: Record | null;
}
-
export interface UpdateUserInput {
clientMutationId?: string;
id: string;
patch: UserPatch;
}
-
export interface DeleteUserInput {
clientMutationId?: string;
id: string;
}
-
export interface CreatePostInput {
clientMutationId?: string;
post: {
@@ -437,7 +372,6 @@ export interface CreatePostInput {
tags?: string;
};
}
-
export interface PostPatch {
title?: string | null;
content?: string | null;
@@ -445,18 +379,15 @@ export interface PostPatch {
publishedAt?: string | null;
tags?: string | null;
}
-
export interface UpdatePostInput {
clientMutationId?: string;
id: string;
patch: PostPatch;
}
-
export interface DeletePostInput {
clientMutationId?: string;
id: string;
}
-
export interface CreateCommentInput {
clientMutationId?: string;
comment: {
@@ -465,41 +396,29 @@ export interface CreateCommentInput {
authorId: string;
};
}
-
export interface CommentPatch {
body?: string | null;
postId?: string | null;
authorId?: string | null;
}
-
export interface UpdateCommentInput {
clientMutationId?: string;
id: string;
patch: CommentPatch;
}
-
export interface DeleteCommentInput {
clientMutationId?: string;
id: string;
-}
-
-// ============================================================================
-// Custom Input Types (from schema)
-// ============================================================================
-"
+}"
`;
exports[`generateInputTypesFile generates complete types file for single table 1`] = `
"/**
-* GraphQL types for ORM client
-* @generated by @constructive-io/graphql-codegen
-* DO NOT EDIT - changes will be overwritten
-*/
-
-// ============================================================================
-// Scalar Filter Types
-// ============================================================================
-
+ * GraphQL types for ORM client
+ * @generated by @constructive-io/graphql-codegen
+ * DO NOT EDIT - changes will be overwritten
+ */
+// ============ Scalar Filter Types ============
export interface StringFilter {
isNull?: boolean;
equalTo?: string;
@@ -529,7 +448,6 @@ export interface StringFilter {
likeInsensitive?: string;
notLikeInsensitive?: string;
}
-
export interface IntFilter {
isNull?: boolean;
equalTo?: number;
@@ -543,7 +461,6 @@ export interface IntFilter {
greaterThan?: number;
greaterThanOrEqualTo?: number;
}
-
export interface FloatFilter {
isNull?: boolean;
equalTo?: number;
@@ -557,13 +474,11 @@ export interface FloatFilter {
greaterThan?: number;
greaterThanOrEqualTo?: number;
}
-
export interface BooleanFilter {
isNull?: boolean;
equalTo?: boolean;
notEqualTo?: boolean;
}
-
export interface UUIDFilter {
isNull?: boolean;
equalTo?: string;
@@ -573,7 +488,6 @@ export interface UUIDFilter {
in?: string[];
notIn?: string[];
}
-
export interface DatetimeFilter {
isNull?: boolean;
equalTo?: string;
@@ -587,7 +501,6 @@ export interface DatetimeFilter {
greaterThan?: string;
greaterThanOrEqualTo?: string;
}
-
export interface DateFilter {
isNull?: boolean;
equalTo?: string;
@@ -601,7 +514,6 @@ export interface DateFilter {
greaterThan?: string;
greaterThanOrEqualTo?: string;
}
-
export interface JSONFilter {
isNull?: boolean;
equalTo?: Record;
@@ -614,7 +526,6 @@ export interface JSONFilter {
containsAllKeys?: string[];
containsAnyKeys?: string[];
}
-
export interface BigIntFilter {
isNull?: boolean;
equalTo?: string;
@@ -628,7 +539,6 @@ export interface BigIntFilter {
greaterThan?: string;
greaterThanOrEqualTo?: string;
}
-
export interface BigFloatFilter {
isNull?: boolean;
equalTo?: string;
@@ -642,13 +552,11 @@ export interface BigFloatFilter {
greaterThan?: string;
greaterThanOrEqualTo?: string;
}
-
export interface BitStringFilter {
isNull?: boolean;
equalTo?: string;
notEqualTo?: string;
}
-
export interface InternetAddressFilter {
isNull?: boolean;
equalTo?: string;
@@ -667,15 +575,10 @@ export interface InternetAddressFilter {
containedByOrEqualTo?: string;
containsOrContainedBy?: string;
}
-
export interface FullTextFilter {
matches?: string;
}
-
-// ============================================================================
-// Entity Types
-// ============================================================================
-
+// ============ Entity Types ============
export interface User {
id: string;
email?: string | null;
@@ -685,41 +588,23 @@ export interface User {
createdAt?: string | null;
metadata?: Record | null;
}
-
-// ============================================================================
-// Relation Helper Types
-// ============================================================================
-
+// ============ Relation Helper Types ============
export interface ConnectionResult {
nodes: T[];
totalCount: number;
pageInfo: PageInfo;
}
-
export interface PageInfo {
hasNextPage: boolean;
hasPreviousPage: boolean;
startCursor?: string | null;
endCursor?: string | null;
}
-
-// ============================================================================
-// Entity Relation Types
-// ============================================================================
-
-export interface UserRelations {
-}
-
-// ============================================================================
-// Entity Types With Relations
-// ============================================================================
-
+// ============ Entity Relation Types ============
+export interface UserRelations {}
+// ============ Entity Types With Relations ============
export type UserWithRelations = User & UserRelations;
-
-// ============================================================================
-// Entity Select Types
-// ============================================================================
-
+// ============ Entity Select Types ============
export type UserSelect = {
id?: boolean;
email?: boolean;
@@ -728,12 +613,8 @@ export type UserSelect = {
isActive?: boolean;
createdAt?: boolean;
metadata?: boolean;
- };
-
-// ============================================================================
-// Table Filter Types
-// ============================================================================
-
+};
+// ============ Table Filter Types ============
export interface UserFilter {
id?: UUIDFilter;
email?: StringFilter;
@@ -746,11 +627,7 @@ export interface UserFilter {
or?: UserFilter[];
not?: UserFilter;
}
-
-// ============================================================================
-// Table Condition Types
-// ============================================================================
-
+// ============ Table Condition Types ============
export interface UserCondition {
id?: string | null;
email?: string | null;
@@ -760,17 +637,9 @@ export interface UserCondition {
createdAt?: string | null;
metadata?: unknown | null;
}
-
-// ============================================================================
-// OrderBy Types
-// ============================================================================
-
-export type UsersOrderBy = 'PRIMARY_KEY_ASC' | 'PRIMARY_KEY_DESC' | 'NATURAL' | 'ID_ASC' | 'ID_DESC' | 'EMAIL_ASC' | 'EMAIL_DESC' | 'NAME_ASC' | 'NAME_DESC' | 'AGE_ASC' | 'AGE_DESC' | 'IS_ACTIVE_ASC' | 'IS_ACTIVE_DESC' | 'CREATED_AT_ASC' | 'CREATED_AT_DESC' | 'METADATA_ASC' | 'METADATA_DESC';
-
-// ============================================================================
-// CRUD Input Types
-// ============================================================================
-
+// ============ OrderBy Types ============
+export type UsersOrderBy = "PRIMARY_KEY_ASC" | "PRIMARY_KEY_DESC" | "NATURAL" | "ID_ASC" | "ID_DESC" | "EMAIL_ASC" | "EMAIL_DESC" | "NAME_ASC" | "NAME_DESC" | "AGE_ASC" | "AGE_DESC" | "IS_ACTIVE_ASC" | "IS_ACTIVE_DESC" | "CREATED_AT_ASC" | "CREATED_AT_DESC" | "METADATA_ASC" | "METADATA_DESC";
+// ============ CRUD Input Types ============
export interface CreateUserInput {
clientMutationId?: string;
user: {
@@ -781,7 +650,6 @@ export interface CreateUserInput {
metadata?: Record;
};
}
-
export interface UserPatch {
email?: string | null;
name?: string | null;
@@ -789,35 +657,24 @@ export interface UserPatch {
isActive?: boolean | null;
metadata?: Record | null;
}
-
export interface UpdateUserInput {
clientMutationId?: string;
id: string;
patch: UserPatch;
}
-
export interface DeleteUserInput {
clientMutationId?: string;
id: string;
-}
-
-// ============================================================================
-// Custom Input Types (from schema)
-// ============================================================================
-"
+}"
`;
exports[`generateInputTypesFile generates custom input types from TypeRegistry 1`] = `
"/**
-* GraphQL types for ORM client
-* @generated by @constructive-io/graphql-codegen
-* DO NOT EDIT - changes will be overwritten
-*/
-
-// ============================================================================
-// Scalar Filter Types
-// ============================================================================
-
+ * GraphQL types for ORM client
+ * @generated by @constructive-io/graphql-codegen
+ * DO NOT EDIT - changes will be overwritten
+ */
+// ============ Scalar Filter Types ============
export interface StringFilter {
isNull?: boolean;
equalTo?: string;
@@ -847,7 +704,6 @@ export interface StringFilter {
likeInsensitive?: string;
notLikeInsensitive?: string;
}
-
export interface IntFilter {
isNull?: boolean;
equalTo?: number;
@@ -861,7 +717,6 @@ export interface IntFilter {
greaterThan?: number;
greaterThanOrEqualTo?: number;
}
-
export interface FloatFilter {
isNull?: boolean;
equalTo?: number;
@@ -875,13 +730,11 @@ export interface FloatFilter {
greaterThan?: number;
greaterThanOrEqualTo?: number;
}
-
export interface BooleanFilter {
isNull?: boolean;
equalTo?: boolean;
notEqualTo?: boolean;
}
-
export interface UUIDFilter {
isNull?: boolean;
equalTo?: string;
@@ -891,7 +744,6 @@ export interface UUIDFilter {
in?: string[];
notIn?: string[];
}
-
export interface DatetimeFilter {
isNull?: boolean;
equalTo?: string;
@@ -905,7 +757,6 @@ export interface DatetimeFilter {
greaterThan?: string;
greaterThanOrEqualTo?: string;
}
-
export interface DateFilter {
isNull?: boolean;
equalTo?: string;
@@ -919,7 +770,6 @@ export interface DateFilter {
greaterThan?: string;
greaterThanOrEqualTo?: string;
}
-
export interface JSONFilter {
isNull?: boolean;
equalTo?: Record;
@@ -932,7 +782,6 @@ export interface JSONFilter {
containsAllKeys?: string[];
containsAnyKeys?: string[];
}
-
export interface BigIntFilter {
isNull?: boolean;
equalTo?: string;
@@ -946,7 +795,6 @@ export interface BigIntFilter {
greaterThan?: string;
greaterThanOrEqualTo?: string;
}
-
export interface BigFloatFilter {
isNull?: boolean;
equalTo?: string;
@@ -960,13 +808,11 @@ export interface BigFloatFilter {
greaterThan?: string;
greaterThanOrEqualTo?: string;
}
-
export interface BitStringFilter {
isNull?: boolean;
equalTo?: string;
notEqualTo?: string;
}
-
export interface InternetAddressFilter {
isNull?: boolean;
equalTo?: string;
@@ -985,15 +831,10 @@ export interface InternetAddressFilter {
containedByOrEqualTo?: string;
containsOrContainedBy?: string;
}
-
export interface FullTextFilter {
matches?: string;
}
-
-// ============================================================================
-// Entity Types
-// ============================================================================
-
+// ============ Entity Types ============
export interface User {
id: string;
email?: string | null;
@@ -1003,41 +844,23 @@ export interface User {
createdAt?: string | null;
metadata?: Record | null;
}
-
-// ============================================================================
-// Relation Helper Types
-// ============================================================================
-
+// ============ Relation Helper Types ============
export interface ConnectionResult {
nodes: T[];
totalCount: number;
pageInfo: PageInfo;
}
-
export interface PageInfo {
hasNextPage: boolean;
hasPreviousPage: boolean;
startCursor?: string | null;
endCursor?: string | null;
}
-
-// ============================================================================
-// Entity Relation Types
-// ============================================================================
-
-export interface UserRelations {
-}
-
-// ============================================================================
-// Entity Types With Relations
-// ============================================================================
-
+// ============ Entity Relation Types ============
+export interface UserRelations {}
+// ============ Entity Types With Relations ============
export type UserWithRelations = User & UserRelations;
-
-// ============================================================================
-// Entity Select Types
-// ============================================================================
-
+// ============ Entity Select Types ============
export type UserSelect = {
id?: boolean;
email?: boolean;
@@ -1046,12 +869,8 @@ export type UserSelect = {
isActive?: boolean;
createdAt?: boolean;
metadata?: boolean;
- };
-
-// ============================================================================
-// Table Filter Types
-// ============================================================================
-
+};
+// ============ Table Filter Types ============
export interface UserFilter {
id?: UUIDFilter;
email?: StringFilter;
@@ -1064,11 +883,7 @@ export interface UserFilter {
or?: UserFilter[];
not?: UserFilter;
}
-
-// ============================================================================
-// Table Condition Types
-// ============================================================================
-
+// ============ Table Condition Types ============
export interface UserCondition {
id?: string | null;
email?: string | null;
@@ -1078,17 +893,9 @@ export interface UserCondition {
createdAt?: string | null;
metadata?: unknown | null;
}
-
-// ============================================================================
-// OrderBy Types
-// ============================================================================
-
-export type UsersOrderBy = 'PRIMARY_KEY_ASC' | 'PRIMARY_KEY_DESC' | 'NATURAL' | 'ID_ASC' | 'ID_DESC' | 'EMAIL_ASC' | 'EMAIL_DESC' | 'NAME_ASC' | 'NAME_DESC' | 'AGE_ASC' | 'AGE_DESC' | 'IS_ACTIVE_ASC' | 'IS_ACTIVE_DESC' | 'CREATED_AT_ASC' | 'CREATED_AT_DESC' | 'METADATA_ASC' | 'METADATA_DESC';
-
-// ============================================================================
-// CRUD Input Types
-// ============================================================================
-
+// ============ OrderBy Types ============
+export type UsersOrderBy = "PRIMARY_KEY_ASC" | "PRIMARY_KEY_DESC" | "NATURAL" | "ID_ASC" | "ID_DESC" | "EMAIL_ASC" | "EMAIL_DESC" | "NAME_ASC" | "NAME_DESC" | "AGE_ASC" | "AGE_DESC" | "IS_ACTIVE_ASC" | "IS_ACTIVE_DESC" | "CREATED_AT_ASC" | "CREATED_AT_DESC" | "METADATA_ASC" | "METADATA_DESC";
+// ============ CRUD Input Types ============
export interface CreateUserInput {
clientMutationId?: string;
user: {
@@ -1099,7 +906,6 @@ export interface CreateUserInput {
metadata?: Record;
};
}
-
export interface UserPatch {
email?: string | null;
name?: string | null;
@@ -1107,49 +913,36 @@ export interface UserPatch {
isActive?: boolean | null;
metadata?: Record | null;
}
-
export interface UpdateUserInput {
clientMutationId?: string;
id: string;
patch: UserPatch;
}
-
export interface DeleteUserInput {
clientMutationId?: string;
id: string;
}
-
-// ============================================================================
-// Custom Input Types (from schema)
-// ============================================================================
-
+// ============ Custom Input Types (from schema) ============
export interface LoginInput {
email: string;
password: string;
rememberMe?: boolean;
}
-
export interface RegisterInput {
email: string;
password: string;
name?: string;
}
-
-export type UserRole = 'ADMIN' | 'USER' | 'GUEST';
-"
+export type UserRole = "ADMIN" | "USER" | "GUEST";"
`;
exports[`generateInputTypesFile generates payload types for custom operations 1`] = `
"/**
-* GraphQL types for ORM client
-* @generated by @constructive-io/graphql-codegen
-* DO NOT EDIT - changes will be overwritten
-*/
-
-// ============================================================================
-// Scalar Filter Types
-// ============================================================================
-
+ * GraphQL types for ORM client
+ * @generated by @constructive-io/graphql-codegen
+ * DO NOT EDIT - changes will be overwritten
+ */
+// ============ Scalar Filter Types ============
export interface StringFilter {
isNull?: boolean;
equalTo?: string;
@@ -1179,7 +972,6 @@ export interface StringFilter {
likeInsensitive?: string;
notLikeInsensitive?: string;
}
-
export interface IntFilter {
isNull?: boolean;
equalTo?: number;
@@ -1193,7 +985,6 @@ export interface IntFilter {
greaterThan?: number;
greaterThanOrEqualTo?: number;
}
-
export interface FloatFilter {
isNull?: boolean;
equalTo?: number;
@@ -1207,13 +998,11 @@ export interface FloatFilter {
greaterThan?: number;
greaterThanOrEqualTo?: number;
}
-
export interface BooleanFilter {
isNull?: boolean;
equalTo?: boolean;
notEqualTo?: boolean;
}
-
export interface UUIDFilter {
isNull?: boolean;
equalTo?: string;
@@ -1223,7 +1012,6 @@ export interface UUIDFilter {
in?: string[];
notIn?: string[];
}
-
export interface DatetimeFilter {
isNull?: boolean;
equalTo?: string;
@@ -1237,7 +1025,6 @@ export interface DatetimeFilter {
greaterThan?: string;
greaterThanOrEqualTo?: string;
}
-
export interface DateFilter {
isNull?: boolean;
equalTo?: string;
@@ -1251,7 +1038,6 @@ export interface DateFilter {
greaterThan?: string;
greaterThanOrEqualTo?: string;
}
-
export interface JSONFilter {
isNull?: boolean;
equalTo?: Record;
@@ -1264,7 +1050,6 @@ export interface JSONFilter {
containsAllKeys?: string[];
containsAnyKeys?: string[];
}
-
export interface BigIntFilter {
isNull?: boolean;
equalTo?: string;
@@ -1278,7 +1063,6 @@ export interface BigIntFilter {
greaterThan?: string;
greaterThanOrEqualTo?: string;
}
-
export interface BigFloatFilter {
isNull?: boolean;
equalTo?: string;
@@ -1292,13 +1076,11 @@ export interface BigFloatFilter {
greaterThan?: string;
greaterThanOrEqualTo?: string;
}
-
export interface BitStringFilter {
isNull?: boolean;
equalTo?: string;
notEqualTo?: string;
}
-
export interface InternetAddressFilter {
isNull?: boolean;
equalTo?: string;
@@ -1317,15 +1099,10 @@ export interface InternetAddressFilter {
containedByOrEqualTo?: string;
containsOrContainedBy?: string;
}
-
export interface FullTextFilter {
matches?: string;
}
-
-// ============================================================================
-// Entity Types
-// ============================================================================
-
+// ============ Entity Types ============
export interface User {
id: string;
email?: string | null;
@@ -1335,41 +1112,23 @@ export interface User {
createdAt?: string | null;
metadata?: Record | null;
}
-
-// ============================================================================
-// Relation Helper Types
-// ============================================================================
-
+// ============ Relation Helper Types ============
export interface ConnectionResult {
nodes: T[];
totalCount: number;
pageInfo: PageInfo;
}
-
export interface PageInfo {
hasNextPage: boolean;
hasPreviousPage: boolean;
startCursor?: string | null;
endCursor?: string | null;
}
-
-// ============================================================================
-// Entity Relation Types
-// ============================================================================
-
-export interface UserRelations {
-}
-
-// ============================================================================
-// Entity Types With Relations
-// ============================================================================
-
+// ============ Entity Relation Types ============
+export interface UserRelations {}
+// ============ Entity Types With Relations ============
export type UserWithRelations = User & UserRelations;
-
-// ============================================================================
-// Entity Select Types
-// ============================================================================
-
+// ============ Entity Select Types ============
export type UserSelect = {
id?: boolean;
email?: boolean;
@@ -1378,12 +1137,8 @@ export type UserSelect = {
isActive?: boolean;
createdAt?: boolean;
metadata?: boolean;
- };
-
-// ============================================================================
-// Table Filter Types
-// ============================================================================
-
+};
+// ============ Table Filter Types ============
export interface UserFilter {
id?: UUIDFilter;
email?: StringFilter;
@@ -1396,11 +1151,7 @@ export interface UserFilter {
or?: UserFilter[];
not?: UserFilter;
}
-
-// ============================================================================
-// Table Condition Types
-// ============================================================================
-
+// ============ Table Condition Types ============
export interface UserCondition {
id?: string | null;
email?: string | null;
@@ -1410,17 +1161,9 @@ export interface UserCondition {
createdAt?: string | null;
metadata?: unknown | null;
}
-
-// ============================================================================
-// OrderBy Types
-// ============================================================================
-
-export type UsersOrderBy = 'PRIMARY_KEY_ASC' | 'PRIMARY_KEY_DESC' | 'NATURAL' | 'ID_ASC' | 'ID_DESC' | 'EMAIL_ASC' | 'EMAIL_DESC' | 'NAME_ASC' | 'NAME_DESC' | 'AGE_ASC' | 'AGE_DESC' | 'IS_ACTIVE_ASC' | 'IS_ACTIVE_DESC' | 'CREATED_AT_ASC' | 'CREATED_AT_DESC' | 'METADATA_ASC' | 'METADATA_DESC';
-
-// ============================================================================
-// CRUD Input Types
-// ============================================================================
-
+// ============ OrderBy Types ============
+export type UsersOrderBy = "PRIMARY_KEY_ASC" | "PRIMARY_KEY_DESC" | "NATURAL" | "ID_ASC" | "ID_DESC" | "EMAIL_ASC" | "EMAIL_DESC" | "NAME_ASC" | "NAME_DESC" | "AGE_ASC" | "AGE_DESC" | "IS_ACTIVE_ASC" | "IS_ACTIVE_DESC" | "CREATED_AT_ASC" | "CREATED_AT_DESC" | "METADATA_ASC" | "METADATA_DESC";
+// ============ CRUD Input Types ============
export interface CreateUserInput {
clientMutationId?: string;
user: {
@@ -1431,7 +1174,6 @@ export interface CreateUserInput {
metadata?: Record;
};
}
-
export interface UserPatch {
email?: string | null;
name?: string | null;
@@ -1439,57 +1181,41 @@ export interface UserPatch {
isActive?: boolean | null;
metadata?: Record | null;
}
-
export interface UpdateUserInput {
clientMutationId?: string;
id: string;
patch: UserPatch;
}
-
export interface DeleteUserInput {
clientMutationId?: string;
id: string;
}
-
-// ============================================================================
-// Custom Input Types (from schema)
-// ============================================================================
-
+// ============ Custom Input Types (from schema) ============
export interface LoginInput {
email: string;
password: string;
rememberMe?: boolean;
}
-
-// ============================================================================
-// Payload/Return Types (for custom operations)
-// ============================================================================
-
+// ============ Payload/Return Types (for custom operations) ============
export interface LoginPayload {
token?: string | null;
user?: User | null;
expiresAt?: string | null;
}
-
export type LoginPayloadSelect = {
token?: boolean;
user?: boolean;
expiresAt?: boolean;
- };
-"
+};"
`;
exports[`generateInputTypesFile generates types with hasOne relations 1`] = `
"/**
-* GraphQL types for ORM client
-* @generated by @constructive-io/graphql-codegen
-* DO NOT EDIT - changes will be overwritten
-*/
-
-// ============================================================================
-// Scalar Filter Types
-// ============================================================================
-
+ * GraphQL types for ORM client
+ * @generated by @constructive-io/graphql-codegen
+ * DO NOT EDIT - changes will be overwritten
+ */
+// ============ Scalar Filter Types ============
export interface StringFilter {
isNull?: boolean;
equalTo?: string;
@@ -1519,7 +1245,6 @@ export interface StringFilter {
likeInsensitive?: string;
notLikeInsensitive?: string;
}
-
export interface IntFilter {
isNull?: boolean;
equalTo?: number;
@@ -1533,7 +1258,6 @@ export interface IntFilter {
greaterThan?: number;
greaterThanOrEqualTo?: number;
}
-
export interface FloatFilter {
isNull?: boolean;
equalTo?: number;
@@ -1547,13 +1271,11 @@ export interface FloatFilter {
greaterThan?: number;
greaterThanOrEqualTo?: number;
}
-
export interface BooleanFilter {
isNull?: boolean;
equalTo?: boolean;
notEqualTo?: boolean;
}
-
export interface UUIDFilter {
isNull?: boolean;
equalTo?: string;
@@ -1563,7 +1285,6 @@ export interface UUIDFilter {
in?: string[];
notIn?: string[];
}
-
export interface DatetimeFilter {
isNull?: boolean;
equalTo?: string;
@@ -1577,7 +1298,6 @@ export interface DatetimeFilter {
greaterThan?: string;
greaterThanOrEqualTo?: string;
}
-
export interface DateFilter {
isNull?: boolean;
equalTo?: string;
@@ -1591,7 +1311,6 @@ export interface DateFilter {
greaterThan?: string;
greaterThanOrEqualTo?: string;
}
-
export interface JSONFilter {
isNull?: boolean;
equalTo?: Record;
@@ -1604,7 +1323,6 @@ export interface JSONFilter {
containsAllKeys?: string[];
containsAnyKeys?: string[];
}
-
export interface BigIntFilter {
isNull?: boolean;
equalTo?: string;
@@ -1618,7 +1336,6 @@ export interface BigIntFilter {
greaterThan?: string;
greaterThanOrEqualTo?: string;
}
-
export interface BigFloatFilter {
isNull?: boolean;
equalTo?: string;
@@ -1632,13 +1349,11 @@ export interface BigFloatFilter {
greaterThan?: string;
greaterThanOrEqualTo?: string;
}
-
export interface BitStringFilter {
isNull?: boolean;
equalTo?: string;
notEqualTo?: string;
}
-
export interface InternetAddressFilter {
isNull?: boolean;
equalTo?: string;
@@ -1657,15 +1372,10 @@ export interface InternetAddressFilter {
containedByOrEqualTo?: string;
containsOrContainedBy?: string;
}
-
export interface FullTextFilter {
matches?: string;
}
-
-// ============================================================================
-// Entity Types
-// ============================================================================
-
+// ============ Entity Types ============
export interface User {
id: string;
email?: string | null;
@@ -1675,56 +1385,36 @@ export interface User {
createdAt?: string | null;
metadata?: Record | null;
}
-
export interface Profile {
id: string;
bio?: string | null;
userId?: string | null;
avatarUrl?: string | null;
}
-
-// ============================================================================
-// Relation Helper Types
-// ============================================================================
-
+// ============ Relation Helper Types ============
export interface ConnectionResult {
nodes: T[];
totalCount: number;
pageInfo: PageInfo;
}
-
export interface PageInfo {
hasNextPage: boolean;
hasPreviousPage: boolean;
startCursor?: string | null;
endCursor?: string | null;
}
-
-// ============================================================================
-// Entity Relation Types
-// ============================================================================
-
+// ============ Entity Relation Types ============
export interface UserRelations {
profile?: Profile | null;
posts?: ConnectionResult;
}
-
export interface ProfileRelations {
user?: User | null;
}
-
-// ============================================================================
-// Entity Types With Relations
-// ============================================================================
-
+// ============ Entity Types With Relations ============
export type UserWithRelations = User & UserRelations;
-
export type ProfileWithRelations = Profile & ProfileRelations;
-
-// ============================================================================
-// Entity Select Types
-// ============================================================================
-
+// ============ Entity Select Types ============
export type UserSelect = {
id?: boolean;
email?: boolean;
@@ -1734,26 +1424,25 @@ export type UserSelect = {
createdAt?: boolean;
metadata?: boolean;
posts?: boolean | {
- select?: PostSelect;
- first?: number;
- filter?: PostFilter;
- orderBy?: PostsOrderBy[];
+ select?: PostSelect;
+ first?: number;
+ filter?: PostFilter;
+ orderBy?: PostsOrderBy[];
};
- profile?: boolean | { select?: ProfileSelect };
+ profile?: boolean | {
+ select?: ProfileSelect;
};
-
+};
export type ProfileSelect = {
id?: boolean;
bio?: boolean;
userId?: boolean;
avatarUrl?: boolean;
- user?: boolean | { select?: UserSelect };
+ user?: boolean | {
+ select?: UserSelect;
};
-
-// ============================================================================
-// Table Filter Types
-// ============================================================================
-
+};
+// ============ Table Filter Types ============
export interface UserFilter {
id?: UUIDFilter;
email?: StringFilter;
@@ -1766,7 +1455,6 @@ export interface UserFilter {
or?: UserFilter[];
not?: UserFilter;
}
-
export interface ProfileFilter {
id?: UUIDFilter;
bio?: StringFilter;
@@ -1776,11 +1464,7 @@ export interface ProfileFilter {
or?: ProfileFilter[];
not?: ProfileFilter;
}
-
-// ============================================================================
-// Table Condition Types
-// ============================================================================
-
+// ============ Table Condition Types ============
export interface UserCondition {
id?: string | null;
email?: string | null;
@@ -1790,26 +1474,16 @@ export interface UserCondition {
createdAt?: string | null;
metadata?: unknown | null;
}
-
export interface ProfileCondition {
id?: string | null;
bio?: string | null;
userId?: string | null;
avatarUrl?: string | null;
}
-
-// ============================================================================
-// OrderBy Types
-// ============================================================================
-
-export type UsersOrderBy = 'PRIMARY_KEY_ASC' | 'PRIMARY_KEY_DESC' | 'NATURAL' | 'ID_ASC' | 'ID_DESC' | 'EMAIL_ASC' | 'EMAIL_DESC' | 'NAME_ASC' | 'NAME_DESC' | 'AGE_ASC' | 'AGE_DESC' | 'IS_ACTIVE_ASC' | 'IS_ACTIVE_DESC' | 'CREATED_AT_ASC' | 'CREATED_AT_DESC' | 'METADATA_ASC' | 'METADATA_DESC';
-
-export type ProfilesOrderBy = 'PRIMARY_KEY_ASC' | 'PRIMARY_KEY_DESC' | 'NATURAL' | 'ID_ASC' | 'ID_DESC' | 'BIO_ASC' | 'BIO_DESC' | 'USER_ID_ASC' | 'USER_ID_DESC' | 'AVATAR_URL_ASC' | 'AVATAR_URL_DESC';
-
-// ============================================================================
-// CRUD Input Types
-// ============================================================================
-
+// ============ OrderBy Types ============
+export type UsersOrderBy = "PRIMARY_KEY_ASC" | "PRIMARY_KEY_DESC" | "NATURAL" | "ID_ASC" | "ID_DESC" | "EMAIL_ASC" | "EMAIL_DESC" | "NAME_ASC" | "NAME_DESC" | "AGE_ASC" | "AGE_DESC" | "IS_ACTIVE_ASC" | "IS_ACTIVE_DESC" | "CREATED_AT_ASC" | "CREATED_AT_DESC" | "METADATA_ASC" | "METADATA_DESC";
+export type ProfilesOrderBy = "PRIMARY_KEY_ASC" | "PRIMARY_KEY_DESC" | "NATURAL" | "ID_ASC" | "ID_DESC" | "BIO_ASC" | "BIO_DESC" | "USER_ID_ASC" | "USER_ID_DESC" | "AVATAR_URL_ASC" | "AVATAR_URL_DESC";
+// ============ CRUD Input Types ============
export interface CreateUserInput {
clientMutationId?: string;
user: {
@@ -1820,7 +1494,6 @@ export interface CreateUserInput {
metadata?: Record;
};
}
-
export interface UserPatch {
email?: string | null;
name?: string | null;
@@ -1828,18 +1501,15 @@ export interface UserPatch {
isActive?: boolean | null;
metadata?: Record | null;
}
-
export interface UpdateUserInput {
clientMutationId?: string;
id: string;
patch: UserPatch;
}
-
export interface DeleteUserInput {
clientMutationId?: string;
id: string;
}
-
export interface CreateProfileInput {
clientMutationId?: string;
profile: {
@@ -1848,41 +1518,29 @@ export interface CreateProfileInput {
avatarUrl?: string;
};
}
-
export interface ProfilePatch {
bio?: string | null;
userId?: string | null;
avatarUrl?: string | null;
}
-
export interface UpdateProfileInput {
clientMutationId?: string;
id: string;
patch: ProfilePatch;
}
-
export interface DeleteProfileInput {
clientMutationId?: string;
id: string;
-}
-
-// ============================================================================
-// Custom Input Types (from schema)
-// ============================================================================
-"
+}"
`;
exports[`generateInputTypesFile generates types with manyToMany relations 1`] = `
"/**
-* GraphQL types for ORM client
-* @generated by @constructive-io/graphql-codegen
-* DO NOT EDIT - changes will be overwritten
-*/
-
-// ============================================================================
-// Scalar Filter Types
-// ============================================================================
-
+ * GraphQL types for ORM client
+ * @generated by @constructive-io/graphql-codegen
+ * DO NOT EDIT - changes will be overwritten
+ */
+// ============ Scalar Filter Types ============
export interface StringFilter {
isNull?: boolean;
equalTo?: string;
@@ -1912,7 +1570,6 @@ export interface StringFilter {
likeInsensitive?: string;
notLikeInsensitive?: string;
}
-
export interface IntFilter {
isNull?: boolean;
equalTo?: number;
@@ -1926,7 +1583,6 @@ export interface IntFilter {
greaterThan?: number;
greaterThanOrEqualTo?: number;
}
-
export interface FloatFilter {
isNull?: boolean;
equalTo?: number;
@@ -1940,13 +1596,11 @@ export interface FloatFilter {
greaterThan?: number;
greaterThanOrEqualTo?: number;
}
-
export interface BooleanFilter {
isNull?: boolean;
equalTo?: boolean;
notEqualTo?: boolean;
}
-
export interface UUIDFilter {
isNull?: boolean;
equalTo?: string;
@@ -1956,7 +1610,6 @@ export interface UUIDFilter {
in?: string[];
notIn?: string[];
}
-
export interface DatetimeFilter {
isNull?: boolean;
equalTo?: string;
@@ -1970,7 +1623,6 @@ export interface DatetimeFilter {
greaterThan?: string;
greaterThanOrEqualTo?: string;
}
-
export interface DateFilter {
isNull?: boolean;
equalTo?: string;
@@ -1984,7 +1636,6 @@ export interface DateFilter {
greaterThan?: string;
greaterThanOrEqualTo?: string;
}
-
export interface JSONFilter {
isNull?: boolean;
equalTo?: Record;
@@ -1997,7 +1648,6 @@ export interface JSONFilter {
containsAllKeys?: string[];
containsAnyKeys?: string[];
}
-
export interface BigIntFilter {
isNull?: boolean;
equalTo?: string;
@@ -2011,7 +1661,6 @@ export interface BigIntFilter {
greaterThan?: string;
greaterThanOrEqualTo?: string;
}
-
export interface BigFloatFilter {
isNull?: boolean;
equalTo?: string;
@@ -2025,13 +1674,11 @@ export interface BigFloatFilter {
greaterThan?: string;
greaterThanOrEqualTo?: string;
}
-
export interface BitStringFilter {
isNull?: boolean;
equalTo?: string;
notEqualTo?: string;
}
-
export interface InternetAddressFilter {
isNull?: boolean;
equalTo?: string;
@@ -2050,15 +1697,10 @@ export interface InternetAddressFilter {
containedByOrEqualTo?: string;
containsOrContainedBy?: string;
}
-
export interface FullTextFilter {
matches?: string;
}
-
-// ============================================================================
-// Entity Types
-// ============================================================================
-
+// ============ Entity Types ============
export interface Post {
id: string;
title?: string | null;
@@ -2067,55 +1709,35 @@ export interface Post {
publishedAt?: string | null;
tags?: string | null;
}
-
export interface Category {
id: string;
name?: string | null;
slug?: string | null;
}
-
-// ============================================================================
-// Relation Helper Types
-// ============================================================================
-
+// ============ Relation Helper Types ============
export interface ConnectionResult {
nodes: T[];
totalCount: number;
pageInfo: PageInfo;
}
-
export interface PageInfo {
hasNextPage: boolean;
hasPreviousPage: boolean;
startCursor?: string | null;
endCursor?: string | null;
}
-
-// ============================================================================
-// Entity Relation Types
-// ============================================================================
-
+// ============ Entity Relation Types ============
export interface PostRelations {
author?: User | null;
comments?: ConnectionResult;
}
-
export interface CategoryRelations {
posts?: ConnectionResult;
}
-
-// ============================================================================
-// Entity Types With Relations
-// ============================================================================
-
+// ============ Entity Types With Relations ============
export type PostWithRelations = Post & PostRelations;
-
export type CategoryWithRelations = Category & CategoryRelations;
-
-// ============================================================================
-// Entity Select Types
-// ============================================================================
-
+// ============ Entity Select Types ============
export type PostSelect = {
id?: boolean;
title?: boolean;
@@ -2123,31 +1745,28 @@ export type PostSelect = {
authorId?: boolean;
publishedAt?: boolean;
tags?: boolean;
- author?: boolean | { select?: UserSelect };
- comments?: boolean | {
- select?: CommentSelect;
- first?: number;
- filter?: CommentFilter;
- orderBy?: CommentsOrderBy[];
+ author?: boolean | {
+ select?: UserSelect;
};
+ comments?: boolean | {
+ select?: CommentSelect;
+ first?: number;
+ filter?: CommentFilter;
+ orderBy?: CommentsOrderBy[];
};
-
+};
export type CategorySelect = {
id?: boolean;
name?: boolean;
slug?: boolean;
posts?: boolean | {
- select?: PostSelect;
- first?: number;
- filter?: PostFilter;
- orderBy?: PostsOrderBy[];
- };
+ select?: PostSelect;
+ first?: number;
+ filter?: PostFilter;
+ orderBy?: PostsOrderBy[];
};
-
-// ============================================================================
-// Table Filter Types
-// ============================================================================
-
+};
+// ============ Table Filter Types ============
export interface PostFilter {
id?: UUIDFilter;
title?: StringFilter;
@@ -2159,7 +1778,6 @@ export interface PostFilter {
or?: PostFilter[];
not?: PostFilter;
}
-
export interface CategoryFilter {
id?: UUIDFilter;
name?: StringFilter;
@@ -2168,11 +1786,7 @@ export interface CategoryFilter {
or?: CategoryFilter[];
not?: CategoryFilter;
}
-
-// ============================================================================
-// Table Condition Types
-// ============================================================================
-
+// ============ Table Condition Types ============
export interface PostCondition {
id?: string | null;
title?: string | null;
@@ -2181,25 +1795,15 @@ export interface PostCondition {
publishedAt?: string | null;
tags?: string | null;
}
-
export interface CategoryCondition {
id?: string | null;
name?: string | null;
slug?: string | null;
}
-
-// ============================================================================
-// OrderBy Types
-// ============================================================================
-
-export type PostsOrderBy = 'PRIMARY_KEY_ASC' | 'PRIMARY_KEY_DESC' | 'NATURAL' | 'ID_ASC' | 'ID_DESC' | 'TITLE_ASC' | 'TITLE_DESC' | 'CONTENT_ASC' | 'CONTENT_DESC' | 'AUTHOR_ID_ASC' | 'AUTHOR_ID_DESC' | 'PUBLISHED_AT_ASC' | 'PUBLISHED_AT_DESC' | 'TAGS_ASC' | 'TAGS_DESC';
-
-export type CategoriesOrderBy = 'PRIMARY_KEY_ASC' | 'PRIMARY_KEY_DESC' | 'NATURAL' | 'ID_ASC' | 'ID_DESC' | 'NAME_ASC' | 'NAME_DESC' | 'SLUG_ASC' | 'SLUG_DESC';
-
-// ============================================================================
-// CRUD Input Types
-// ============================================================================
-
+// ============ OrderBy Types ============
+export type PostsOrderBy = "PRIMARY_KEY_ASC" | "PRIMARY_KEY_DESC" | "NATURAL" | "ID_ASC" | "ID_DESC" | "TITLE_ASC" | "TITLE_DESC" | "CONTENT_ASC" | "CONTENT_DESC" | "AUTHOR_ID_ASC" | "AUTHOR_ID_DESC" | "PUBLISHED_AT_ASC" | "PUBLISHED_AT_DESC" | "TAGS_ASC" | "TAGS_DESC";
+export type CategoriesOrderBy = "PRIMARY_KEY_ASC" | "PRIMARY_KEY_DESC" | "NATURAL" | "ID_ASC" | "ID_DESC" | "NAME_ASC" | "NAME_DESC" | "SLUG_ASC" | "SLUG_DESC";
+// ============ CRUD Input Types ============
export interface CreatePostInput {
clientMutationId?: string;
post: {
@@ -2210,7 +1814,6 @@ export interface CreatePostInput {
tags?: string;
};
}
-
export interface PostPatch {
title?: string | null;
content?: string | null;
@@ -2218,18 +1821,15 @@ export interface PostPatch {
publishedAt?: string | null;
tags?: string | null;
}
-
export interface UpdatePostInput {
clientMutationId?: string;
id: string;
patch: PostPatch;
}
-
export interface DeletePostInput {
clientMutationId?: string;
id: string;
}
-
export interface CreateCategoryInput {
clientMutationId?: string;
category: {
@@ -2237,40 +1837,28 @@ export interface CreateCategoryInput {
slug?: string;
};
}
-
export interface CategoryPatch {
name?: string | null;
slug?: string | null;
}
-
export interface UpdateCategoryInput {
clientMutationId?: string;
id: string;
patch: CategoryPatch;
}
-
export interface DeleteCategoryInput {
clientMutationId?: string;
id: string;
-}
-
-// ============================================================================
-// Custom Input Types (from schema)
-// ============================================================================
-"
+}"
`;
exports[`generateInputTypesFile handles empty tables array 1`] = `
"/**
-* GraphQL types for ORM client
-* @generated by @constructive-io/graphql-codegen
-* DO NOT EDIT - changes will be overwritten
-*/
-
-// ============================================================================
-// Scalar Filter Types
-// ============================================================================
-
+ * GraphQL types for ORM client
+ * @generated by @constructive-io/graphql-codegen
+ * DO NOT EDIT - changes will be overwritten
+ */
+// ============ Scalar Filter Types ============
export interface StringFilter {
isNull?: boolean;
equalTo?: string;
@@ -2300,7 +1888,6 @@ export interface StringFilter {
likeInsensitive?: string;
notLikeInsensitive?: string;
}
-
export interface IntFilter {
isNull?: boolean;
equalTo?: number;
@@ -2314,7 +1901,6 @@ export interface IntFilter {
greaterThan?: number;
greaterThanOrEqualTo?: number;
}
-
export interface FloatFilter {
isNull?: boolean;
equalTo?: number;
@@ -2328,13 +1914,11 @@ export interface FloatFilter {
greaterThan?: number;
greaterThanOrEqualTo?: number;
}
-
export interface BooleanFilter {
isNull?: boolean;
equalTo?: boolean;
notEqualTo?: boolean;
}
-
export interface UUIDFilter {
isNull?: boolean;
equalTo?: string;
@@ -2344,7 +1928,6 @@ export interface UUIDFilter {
in?: string[];
notIn?: string[];
}
-
export interface DatetimeFilter {
isNull?: boolean;
equalTo?: string;
@@ -2358,7 +1941,6 @@ export interface DatetimeFilter {
greaterThan?: string;
greaterThanOrEqualTo?: string;
}
-
export interface DateFilter {
isNull?: boolean;
equalTo?: string;
@@ -2372,7 +1954,6 @@ export interface DateFilter {
greaterThan?: string;
greaterThanOrEqualTo?: string;
}
-
export interface JSONFilter {
isNull?: boolean;
equalTo?: Record;
@@ -2385,7 +1966,6 @@ export interface JSONFilter {
containsAllKeys?: string[];
containsAnyKeys?: string[];
}
-
export interface BigIntFilter {
isNull?: boolean;
equalTo?: string;
@@ -2399,7 +1979,6 @@ export interface BigIntFilter {
greaterThan?: string;
greaterThanOrEqualTo?: string;
}
-
export interface BigFloatFilter {
isNull?: boolean;
equalTo?: string;
@@ -2413,13 +1992,11 @@ export interface BigFloatFilter {
greaterThan?: string;
greaterThanOrEqualTo?: string;
}
-
export interface BitStringFilter {
isNull?: boolean;
equalTo?: string;
notEqualTo?: string;
}
-
export interface InternetAddressFilter {
isNull?: boolean;
equalTo?: string;
@@ -2438,13 +2015,7 @@ export interface InternetAddressFilter {
containedByOrEqualTo?: string;
containsOrContainedBy?: string;
}
-
export interface FullTextFilter {
matches?: string;
-}
-
-// ============================================================================
-// Custom Input Types (from schema)
-// ============================================================================
-"
+}"
`;
diff --git a/graphql/codegen/src/__tests__/codegen/__snapshots__/query-keys-factory.test.ts.snap b/graphql/codegen/src/__tests__/codegen/__snapshots__/query-keys-factory.test.ts.snap
new file mode 100644
index 000000000..9d6e45077
--- /dev/null
+++ b/graphql/codegen/src/__tests__/codegen/__snapshots__/query-keys-factory.test.ts.snap
@@ -0,0 +1,1386 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`generateInvalidationFile generates invalidation helpers for a single table without relationships 1`] = `
+"/**
+ * Cache invalidation helpers
+ * @generated by @constructive-io/graphql-codegen
+ * DO NOT EDIT - changes will be overwritten
+ */
+
+// ============================================================================
+// Type-safe cache invalidation utilities
+//
+// Features:
+// - Simple invalidation helpers per entity
+// - Cascade invalidation for parent-child relationships
+// - Remove helpers for delete operations
+// ============================================================================
+
+import type { QueryClient } from "@tanstack/react-query";
+import { userKeys } from "./query-keys";
+/**
+// ============================================================================
+// Invalidation Helpers
+// ============================================================================
+
+ * Type-safe query invalidation helpers
+ *
+ * @example
+ * \`\`\`ts
+ * // Invalidate all user queries
+ * invalidate.user.all(queryClient);
+ *
+ * // Invalidate user lists
+ * invalidate.user.lists(queryClient);
+ *
+ * // Invalidate specific user
+ * invalidate.user.detail(queryClient, userId);
+ * \`\`\`
+ */
+export const invalidate = {
+ /** Invalidate user queries */user: {
+ /** Invalidate all user queries */all: (queryClient: QueryClient) => queryClient.invalidateQueries({
+ queryKey: userKeys.all
+ }),
+ /** Invalidate user list queries */lists: (queryClient: QueryClient) => queryClient.invalidateQueries({
+ queryKey: userKeys.lists()
+ }),
+ /** Invalidate a specific user */detail: (queryClient: QueryClient, id: string | number) => queryClient.invalidateQueries({
+ queryKey: userKeys.detail(id)
+ })
+ }
+} as const;
+/**
+
+// ============================================================================
+// Remove Helpers (for delete operations)
+// ============================================================================
+
+ * Remove queries from cache (for delete operations)
+ *
+ * Use these when an entity is deleted to remove it from cache
+ * instead of just invalidating (which would trigger a refetch).
+ */
+export const remove = {
+ /** Remove user from cache */user: (queryClient: QueryClient, id: string | number) => {
+ queryClient.removeQueries({
+ queryKey: userKeys.detail(id)
+ });
+ }
+} as const;
+"
+`;
+
+exports[`generateInvalidationFile generates invalidation helpers for multiple tables 1`] = `
+"/**
+ * Cache invalidation helpers
+ * @generated by @constructive-io/graphql-codegen
+ * DO NOT EDIT - changes will be overwritten
+ */
+
+// ============================================================================
+// Type-safe cache invalidation utilities
+//
+// Features:
+// - Simple invalidation helpers per entity
+// - Cascade invalidation for parent-child relationships
+// - Remove helpers for delete operations
+// ============================================================================
+
+import type { QueryClient } from "@tanstack/react-query";
+import { userKeys, postKeys } from "./query-keys";
+/**
+// ============================================================================
+// Invalidation Helpers
+// ============================================================================
+
+ * Type-safe query invalidation helpers
+ *
+ * @example
+ * \`\`\`ts
+ * // Invalidate all user queries
+ * invalidate.user.all(queryClient);
+ *
+ * // Invalidate user lists
+ * invalidate.user.lists(queryClient);
+ *
+ * // Invalidate specific user
+ * invalidate.user.detail(queryClient, userId);
+ * \`\`\`
+ */
+export const invalidate = {
+ /** Invalidate user queries */user: {
+ /** Invalidate all user queries */all: (queryClient: QueryClient) => queryClient.invalidateQueries({
+ queryKey: userKeys.all
+ }),
+ /** Invalidate user list queries */lists: (queryClient: QueryClient) => queryClient.invalidateQueries({
+ queryKey: userKeys.lists()
+ }),
+ /** Invalidate a specific user */detail: (queryClient: QueryClient, id: string | number) => queryClient.invalidateQueries({
+ queryKey: userKeys.detail(id)
+ })
+ },
+ /** Invalidate post queries */post: {
+ /** Invalidate all post queries */all: (queryClient: QueryClient) => queryClient.invalidateQueries({
+ queryKey: postKeys.all
+ }),
+ /** Invalidate post list queries */lists: (queryClient: QueryClient) => queryClient.invalidateQueries({
+ queryKey: postKeys.lists()
+ }),
+ /** Invalidate a specific post */detail: (queryClient: QueryClient, id: string | number) => queryClient.invalidateQueries({
+ queryKey: postKeys.detail(id)
+ })
+ }
+} as const;
+/**
+
+// ============================================================================
+// Remove Helpers (for delete operations)
+// ============================================================================
+
+ * Remove queries from cache (for delete operations)
+ *
+ * Use these when an entity is deleted to remove it from cache
+ * instead of just invalidating (which would trigger a refetch).
+ */
+export const remove = {
+ /** Remove user from cache */user: (queryClient: QueryClient, id: string | number) => {
+ queryClient.removeQueries({
+ queryKey: userKeys.detail(id)
+ });
+ },
+ /** Remove post from cache */post: (queryClient: QueryClient, id: string | number) => {
+ queryClient.removeQueries({
+ queryKey: postKeys.detail(id)
+ });
+ }
+} as const;
+"
+`;
+
+exports[`generateInvalidationFile generates invalidation helpers with cascade support for hierarchical relationships 1`] = `
+"/**
+ * Cache invalidation helpers
+ * @generated by @constructive-io/graphql-codegen
+ * DO NOT EDIT - changes will be overwritten
+ */
+
+// ============================================================================
+// Type-safe cache invalidation utilities
+//
+// Features:
+// - Simple invalidation helpers per entity
+// - Cascade invalidation for parent-child relationships
+// - Remove helpers for delete operations
+// ============================================================================
+
+import type { QueryClient } from "@tanstack/react-query";
+import { organizationKeys, databaseKeys, tableKeys, fieldKeys } from "./query-keys";
+import type { DatabaseScope, TableScope, FieldScope } from "./query-keys";
+/**
+// ============================================================================
+// Invalidation Helpers
+// ============================================================================
+
+ * Type-safe query invalidation helpers
+ *
+ * @example
+ * \`\`\`ts
+ * // Invalidate all user queries
+ * invalidate.user.all(queryClient);
+ *
+ * // Invalidate user lists
+ * invalidate.user.lists(queryClient);
+ *
+ * // Invalidate specific user
+ * invalidate.user.detail(queryClient, userId);
+ *
+ * // Cascade invalidate (entity + all children)
+ * invalidate.database.withChildren(queryClient, databaseId);
+ * \`\`\`
+ */
+export const invalidate = {
+ /** Invalidate organization queries */organization: {
+ /** Invalidate all organization queries */all: (queryClient: QueryClient) => queryClient.invalidateQueries({
+ queryKey: organizationKeys.all
+ }),
+ /** Invalidate organization list queries */lists: (queryClient: QueryClient) => queryClient.invalidateQueries({
+ queryKey: organizationKeys.lists()
+ }),
+ /** Invalidate a specific organization */detail: (queryClient: QueryClient, id: string | number) => queryClient.invalidateQueries({
+ queryKey: organizationKeys.detail(id)
+ }),
+ /**
+ * Invalidate organization and all child entities
+ * Cascades to: database, table, field
+ */
+ withChildren: (queryClient: QueryClient, id: string | number) => {
+ // Invalidate this organization
+ queryClient.invalidateQueries({
+ queryKey: organizationKeys.detail(id)
+ });
+ queryClient.invalidateQueries({
+ queryKey: organizationKeys.lists()
+ });
+ // Cascade to child entities
+ queryClient.invalidateQueries({
+ queryKey: databaseKeys.byOrganization(id)
+ });
+ queryClient.invalidateQueries({
+ queryKey: tableKeys.byOrganization(id)
+ });
+ queryClient.invalidateQueries({
+ queryKey: fieldKeys.byOrganization(id)
+ });
+ }
+ },
+ /** Invalidate database queries */database: {
+ /** Invalidate all database queries */all: (queryClient: QueryClient) => queryClient.invalidateQueries({
+ queryKey: databaseKeys.all
+ }),
+ /** Invalidate database list queries */lists: (queryClient: QueryClient, scope?: DatabaseScope) => queryClient.invalidateQueries({
+ queryKey: databaseKeys.lists(scope)
+ }),
+ /** Invalidate a specific database */detail: (queryClient: QueryClient, id: string | number, scope?: DatabaseScope) => queryClient.invalidateQueries({
+ queryKey: databaseKeys.detail(id, scope)
+ }),
+ /**
+ * Invalidate database and all child entities
+ * Cascades to: table, field
+ */
+ withChildren: (queryClient: QueryClient, id: string | number) => {
+ // Invalidate this database
+ queryClient.invalidateQueries({
+ queryKey: databaseKeys.detail(id)
+ });
+ queryClient.invalidateQueries({
+ queryKey: databaseKeys.lists()
+ });
+ // Cascade to child entities
+ queryClient.invalidateQueries({
+ queryKey: tableKeys.byDatabase(id)
+ });
+ queryClient.invalidateQueries({
+ queryKey: fieldKeys.byDatabase(id)
+ });
+ }
+ },
+ /** Invalidate table queries */table: {
+ /** Invalidate all table queries */all: (queryClient: QueryClient) => queryClient.invalidateQueries({
+ queryKey: tableKeys.all
+ }),
+ /** Invalidate table list queries */lists: (queryClient: QueryClient, scope?: TableScope) => queryClient.invalidateQueries({
+ queryKey: tableKeys.lists(scope)
+ }),
+ /** Invalidate a specific table */detail: (queryClient: QueryClient, id: string | number, scope?: TableScope) => queryClient.invalidateQueries({
+ queryKey: tableKeys.detail(id, scope)
+ }),
+ /**
+ * Invalidate table and all child entities
+ * Cascades to: field
+ */
+ withChildren: (queryClient: QueryClient, id: string | number) => {
+ // Invalidate this table
+ queryClient.invalidateQueries({
+ queryKey: tableKeys.detail(id)
+ });
+ queryClient.invalidateQueries({
+ queryKey: tableKeys.lists()
+ });
+ // Cascade to child entities
+ queryClient.invalidateQueries({
+ queryKey: fieldKeys.byTable(id)
+ });
+ }
+ },
+ /** Invalidate field queries */field: {
+ /** Invalidate all field queries */all: (queryClient: QueryClient) => queryClient.invalidateQueries({
+ queryKey: fieldKeys.all
+ }),
+ /** Invalidate field list queries */lists: (queryClient: QueryClient, scope?: FieldScope) => queryClient.invalidateQueries({
+ queryKey: fieldKeys.lists(scope)
+ }),
+ /** Invalidate a specific field */detail: (queryClient: QueryClient, id: string | number, scope?: FieldScope) => queryClient.invalidateQueries({
+ queryKey: fieldKeys.detail(id, scope)
+ })
+ }
+} as const;
+/**
+
+// ============================================================================
+// Remove Helpers (for delete operations)
+// ============================================================================
+
+ * Remove queries from cache (for delete operations)
+ *
+ * Use these when an entity is deleted to remove it from cache
+ * instead of just invalidating (which would trigger a refetch).
+ */
+export const remove = {
+ /** Remove organization from cache */organization: (queryClient: QueryClient, id: string | number) => {
+ queryClient.removeQueries({
+ queryKey: organizationKeys.detail(id)
+ });
+ },
+ /** Remove database from cache */database: (queryClient: QueryClient, id: string | number, scope?: DatabaseScope) => {
+ queryClient.removeQueries({
+ queryKey: databaseKeys.detail(id, scope)
+ });
+ },
+ /** Remove table from cache */table: (queryClient: QueryClient, id: string | number, scope?: TableScope) => {
+ queryClient.removeQueries({
+ queryKey: tableKeys.detail(id, scope)
+ });
+ },
+ /** Remove field from cache */field: (queryClient: QueryClient, id: string | number, scope?: FieldScope) => {
+ queryClient.removeQueries({
+ queryKey: fieldKeys.detail(id, scope)
+ });
+ }
+} as const;
+"
+`;
+
+exports[`generateInvalidationFile generates invalidation helpers with cascade support for parent-child relationship 1`] = `
+"/**
+ * Cache invalidation helpers
+ * @generated by @constructive-io/graphql-codegen
+ * DO NOT EDIT - changes will be overwritten
+ */
+
+// ============================================================================
+// Type-safe cache invalidation utilities
+//
+// Features:
+// - Simple invalidation helpers per entity
+// - Cascade invalidation for parent-child relationships
+// - Remove helpers for delete operations
+// ============================================================================
+
+import type { QueryClient } from "@tanstack/react-query";
+import { userKeys, postKeys } from "./query-keys";
+import type { PostScope } from "./query-keys";
+/**
+// ============================================================================
+// Invalidation Helpers
+// ============================================================================
+
+ * Type-safe query invalidation helpers
+ *
+ * @example
+ * \`\`\`ts
+ * // Invalidate all user queries
+ * invalidate.user.all(queryClient);
+ *
+ * // Invalidate user lists
+ * invalidate.user.lists(queryClient);
+ *
+ * // Invalidate specific user
+ * invalidate.user.detail(queryClient, userId);
+ *
+ * // Cascade invalidate (entity + all children)
+ * invalidate.database.withChildren(queryClient, databaseId);
+ * \`\`\`
+ */
+export const invalidate = {
+ /** Invalidate user queries */user: {
+ /** Invalidate all user queries */all: (queryClient: QueryClient) => queryClient.invalidateQueries({
+ queryKey: userKeys.all
+ }),
+ /** Invalidate user list queries */lists: (queryClient: QueryClient) => queryClient.invalidateQueries({
+ queryKey: userKeys.lists()
+ }),
+ /** Invalidate a specific user */detail: (queryClient: QueryClient, id: string | number) => queryClient.invalidateQueries({
+ queryKey: userKeys.detail(id)
+ }),
+ /**
+ * Invalidate user and all child entities
+ * Cascades to: post
+ */
+ withChildren: (queryClient: QueryClient, id: string | number) => {
+ // Invalidate this user
+ queryClient.invalidateQueries({
+ queryKey: userKeys.detail(id)
+ });
+ queryClient.invalidateQueries({
+ queryKey: userKeys.lists()
+ });
+ // Cascade to child entities
+ queryClient.invalidateQueries({
+ queryKey: postKeys.byUser(id)
+ });
+ }
+ },
+ /** Invalidate post queries */post: {
+ /** Invalidate all post queries */all: (queryClient: QueryClient) => queryClient.invalidateQueries({
+ queryKey: postKeys.all
+ }),
+ /** Invalidate post list queries */lists: (queryClient: QueryClient, scope?: PostScope) => queryClient.invalidateQueries({
+ queryKey: postKeys.lists(scope)
+ }),
+ /** Invalidate a specific post */detail: (queryClient: QueryClient, id: string | number, scope?: PostScope) => queryClient.invalidateQueries({
+ queryKey: postKeys.detail(id, scope)
+ })
+ }
+} as const;
+/**
+
+// ============================================================================
+// Remove Helpers (for delete operations)
+// ============================================================================
+
+ * Remove queries from cache (for delete operations)
+ *
+ * Use these when an entity is deleted to remove it from cache
+ * instead of just invalidating (which would trigger a refetch).
+ */
+export const remove = {
+ /** Remove user from cache */user: (queryClient: QueryClient, id: string | number) => {
+ queryClient.removeQueries({
+ queryKey: userKeys.detail(id)
+ });
+ },
+ /** Remove post from cache */post: (queryClient: QueryClient, id: string | number, scope?: PostScope) => {
+ queryClient.removeQueries({
+ queryKey: postKeys.detail(id, scope)
+ });
+ }
+} as const;
+"
+`;
+
+exports[`generateInvalidationFile generates invalidation helpers without cascade when disabled 1`] = `
+"/**
+ * Cache invalidation helpers
+ * @generated by @constructive-io/graphql-codegen
+ * DO NOT EDIT - changes will be overwritten
+ */
+
+// ============================================================================
+// Type-safe cache invalidation utilities
+//
+// Features:
+// - Simple invalidation helpers per entity
+// - Cascade invalidation for parent-child relationships
+// - Remove helpers for delete operations
+// ============================================================================
+
+import type { QueryClient } from "@tanstack/react-query";
+import { userKeys, postKeys } from "./query-keys";
+import type { PostScope } from "./query-keys";
+/**
+// ============================================================================
+// Invalidation Helpers
+// ============================================================================
+
+ * Type-safe query invalidation helpers
+ *
+ * @example
+ * \`\`\`ts
+ * // Invalidate all user queries
+ * invalidate.user.all(queryClient);
+ *
+ * // Invalidate user lists
+ * invalidate.user.lists(queryClient);
+ *
+ * // Invalidate specific user
+ * invalidate.user.detail(queryClient, userId);
+ * \`\`\`
+ */
+export const invalidate = {
+ /** Invalidate user queries */user: {
+ /** Invalidate all user queries */all: (queryClient: QueryClient) => queryClient.invalidateQueries({
+ queryKey: userKeys.all
+ }),
+ /** Invalidate user list queries */lists: (queryClient: QueryClient) => queryClient.invalidateQueries({
+ queryKey: userKeys.lists()
+ }),
+ /** Invalidate a specific user */detail: (queryClient: QueryClient, id: string | number) => queryClient.invalidateQueries({
+ queryKey: userKeys.detail(id)
+ }),
+ /**
+ * Invalidate user and all child entities
+ * Cascades to: post
+ */
+ withChildren: (queryClient: QueryClient, id: string | number) => {
+ // Invalidate this user
+ queryClient.invalidateQueries({
+ queryKey: userKeys.detail(id)
+ });
+ queryClient.invalidateQueries({
+ queryKey: userKeys.lists()
+ });
+ // Cascade to child entities
+ queryClient.invalidateQueries({
+ queryKey: postKeys.byUser(id)
+ });
+ }
+ },
+ /** Invalidate post queries */post: {
+ /** Invalidate all post queries */all: (queryClient: QueryClient) => queryClient.invalidateQueries({
+ queryKey: postKeys.all
+ }),
+ /** Invalidate post list queries */lists: (queryClient: QueryClient, scope?: PostScope) => queryClient.invalidateQueries({
+ queryKey: postKeys.lists(scope)
+ }),
+ /** Invalidate a specific post */detail: (queryClient: QueryClient, id: string | number, scope?: PostScope) => queryClient.invalidateQueries({
+ queryKey: postKeys.detail(id, scope)
+ })
+ }
+} as const;
+/**
+
+// ============================================================================
+// Remove Helpers (for delete operations)
+// ============================================================================
+
+ * Remove queries from cache (for delete operations)
+ *
+ * Use these when an entity is deleted to remove it from cache
+ * instead of just invalidating (which would trigger a refetch).
+ */
+export const remove = {
+ /** Remove user from cache */user: (queryClient: QueryClient, id: string | number) => {
+ queryClient.removeQueries({
+ queryKey: userKeys.detail(id)
+ });
+ },
+ /** Remove post from cache */post: (queryClient: QueryClient, id: string | number, scope?: PostScope) => {
+ queryClient.removeQueries({
+ queryKey: postKeys.detail(id, scope)
+ });
+ }
+} as const;
+"
+`;
+
+exports[`generateMutationKeysFile generates mutation keys for a single table without relationships 1`] = `
+"/**
+ * Centralized mutation key factory
+ * @generated by @constructive-io/graphql-codegen
+ * DO NOT EDIT - changes will be overwritten
+ */
+
+// ============================================================================
+// Mutation keys for tracking in-flight mutations
+//
+// Benefits:
+// - Track mutation state with useIsMutating
+// - Implement optimistic updates with proper rollback
+// - Deduplicate identical mutations
+// - Coordinate related mutations
+// ============================================================================
+
+// ============================================================================
+// Entity Mutation Keys
+// ============================================================================
+
+export const userMutationKeys = {
+ /** All user mutation keys */all: ["mutation", "user"] as const,
+ /** Create user mutation key */create: () => ["mutation", "user", "create"] as const,
+ /** Update user mutation key */update: (id: string | number) => ["mutation", "user", "update", id] as const,
+ /** Delete user mutation key */delete: (id: string | number) => ["mutation", "user", "delete", id] as const
+} as const;
+/**
+
+// ============================================================================
+// Unified Mutation Key Store
+// ============================================================================
+
+ * Unified mutation key store
+ *
+ * Use this for tracking in-flight mutations with useIsMutating.
+ *
+ * @example
+ * \`\`\`ts
+ * import { useIsMutating } from '@tanstack/react-query';
+ * import { mutationKeys } from './generated';
+ *
+ * // Check if any user mutations are in progress
+ * const isMutatingUser = useIsMutating({ mutationKey: mutationKeys.user.all });
+ *
+ * // Check if a specific user is being updated
+ * const isUpdating = useIsMutating({ mutationKey: mutationKeys.user.update(userId) });
+ * \`\`\`
+ */
+export const mutationKeys = {
+ user: userMutationKeys
+} as const;
+"
+`;
+
+exports[`generateMutationKeysFile generates mutation keys for hierarchical relationships 1`] = `
+"/**
+ * Centralized mutation key factory
+ * @generated by @constructive-io/graphql-codegen
+ * DO NOT EDIT - changes will be overwritten
+ */
+
+// ============================================================================
+// Mutation keys for tracking in-flight mutations
+//
+// Benefits:
+// - Track mutation state with useIsMutating
+// - Implement optimistic updates with proper rollback
+// - Deduplicate identical mutations
+// - Coordinate related mutations
+// ============================================================================
+
+// ============================================================================
+// Entity Mutation Keys
+// ============================================================================
+
+export const organizationMutationKeys = {
+ /** All organization mutation keys */all: ["mutation", "organization"] as const,
+ /** Create organization mutation key */create: () => ["mutation", "organization", "create"] as const,
+ /** Update organization mutation key */update: (id: string | number) => ["mutation", "organization", "update", id] as const,
+ /** Delete organization mutation key */delete: (id: string | number) => ["mutation", "organization", "delete", id] as const
+} as const;
+export const databaseMutationKeys = {
+ /** All database mutation keys */all: ["mutation", "database"] as const,
+ /** Create database mutation key */create: (organizationId?: string) => organizationId ? ["mutation", "database", "create", {
+ organizationId
+ }] as const : ["mutation", "database", "create"] as const,
+ /** Update database mutation key */update: (id: string | number) => ["mutation", "database", "update", id] as const,
+ /** Delete database mutation key */delete: (id: string | number) => ["mutation", "database", "delete", id] as const
+} as const;
+export const tableMutationKeys = {
+ /** All table mutation keys */all: ["mutation", "table"] as const,
+ /** Create table mutation key */create: (databaseId?: string) => databaseId ? ["mutation", "table", "create", {
+ databaseId
+ }] as const : ["mutation", "table", "create"] as const,
+ /** Update table mutation key */update: (id: string | number) => ["mutation", "table", "update", id] as const,
+ /** Delete table mutation key */delete: (id: string | number) => ["mutation", "table", "delete", id] as const
+} as const;
+export const fieldMutationKeys = {
+ /** All field mutation keys */all: ["mutation", "field"] as const,
+ /** Create field mutation key */create: (tableId?: string) => tableId ? ["mutation", "field", "create", {
+ tableId
+ }] as const : ["mutation", "field", "create"] as const,
+ /** Update field mutation key */update: (id: string | number) => ["mutation", "field", "update", id] as const,
+ /** Delete field mutation key */delete: (id: string | number) => ["mutation", "field", "delete", id] as const
+} as const;
+/**
+
+// ============================================================================
+// Unified Mutation Key Store
+// ============================================================================
+
+ * Unified mutation key store
+ *
+ * Use this for tracking in-flight mutations with useIsMutating.
+ *
+ * @example
+ * \`\`\`ts
+ * import { useIsMutating } from '@tanstack/react-query';
+ * import { mutationKeys } from './generated';
+ *
+ * // Check if any user mutations are in progress
+ * const isMutatingUser = useIsMutating({ mutationKey: mutationKeys.user.all });
+ *
+ * // Check if a specific user is being updated
+ * const isUpdating = useIsMutating({ mutationKey: mutationKeys.user.update(userId) });
+ * \`\`\`
+ */
+export const mutationKeys = {
+ organization: organizationMutationKeys,
+ database: databaseMutationKeys,
+ table: tableMutationKeys,
+ field: fieldMutationKeys
+} as const;
+"
+`;
+
+exports[`generateMutationKeysFile generates mutation keys for multiple tables 1`] = `
+"/**
+ * Centralized mutation key factory
+ * @generated by @constructive-io/graphql-codegen
+ * DO NOT EDIT - changes will be overwritten
+ */
+
+// ============================================================================
+// Mutation keys for tracking in-flight mutations
+//
+// Benefits:
+// - Track mutation state with useIsMutating
+// - Implement optimistic updates with proper rollback
+// - Deduplicate identical mutations
+// - Coordinate related mutations
+// ============================================================================
+
+// ============================================================================
+// Entity Mutation Keys
+// ============================================================================
+
+export const userMutationKeys = {
+ /** All user mutation keys */all: ["mutation", "user"] as const,
+ /** Create user mutation key */create: () => ["mutation", "user", "create"] as const,
+ /** Update user mutation key */update: (id: string | number) => ["mutation", "user", "update", id] as const,
+ /** Delete user mutation key */delete: (id: string | number) => ["mutation", "user", "delete", id] as const
+} as const;
+export const postMutationKeys = {
+ /** All post mutation keys */all: ["mutation", "post"] as const,
+ /** Create post mutation key */create: () => ["mutation", "post", "create"] as const,
+ /** Update post mutation key */update: (id: string | number) => ["mutation", "post", "update", id] as const,
+ /** Delete post mutation key */delete: (id: string | number) => ["mutation", "post", "delete", id] as const
+} as const;
+/**
+
+// ============================================================================
+// Unified Mutation Key Store
+// ============================================================================
+
+ * Unified mutation key store
+ *
+ * Use this for tracking in-flight mutations with useIsMutating.
+ *
+ * @example
+ * \`\`\`ts
+ * import { useIsMutating } from '@tanstack/react-query';
+ * import { mutationKeys } from './generated';
+ *
+ * // Check if any user mutations are in progress
+ * const isMutatingUser = useIsMutating({ mutationKey: mutationKeys.user.all });
+ *
+ * // Check if a specific user is being updated
+ * const isUpdating = useIsMutating({ mutationKey: mutationKeys.user.update(userId) });
+ * \`\`\`
+ */
+export const mutationKeys = {
+ user: userMutationKeys,
+ post: postMutationKeys
+} as const;
+"
+`;
+
+exports[`generateMutationKeysFile generates mutation keys with custom mutations 1`] = `
+"/**
+ * Centralized mutation key factory
+ * @generated by @constructive-io/graphql-codegen
+ * DO NOT EDIT - changes will be overwritten
+ */
+
+// ============================================================================
+// Mutation keys for tracking in-flight mutations
+//
+// Benefits:
+// - Track mutation state with useIsMutating
+// - Implement optimistic updates with proper rollback
+// - Deduplicate identical mutations
+// - Coordinate related mutations
+// ============================================================================
+
+// ============================================================================
+// Entity Mutation Keys
+// ============================================================================
+
+export const userMutationKeys = {
+ /** All user mutation keys */all: ["mutation", "user"] as const,
+ /** Create user mutation key */create: () => ["mutation", "user", "create"] as const,
+ /** Update user mutation key */update: (id: string | number) => ["mutation", "user", "update", id] as const,
+ /** Delete user mutation key */delete: (id: string | number) => ["mutation", "user", "delete", id] as const
+} as const;
+
+// ============================================================================
+// Custom Mutation Keys
+// ============================================================================
+
+export const customMutationKeys = {
+ /** Mutation key for login */login: (identifier?: string) => identifier ? ["mutation", "login", identifier] as const : ["mutation", "login"] as const,
+ /** Mutation key for logout */logout: () => ["mutation", "logout"] as const
+} as const;
+/**
+
+// ============================================================================
+// Unified Mutation Key Store
+// ============================================================================
+
+ * Unified mutation key store
+ *
+ * Use this for tracking in-flight mutations with useIsMutating.
+ *
+ * @example
+ * \`\`\`ts
+ * import { useIsMutating } from '@tanstack/react-query';
+ * import { mutationKeys } from './generated';
+ *
+ * // Check if any user mutations are in progress
+ * const isMutatingUser = useIsMutating({ mutationKey: mutationKeys.user.all });
+ *
+ * // Check if a specific user is being updated
+ * const isUpdating = useIsMutating({ mutationKey: mutationKeys.user.update(userId) });
+ * \`\`\`
+ */
+export const mutationKeys = {
+ user: userMutationKeys,
+ custom: customMutationKeys
+} as const;
+"
+`;
+
+exports[`generateMutationKeysFile generates mutation keys with parent-child relationship 1`] = `
+"/**
+ * Centralized mutation key factory
+ * @generated by @constructive-io/graphql-codegen
+ * DO NOT EDIT - changes will be overwritten
+ */
+
+// ============================================================================
+// Mutation keys for tracking in-flight mutations
+//
+// Benefits:
+// - Track mutation state with useIsMutating
+// - Implement optimistic updates with proper rollback
+// - Deduplicate identical mutations
+// - Coordinate related mutations
+// ============================================================================
+
+// ============================================================================
+// Entity Mutation Keys
+// ============================================================================
+
+export const userMutationKeys = {
+ /** All user mutation keys */all: ["mutation", "user"] as const,
+ /** Create user mutation key */create: () => ["mutation", "user", "create"] as const,
+ /** Update user mutation key */update: (id: string | number) => ["mutation", "user", "update", id] as const,
+ /** Delete user mutation key */delete: (id: string | number) => ["mutation", "user", "delete", id] as const
+} as const;
+export const postMutationKeys = {
+ /** All post mutation keys */all: ["mutation", "post"] as const,
+ /** Create post mutation key */create: (authorId?: string) => authorId ? ["mutation", "post", "create", {
+ authorId
+ }] as const : ["mutation", "post", "create"] as const,
+ /** Update post mutation key */update: (id: string | number) => ["mutation", "post", "update", id] as const,
+ /** Delete post mutation key */delete: (id: string | number) => ["mutation", "post", "delete", id] as const
+} as const;
+/**
+
+// ============================================================================
+// Unified Mutation Key Store
+// ============================================================================
+
+ * Unified mutation key store
+ *
+ * Use this for tracking in-flight mutations with useIsMutating.
+ *
+ * @example
+ * \`\`\`ts
+ * import { useIsMutating } from '@tanstack/react-query';
+ * import { mutationKeys } from './generated';
+ *
+ * // Check if any user mutations are in progress
+ * const isMutatingUser = useIsMutating({ mutationKey: mutationKeys.user.all });
+ *
+ * // Check if a specific user is being updated
+ * const isUpdating = useIsMutating({ mutationKey: mutationKeys.user.update(userId) });
+ * \`\`\`
+ */
+export const mutationKeys = {
+ user: userMutationKeys,
+ post: postMutationKeys
+} as const;
+"
+`;
+
+exports[`generateQueryKeysFile generates query keys for a single table without relationships 1`] = `
+"/**
+ * Centralized query key factory
+ * @generated by @constructive-io/graphql-codegen
+ * DO NOT EDIT - changes will be overwritten
+ */
+
+// ============================================================================
+// This file provides a centralized, type-safe query key factory following
+// the lukemorales query-key-factory pattern for React Query.
+//
+// Benefits:
+// - Single source of truth for all query keys
+// - Type-safe key access with autocomplete
+// - Hierarchical invalidation (invalidate all 'user.*' queries)
+// - Scoped keys for parent-child relationships
+// ============================================================================
+
+// ============================================================================
+// Entity Query Keys
+// ============================================================================
+
+export const userKeys = {
+ /** All user queries */all: ["user"] as const,
+ /** List query keys */lists: () => [...userKeys.all, "list"] as const,
+ /** List query key with variables */list: (variables?: object) => [...userKeys.lists(), variables] as const,
+ /** Detail query keys */details: () => [...userKeys.all, "detail"] as const,
+ /** Detail query key for specific item */detail: (id: string | number) => [...userKeys.details(), id] as const
+} as const;
+/**
+
+// ============================================================================
+// Unified Query Key Store
+// ============================================================================
+
+ * Unified query key store
+ *
+ * Use this for type-safe query key access across your application.
+ *
+ * @example
+ * \`\`\`ts
+ * // Invalidate all user queries
+ * queryClient.invalidateQueries({ queryKey: queryKeys.user.all });
+ *
+ * // Invalidate user list queries
+ * queryClient.invalidateQueries({ queryKey: queryKeys.user.lists() });
+ *
+ * // Invalidate specific user
+ * queryClient.invalidateQueries({ queryKey: queryKeys.user.detail(userId) });
+ * \`\`\`
+ */
+export const queryKeys = {
+ user: userKeys
+} as const;
+/** Type representing all available query key scopes */
+export type QueryKeyScope = keyof typeof queryKeys;
+"
+`;
+
+exports[`generateQueryKeysFile generates query keys for multiple tables without relationships 1`] = `
+"/**
+ * Centralized query key factory
+ * @generated by @constructive-io/graphql-codegen
+ * DO NOT EDIT - changes will be overwritten
+ */
+
+// ============================================================================
+// This file provides a centralized, type-safe query key factory following
+// the lukemorales query-key-factory pattern for React Query.
+//
+// Benefits:
+// - Single source of truth for all query keys
+// - Type-safe key access with autocomplete
+// - Hierarchical invalidation (invalidate all 'user.*' queries)
+// - Scoped keys for parent-child relationships
+// ============================================================================
+
+// ============================================================================
+// Entity Query Keys
+// ============================================================================
+
+export const userKeys = {
+ /** All user queries */all: ["user"] as const,
+ /** List query keys */lists: () => [...userKeys.all, "list"] as const,
+ /** List query key with variables */list: (variables?: object) => [...userKeys.lists(), variables] as const,
+ /** Detail query keys */details: () => [...userKeys.all, "detail"] as const,
+ /** Detail query key for specific item */detail: (id: string | number) => [...userKeys.details(), id] as const
+} as const;
+export const postKeys = {
+ /** All post queries */all: ["post"] as const,
+ /** List query keys */lists: () => [...postKeys.all, "list"] as const,
+ /** List query key with variables */list: (variables?: object) => [...postKeys.lists(), variables] as const,
+ /** Detail query keys */details: () => [...postKeys.all, "detail"] as const,
+ /** Detail query key for specific item */detail: (id: string | number) => [...postKeys.details(), id] as const
+} as const;
+/**
+
+// ============================================================================
+// Unified Query Key Store
+// ============================================================================
+
+ * Unified query key store
+ *
+ * Use this for type-safe query key access across your application.
+ *
+ * @example
+ * \`\`\`ts
+ * // Invalidate all user queries
+ * queryClient.invalidateQueries({ queryKey: queryKeys.user.all });
+ *
+ * // Invalidate user list queries
+ * queryClient.invalidateQueries({ queryKey: queryKeys.user.lists() });
+ *
+ * // Invalidate specific user
+ * queryClient.invalidateQueries({ queryKey: queryKeys.user.detail(userId) });
+ * \`\`\`
+ */
+export const queryKeys = {
+ user: userKeys,
+ post: postKeys
+} as const;
+/** Type representing all available query key scopes */
+export type QueryKeyScope = keyof typeof queryKeys;
+"
+`;
+
+exports[`generateQueryKeysFile generates query keys with custom queries 1`] = `
+"/**
+ * Centralized query key factory
+ * @generated by @constructive-io/graphql-codegen
+ * DO NOT EDIT - changes will be overwritten
+ */
+
+// ============================================================================
+// This file provides a centralized, type-safe query key factory following
+// the lukemorales query-key-factory pattern for React Query.
+//
+// Benefits:
+// - Single source of truth for all query keys
+// - Type-safe key access with autocomplete
+// - Hierarchical invalidation (invalidate all 'user.*' queries)
+// - Scoped keys for parent-child relationships
+// ============================================================================
+
+// ============================================================================
+// Entity Query Keys
+// ============================================================================
+
+export const userKeys = {
+ /** All user queries */all: ["user"] as const,
+ /** List query keys */lists: () => [...userKeys.all, "list"] as const,
+ /** List query key with variables */list: (variables?: object) => [...userKeys.lists(), variables] as const,
+ /** Detail query keys */details: () => [...userKeys.all, "detail"] as const,
+ /** Detail query key for specific item */detail: (id: string | number) => [...userKeys.details(), id] as const
+} as const;
+
+// ============================================================================
+// Custom Query Keys
+// ============================================================================
+
+export const customQueryKeys = {
+ /** Query key for currentUser */currentUser: () => ["currentUser"] as const,
+ /** Query key for searchUsers */searchUsers: (variables: object) => ["searchUsers", variables] as const
+} as const;
+/**
+
+// ============================================================================
+// Unified Query Key Store
+// ============================================================================
+
+ * Unified query key store
+ *
+ * Use this for type-safe query key access across your application.
+ *
+ * @example
+ * \`\`\`ts
+ * // Invalidate all user queries
+ * queryClient.invalidateQueries({ queryKey: queryKeys.user.all });
+ *
+ * // Invalidate user list queries
+ * queryClient.invalidateQueries({ queryKey: queryKeys.user.lists() });
+ *
+ * // Invalidate specific user
+ * queryClient.invalidateQueries({ queryKey: queryKeys.user.detail(userId) });
+ * \`\`\`
+ */
+export const queryKeys = {
+ user: userKeys,
+ custom: customQueryKeys
+} as const;
+/** Type representing all available query key scopes */
+export type QueryKeyScope = keyof typeof queryKeys;
+"
+`;
+
+exports[`generateQueryKeysFile generates query keys with hierarchical relationships (org -> db -> table -> field) 1`] = `
+"/**
+ * Centralized query key factory
+ * @generated by @constructive-io/graphql-codegen
+ * DO NOT EDIT - changes will be overwritten
+ */
+
+// ============================================================================
+// This file provides a centralized, type-safe query key factory following
+// the lukemorales query-key-factory pattern for React Query.
+//
+// Benefits:
+// - Single source of truth for all query keys
+// - Type-safe key access with autocomplete
+// - Hierarchical invalidation (invalidate all 'user.*' queries)
+// - Scoped keys for parent-child relationships
+// ============================================================================
+
+// ============================================================================
+// Scope Types
+// ============================================================================
+
+export type DatabaseScope = {
+ organizationId?: string;
+ organizationId?: string;
+};
+export type TableScope = {
+ databaseId?: string;
+ organizationId?: string;
+};
+export type FieldScope = {
+ tableId?: string;
+ databaseId?: string;
+ organizationId?: string;
+};
+// ============================================================================
+// Entity Query Keys
+// ============================================================================
+
+export const organizationKeys = {
+ /** All organization queries */all: ["organization"] as const,
+ /** List query keys */lists: () => [...organizationKeys.all, "list"] as const,
+ /** List query key with variables */list: (variables?: object) => [...organizationKeys.lists(), variables] as const,
+ /** Detail query keys */details: () => [...organizationKeys.all, "detail"] as const,
+ /** Detail query key for specific item */detail: (id: string | number) => [...organizationKeys.details(), id] as const
+} as const;
+export const databaseKeys = {
+ /** All database queries */all: ["database"] as const,
+ /** Database queries scoped to a specific organization */byOrganization: (organizationId: string) => ["database", {
+ organizationId
+ }] as const,
+ /** Database queries scoped to a specific organization */byOrganization: (organizationId: string) => ["database", {
+ organizationId
+ }] as const,
+ /** Get scope-aware base key */scoped: (scope?: DatabaseScope) => {
+ if (scope?.organizationId) {
+ return databaseKeys.byOrganization(scope.organizationId);
+ }
+ if (scope?.organizationId) {
+ return databaseKeys.byOrganization(scope.organizationId);
+ }
+ return databaseKeys.all;
+ },
+ /** List query keys (optionally scoped) */lists: (scope?: DatabaseScope) => [...databaseKeys.scoped(scope), "list"] as const,
+ /** List query key with variables */list: (variables?: object, scope?: DatabaseScope) => [...databaseKeys.lists(scope), variables] as const,
+ /** Detail query keys (optionally scoped) */details: (scope?: DatabaseScope) => [...databaseKeys.scoped(scope), "detail"] as const,
+ /** Detail query key for specific item */detail: (id: string | number, scope?: DatabaseScope) => [...databaseKeys.details(scope), id] as const
+} as const;
+export const tableKeys = {
+ /** All table queries */all: ["table"] as const,
+ /** Table queries scoped to a specific database */byDatabase: (databaseId: string) => ["table", {
+ databaseId
+ }] as const,
+ /** Table queries scoped to a specific organization */byOrganization: (organizationId: string) => ["table", {
+ organizationId
+ }] as const,
+ /** Get scope-aware base key */scoped: (scope?: TableScope) => {
+ if (scope?.databaseId) {
+ return tableKeys.byDatabase(scope.databaseId);
+ }
+ if (scope?.organizationId) {
+ return tableKeys.byOrganization(scope.organizationId);
+ }
+ return tableKeys.all;
+ },
+ /** List query keys (optionally scoped) */lists: (scope?: TableScope) => [...tableKeys.scoped(scope), "list"] as const,
+ /** List query key with variables */list: (variables?: object, scope?: TableScope) => [...tableKeys.lists(scope), variables] as const,
+ /** Detail query keys (optionally scoped) */details: (scope?: TableScope) => [...tableKeys.scoped(scope), "detail"] as const,
+ /** Detail query key for specific item */detail: (id: string | number, scope?: TableScope) => [...tableKeys.details(scope), id] as const
+} as const;
+export const fieldKeys = {
+ /** All field queries */all: ["field"] as const,
+ /** Field queries scoped to a specific table */byTable: (tableId: string) => ["field", {
+ tableId
+ }] as const,
+ /** Field queries scoped to a specific database */byDatabase: (databaseId: string) => ["field", {
+ databaseId
+ }] as const,
+ /** Field queries scoped to a specific organization */byOrganization: (organizationId: string) => ["field", {
+ organizationId
+ }] as const,
+ /** Get scope-aware base key */scoped: (scope?: FieldScope) => {
+ if (scope?.tableId) {
+ return fieldKeys.byTable(scope.tableId);
+ }
+ if (scope?.databaseId) {
+ return fieldKeys.byDatabase(scope.databaseId);
+ }
+ if (scope?.organizationId) {
+ return fieldKeys.byOrganization(scope.organizationId);
+ }
+ return fieldKeys.all;
+ },
+ /** List query keys (optionally scoped) */lists: (scope?: FieldScope) => [...fieldKeys.scoped(scope), "list"] as const,
+ /** List query key with variables */list: (variables?: object, scope?: FieldScope) => [...fieldKeys.lists(scope), variables] as const,
+ /** Detail query keys (optionally scoped) */details: (scope?: FieldScope) => [...fieldKeys.scoped(scope), "detail"] as const,
+ /** Detail query key for specific item */detail: (id: string | number, scope?: FieldScope) => [...fieldKeys.details(scope), id] as const
+} as const;
+/**
+
+// ============================================================================
+// Unified Query Key Store
+// ============================================================================
+
+ * Unified query key store
+ *
+ * Use this for type-safe query key access across your application.
+ *
+ * @example
+ * \`\`\`ts
+ * // Invalidate all user queries
+ * queryClient.invalidateQueries({ queryKey: queryKeys.user.all });
+ *
+ * // Invalidate user list queries
+ * queryClient.invalidateQueries({ queryKey: queryKeys.user.lists() });
+ *
+ * // Invalidate specific user
+ * queryClient.invalidateQueries({ queryKey: queryKeys.user.detail(userId) });
+ * \`\`\`
+ */
+export const queryKeys = {
+ organization: organizationKeys,
+ database: databaseKeys,
+ table: tableKeys,
+ field: fieldKeys
+} as const;
+/** Type representing all available query key scopes */
+export type QueryKeyScope = keyof typeof queryKeys;
+"
+`;
+
+exports[`generateQueryKeysFile generates query keys with simple parent-child relationship 1`] = `
+"/**
+ * Centralized query key factory
+ * @generated by @constructive-io/graphql-codegen
+ * DO NOT EDIT - changes will be overwritten
+ */
+
+// ============================================================================
+// This file provides a centralized, type-safe query key factory following
+// the lukemorales query-key-factory pattern for React Query.
+//
+// Benefits:
+// - Single source of truth for all query keys
+// - Type-safe key access with autocomplete
+// - Hierarchical invalidation (invalidate all 'user.*' queries)
+// - Scoped keys for parent-child relationships
+// ============================================================================
+
+// ============================================================================
+// Scope Types
+// ============================================================================
+
+export type PostScope = {
+ authorId?: string;
+ authorId?: string;
+};
+// ============================================================================
+// Entity Query Keys
+// ============================================================================
+
+export const userKeys = {
+ /** All user queries */all: ["user"] as const,
+ /** List query keys */lists: () => [...userKeys.all, "list"] as const,
+ /** List query key with variables */list: (variables?: object) => [...userKeys.lists(), variables] as const,
+ /** Detail query keys */details: () => [...userKeys.all, "detail"] as const,
+ /** Detail query key for specific item */detail: (id: string | number) => [...userKeys.details(), id] as const
+} as const;
+export const postKeys = {
+ /** All post queries */all: ["post"] as const,
+ /** Post queries scoped to a specific user */byUser: (authorId: string) => ["post", {
+ authorId
+ }] as const,
+ /** Post queries scoped to a specific user */byUser: (authorId: string) => ["post", {
+ authorId
+ }] as const,
+ /** Get scope-aware base key */scoped: (scope?: PostScope) => {
+ if (scope?.authorId) {
+ return postKeys.byUser(scope.authorId);
+ }
+ if (scope?.userId) {
+ return postKeys.byUser(scope.userId);
+ }
+ return postKeys.all;
+ },
+ /** List query keys (optionally scoped) */lists: (scope?: PostScope) => [...postKeys.scoped(scope), "list"] as const,
+ /** List query key with variables */list: (variables?: object, scope?: PostScope) => [...postKeys.lists(scope), variables] as const,
+ /** Detail query keys (optionally scoped) */details: (scope?: PostScope) => [...postKeys.scoped(scope), "detail"] as const,
+ /** Detail query key for specific item */detail: (id: string | number, scope?: PostScope) => [...postKeys.details(scope), id] as const
+} as const;
+/**
+
+// ============================================================================
+// Unified Query Key Store
+// ============================================================================
+
+ * Unified query key store
+ *
+ * Use this for type-safe query key access across your application.
+ *
+ * @example
+ * \`\`\`ts
+ * // Invalidate all user queries
+ * queryClient.invalidateQueries({ queryKey: queryKeys.user.all });
+ *
+ * // Invalidate user list queries
+ * queryClient.invalidateQueries({ queryKey: queryKeys.user.lists() });
+ *
+ * // Invalidate specific user
+ * queryClient.invalidateQueries({ queryKey: queryKeys.user.detail(userId) });
+ * \`\`\`
+ */
+export const queryKeys = {
+ user: userKeys,
+ post: postKeys
+} as const;
+/** Type representing all available query key scopes */
+export type QueryKeyScope = keyof typeof queryKeys;
+"
+`;
+
+exports[`generateQueryKeysFile generates query keys without scoped keys when disabled 1`] = `
+"/**
+ * Centralized query key factory
+ * @generated by @constructive-io/graphql-codegen
+ * DO NOT EDIT - changes will be overwritten
+ */
+
+// ============================================================================
+// This file provides a centralized, type-safe query key factory following
+// the lukemorales query-key-factory pattern for React Query.
+//
+// Benefits:
+// - Single source of truth for all query keys
+// - Type-safe key access with autocomplete
+// - Hierarchical invalidation (invalidate all 'user.*' queries)
+// - Scoped keys for parent-child relationships
+// ============================================================================
+
+// ============================================================================
+// Entity Query Keys
+// ============================================================================
+
+export const userKeys = {
+ /** All user queries */all: ["user"] as const,
+ /** List query keys */lists: () => [...userKeys.all, "list"] as const,
+ /** List query key with variables */list: (variables?: object) => [...userKeys.lists(), variables] as const,
+ /** Detail query keys */details: () => [...userKeys.all, "detail"] as const,
+ /** Detail query key for specific item */detail: (id: string | number) => [...userKeys.details(), id] as const
+} as const;
+export const postKeys = {
+ /** All post queries */all: ["post"] as const,
+ /** List query keys */lists: () => [...postKeys.all, "list"] as const,
+ /** List query key with variables */list: (variables?: object) => [...postKeys.lists(), variables] as const,
+ /** Detail query keys */details: () => [...postKeys.all, "detail"] as const,
+ /** Detail query key for specific item */detail: (id: string | number) => [...postKeys.details(), id] as const
+} as const;
+/**
+
+// ============================================================================
+// Unified Query Key Store
+// ============================================================================
+
+ * Unified query key store
+ *
+ * Use this for type-safe query key access across your application.
+ *
+ * @example
+ * \`\`\`ts
+ * // Invalidate all user queries
+ * queryClient.invalidateQueries({ queryKey: queryKeys.user.all });
+ *
+ * // Invalidate user list queries
+ * queryClient.invalidateQueries({ queryKey: queryKeys.user.lists() });
+ *
+ * // Invalidate specific user
+ * queryClient.invalidateQueries({ queryKey: queryKeys.user.detail(userId) });
+ * \`\`\`
+ */
+export const queryKeys = {
+ user: userKeys,
+ post: postKeys
+} as const;
+/** Type representing all available query key scopes */
+export type QueryKeyScope = keyof typeof queryKeys;
+"
+`;
diff --git a/graphql/codegen/src/__tests__/codegen/__snapshots__/react-query-hooks.test.ts.snap b/graphql/codegen/src/__tests__/codegen/__snapshots__/react-query-hooks.test.ts.snap
new file mode 100644
index 000000000..b5b055b2d
--- /dev/null
+++ b/graphql/codegen/src/__tests__/codegen/__snapshots__/react-query-hooks.test.ts.snap
@@ -0,0 +1,1830 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`Barrel File Generators generateCustomMutationsBarrel generates custom mutations barrel 1`] = `
+"/**
+ * Mutation hooks barrel export
+ * @generated by @constructive-io/graphql-codegen
+ * DO NOT EDIT - changes will be overwritten
+ */
+export * from "./useCreateUserMutation";
+export * from "./useUpdateUserMutation";
+export * from "./useDeleteUserMutation";
+export * from "./useLoginMutation";
+export * from "./useLogoutMutation";
+export * from "./useRegisterMutation";"
+`;
+
+exports[`Barrel File Generators generateCustomQueriesBarrel generates custom queries barrel 1`] = `
+"/**
+ * Query hooks barrel export
+ * @generated by @constructive-io/graphql-codegen
+ * DO NOT EDIT - changes will be overwritten
+ */
+export * from "./useUsersQuery";
+export * from "./useUserQuery";
+export * from "./useCurrentUserQuery";
+export * from "./useSearchUsersQuery";"
+`;
+
+exports[`Barrel File Generators generateMainBarrel generates main barrel with all options enabled 1`] = `
+"/**
+ * Auto-generated GraphQL SDK
+ * @generated by @constructive-io/graphql-codegen
+ *
+ * Tables: User, Post
+ *
+ * Usage:
+ *
+ * 1. Configure the client:
+ * \`\`\`ts
+ * import { configure } from './generated';
+ *
+ * configure({
+ * endpoint: 'https://api.example.com/graphql',
+ * headers: { Authorization: 'Bearer ' },
+ * });
+ * \`\`\`
+ *
+ * 2. Use the hooks:
+ * \`\`\`tsx
+ * import { useCarsQuery, useCreateCarMutation } from './generated';
+ *
+ * function MyComponent() {
+ * const { data, isLoading } = useCarsQuery({ first: 10 });
+ * const { mutate } = useCreateCarMutation();
+ * // ...
+ * }
+ * \`\`\`
+ */
+export * from "./client";
+export * from "./types";
+export * from "./schema-types";
+export * from "./query-keys";
+export * from "./mutation-keys";
+export * from "./invalidation";
+export * from "./queries";
+export * from "./mutations";"
+`;
+
+exports[`Barrel File Generators generateMainBarrel generates main barrel without custom operations 1`] = `
+"/**
+ * Auto-generated GraphQL SDK
+ * @generated by @constructive-io/graphql-codegen
+ *
+ * Tables: User
+ *
+ * Usage:
+ *
+ * 1. Configure the client:
+ * \`\`\`ts
+ * import { configure } from './generated';
+ *
+ * configure({
+ * endpoint: 'https://api.example.com/graphql',
+ * headers: { Authorization: 'Bearer ' },
+ * });
+ * \`\`\`
+ *
+ * 2. Use the hooks:
+ * \`\`\`tsx
+ * import { useCarsQuery, useCreateCarMutation } from './generated';
+ *
+ * function MyComponent() {
+ * const { data, isLoading } = useCarsQuery({ first: 10 });
+ * const { mutate } = useCreateCarMutation();
+ * // ...
+ * }
+ * \`\`\`
+ */
+export * from "./client";
+export * from "./types";
+export * from "./queries";
+export * from "./mutations";"
+`;
+
+exports[`Barrel File Generators generateMainBarrel generates main barrel without mutations 1`] = `
+"/**
+ * Auto-generated GraphQL SDK
+ * @generated by @constructive-io/graphql-codegen
+ *
+ * Tables: User, Post
+ *
+ * Usage:
+ *
+ * 1. Configure the client:
+ * \`\`\`ts
+ * import { configure } from './generated';
+ *
+ * configure({
+ * endpoint: 'https://api.example.com/graphql',
+ * headers: { Authorization: 'Bearer ' },
+ * });
+ * \`\`\`
+ *
+ * 2. Use the hooks:
+ * \`\`\`tsx
+ * import { useCarsQuery, useCreateCarMutation } from './generated';
+ *
+ * function MyComponent() {
+ * const { data, isLoading } = useCarsQuery({ first: 10 });
+ * const { mutate } = useCreateCarMutation();
+ * // ...
+ * }
+ * \`\`\`
+ */
+export * from "./client";
+export * from "./types";
+export * from "./schema-types";
+export * from "./queries";"
+`;
+
+exports[`Barrel File Generators generateMutationsBarrel generates mutations barrel for multiple tables 1`] = `
+"/**
+ * Mutation hooks barrel export
+ * @generated by @constructive-io/graphql-codegen
+ * DO NOT EDIT - changes will be overwritten
+ */
+export * from "./useCreateUserMutation";
+export * from "./useUpdateUserMutation";
+export * from "./useDeleteUserMutation";
+export * from "./useCreatePostMutation";
+export * from "./useUpdatePostMutation";
+export * from "./useDeletePostMutation";"
+`;
+
+exports[`Barrel File Generators generateMutationsBarrel generates mutations barrel for single table 1`] = `
+"/**
+ * Mutation hooks barrel export
+ * @generated by @constructive-io/graphql-codegen
+ * DO NOT EDIT - changes will be overwritten
+ */
+export * from "./useCreateUserMutation";
+export * from "./useUpdateUserMutation";
+export * from "./useDeleteUserMutation";"
+`;
+
+exports[`Barrel File Generators generateQueriesBarrel generates queries barrel for multiple tables 1`] = `
+"/**
+ * Query hooks barrel export
+ * @generated by @constructive-io/graphql-codegen
+ * DO NOT EDIT - changes will be overwritten
+ */
+export * from "./useUsersQuery";
+export * from "./useUserQuery";
+export * from "./usePostsQuery";
+export * from "./usePostQuery";"
+`;
+
+exports[`Barrel File Generators generateQueriesBarrel generates queries barrel for single table 1`] = `
+"/**
+ * Query hooks barrel export
+ * @generated by @constructive-io/graphql-codegen
+ * DO NOT EDIT - changes will be overwritten
+ */
+export * from "./useUsersQuery";
+export * from "./useUserQuery";"
+`;
+
+exports[`Custom Mutation Hook Generators generateCustomMutationHook generates custom mutation hook with arguments 1`] = `
+"/**
+ * Custom mutation hook for login
+ * @generated by @constructive-io/graphql-codegen
+ * DO NOT EDIT - changes will be overwritten
+ */
+
+import { useMutation } from "@tanstack/react-query";
+import type { UseMutationOptions } from "@tanstack/react-query";
+import { execute } from "../client";
+import type { LoginPayload } from "../schema-types";
+import { customMutationKeys } from "../mutation-keys";
+/** GraphQL mutation document */
+export const loginMutationDocument = \`
+mutation LoginMutation($email: String!, $password: String!) {
+ login(email: $email, password: $password) {
+ token
+ }
+}
+\`;
+export interface LoginMutationVariables {
+ email: string;
+ password: string;
+}
+export interface LoginMutationResult {
+ login: LoginPayload;
+}
+export function useLoginMutation(options?: Omit, 'mutationFn'>) {
+ return useMutation({
+ mutationKey: customMutationKeys.login(),
+ mutationFn: (variables: LoginMutationVariables) => execute(loginMutationDocument, variables),
+ ...options
+ });
+}"
+`;
+
+exports[`Custom Mutation Hook Generators generateCustomMutationHook generates custom mutation hook with input object argument 1`] = `
+"/**
+ * Custom mutation hook for register
+ * @generated by @constructive-io/graphql-codegen
+ * DO NOT EDIT - changes will be overwritten
+ */
+
+import { useMutation } from "@tanstack/react-query";
+import type { UseMutationOptions } from "@tanstack/react-query";
+import { execute } from "../client";
+import type { RegisterInput, RegisterPayload } from "../schema-types";
+import { customMutationKeys } from "../mutation-keys";
+/** GraphQL mutation document */
+export const registerMutationDocument = \`
+mutation RegisterMutation($input: RegisterInput!) {
+ register(input: $input) {
+ token
+ }
+}
+\`;
+export interface RegisterMutationVariables {
+ input: RegisterInput;
+}
+export interface RegisterMutationResult {
+ register: RegisterPayload;
+}
+export function useRegisterMutation(options?: Omit, 'mutationFn'>) {
+ return useMutation({
+ mutationKey: customMutationKeys.register(),
+ mutationFn: (variables: RegisterMutationVariables) => execute(registerMutationDocument, variables),
+ ...options
+ });
+}"
+`;
+
+exports[`Custom Mutation Hook Generators generateCustomMutationHook generates custom mutation hook without arguments 1`] = `
+"/**
+ * Custom mutation hook for logout
+ * @generated by @constructive-io/graphql-codegen
+ * DO NOT EDIT - changes will be overwritten
+ */
+
+import { useMutation } from "@tanstack/react-query";
+import type { UseMutationOptions } from "@tanstack/react-query";
+import { execute } from "../client";
+import type { LogoutPayload } from "../schema-types";
+import { customMutationKeys } from "../mutation-keys";
+/** GraphQL mutation document */
+export const logoutMutationDocument = \`
+mutation LogoutMutation {
+ logout {
+ success
+ }
+}
+\`;
+export interface LogoutMutationResult {
+ logout: LogoutPayload;
+}
+export function useLogoutMutation(options?: Omit, 'mutationFn'>) {
+ return useMutation({
+ mutationKey: customMutationKeys.logout(),
+ mutationFn: () => execute(logoutMutationDocument),
+ ...options
+ });
+}"
+`;
+
+exports[`Custom Mutation Hook Generators generateCustomMutationHook generates custom mutation hook without centralized keys 1`] = `
+"/**
+ * Custom mutation hook for login
+ * @generated by @constructive-io/graphql-codegen
+ * DO NOT EDIT - changes will be overwritten
+ */
+
+import { useMutation } from "@tanstack/react-query";
+import type { UseMutationOptions } from "@tanstack/react-query";
+import { execute } from "../client";
+import type { LoginPayload } from "../schema-types";
+/** GraphQL mutation document */
+export const loginMutationDocument = \`
+mutation LoginMutation($email: String!, $password: String!) {
+ login(email: $email, password: $password) {
+ token
+ }
+}
+\`;
+export interface LoginMutationVariables {
+ email: string;
+ password: string;
+}
+export interface LoginMutationResult {
+ login: LoginPayload;
+}
+export function useLoginMutation(options?: Omit, 'mutationFn'>) {
+ return useMutation({
+ mutationFn: (variables: LoginMutationVariables) => execute(loginMutationDocument, variables),
+ ...options
+ });
+}"
+`;
+
+exports[`Custom Query Hook Generators generateCustomQueryHook generates custom query hook with arguments 1`] = `
+"/**
+ * Custom query hook for searchUsers
+ * @generated by @constructive-io/graphql-codegen
+ * DO NOT EDIT - changes will be overwritten
+ */
+
+import { useQuery } from "@tanstack/react-query";
+import type { UseQueryOptions, QueryClient } from "@tanstack/react-query";
+import { execute } from "../client";
+import type { ExecuteOptions } from "../client";
+import type { User } from "../schema-types";
+import { customQueryKeys } from "../query-keys";
+/** GraphQL query document */
+export const searchUsersQueryDocument = \`
+query SearchUsersQuery($query: String!, $limit: Int) {
+ searchUsers(query: $query, limit: $limit)
+}
+\`;
+export interface SearchUsersQueryVariables {
+ query: string;
+ limit?: number;
+}
+export interface SearchUsersQueryResult {
+ searchUsers: User[];
+}
+/** Query key factory - re-exported from query-keys.ts */
+export const searchUsersQueryKey = customQueryKeys.searchUsers;
+/**
+ * Search users by name or email
+ *
+ * @example
+ * \`\`\`tsx
+ * const { data, isLoading } = useSearchUsersQuery({ query, limit });
+ *
+ * if (data?.searchUsers) {
+ * console.log(data.searchUsers);
+ * }
+ * \`\`\`
+ */
+export function useSearchUsersQuery(variables: SearchUsersQueryVariables, options?: Omit, 'queryKey' | 'queryFn'>) {
+ return useQuery({
+ queryKey: searchUsersQueryKey(variables),
+ queryFn: () => execute(searchUsersQueryDocument, variables),
+ enabled: !!variables && options?.enabled !== false,
+ ...options
+ });
+}
+/**
+ * Fetch searchUsers without React hooks
+ *
+ * @example
+ * \`\`\`ts
+ * const data = await fetchSearchUsersQuery({ query, limit });
+ * \`\`\`
+ */
+export async function fetchSearchUsersQuery(variables: SearchUsersQueryVariables, options?: ExecuteOptions): Promise {
+ return execute(searchUsersQueryDocument, variables, options);
+}
+/**
+ * Prefetch searchUsers for SSR or cache warming
+ *
+ * @example
+ * \`\`\`ts
+ * await prefetchSearchUsersQuery(queryClient, { query, limit });
+ * \`\`\`
+ */
+export async function prefetchSearchUsersQuery(queryClient: QueryClient, variables: SearchUsersQueryVariables, options?: ExecuteOptions): Promise {
+ await queryClient.prefetchQuery({
+ queryKey: searchUsersQueryKey(variables),
+ queryFn: () => execute(searchUsersQueryDocument, variables, options)
+ });
+}"
+`;
+
+exports[`Custom Query Hook Generators generateCustomQueryHook generates custom query hook without arguments 1`] = `
+"/**
+ * Custom query hook for currentUser
+ * @generated by @constructive-io/graphql-codegen
+ * DO NOT EDIT - changes will be overwritten
+ */
+
+import { useQuery } from "@tanstack/react-query";
+import type { UseQueryOptions, QueryClient } from "@tanstack/react-query";
+import { execute } from "../client";
+import type { ExecuteOptions } from "../client";
+import type { User } from "../schema-types";
+import { customQueryKeys } from "../query-keys";
+/** GraphQL query document */
+export const currentUserQueryDocument = \`
+query CurrentUserQuery {
+ currentUser
+}
+\`;
+export interface CurrentUserQueryResult {
+ currentUser: User;
+}
+/** Query key factory - re-exported from query-keys.ts */
+export const currentUserQueryKey = customQueryKeys.currentUser;
+/**
+ * Get the current authenticated user
+ *
+ * @example
+ * \`\`\`tsx
+ * const { data, isLoading } = useCurrentUserQuery();
+ *
+ * if (data?.currentUser) {
+ * console.log(data.currentUser);
+ * }
+ * \`\`\`
+ */
+export function useCurrentUserQuery(options?: Omit, 'queryKey' | 'queryFn'>) {
+ return useQuery({
+ queryKey: currentUserQueryKey(),
+ queryFn: () => execute(currentUserQueryDocument),
+ ...options
+ });
+}
+/**
+ * Fetch currentUser without React hooks
+ *
+ * @example
+ * \`\`\`ts
+ * const data = await fetchCurrentUserQuery();
+ * \`\`\`
+ */
+export async function fetchCurrentUserQuery(options?: ExecuteOptions): Promise {
+ return execute(currentUserQueryDocument, undefined, options);
+}
+/**
+ * Prefetch currentUser for SSR or cache warming
+ *
+ * @example
+ * \`\`\`ts
+ * await prefetchCurrentUserQuery(queryClient);
+ * \`\`\`
+ */
+export async function prefetchCurrentUserQuery(queryClient: QueryClient, options?: ExecuteOptions): Promise {
+ await queryClient.prefetchQuery({
+ queryKey: currentUserQueryKey(),
+ queryFn: () => execute(currentUserQueryDocument, undefined, options)
+ });
+}"
+`;
+
+exports[`Custom Query Hook Generators generateCustomQueryHook generates custom query hook without centralized keys 1`] = `
+"/**
+ * Custom query hook for currentUser
+ * @generated by @constructive-io/graphql-codegen
+ * DO NOT EDIT - changes will be overwritten
+ */
+
+import { useQuery } from "@tanstack/react-query";
+import type { UseQueryOptions, QueryClient } from "@tanstack/react-query";
+import { execute } from "../client";
+import type { ExecuteOptions } from "../client";
+import type { User } from "../schema-types";
+/** GraphQL query document */
+export const currentUserQueryDocument = \`
+query CurrentUserQuery {
+ currentUser
+}
+\`;
+export interface CurrentUserQueryResult {
+ currentUser: User;
+}
+/** Query key factory for caching */
+export const currentUserQueryKey = () => ["currentUser"] as const;
+/**
+ * Get the current authenticated user
+ *
+ * @example
+ * \`\`\`tsx
+ * const { data, isLoading } = useCurrentUserQuery();
+ *
+ * if (data?.currentUser) {
+ * console.log(data.currentUser);
+ * }
+ * \`\`\`
+ */
+export function useCurrentUserQuery(options?: Omit, 'queryKey' | 'queryFn'>) {
+ return useQuery({
+ queryKey: currentUserQueryKey(),
+ queryFn: () => execute(currentUserQueryDocument),
+ ...options
+ });
+}
+/**
+ * Fetch currentUser without React hooks
+ *
+ * @example
+ * \`\`\`ts
+ * const data = await fetchCurrentUserQuery();
+ * \`\`\`
+ */
+export async function fetchCurrentUserQuery(options?: ExecuteOptions): Promise {
+ return execute(currentUserQueryDocument, undefined, options);
+}
+/**
+ * Prefetch currentUser for SSR or cache warming
+ *
+ * @example
+ * \`\`\`ts
+ * await prefetchCurrentUserQuery(queryClient);
+ * \`\`\`
+ */
+export async function prefetchCurrentUserQuery(queryClient: QueryClient, options?: ExecuteOptions): Promise {
+ await queryClient.prefetchQuery({
+ queryKey: currentUserQueryKey(),
+ queryFn: () => execute(currentUserQueryDocument, undefined, options)
+ });
+}"
+`;
+
+exports[`Mutation Hook Generators generateCreateMutationHook generates create mutation hook for simple table 1`] = `
+"/**
+ * Create mutation hook for User
+ * @generated by @constructive-io/graphql-codegen
+ * DO NOT EDIT - changes will be overwritten
+ */
+
+import { useMutation, useQueryClient } from "@tanstack/react-query";
+import type { UseMutationOptions } from "@tanstack/react-query";
+import { execute } from "../client";
+import type { User } from "../types";
+import { userKeys } from "../query-keys";
+import { userMutationKeys } from "../mutation-keys";
+export type { User } from "../types";
+export const createUserMutationDocument = \`
+mutation CreateUserMutation($input: CreateUserInput!) {
+ createUser(input: $input) {
+ user {
+ id
+ email
+ name
+ createdAt
+ }
+ }
+}
+\`;
+/** Input type for creating a User */
+interface UserCreateInput {
+ email?: string | null;
+ name?: string | null;
+}
+export interface CreateUserMutationVariables {
+ input: {
+ user: UserCreateInput;
+ };
+}
+export interface CreateUserMutationResult {
+ createUser: {
+ user: User;
+ };
+}
+/**
+ * Mutation hook for creating a User
+ *
+ * @example
+ * \`\`\`tsx
+ * const { mutate, isPending } = useCreateUserMutation();
+ *
+ * mutate({
+ * input: {
+ * user: {
+ * // ... fields
+ * },
+ * },
+ * });
+ * \`\`\`
+ */
+export function useCreateUserMutation(options?: Omit, 'mutationFn'>) {
+ const queryClient = useQueryClient();
+ return useMutation({
+ mutationKey: userMutationKeys.create(),
+ mutationFn: (variables: CreateUserMutationVariables) => execute(createUserMutationDocument, variables),
+ onSuccess: () => {
+ queryClient.invalidateQueries({
+ queryKey: userKeys.lists()
+ });
+ },
+ ...options
+ });
+}"
+`;
+
+exports[`Mutation Hook Generators generateCreateMutationHook generates create mutation hook for table with relationships 1`] = `
+"/**
+ * Create mutation hook for Post
+ * @generated by @constructive-io/graphql-codegen
+ * DO NOT EDIT - changes will be overwritten
+ */
+
+import { useMutation, useQueryClient } from "@tanstack/react-query";
+import type { UseMutationOptions } from "@tanstack/react-query";
+import { execute } from "../client";
+import type { Post } from "../types";
+import { postKeys } from "../query-keys";
+import type { PostScope } from "../query-keys";
+import { postMutationKeys } from "../mutation-keys";
+export type { Post } from "../types";
+export const createPostMutationDocument = \`
+mutation CreatePostMutation($input: CreatePostInput!) {
+ createPost(input: $input) {
+ post {
+ id
+ title
+ content
+ authorId
+ published
+ createdAt
+ }
+ }
+}
+\`;
+/** Input type for creating a Post */
+interface PostCreateInput {
+ title?: string | null;
+ content?: string | null;
+ authorId?: string | null;
+ published?: boolean | null;
+}
+export interface CreatePostMutationVariables {
+ input: {
+ post: PostCreateInput;
+ };
+}
+export interface CreatePostMutationResult {
+ createPost: {
+ post: Post;
+ };
+}
+/**
+ * Mutation hook for creating a Post
+ *
+ * @example
+ * \`\`\`tsx
+ * const { mutate, isPending } = useCreatePostMutation();
+ *
+ * mutate({
+ * input: {
+ * post: {
+ * // ... fields
+ * },
+ * },
+ * });
+ * \`\`\`
+ */
+export function useCreatePostMutation(options?: Omit, 'mutationFn'>) {
+ const queryClient = useQueryClient();
+ return useMutation({
+ mutationKey: postMutationKeys.create(),
+ mutationFn: (variables: CreatePostMutationVariables) => execute(createPostMutationDocument, variables),
+ onSuccess: () => {
+ queryClient.invalidateQueries({
+ queryKey: postKeys.lists()
+ });
+ },
+ ...options
+ });
+}"
+`;
+
+exports[`Mutation Hook Generators generateCreateMutationHook generates create mutation hook without centralized keys 1`] = `
+"/**
+ * Create mutation hook for User
+ * @generated by @constructive-io/graphql-codegen
+ * DO NOT EDIT - changes will be overwritten
+ */
+
+import { useMutation, useQueryClient } from "@tanstack/react-query";
+import type { UseMutationOptions } from "@tanstack/react-query";
+import { execute } from "../client";
+import type { User } from "../types";
+export type { User } from "../types";
+export const createUserMutationDocument = \`
+mutation CreateUserMutation($input: CreateUserInput!) {
+ createUser(input: $input) {
+ user {
+ id
+ email
+ name
+ createdAt
+ }
+ }
+}
+\`;
+/** Input type for creating a User */
+interface UserCreateInput {
+ email?: string | null;
+ name?: string | null;
+}
+export interface CreateUserMutationVariables {
+ input: {
+ user: UserCreateInput;
+ };
+}
+export interface CreateUserMutationResult {
+ createUser: {
+ user: User;
+ };
+}
+/**
+ * Mutation hook for creating a User
+ *
+ * @example
+ * \`\`\`tsx
+ * const { mutate, isPending } = useCreateUserMutation();
+ *
+ * mutate({
+ * input: {
+ * user: {
+ * // ... fields
+ * },
+ * },
+ * });
+ * \`\`\`
+ */
+export function useCreateUserMutation(options?: Omit, 'mutationFn'>) {
+ const queryClient = useQueryClient();
+ return useMutation({
+ mutationFn: (variables: CreateUserMutationVariables) => execute(createUserMutationDocument, variables),
+ onSuccess: () => {
+ queryClient.invalidateQueries({
+ queryKey: ["user", "list"]
+ });
+ },
+ ...options
+ });
+}"
+`;
+
+exports[`Mutation Hook Generators generateDeleteMutationHook generates delete mutation hook for simple table 1`] = `
+"/**
+ * Delete mutation hook for User
+ * @generated by @constructive-io/graphql-codegen
+ * DO NOT EDIT - changes will be overwritten
+ */
+
+import { useMutation, useQueryClient } from "@tanstack/react-query";
+import type { UseMutationOptions } from "@tanstack/react-query";
+import { execute } from "../client";
+import { userKeys } from "../query-keys";
+import { userMutationKeys } from "../mutation-keys";
+export const deleteUserMutationDocument = \`
+mutation DeleteUserMutation($input: DeleteUserInput!) {
+ deleteUser(input: $input) {
+ clientMutationId
+ deletedId
+ }
+}
+\`;
+export interface DeleteUserMutationVariables {
+ input: {
+ id: string;
+ };
+}
+export interface DeleteUserMutationResult {
+ deleteUser: {
+ clientMutationId: string | null;
+ deletedId: string | null;
+ };
+}
+/**
+ * Mutation hook for deleting a User
+ *
+ * @example
+ * \`\`\`tsx
+ * const { mutate, isPending } = useDeleteUserMutation();
+ *
+ * mutate({
+ * input: {
+ * id: 'value-to-delete',
+ * },
+ * });
+ * \`\`\`
+ */
+export function useDeleteUserMutation(options?: Omit, 'mutationFn'>) {
+ const queryClient = useQueryClient();
+ return useMutation({
+ mutationKey: userMutationKeys.all,
+ mutationFn: (variables: DeleteUserMutationVariables) => execute(deleteUserMutationDocument, variables),
+ onSuccess: (_, variables) => {
+ queryClient.removeQueries({
+ queryKey: userKeys.detail(variables.input.id)
+ });
+ queryClient.invalidateQueries({
+ queryKey: userKeys.lists()
+ });
+ },
+ ...options
+ });
+}"
+`;
+
+exports[`Mutation Hook Generators generateDeleteMutationHook generates delete mutation hook for table with relationships 1`] = `
+"/**
+ * Delete mutation hook for Post
+ * @generated by @constructive-io/graphql-codegen
+ * DO NOT EDIT - changes will be overwritten
+ */
+
+import { useMutation, useQueryClient } from "@tanstack/react-query";
+import type { UseMutationOptions } from "@tanstack/react-query";
+import { execute } from "../client";
+import { postKeys } from "../query-keys";
+import type { PostScope } from "../query-keys";
+import { postMutationKeys } from "../mutation-keys";
+export const deletePostMutationDocument = \`
+mutation DeletePostMutation($input: DeletePostInput!) {
+ deletePost(input: $input) {
+ clientMutationId
+ deletedId
+ }
+}
+\`;
+export interface DeletePostMutationVariables {
+ input: {
+ id: string;
+ };
+}
+export interface DeletePostMutationResult {
+ deletePost: {
+ clientMutationId: string | null;
+ deletedId: string | null;
+ };
+}
+/**
+ * Mutation hook for deleting a Post
+ *
+ * @example
+ * \`\`\`tsx
+ * const { mutate, isPending } = useDeletePostMutation();
+ *
+ * mutate({
+ * input: {
+ * id: 'value-to-delete',
+ * },
+ * });
+ * \`\`\`
+ */
+export function useDeletePostMutation(options?: Omit, 'mutationFn'>) {
+ const queryClient = useQueryClient();
+ return useMutation({
+ mutationKey: postMutationKeys.all,
+ mutationFn: (variables: DeletePostMutationVariables) => execute(deletePostMutationDocument, variables),
+ onSuccess: (_, variables) => {
+ queryClient.removeQueries({
+ queryKey: postKeys.detail(variables.input.id)
+ });
+ queryClient.invalidateQueries({
+ queryKey: postKeys.lists()
+ });
+ },
+ ...options
+ });
+}"
+`;
+
+exports[`Mutation Hook Generators generateDeleteMutationHook generates delete mutation hook without centralized keys 1`] = `
+"/**
+ * Delete mutation hook for User
+ * @generated by @constructive-io/graphql-codegen
+ * DO NOT EDIT - changes will be overwritten
+ */
+
+import { useMutation, useQueryClient } from "@tanstack/react-query";
+import type { UseMutationOptions } from "@tanstack/react-query";
+import { execute } from "../client";
+export const deleteUserMutationDocument = \`
+mutation DeleteUserMutation($input: DeleteUserInput!) {
+ deleteUser(input: $input) {
+ clientMutationId
+ deletedId
+ }
+}
+\`;
+export interface DeleteUserMutationVariables {
+ input: {
+ id: string;
+ };
+}
+export interface DeleteUserMutationResult {
+ deleteUser: {
+ clientMutationId: string | null;
+ deletedId: string | null;
+ };
+}
+/**
+ * Mutation hook for deleting a User
+ *
+ * @example
+ * \`\`\`tsx
+ * const { mutate, isPending } = useDeleteUserMutation();
+ *
+ * mutate({
+ * input: {
+ * id: 'value-to-delete',
+ * },
+ * });
+ * \`\`\`
+ */
+export function useDeleteUserMutation(options?: Omit, 'mutationFn'>) {
+ const queryClient = useQueryClient();
+ return useMutation({
+ mutationFn: (variables: DeleteUserMutationVariables) => execute(deleteUserMutationDocument, variables),
+ onSuccess: (_, variables) => {
+ queryClient.removeQueries({
+ queryKey: ["user", "detail", variables.input.id]
+ });
+ queryClient.invalidateQueries({
+ queryKey: ["user", "list"]
+ });
+ },
+ ...options
+ });
+}"
+`;
+
+exports[`Mutation Hook Generators generateUpdateMutationHook generates update mutation hook for simple table 1`] = `
+"/**
+ * Update mutation hook for User
+ * @generated by @constructive-io/graphql-codegen
+ * DO NOT EDIT - changes will be overwritten
+ */
+
+import { useMutation, useQueryClient } from "@tanstack/react-query";
+import type { UseMutationOptions } from "@tanstack/react-query";
+import { execute } from "../client";
+import type { User } from "../types";
+import { userKeys } from "../query-keys";
+import { userMutationKeys } from "../mutation-keys";
+export type { User } from "../types";
+export const updateUserMutationDocument = \`
+mutation UpdateUserMutation($input: UpdateUserInput!) {
+ updateUser(input: $input) {
+ user {
+ id
+ email
+ name
+ createdAt
+ }
+ }
+}
+\`;
+/** Patch type for updating a User - all fields optional */
+interface UserPatch {
+ email?: string | null;
+ name?: string | null;
+ createdAt?: string | null;
+}
+export interface UpdateUserMutationVariables {
+ input: {
+ id: string;
+ patch: UserPatch;
+ };
+}
+export interface UpdateUserMutationResult {
+ updateUser: {
+ user: User;
+ };
+}
+/**
+ * Mutation hook for updating a User
+ *
+ * @example
+ * \`\`\`tsx
+ * const { mutate, isPending } = useUpdateUserMutation();
+ *
+ * mutate({
+ * input: {
+ * id: 'value-here',
+ * patch: {
+ * // ... fields to update
+ * },
+ * },
+ * });
+ * \`\`\`
+ */
+export function useUpdateUserMutation(options?: Omit, 'mutationFn'>) {
+ const queryClient = useQueryClient();
+ return useMutation({
+ mutationKey: userMutationKeys.all,
+ mutationFn: (variables: UpdateUserMutationVariables) => execute(updateUserMutationDocument, variables),
+ onSuccess: (_, variables) => {
+ queryClient.invalidateQueries({
+ queryKey: userKeys.detail(variables.input.id)
+ });
+ queryClient.invalidateQueries({
+ queryKey: userKeys.lists()
+ });
+ },
+ ...options
+ });
+}"
+`;
+
+exports[`Mutation Hook Generators generateUpdateMutationHook generates update mutation hook for table with relationships 1`] = `
+"/**
+ * Update mutation hook for Post
+ * @generated by @constructive-io/graphql-codegen
+ * DO NOT EDIT - changes will be overwritten
+ */
+
+import { useMutation, useQueryClient } from "@tanstack/react-query";
+import type { UseMutationOptions } from "@tanstack/react-query";
+import { execute } from "../client";
+import type { Post } from "../types";
+import { postKeys } from "../query-keys";
+import type { PostScope } from "../query-keys";
+import { postMutationKeys } from "../mutation-keys";
+export type { Post } from "../types";
+export const updatePostMutationDocument = \`
+mutation UpdatePostMutation($input: UpdatePostInput!) {
+ updatePost(input: $input) {
+ post {
+ id
+ title
+ content
+ authorId
+ published
+ createdAt
+ }
+ }
+}
+\`;
+/** Patch type for updating a Post - all fields optional */
+interface PostPatch {
+ title?: string | null;
+ content?: string | null;
+ authorId?: string | null;
+ published?: boolean | null;
+ createdAt?: string | null;
+}
+export interface UpdatePostMutationVariables {
+ input: {
+ id: string;
+ patch: PostPatch;
+ };
+}
+export interface UpdatePostMutationResult {
+ updatePost: {
+ post: Post;
+ };
+}
+/**
+ * Mutation hook for updating a Post
+ *
+ * @example
+ * \`\`\`tsx
+ * const { mutate, isPending } = useUpdatePostMutation();
+ *
+ * mutate({
+ * input: {
+ * id: 'value-here',
+ * patch: {
+ * // ... fields to update
+ * },
+ * },
+ * });
+ * \`\`\`
+ */
+export function useUpdatePostMutation(options?: Omit, 'mutationFn'>) {
+ const queryClient = useQueryClient();
+ return useMutation({
+ mutationKey: postMutationKeys.all,
+ mutationFn: (variables: UpdatePostMutationVariables) => execute(updatePostMutationDocument, variables),
+ onSuccess: (_, variables) => {
+ queryClient.invalidateQueries({
+ queryKey: postKeys.detail(variables.input.id)
+ });
+ queryClient.invalidateQueries({
+ queryKey: postKeys.lists()
+ });
+ },
+ ...options
+ });
+}"
+`;
+
+exports[`Mutation Hook Generators generateUpdateMutationHook generates update mutation hook without centralized keys 1`] = `
+"/**
+ * Update mutation hook for User
+ * @generated by @constructive-io/graphql-codegen
+ * DO NOT EDIT - changes will be overwritten
+ */
+
+import { useMutation, useQueryClient } from "@tanstack/react-query";
+import type { UseMutationOptions } from "@tanstack/react-query";
+import { execute } from "../client";
+import type { User } from "../types";
+export type { User } from "../types";
+export const updateUserMutationDocument = \`
+mutation UpdateUserMutation($input: UpdateUserInput!) {
+ updateUser(input: $input) {
+ user {
+ id
+ email
+ name
+ createdAt
+ }
+ }
+}
+\`;
+/** Patch type for updating a User - all fields optional */
+interface UserPatch {
+ email?: string | null;
+ name?: string | null;
+ createdAt?: string | null;
+}
+export interface UpdateUserMutationVariables {
+ input: {
+ id: string;
+ patch: UserPatch;
+ };
+}
+export interface UpdateUserMutationResult {
+ updateUser: {
+ user: User;
+ };
+}
+/**
+ * Mutation hook for updating a User
+ *
+ * @example
+ * \`\`\`tsx
+ * const { mutate, isPending } = useUpdateUserMutation();
+ *
+ * mutate({
+ * input: {
+ * id: 'value-here',
+ * patch: {
+ * // ... fields to update
+ * },
+ * },
+ * });
+ * \`\`\`
+ */
+export function useUpdateUserMutation(options?: Omit, 'mutationFn'>) {
+ const queryClient = useQueryClient();
+ return useMutation({
+ mutationFn: (variables: UpdateUserMutationVariables) => execute(updateUserMutationDocument, variables),
+ onSuccess: (_, variables) => {
+ queryClient.invalidateQueries({
+ queryKey: ["user", "detail", variables.input.id]
+ });
+ queryClient.invalidateQueries({
+ queryKey: ["user", "list"]
+ });
+ },
+ ...options
+ });
+}"
+`;
+
+exports[`Query Hook Generators generateListQueryHook generates list query hook for simple table 1`] = `
+"/**
+ * List query hook for User
+ * @generated by @constructive-io/graphql-codegen
+ * DO NOT EDIT - changes will be overwritten
+ */
+
+import { useQuery } from "@tanstack/react-query";
+import type { UseQueryOptions, QueryClient } from "@tanstack/react-query";
+import { execute } from "../client";
+import type { ExecuteOptions } from "../client";
+import type { User, UUIDFilter, StringFilter, DatetimeFilter } from "../types";
+import { userKeys } from "../query-keys";
+export type { User } from "../types";
+export const usersQueryDocument = \`
+query UsersQuery($first: Int, $offset: Int, $filter: UserFilter, $orderBy: [UsersOrderBy!]) {
+ users(first: $first, offset: $offset, filter: $filter, orderBy: $orderBy) {
+ totalCount
+ nodes {
+ id
+ email
+ name
+ createdAt
+ }
+ pageInfo {
+ hasNextPage
+ hasPreviousPage
+ startCursor
+ endCursor
+ }
+ }
+}
+\`;
+interface UserFilter {
+ id?: UUIDFilter;
+ email?: StringFilter;
+ name?: StringFilter;
+ createdAt?: DatetimeFilter;
+ and?: UserFilter[];
+ or?: UserFilter[];
+ not?: UserFilter;
+}
+type UsersOrderBy = "ID_ASC" | "ID_DESC" | "EMAIL_ASC" | "EMAIL_DESC" | "NAME_ASC" | "NAME_DESC" | "CREATED_AT_ASC" | "CREATED_AT_DESC" | "NATURAL" | "PRIMARY_KEY_ASC" | "PRIMARY_KEY_DESC";
+export interface UsersQueryVariables {
+ first?: number;
+ offset?: number;
+ filter?: UserFilter;
+ orderBy?: UsersOrderBy[];
+}
+export interface UsersQueryResult {
+ users: {
+ totalCount: number;
+ nodes: User[];
+ pageInfo: {
+ hasNextPage: boolean;
+ hasPreviousPage: boolean;
+ startCursor: string | null;
+ endCursor: string | null;
+ };
+ };
+}
+/** Query key factory - re-exported from query-keys.ts */
+export const usersQueryKey = userKeys.list;
+/**
+ * Query hook for fetching User list
+ *
+ * @example
+ * \`\`\`tsx
+ * const { data, isLoading } = useUsersQuery({
+ * first: 10,
+ * filter: { name: { equalTo: "example" } },
+ * orderBy: ['CREATED_AT_DESC'],
+ * });
+ * \`\`\`
+ */
+export function useUsersQuery(variables?: UsersQueryVariables, options?: Omit, 'queryKey' | 'queryFn'>) {
+ return useQuery({
+ queryKey: userKeys.list(variables),
+ queryFn: () => execute(usersQueryDocument, variables),
+ ...options
+ });
+}
+/**
+ * Fetch User list without React hooks
+ *
+ * @example
+ * \`\`\`ts
+ * // Direct fetch
+ * const data = await fetchUsersQuery({ first: 10 });
+ *
+ * // With QueryClient
+ * const data = await queryClient.fetchQuery({
+ * queryKey: usersQueryKey(variables),
+ * queryFn: () => fetchUsersQuery(variables),
+ * });
+ * \`\`\`
+ */
+export async function fetchUsersQuery(variables?: UsersQueryVariables, options?: ExecuteOptions): Promise {
+ return execute(usersQueryDocument, variables, options);
+}
+/**
+ * Prefetch User list for SSR or cache warming
+ *
+ * @example
+ * \`\`\`ts
+ * await prefetchUsersQuery(queryClient, { first: 10 });
+ * \`\`\`
+ */
+export async function prefetchUsersQuery(queryClient: QueryClient, variables?: UsersQueryVariables, options?: ExecuteOptions): Promise {
+ await queryClient.prefetchQuery({
+ queryKey: userKeys.list(variables),
+ queryFn: () => execute(usersQueryDocument, variables, options)
+ });
+}"
+`;
+
+exports[`Query Hook Generators generateListQueryHook generates list query hook for table with relationships 1`] = `
+"/**
+ * List query hook for Post
+ * @generated by @constructive-io/graphql-codegen
+ * DO NOT EDIT - changes will be overwritten
+ */
+
+import { useQuery } from "@tanstack/react-query";
+import type { UseQueryOptions, QueryClient } from "@tanstack/react-query";
+import { execute } from "../client";
+import type { ExecuteOptions } from "../client";
+import type { Post, UUIDFilter, StringFilter, BooleanFilter, DatetimeFilter } from "../types";
+import { postKeys } from "../query-keys";
+import type { PostScope } from "../query-keys";
+export type { Post } from "../types";
+export const postsQueryDocument = \`
+query PostsQuery($first: Int, $offset: Int, $filter: PostFilter, $orderBy: [PostsOrderBy!]) {
+ posts(first: $first, offset: $offset, filter: $filter, orderBy: $orderBy) {
+ totalCount
+ nodes {
+ id
+ title
+ content
+ authorId
+ published
+ createdAt
+ }
+ pageInfo {
+ hasNextPage
+ hasPreviousPage
+ startCursor
+ endCursor
+ }
+ }
+}
+\`;
+interface PostFilter {
+ id?: UUIDFilter;
+ title?: StringFilter;
+ content?: StringFilter;
+ authorId?: UUIDFilter;
+ published?: BooleanFilter;
+ createdAt?: DatetimeFilter;
+ and?: PostFilter[];
+ or?: PostFilter[];
+ not?: PostFilter;
+}
+type PostsOrderBy = "ID_ASC" | "ID_DESC" | "TITLE_ASC" | "TITLE_DESC" | "CONTENT_ASC" | "CONTENT_DESC" | "AUTHOR_ID_ASC" | "AUTHOR_ID_DESC" | "PUBLISHED_ASC" | "PUBLISHED_DESC" | "CREATED_AT_ASC" | "CREATED_AT_DESC" | "NATURAL" | "PRIMARY_KEY_ASC" | "PRIMARY_KEY_DESC";
+export interface PostsQueryVariables {
+ first?: number;
+ offset?: number;
+ filter?: PostFilter;
+ orderBy?: PostsOrderBy[];
+}
+export interface PostsQueryResult {
+ posts: {
+ totalCount: number;
+ nodes: Post[];
+ pageInfo: {
+ hasNextPage: boolean;
+ hasPreviousPage: boolean;
+ startCursor: string | null;
+ endCursor: string | null;
+ };
+ };
+}
+/** Query key factory - re-exported from query-keys.ts */
+export const postsQueryKey = postKeys.list;
+/**
+ * Query hook for fetching Post list
+ *
+ * @example
+ * \`\`\`tsx
+ * const { data, isLoading } = usePostsQuery({
+ * first: 10,
+ * filter: { name: { equalTo: "example" } },
+ * orderBy: ['CREATED_AT_DESC'],
+ * });
+ * \`\`\`
+ *
+ * @example With scope for hierarchical cache invalidation
+ * \`\`\`tsx
+ * const { data } = usePostsQuery(
+ * { first: 10 },
+ * { scope: { parentId: 'parent-id' } }
+ * );
+ * \`\`\`
+ */
+export function usePostsQuery(variables?: PostsQueryVariables, options?: Omit, 'queryKey' | 'queryFn'> & { scope?: PostScope }) {
+ const {
+ scope,
+ ...queryOptions
+ } = options ?? {};
+ return useQuery({
+ queryKey: postKeys.list(variables, scope),
+ queryFn: () => execute(postsQueryDocument, variables),
+ ...queryOptions
+ });
+}
+/**
+ * Fetch Post list without React hooks
+ *
+ * @example
+ * \`\`\`ts
+ * // Direct fetch
+ * const data = await fetchPostsQuery({ first: 10 });
+ *
+ * // With QueryClient
+ * const data = await queryClient.fetchQuery({
+ * queryKey: postsQueryKey(variables),
+ * queryFn: () => fetchPostsQuery(variables),
+ * });
+ * \`\`\`
+ */
+export async function fetchPostsQuery(variables?: PostsQueryVariables, options?: ExecuteOptions): Promise {
+ return execute(postsQueryDocument, variables, options);
+}
+/**
+ * Prefetch Post list for SSR or cache warming
+ *
+ * @example
+ * \`\`\`ts
+ * await prefetchPostsQuery(queryClient, { first: 10 });
+ * \`\`\`
+ */
+export async function prefetchPostsQuery(queryClient: QueryClient, variables?: PostsQueryVariables, scope?: PostScope, options?: ExecuteOptions): Promise {
+ await queryClient.prefetchQuery({
+ queryKey: postKeys.list(variables, scope),
+ queryFn: () => execute(postsQueryDocument, variables, options)
+ });
+}"
+`;
+
+exports[`Query Hook Generators generateListQueryHook generates list query hook without centralized keys 1`] = `
+"/**
+ * List query hook for User
+ * @generated by @constructive-io/graphql-codegen
+ * DO NOT EDIT - changes will be overwritten
+ */
+
+import { useQuery } from "@tanstack/react-query";
+import type { UseQueryOptions, QueryClient } from "@tanstack/react-query";
+import { execute } from "../client";
+import type { ExecuteOptions } from "../client";
+import type { User, UUIDFilter, StringFilter, DatetimeFilter } from "../types";
+export type { User } from "../types";
+export const usersQueryDocument = \`
+query UsersQuery($first: Int, $offset: Int, $filter: UserFilter, $orderBy: [UsersOrderBy!]) {
+ users(first: $first, offset: $offset, filter: $filter, orderBy: $orderBy) {
+ totalCount
+ nodes {
+ id
+ email
+ name
+ createdAt
+ }
+ pageInfo {
+ hasNextPage
+ hasPreviousPage
+ startCursor
+ endCursor
+ }
+ }
+}
+\`;
+interface UserFilter {
+ id?: UUIDFilter;
+ email?: StringFilter;
+ name?: StringFilter;
+ createdAt?: DatetimeFilter;
+ and?: UserFilter[];
+ or?: UserFilter[];
+ not?: UserFilter;
+}
+type UsersOrderBy = "ID_ASC" | "ID_DESC" | "EMAIL_ASC" | "EMAIL_DESC" | "NAME_ASC" | "NAME_DESC" | "CREATED_AT_ASC" | "CREATED_AT_DESC" | "NATURAL" | "PRIMARY_KEY_ASC" | "PRIMARY_KEY_DESC";
+export interface UsersQueryVariables {
+ first?: number;
+ offset?: number;
+ filter?: UserFilter;
+ orderBy?: UsersOrderBy[];
+}
+export interface UsersQueryResult {
+ users: {
+ totalCount: number;
+ nodes: User[];
+ pageInfo: {
+ hasNextPage: boolean;
+ hasPreviousPage: boolean;
+ startCursor: string | null;
+ endCursor: string | null;
+ };
+ };
+}
+export const usersQueryKey = (variables?: UsersQueryVariables) => ["user", "list", variables] as const;
+/**
+ * Query hook for fetching User list
+ *
+ * @example
+ * \`\`\`tsx
+ * const { data, isLoading } = useUsersQuery({
+ * first: 10,
+ * filter: { name: { equalTo: "example" } },
+ * orderBy: ['CREATED_AT_DESC'],
+ * });
+ * \`\`\`
+ */
+export function useUsersQuery(variables?: UsersQueryVariables, options?: Omit, 'queryKey' | 'queryFn'>) {
+ return useQuery({
+ queryKey: usersQueryKey(variables),
+ queryFn: () => execute(usersQueryDocument, variables),
+ ...options
+ });
+}
+/**
+ * Fetch User list without React hooks
+ *
+ * @example
+ * \`\`\`ts
+ * // Direct fetch
+ * const data = await fetchUsersQuery({ first: 10 });
+ *
+ * // With QueryClient
+ * const data = await queryClient.fetchQuery({
+ * queryKey: usersQueryKey(variables),
+ * queryFn: () => fetchUsersQuery(variables),
+ * });
+ * \`\`\`
+ */
+export async function fetchUsersQuery(variables?: UsersQueryVariables, options?: ExecuteOptions): Promise {
+ return execute(usersQueryDocument, variables, options);
+}
+/**
+ * Prefetch User list for SSR or cache warming
+ *
+ * @example
+ * \`\`\`ts
+ * await prefetchUsersQuery(queryClient, { first: 10 });
+ * \`\`\`
+ */
+export async function prefetchUsersQuery(queryClient: QueryClient, variables?: UsersQueryVariables, options?: ExecuteOptions): Promise {
+ await queryClient.prefetchQuery({
+ queryKey: usersQueryKey(variables),
+ queryFn: () => execute(usersQueryDocument, variables, options)
+ });
+}"
+`;
+
+exports[`Query Hook Generators generateSingleQueryHook generates single query hook for simple table 1`] = `
+"/**
+ * Single item query hook for User
+ * @generated by @constructive-io/graphql-codegen
+ * DO NOT EDIT - changes will be overwritten
+ */
+
+import { useQuery } from "@tanstack/react-query";
+import type { UseQueryOptions, QueryClient } from "@tanstack/react-query";
+import { execute } from "../client";
+import type { ExecuteOptions } from "../client";
+import type { User } from "../types";
+import { userKeys } from "../query-keys";
+export type { User } from "../types";
+export const userQueryDocument = \`
+query UserQuery($id: UUID!) {
+ user(id: $id) {
+ id
+ email
+ name
+ createdAt
+ }
+}
+\`;
+export interface UserQueryVariables {
+ id: string;
+}
+export interface UserQueryResult {
+ user: User | null;
+}
+/** Query key factory - re-exported from query-keys.ts */
+export const userQueryKey = userKeys.detail;
+/**
+ * Query hook for fetching a single User
+ *
+ * @example
+ * \`\`\`tsx
+ * const { data, isLoading } = useUserQuery({ id: 'some-id' });
+ * \`\`\`
+ */
+export function useUserQuery(variables: UserQueryVariables, options?: Omit, 'queryKey' | 'queryFn'>) {
+ return useQuery({
+ queryKey: userKeys.detail(variables.id),
+ queryFn: () => execute(userQueryDocument, variables),
+ ...options
+ });
+}
+/**
+ * Fetch a single User without React hooks
+ *
+ * @example
+ * \`\`\`ts
+ * const data = await fetchUserQuery({ id: 'some-id' });
+ * \`\`\`
+ */
+export async function fetchUserQuery(variables: UserQueryVariables, options?: ExecuteOptions): Promise {
+ return execute(userQueryDocument, variables, options);
+}
+/**
+ * Prefetch a single User for SSR or cache warming
+ *
+ * @example
+ * \`\`\`ts
+ * await prefetchUserQuery(queryClient, { id: 'some-id' });
+ * \`\`\`
+ */
+export async function prefetchUserQuery(queryClient: QueryClient, variables: UserQueryVariables, options?: ExecuteOptions): Promise {
+ await queryClient.prefetchQuery({
+ queryKey: userKeys.detail(variables.id),
+ queryFn: () => execute(userQueryDocument, variables, options)
+ });
+}"
+`;
+
+exports[`Query Hook Generators generateSingleQueryHook generates single query hook for table with relationships 1`] = `
+"/**
+ * Single item query hook for Post
+ * @generated by @constructive-io/graphql-codegen
+ * DO NOT EDIT - changes will be overwritten
+ */
+
+import { useQuery } from "@tanstack/react-query";
+import type { UseQueryOptions, QueryClient } from "@tanstack/react-query";
+import { execute } from "../client";
+import type { ExecuteOptions } from "../client";
+import type { Post } from "../types";
+import { postKeys } from "../query-keys";
+import type { PostScope } from "../query-keys";
+export type { Post } from "../types";
+export const postQueryDocument = \`
+query PostQuery($id: UUID!) {
+ post(id: $id) {
+ id
+ title
+ content
+ authorId
+ published
+ createdAt
+ }
+}
+\`;
+export interface PostQueryVariables {
+ id: string;
+}
+export interface PostQueryResult {
+ post: Post | null;
+}
+/** Query key factory - re-exported from query-keys.ts */
+export const postQueryKey = postKeys.detail;
+/**
+ * Query hook for fetching a single Post
+ *
+ * @example
+ * \`\`\`tsx
+ * const { data, isLoading } = usePostQuery({ id: 'some-id' });
+ * \`\`\`
+ *
+ * @example With scope for hierarchical cache invalidation
+ * \`\`\`tsx
+ * const { data } = usePostQuery(
+ * { id: 'some-id' },
+ * { scope: { parentId: 'parent-id' } }
+ * );
+ * \`\`\`
+ */
+export function usePostQuery(variables: PostQueryVariables, options?: Omit, 'queryKey' | 'queryFn'> & { scope?: PostScope }) {
+ const {
+ scope,
+ ...queryOptions
+ } = options ?? {};
+ return useQuery({
+ queryKey: postKeys.detail(variables.id, scope),
+ queryFn: () => execute(postQueryDocument, variables),
+ ...queryOptions
+ });
+}
+/**
+ * Fetch a single Post without React hooks
+ *
+ * @example
+ * \`\`\`ts
+ * const data = await fetchPostQuery({ id: 'some-id' });
+ * \`\`\`
+ */
+export async function fetchPostQuery(variables: PostQueryVariables, options?: ExecuteOptions): Promise {
+ return execute(postQueryDocument, variables, options);
+}
+/**
+ * Prefetch a single Post for SSR or cache warming
+ *
+ * @example
+ * \`\`\`ts
+ * await prefetchPostQuery(queryClient, { id: 'some-id' });
+ * \`\`\`
+ */
+export async function prefetchPostQuery(queryClient: QueryClient, variables: PostQueryVariables, scope?: PostScope, options?: ExecuteOptions): Promise {
+ await queryClient.prefetchQuery({
+ queryKey: postKeys.detail(variables.id, scope),
+ queryFn: () => execute(postQueryDocument, variables, options)
+ });
+}"
+`;
+
+exports[`Query Hook Generators generateSingleQueryHook generates single query hook without centralized keys 1`] = `
+"/**
+ * Single item query hook for User
+ * @generated by @constructive-io/graphql-codegen
+ * DO NOT EDIT - changes will be overwritten
+ */
+
+import { useQuery } from "@tanstack/react-query";
+import type { UseQueryOptions, QueryClient } from "@tanstack/react-query";
+import { execute } from "../client";
+import type { ExecuteOptions } from "../client";
+import type { User } from "../types";
+export type { User } from "../types";
+export const userQueryDocument = \`
+query UserQuery($id: UUID!) {
+ user(id: $id) {
+ id
+ email
+ name
+ createdAt
+ }
+}
+\`;
+export interface UserQueryVariables {
+ id: string;
+}
+export interface UserQueryResult {
+ user: User | null;
+}
+export const userQueryKey = (id: string) => ["user", "detail", id] as const;
+/**
+ * Query hook for fetching a single User
+ *
+ * @example
+ * \`\`\`tsx
+ * const { data, isLoading } = useUserQuery({ id: 'some-id' });
+ * \`\`\`
+ */
+export function useUserQuery(variables: UserQueryVariables, options?: Omit, 'queryKey' | 'queryFn'>) {
+ return useQuery({
+ queryKey: userQueryKey(variables.id),
+ queryFn: () => execute(userQueryDocument, variables),
+ ...options
+ });
+}
+/**
+ * Fetch a single User without React hooks
+ *
+ * @example
+ * \`\`\`ts
+ * const data = await fetchUserQuery({ id: 'some-id' });
+ * \`\`\`
+ */
+export async function fetchUserQuery(variables: UserQueryVariables, options?: ExecuteOptions): Promise {
+ return execute(userQueryDocument, variables, options);
+}
+/**
+ * Prefetch a single User for SSR or cache warming
+ *
+ * @example
+ * \`\`\`ts
+ * await prefetchUserQuery(queryClient, { id: 'some-id' });
+ * \`\`\`
+ */
+export async function prefetchUserQuery(queryClient: QueryClient, variables: UserQueryVariables, options?: ExecuteOptions): Promise {
+ await queryClient.prefetchQuery({
+ queryKey: userQueryKey(variables.id),
+ queryFn: () => execute(userQueryDocument, variables, options)
+ });
+}"
+`;
+
+exports[`Schema Types Generator generateSchemaTypesFile generates schema types file with empty table types 1`] = `
+"/**
+ * GraphQL schema types for custom operations
+ * @generated by @constructive-io/graphql-codegen
+ * DO NOT EDIT - changes will be overwritten
+ */
+
+import type { BigFloatFilter, BigIntFilter, BitStringFilter, BooleanFilter, DateFilter, DatetimeFilter, FloatFilter, FullTextFilter, IntFilter, IntListFilter, InternetAddressFilter, JSONFilter, StringFilter, StringListFilter, UUIDFilter, UUIDListFilter } from "./types";
+export type UserRole = "ADMIN" | "USER" | "GUEST";
+export interface RegisterInput {
+ email: string;
+ password: string;
+ name?: string;
+}
+export interface LoginPayload {
+ token?: string | null;
+ user?: User | null;
+}
+export interface LogoutPayload {
+ success?: boolean | null;
+}
+export interface RegisterPayload {
+ token?: string | null;
+ user?: User | null;
+}"
+`;
+
+exports[`Schema Types Generator generateSchemaTypesFile generates schema types file with enums and input objects 1`] = `
+"/**
+ * GraphQL schema types for custom operations
+ * @generated by @constructive-io/graphql-codegen
+ * DO NOT EDIT - changes will be overwritten
+ */
+
+import type { User, BigFloatFilter, BigIntFilter, BitStringFilter, BooleanFilter, DateFilter, DatetimeFilter, FloatFilter, FullTextFilter, IntFilter, IntListFilter, InternetAddressFilter, JSONFilter, StringFilter, StringListFilter, UUIDFilter, UUIDListFilter } from "./types";
+export type UserRole = "ADMIN" | "USER" | "GUEST";
+export interface RegisterInput {
+ email: string;
+ password: string;
+ name?: string;
+}
+export interface LoginPayload {
+ token?: string | null;
+ user?: User | null;
+}
+export interface LogoutPayload {
+ success?: boolean | null;
+}
+export interface RegisterPayload {
+ token?: string | null;
+ user?: User | null;
+}"
+`;
diff --git a/graphql/codegen/src/__tests__/codegen/input-types-generator.test.ts b/graphql/codegen/src/__tests__/codegen/input-types-generator.test.ts
index 520ea4ef3..982ad96b4 100644
--- a/graphql/codegen/src/__tests__/codegen/input-types-generator.test.ts
+++ b/graphql/codegen/src/__tests__/codegen/input-types-generator.test.ts
@@ -482,7 +482,9 @@ describe('entity select types', () => {
const result = generateInputTypesFile(new Map(), new Set(), [postTable, userTable]);
expect(result.content).toContain('export type PostSelect = {');
- expect(result.content).toContain('author?: boolean | { select?: UserSelect };');
+ // Babel generates multi-line format for object types
+ expect(result.content).toContain('author?: boolean | {');
+ expect(result.content).toContain('select?: UserSelect;');
});
it('generates select type with hasMany relation options', () => {
@@ -536,13 +538,14 @@ describe('orderBy types', () => {
const result = generateInputTypesFile(new Map(), new Set(), [userTable]);
expect(result.content).toContain('export type UsersOrderBy =');
- expect(result.content).toContain("'PRIMARY_KEY_ASC'");
- expect(result.content).toContain("'PRIMARY_KEY_DESC'");
- expect(result.content).toContain("'NATURAL'");
- expect(result.content).toContain("'ID_ASC'");
- expect(result.content).toContain("'ID_DESC'");
- expect(result.content).toContain("'EMAIL_ASC'");
- expect(result.content).toContain("'NAME_DESC'");
+ // Babel generates double quotes for string literals
+ expect(result.content).toContain('"PRIMARY_KEY_ASC"');
+ expect(result.content).toContain('"PRIMARY_KEY_DESC"');
+ expect(result.content).toContain('"NATURAL"');
+ expect(result.content).toContain('"ID_ASC"');
+ expect(result.content).toContain('"ID_DESC"');
+ expect(result.content).toContain('"EMAIL_ASC"');
+ expect(result.content).toContain('"NAME_DESC"');
});
});
@@ -603,7 +606,8 @@ describe('custom input types', () => {
const usedInputTypes = new Set(['UserRole']);
const result = generateInputTypesFile(sampleTypeRegistry, usedInputTypes, []);
- expect(result.content).toContain("export type UserRole = 'ADMIN' | 'USER' | 'GUEST';");
+ // Babel generates double quotes for string literals
+ expect(result.content).toContain('export type UserRole = "ADMIN" | "USER" | "GUEST";');
});
});
@@ -736,7 +740,8 @@ describe('edge cases', () => {
const result = generateInputTypesFile(new Map(), usedInputTypes, []);
// Should generate a fallback type
- expect(result.content).toContain("// Type 'UnknownType' not found in schema");
+ // Babel comment format may have slight differences
+ expect(result.content).toContain("Type 'UnknownType' not found in schema");
expect(result.content).toContain('export type UnknownType = Record;');
});
});
diff --git a/graphql/codegen/src/__tests__/codegen/query-keys-factory.test.ts b/graphql/codegen/src/__tests__/codegen/query-keys-factory.test.ts
new file mode 100644
index 000000000..177cc2dc1
--- /dev/null
+++ b/graphql/codegen/src/__tests__/codegen/query-keys-factory.test.ts
@@ -0,0 +1,374 @@
+/**
+ * Tests for query key factory pattern generators
+ *
+ * Uses snapshot testing to validate generated TypeScript output for:
+ * - Query keys factory (query-keys.ts)
+ * - Mutation keys factory (mutation-keys.ts)
+ * - Cache invalidation helpers (invalidation.ts)
+ */
+import { generateQueryKeysFile } from '../../cli/codegen/query-keys';
+import { generateMutationKeysFile } from '../../cli/codegen/mutation-keys';
+import { generateInvalidationFile } from '../../cli/codegen/invalidation';
+import type { CleanTable, CleanFieldType, CleanRelations, CleanOperation, CleanTypeRef } from '../../types/schema';
+import type { ResolvedQueryKeyConfig, EntityRelationship } from '../../types/config';
+
+const fieldTypes = {
+ uuid: { gqlType: 'UUID', isArray: false } as CleanFieldType,
+ string: { gqlType: 'String', isArray: false } as CleanFieldType,
+ int: { gqlType: 'Int', isArray: false } as CleanFieldType,
+ datetime: { gqlType: 'Datetime', isArray: false } as CleanFieldType,
+};
+
+const emptyRelations: CleanRelations = {
+ belongsTo: [],
+ hasOne: [],
+ hasMany: [],
+ manyToMany: [],
+};
+
+function createTable(partial: Partial & { name: string }): CleanTable {
+ return {
+ name: partial.name,
+ fields: partial.fields ?? [],
+ relations: partial.relations ?? emptyRelations,
+ query: partial.query,
+ inflection: partial.inflection,
+ constraints: partial.constraints,
+ };
+}
+
+function createTypeRef(kind: CleanTypeRef['kind'], name: string | null, ofType?: CleanTypeRef): CleanTypeRef {
+ return { kind, name, ofType };
+}
+
+const simpleUserTable = createTable({
+ name: 'User',
+ fields: [
+ { name: 'id', type: fieldTypes.uuid },
+ { name: 'email', type: fieldTypes.string },
+ { name: 'name', type: fieldTypes.string },
+ { name: 'createdAt', type: fieldTypes.datetime },
+ ],
+ query: {
+ all: 'users',
+ one: 'user',
+ create: 'createUser',
+ update: 'updateUser',
+ delete: 'deleteUser',
+ },
+});
+
+const postTable = createTable({
+ name: 'Post',
+ fields: [
+ { name: 'id', type: fieldTypes.uuid },
+ { name: 'title', type: fieldTypes.string },
+ { name: 'content', type: fieldTypes.string },
+ { name: 'authorId', type: fieldTypes.uuid },
+ { name: 'createdAt', type: fieldTypes.datetime },
+ ],
+ query: {
+ all: 'posts',
+ one: 'post',
+ create: 'createPost',
+ update: 'updatePost',
+ delete: 'deletePost',
+ },
+});
+
+const organizationTable = createTable({
+ name: 'Organization',
+ fields: [
+ { name: 'id', type: fieldTypes.uuid },
+ { name: 'name', type: fieldTypes.string },
+ { name: 'slug', type: fieldTypes.string },
+ ],
+ query: {
+ all: 'organizations',
+ one: 'organization',
+ create: 'createOrganization',
+ update: 'updateOrganization',
+ delete: 'deleteOrganization',
+ },
+});
+
+const databaseTable = createTable({
+ name: 'Database',
+ fields: [
+ { name: 'id', type: fieldTypes.uuid },
+ { name: 'name', type: fieldTypes.string },
+ { name: 'organizationId', type: fieldTypes.uuid },
+ ],
+ query: {
+ all: 'databases',
+ one: 'database',
+ create: 'createDatabase',
+ update: 'updateDatabase',
+ delete: 'deleteDatabase',
+ },
+});
+
+const tableEntityTable = createTable({
+ name: 'Table',
+ fields: [
+ { name: 'id', type: fieldTypes.uuid },
+ { name: 'name', type: fieldTypes.string },
+ { name: 'databaseId', type: fieldTypes.uuid },
+ ],
+ query: {
+ all: 'tables',
+ one: 'table',
+ create: 'createTable',
+ update: 'updateTable',
+ delete: 'deleteTable',
+ },
+});
+
+const fieldTable = createTable({
+ name: 'Field',
+ fields: [
+ { name: 'id', type: fieldTypes.uuid },
+ { name: 'name', type: fieldTypes.string },
+ { name: 'tableId', type: fieldTypes.uuid },
+ { name: 'type', type: fieldTypes.string },
+ ],
+ query: {
+ all: 'fields',
+ one: 'field',
+ create: 'createField',
+ update: 'updateField',
+ delete: 'deleteField',
+ },
+});
+
+const simpleConfig: ResolvedQueryKeyConfig = {
+ style: 'hierarchical',
+ relationships: {},
+ generateScopedKeys: true,
+ generateCascadeHelpers: true,
+ generateMutationKeys: true,
+};
+
+const simpleRelationships: Record = {
+ post: { parent: 'User', foreignKey: 'authorId' },
+};
+
+const hierarchicalRelationships: Record = {
+ database: { parent: 'Organization', foreignKey: 'organizationId' },
+ table: { parent: 'Database', foreignKey: 'databaseId', ancestors: ['organization'] },
+ field: { parent: 'Table', foreignKey: 'tableId', ancestors: ['database', 'organization'] },
+};
+
+const sampleCustomQueries: CleanOperation[] = [
+ {
+ name: 'currentUser',
+ kind: 'query',
+ args: [],
+ returnType: createTypeRef('OBJECT', 'User'),
+ description: 'Get the current authenticated user',
+ },
+ {
+ name: 'searchUsers',
+ kind: 'query',
+ args: [
+ { name: 'query', type: createTypeRef('NON_NULL', null, createTypeRef('SCALAR', 'String')) },
+ { name: 'limit', type: createTypeRef('SCALAR', 'Int') },
+ ],
+ returnType: createTypeRef('LIST', null, createTypeRef('OBJECT', 'User')),
+ description: 'Search users by name or email',
+ },
+];
+
+const sampleCustomMutations: CleanOperation[] = [
+ {
+ name: 'login',
+ kind: 'mutation',
+ args: [
+ { name: 'email', type: createTypeRef('NON_NULL', null, createTypeRef('SCALAR', 'String')) },
+ { name: 'password', type: createTypeRef('NON_NULL', null, createTypeRef('SCALAR', 'String')) },
+ ],
+ returnType: createTypeRef('OBJECT', 'LoginPayload'),
+ description: 'Authenticate user',
+ },
+ {
+ name: 'logout',
+ kind: 'mutation',
+ args: [],
+ returnType: createTypeRef('OBJECT', 'LogoutPayload'),
+ description: 'Log out current user',
+ },
+];
+
+describe('generateQueryKeysFile', () => {
+ it('generates query keys for a single table without relationships', () => {
+ const result = generateQueryKeysFile({
+ tables: [simpleUserTable],
+ customQueries: [],
+ config: simpleConfig,
+ });
+ expect(result.fileName).toBe('query-keys.ts');
+ expect(result.content).toMatchSnapshot();
+ });
+
+ it('generates query keys for multiple tables without relationships', () => {
+ const result = generateQueryKeysFile({
+ tables: [simpleUserTable, postTable],
+ customQueries: [],
+ config: simpleConfig,
+ });
+ expect(result.content).toMatchSnapshot();
+ });
+
+ it('generates query keys with simple parent-child relationship', () => {
+ const result = generateQueryKeysFile({
+ tables: [simpleUserTable, postTable],
+ customQueries: [],
+ config: {
+ ...simpleConfig,
+ relationships: simpleRelationships,
+ },
+ });
+ expect(result.content).toMatchSnapshot();
+ });
+
+ it('generates query keys with hierarchical relationships (org -> db -> table -> field)', () => {
+ const result = generateQueryKeysFile({
+ tables: [organizationTable, databaseTable, tableEntityTable, fieldTable],
+ customQueries: [],
+ config: {
+ ...simpleConfig,
+ relationships: hierarchicalRelationships,
+ },
+ });
+ expect(result.content).toMatchSnapshot();
+ });
+
+ it('generates query keys with custom queries', () => {
+ const result = generateQueryKeysFile({
+ tables: [simpleUserTable],
+ customQueries: sampleCustomQueries,
+ config: simpleConfig,
+ });
+ expect(result.content).toMatchSnapshot();
+ });
+
+ it('generates query keys without scoped keys when disabled', () => {
+ const result = generateQueryKeysFile({
+ tables: [simpleUserTable, postTable],
+ customQueries: [],
+ config: {
+ ...simpleConfig,
+ relationships: simpleRelationships,
+ generateScopedKeys: false,
+ },
+ });
+ expect(result.content).toMatchSnapshot();
+ });
+});
+
+describe('generateMutationKeysFile', () => {
+ it('generates mutation keys for a single table without relationships', () => {
+ const result = generateMutationKeysFile({
+ tables: [simpleUserTable],
+ customMutations: [],
+ config: simpleConfig,
+ });
+ expect(result.fileName).toBe('mutation-keys.ts');
+ expect(result.content).toMatchSnapshot();
+ });
+
+ it('generates mutation keys for multiple tables', () => {
+ const result = generateMutationKeysFile({
+ tables: [simpleUserTable, postTable],
+ customMutations: [],
+ config: simpleConfig,
+ });
+ expect(result.content).toMatchSnapshot();
+ });
+
+ it('generates mutation keys with parent-child relationship', () => {
+ const result = generateMutationKeysFile({
+ tables: [simpleUserTable, postTable],
+ customMutations: [],
+ config: {
+ ...simpleConfig,
+ relationships: simpleRelationships,
+ },
+ });
+ expect(result.content).toMatchSnapshot();
+ });
+
+ it('generates mutation keys with custom mutations', () => {
+ const result = generateMutationKeysFile({
+ tables: [simpleUserTable],
+ customMutations: sampleCustomMutations,
+ config: simpleConfig,
+ });
+ expect(result.content).toMatchSnapshot();
+ });
+
+ it('generates mutation keys for hierarchical relationships', () => {
+ const result = generateMutationKeysFile({
+ tables: [organizationTable, databaseTable, tableEntityTable, fieldTable],
+ customMutations: [],
+ config: {
+ ...simpleConfig,
+ relationships: hierarchicalRelationships,
+ },
+ });
+ expect(result.content).toMatchSnapshot();
+ });
+});
+
+describe('generateInvalidationFile', () => {
+ it('generates invalidation helpers for a single table without relationships', () => {
+ const result = generateInvalidationFile({
+ tables: [simpleUserTable],
+ config: simpleConfig,
+ });
+ expect(result.fileName).toBe('invalidation.ts');
+ expect(result.content).toMatchSnapshot();
+ });
+
+ it('generates invalidation helpers for multiple tables', () => {
+ const result = generateInvalidationFile({
+ tables: [simpleUserTable, postTable],
+ config: simpleConfig,
+ });
+ expect(result.content).toMatchSnapshot();
+ });
+
+ it('generates invalidation helpers with cascade support for parent-child relationship', () => {
+ const result = generateInvalidationFile({
+ tables: [simpleUserTable, postTable],
+ config: {
+ ...simpleConfig,
+ relationships: simpleRelationships,
+ },
+ });
+ expect(result.content).toMatchSnapshot();
+ });
+
+ it('generates invalidation helpers with cascade support for hierarchical relationships', () => {
+ const result = generateInvalidationFile({
+ tables: [organizationTable, databaseTable, tableEntityTable, fieldTable],
+ config: {
+ ...simpleConfig,
+ relationships: hierarchicalRelationships,
+ },
+ });
+ expect(result.content).toMatchSnapshot();
+ });
+
+ it('generates invalidation helpers without cascade when disabled', () => {
+ const result = generateInvalidationFile({
+ tables: [simpleUserTable, postTable],
+ config: {
+ ...simpleConfig,
+ relationships: simpleRelationships,
+ generateCascadeHelpers: false,
+ },
+ });
+ expect(result.content).toMatchSnapshot();
+ });
+});
diff --git a/graphql/codegen/src/__tests__/codegen/react-query-hooks.test.ts b/graphql/codegen/src/__tests__/codegen/react-query-hooks.test.ts
new file mode 100644
index 000000000..507ab13f4
--- /dev/null
+++ b/graphql/codegen/src/__tests__/codegen/react-query-hooks.test.ts
@@ -0,0 +1,547 @@
+/**
+ * Snapshot tests for React Query hook generators
+ *
+ * Tests the actual generated hook code for:
+ * - Query hooks (list/single)
+ * - Mutation hooks (create/update/delete)
+ * - Custom query hooks
+ * - Custom mutation hooks
+ * - Schema types
+ * - Barrel files
+ */
+import { generateListQueryHook, generateSingleQueryHook } from '../../cli/codegen/queries';
+import { generateCreateMutationHook, generateUpdateMutationHook, generateDeleteMutationHook } from '../../cli/codegen/mutations';
+import { generateCustomQueryHook } from '../../cli/codegen/custom-queries';
+import { generateCustomMutationHook } from '../../cli/codegen/custom-mutations';
+import { generateSchemaTypesFile } from '../../cli/codegen/schema-types-generator';
+import {
+ generateQueriesBarrel,
+ generateMutationsBarrel,
+ generateMainBarrel,
+ generateCustomQueriesBarrel,
+ generateCustomMutationsBarrel,
+} from '../../cli/codegen/barrel';
+import type {
+ CleanTable,
+ CleanFieldType,
+ CleanRelations,
+ CleanOperation,
+ CleanTypeRef,
+ TypeRegistry,
+ ResolvedType,
+} from '../../types/schema';
+
+const fieldTypes = {
+ uuid: { gqlType: 'UUID', isArray: false } as CleanFieldType,
+ string: { gqlType: 'String', isArray: false } as CleanFieldType,
+ int: { gqlType: 'Int', isArray: false } as CleanFieldType,
+ datetime: { gqlType: 'Datetime', isArray: false } as CleanFieldType,
+ boolean: { gqlType: 'Boolean', isArray: false } as CleanFieldType,
+};
+
+const emptyRelations: CleanRelations = {
+ belongsTo: [],
+ hasOne: [],
+ hasMany: [],
+ manyToMany: [],
+};
+
+function createTable(partial: Partial & { name: string }): CleanTable {
+ return {
+ name: partial.name,
+ fields: partial.fields ?? [],
+ relations: partial.relations ?? emptyRelations,
+ query: partial.query,
+ inflection: partial.inflection,
+ constraints: partial.constraints,
+ };
+}
+
+function createTypeRef(kind: CleanTypeRef['kind'], name: string | null, ofType?: CleanTypeRef): CleanTypeRef {
+ return { kind, name, ofType };
+}
+
+const simpleUserTable = createTable({
+ name: 'User',
+ fields: [
+ { name: 'id', type: fieldTypes.uuid },
+ { name: 'email', type: fieldTypes.string },
+ { name: 'name', type: fieldTypes.string },
+ { name: 'createdAt', type: fieldTypes.datetime },
+ ],
+ query: {
+ all: 'users',
+ one: 'user',
+ create: 'createUser',
+ update: 'updateUser',
+ delete: 'deleteUser',
+ },
+});
+
+const postTable = createTable({
+ name: 'Post',
+ fields: [
+ { name: 'id', type: fieldTypes.uuid },
+ { name: 'title', type: fieldTypes.string },
+ { name: 'content', type: fieldTypes.string },
+ { name: 'authorId', type: fieldTypes.uuid },
+ { name: 'published', type: fieldTypes.boolean },
+ { name: 'createdAt', type: fieldTypes.datetime },
+ ],
+ query: {
+ all: 'posts',
+ one: 'post',
+ create: 'createPost',
+ update: 'updatePost',
+ delete: 'deletePost',
+ },
+});
+
+const simpleCustomQueries: CleanOperation[] = [
+ {
+ name: 'currentUser',
+ kind: 'query',
+ args: [],
+ returnType: createTypeRef('OBJECT', 'User'),
+ description: 'Get the current authenticated user',
+ },
+ {
+ name: 'searchUsers',
+ kind: 'query',
+ args: [
+ { name: 'query', type: createTypeRef('NON_NULL', null, createTypeRef('SCALAR', 'String')) },
+ { name: 'limit', type: createTypeRef('SCALAR', 'Int') },
+ ],
+ returnType: createTypeRef('LIST', null, createTypeRef('OBJECT', 'User')),
+ description: 'Search users by name or email',
+ },
+];
+
+const simpleCustomMutations: CleanOperation[] = [
+ {
+ name: 'login',
+ kind: 'mutation',
+ args: [
+ { name: 'email', type: createTypeRef('NON_NULL', null, createTypeRef('SCALAR', 'String')) },
+ { name: 'password', type: createTypeRef('NON_NULL', null, createTypeRef('SCALAR', 'String')) },
+ ],
+ returnType: createTypeRef('OBJECT', 'LoginPayload'),
+ description: 'Authenticate user',
+ },
+ {
+ name: 'logout',
+ kind: 'mutation',
+ args: [],
+ returnType: createTypeRef('OBJECT', 'LogoutPayload'),
+ description: 'Log out current user',
+ },
+ {
+ name: 'register',
+ kind: 'mutation',
+ args: [
+ { name: 'input', type: createTypeRef('NON_NULL', null, createTypeRef('INPUT_OBJECT', 'RegisterInput')) },
+ ],
+ returnType: createTypeRef('OBJECT', 'RegisterPayload'),
+ description: 'Register a new user',
+ },
+];
+
+function createTypeRegistry(): TypeRegistry {
+ const registry: TypeRegistry = new Map();
+
+ registry.set('LoginPayload', {
+ kind: 'OBJECT',
+ name: 'LoginPayload',
+ fields: [
+ { name: 'token', type: createTypeRef('SCALAR', 'String') },
+ { name: 'user', type: createTypeRef('OBJECT', 'User') },
+ ],
+ } as ResolvedType);
+
+ registry.set('LogoutPayload', {
+ kind: 'OBJECT',
+ name: 'LogoutPayload',
+ fields: [
+ { name: 'success', type: createTypeRef('SCALAR', 'Boolean') },
+ ],
+ } as ResolvedType);
+
+ registry.set('RegisterPayload', {
+ kind: 'OBJECT',
+ name: 'RegisterPayload',
+ fields: [
+ { name: 'token', type: createTypeRef('SCALAR', 'String') },
+ { name: 'user', type: createTypeRef('OBJECT', 'User') },
+ ],
+ } as ResolvedType);
+
+ registry.set('RegisterInput', {
+ kind: 'INPUT_OBJECT',
+ name: 'RegisterInput',
+ inputFields: [
+ { name: 'email', type: createTypeRef('NON_NULL', null, createTypeRef('SCALAR', 'String')) },
+ { name: 'password', type: createTypeRef('NON_NULL', null, createTypeRef('SCALAR', 'String')) },
+ { name: 'name', type: createTypeRef('SCALAR', 'String') },
+ ],
+ } as ResolvedType);
+
+ registry.set('UserRole', {
+ kind: 'ENUM',
+ name: 'UserRole',
+ enumValues: ['ADMIN', 'USER', 'GUEST'],
+ } as ResolvedType);
+
+ registry.set('Query', {
+ kind: 'OBJECT',
+ name: 'Query',
+ fields: [
+ { name: 'currentUser', type: createTypeRef('OBJECT', 'User') },
+ ],
+ } as ResolvedType);
+
+ registry.set('Mutation', {
+ kind: 'OBJECT',
+ name: 'Mutation',
+ fields: [
+ { name: 'login', type: createTypeRef('OBJECT', 'LoginPayload') },
+ { name: 'logout', type: createTypeRef('OBJECT', 'LogoutPayload') },
+ { name: 'register', type: createTypeRef('OBJECT', 'RegisterPayload') },
+ ],
+ } as ResolvedType);
+
+ return registry;
+}
+
+describe('Query Hook Generators', () => {
+ describe('generateListQueryHook', () => {
+ it('generates list query hook for simple table', () => {
+ const result = generateListQueryHook(simpleUserTable, {
+ reactQueryEnabled: true,
+ useCentralizedKeys: true,
+ });
+ expect(result).not.toBeNull();
+ expect(result.fileName).toBe('useUsersQuery.ts');
+ expect(result.content).toMatchSnapshot();
+ });
+
+ it('generates list query hook without centralized keys', () => {
+ const result = generateListQueryHook(simpleUserTable, {
+ reactQueryEnabled: true,
+ useCentralizedKeys: false,
+ });
+ expect(result).not.toBeNull();
+ expect(result.content).toMatchSnapshot();
+ });
+
+ it('generates list query hook for table with relationships', () => {
+ const result = generateListQueryHook(postTable, {
+ reactQueryEnabled: true,
+ useCentralizedKeys: true,
+ hasRelationships: true,
+ });
+ expect(result).not.toBeNull();
+ expect(result.content).toMatchSnapshot();
+ });
+ });
+
+ describe('generateSingleQueryHook', () => {
+ it('generates single query hook for simple table', () => {
+ const result = generateSingleQueryHook(simpleUserTable, {
+ reactQueryEnabled: true,
+ useCentralizedKeys: true,
+ });
+ expect(result).not.toBeNull();
+ expect(result.fileName).toBe('useUserQuery.ts');
+ expect(result.content).toMatchSnapshot();
+ });
+
+ it('generates single query hook without centralized keys', () => {
+ const result = generateSingleQueryHook(simpleUserTable, {
+ reactQueryEnabled: true,
+ useCentralizedKeys: false,
+ });
+ expect(result).not.toBeNull();
+ expect(result.content).toMatchSnapshot();
+ });
+
+ it('generates single query hook for table with relationships', () => {
+ const result = generateSingleQueryHook(postTable, {
+ reactQueryEnabled: true,
+ useCentralizedKeys: true,
+ hasRelationships: true,
+ });
+ expect(result).not.toBeNull();
+ expect(result.content).toMatchSnapshot();
+ });
+ });
+});
+
+describe('Mutation Hook Generators', () => {
+ describe('generateCreateMutationHook', () => {
+ it('generates create mutation hook for simple table', () => {
+ const result = generateCreateMutationHook(simpleUserTable, {
+ reactQueryEnabled: true,
+ useCentralizedKeys: true,
+ });
+ expect(result).not.toBeNull();
+ expect(result!.fileName).toBe('useCreateUserMutation.ts');
+ expect(result!.content).toMatchSnapshot();
+ });
+
+ it('generates create mutation hook without centralized keys', () => {
+ const result = generateCreateMutationHook(simpleUserTable, {
+ reactQueryEnabled: true,
+ useCentralizedKeys: false,
+ });
+ expect(result).not.toBeNull();
+ expect(result!.content).toMatchSnapshot();
+ });
+
+ it('generates create mutation hook for table with relationships', () => {
+ const result = generateCreateMutationHook(postTable, {
+ reactQueryEnabled: true,
+ useCentralizedKeys: true,
+ hasRelationships: true,
+ });
+ expect(result).not.toBeNull();
+ expect(result!.content).toMatchSnapshot();
+ });
+ });
+
+ describe('generateUpdateMutationHook', () => {
+ it('generates update mutation hook for simple table', () => {
+ const result = generateUpdateMutationHook(simpleUserTable, {
+ reactQueryEnabled: true,
+ useCentralizedKeys: true,
+ });
+ expect(result).not.toBeNull();
+ expect(result!.fileName).toBe('useUpdateUserMutation.ts');
+ expect(result!.content).toMatchSnapshot();
+ });
+
+ it('generates update mutation hook without centralized keys', () => {
+ const result = generateUpdateMutationHook(simpleUserTable, {
+ reactQueryEnabled: true,
+ useCentralizedKeys: false,
+ });
+ expect(result).not.toBeNull();
+ expect(result!.content).toMatchSnapshot();
+ });
+
+ it('generates update mutation hook for table with relationships', () => {
+ const result = generateUpdateMutationHook(postTable, {
+ reactQueryEnabled: true,
+ useCentralizedKeys: true,
+ hasRelationships: true,
+ });
+ expect(result).not.toBeNull();
+ expect(result!.content).toMatchSnapshot();
+ });
+ });
+
+ describe('generateDeleteMutationHook', () => {
+ it('generates delete mutation hook for simple table', () => {
+ const result = generateDeleteMutationHook(simpleUserTable, {
+ reactQueryEnabled: true,
+ useCentralizedKeys: true,
+ });
+ expect(result).not.toBeNull();
+ expect(result!.fileName).toBe('useDeleteUserMutation.ts');
+ expect(result!.content).toMatchSnapshot();
+ });
+
+ it('generates delete mutation hook without centralized keys', () => {
+ const result = generateDeleteMutationHook(simpleUserTable, {
+ reactQueryEnabled: true,
+ useCentralizedKeys: false,
+ });
+ expect(result).not.toBeNull();
+ expect(result!.content).toMatchSnapshot();
+ });
+
+ it('generates delete mutation hook for table with relationships', () => {
+ const result = generateDeleteMutationHook(postTable, {
+ reactQueryEnabled: true,
+ useCentralizedKeys: true,
+ hasRelationships: true,
+ });
+ expect(result).not.toBeNull();
+ expect(result!.content).toMatchSnapshot();
+ });
+ });
+});
+
+describe('Custom Query Hook Generators', () => {
+ describe('generateCustomQueryHook', () => {
+ it('generates custom query hook without arguments', () => {
+ const result = generateCustomQueryHook({
+ operation: simpleCustomQueries[0],
+ typeRegistry: createTypeRegistry(),
+ useCentralizedKeys: true,
+ });
+ expect(result).not.toBeNull();
+ expect(result!.fileName).toBe('useCurrentUserQuery.ts');
+ expect(result!.content).toMatchSnapshot();
+ });
+
+ it('generates custom query hook with arguments', () => {
+ const result = generateCustomQueryHook({
+ operation: simpleCustomQueries[1],
+ typeRegistry: createTypeRegistry(),
+ useCentralizedKeys: true,
+ });
+ expect(result).not.toBeNull();
+ expect(result!.fileName).toBe('useSearchUsersQuery.ts');
+ expect(result!.content).toMatchSnapshot();
+ });
+
+ it('generates custom query hook without centralized keys', () => {
+ const result = generateCustomQueryHook({
+ operation: simpleCustomQueries[0],
+ typeRegistry: createTypeRegistry(),
+ useCentralizedKeys: false,
+ });
+ expect(result).not.toBeNull();
+ expect(result!.content).toMatchSnapshot();
+ });
+ });
+});
+
+describe('Custom Mutation Hook Generators', () => {
+ describe('generateCustomMutationHook', () => {
+ it('generates custom mutation hook with arguments', () => {
+ const result = generateCustomMutationHook({
+ operation: simpleCustomMutations[0],
+ typeRegistry: createTypeRegistry(),
+ useCentralizedKeys: true,
+ });
+ expect(result).not.toBeNull();
+ expect(result!.fileName).toBe('useLoginMutation.ts');
+ expect(result!.content).toMatchSnapshot();
+ });
+
+ it('generates custom mutation hook without arguments', () => {
+ const result = generateCustomMutationHook({
+ operation: simpleCustomMutations[1],
+ typeRegistry: createTypeRegistry(),
+ useCentralizedKeys: true,
+ });
+ expect(result).not.toBeNull();
+ expect(result!.fileName).toBe('useLogoutMutation.ts');
+ expect(result!.content).toMatchSnapshot();
+ });
+
+ it('generates custom mutation hook with input object argument', () => {
+ const result = generateCustomMutationHook({
+ operation: simpleCustomMutations[2],
+ typeRegistry: createTypeRegistry(),
+ useCentralizedKeys: true,
+ });
+ expect(result).not.toBeNull();
+ expect(result!.fileName).toBe('useRegisterMutation.ts');
+ expect(result!.content).toMatchSnapshot();
+ });
+
+ it('generates custom mutation hook without centralized keys', () => {
+ const result = generateCustomMutationHook({
+ operation: simpleCustomMutations[0],
+ typeRegistry: createTypeRegistry(),
+ useCentralizedKeys: false,
+ });
+ expect(result).not.toBeNull();
+ expect(result!.content).toMatchSnapshot();
+ });
+ });
+});
+
+describe('Schema Types Generator', () => {
+ describe('generateSchemaTypesFile', () => {
+ it('generates schema types file with enums and input objects', () => {
+ const result = generateSchemaTypesFile({
+ typeRegistry: createTypeRegistry(),
+ tableTypeNames: new Set(['User', 'Post']),
+ });
+ expect(result.fileName).toBe('schema-types.ts');
+ expect(result.content).toMatchSnapshot();
+ });
+
+ it('generates schema types file with empty table types', () => {
+ const result = generateSchemaTypesFile({
+ typeRegistry: createTypeRegistry(),
+ tableTypeNames: new Set(),
+ });
+ expect(result.content).toMatchSnapshot();
+ });
+ });
+});
+
+describe('Barrel File Generators', () => {
+ describe('generateQueriesBarrel', () => {
+ it('generates queries barrel for single table', () => {
+ const result = generateQueriesBarrel([simpleUserTable]);
+ expect(result).toMatchSnapshot();
+ });
+
+ it('generates queries barrel for multiple tables', () => {
+ const result = generateQueriesBarrel([simpleUserTable, postTable]);
+ expect(result).toMatchSnapshot();
+ });
+ });
+
+ describe('generateMutationsBarrel', () => {
+ it('generates mutations barrel for single table', () => {
+ const result = generateMutationsBarrel([simpleUserTable]);
+ expect(result).toMatchSnapshot();
+ });
+
+ it('generates mutations barrel for multiple tables', () => {
+ const result = generateMutationsBarrel([simpleUserTable, postTable]);
+ expect(result).toMatchSnapshot();
+ });
+ });
+
+ describe('generateMainBarrel', () => {
+ it('generates main barrel with all options enabled', () => {
+ const result = generateMainBarrel([simpleUserTable, postTable], {
+ hasSchemaTypes: true,
+ hasMutations: true,
+ hasQueryKeys: true,
+ hasMutationKeys: true,
+ hasInvalidation: true,
+ });
+ expect(result).toMatchSnapshot();
+ });
+
+ it('generates main barrel without custom operations', () => {
+ const result = generateMainBarrel([simpleUserTable], {
+ hasSchemaTypes: false,
+ hasMutations: true,
+ });
+ expect(result).toMatchSnapshot();
+ });
+
+ it('generates main barrel without mutations', () => {
+ const result = generateMainBarrel([simpleUserTable, postTable], {
+ hasSchemaTypes: true,
+ hasMutations: false,
+ });
+ expect(result).toMatchSnapshot();
+ });
+ });
+
+ describe('generateCustomQueriesBarrel', () => {
+ it('generates custom queries barrel', () => {
+ const customQueryNames = simpleCustomQueries.map((q) => q.name);
+ const result = generateCustomQueriesBarrel([simpleUserTable], customQueryNames);
+ expect(result).toMatchSnapshot();
+ });
+ });
+
+ describe('generateCustomMutationsBarrel', () => {
+ it('generates custom mutations barrel', () => {
+ const customMutationNames = simpleCustomMutations.map((m) => m.name);
+ const result = generateCustomMutationsBarrel([simpleUserTable], customMutationNames);
+ expect(result).toMatchSnapshot();
+ });
+ });
+});
diff --git a/graphql/codegen/src/cli/codegen/babel-ast.ts b/graphql/codegen/src/cli/codegen/babel-ast.ts
new file mode 100644
index 000000000..ccdae6ede
--- /dev/null
+++ b/graphql/codegen/src/cli/codegen/babel-ast.ts
@@ -0,0 +1,117 @@
+/**
+ * Babel AST utilities for code generation
+ *
+ * Provides minimal helper functions for building TypeScript AST nodes.
+ * Use raw t.* calls for most operations - only helpers that provide
+ * real value beyond simple wrapping are included here.
+ */
+import generate from '@babel/generator';
+import * as t from '@babel/types';
+
+// Re-export for convenience
+export { t, generate };
+
+/**
+ * Generate code from an array of statements
+ */
+export function generateCode(statements: t.Statement[]): string {
+ const program = t.program(statements);
+ // @ts-ignore - Babel types mismatch
+ return generate(program).code;
+}
+
+/**
+ * Create a block comment
+ */
+export const commentBlock = (value: string): t.CommentBlock => {
+ return {
+ type: 'CommentBlock',
+ value,
+ start: null,
+ end: null,
+ loc: null,
+ };
+};
+
+/**
+ * Create a line comment
+ */
+export const commentLine = (value: string): t.CommentLine => {
+ return {
+ type: 'CommentLine',
+ value,
+ start: null,
+ end: null,
+ loc: null,
+ };
+};
+
+/**
+ * Add a leading JSDoc comment to a node
+ */
+export function addJSDocComment(node: T, lines: string[]): T {
+ const commentText = lines.length === 1
+ ? `* ${lines[0]} `
+ : `*\n${lines.map(line => ` * ${line}`).join('\n')}\n `;
+
+ if (!node.leadingComments) {
+ node.leadingComments = [];
+ }
+ node.leadingComments.push(commentBlock(commentText));
+ return node;
+}
+
+/**
+ * Add a leading single-line comment to a node
+ */
+export function addLineComment(node: T, text: string): T {
+ if (!node.leadingComments) {
+ node.leadingComments = [];
+ }
+ node.leadingComments.push(commentLine(` ${text}`));
+ return node;
+}
+
+/**
+ * Create an 'as const' assertion - common pattern worth abstracting
+ */
+export function asConst(expression: t.Expression): t.TSAsExpression {
+ return t.tsAsExpression(
+ expression,
+ t.tsTypeReference(t.identifier('const'))
+ );
+}
+
+/**
+ * Create an array expression with 'as const' - very common pattern
+ */
+export function constArray(elements: (t.Expression | t.SpreadElement)[]): t.TSAsExpression {
+ return asConst(t.arrayExpression(elements));
+}
+
+/**
+ * Create a typed parameter - saves boilerplate for type annotations
+ */
+export function typedParam(
+ name: string,
+ typeAnnotation: t.TSType,
+ optional: boolean = false
+): t.Identifier {
+ const param = t.identifier(name);
+ param.typeAnnotation = t.tsTypeAnnotation(typeAnnotation);
+ param.optional = optional;
+ return param;
+}
+
+/**
+ * Create keyof typeof expression - complex nested type operators
+ */
+export function keyofTypeof(name: string): t.TSTypeOperator {
+ const typeofOp = t.tsTypeOperator(t.tsTypeReference(t.identifier(name)));
+ typeofOp.operator = 'typeof';
+
+ const keyofOp = t.tsTypeOperator(typeofOp);
+ keyofOp.operator = 'keyof';
+
+ return keyofOp;
+}
diff --git a/graphql/codegen/src/cli/codegen/barrel.ts b/graphql/codegen/src/cli/codegen/barrel.ts
index bc85b4625..b5d89b591 100644
--- a/graphql/codegen/src/cli/codegen/barrel.ts
+++ b/graphql/codegen/src/cli/codegen/barrel.ts
@@ -1,11 +1,11 @@
/**
* Barrel file generators - creates index.ts files for exports
*
- * Using simple string generation for barrel files since they're straightforward
- * and ts-morph has issues with insertText + addStatements combination.
+ * Using Babel AST for generating barrel (index.ts) files with re-exports.
*/
import type { CleanTable } from '../../types/schema';
-import { createFileHeader } from './ts-ast';
+import * as t from '@babel/types';
+import { generateCode, addJSDocComment } from './babel-ast';
import {
getListQueryHookName,
getSingleQueryHookName,
@@ -15,32 +15,45 @@ import {
} from './utils';
import { getOperationHookName } from './type-resolver';
+/**
+ * Helper to create export * from './module' statement
+ */
+function exportAllFrom(modulePath: string): t.ExportAllDeclaration {
+ return t.exportAllDeclaration(t.stringLiteral(modulePath));
+}
+
/**
* Generate the queries/index.ts barrel file
*/
export function generateQueriesBarrel(tables: CleanTable[]): string {
- const lines: string[] = [createFileHeader('Query hooks barrel export'), ''];
+ const statements: t.Statement[] = [];
// Export all query hooks
for (const table of tables) {
const listHookName = getListQueryHookName(table);
const singleHookName = getSingleQueryHookName(table);
- lines.push(`export * from './${listHookName}';`);
- lines.push(`export * from './${singleHookName}';`);
+ statements.push(exportAllFrom(`./${listHookName}`));
+ statements.push(exportAllFrom(`./${singleHookName}`));
}
- return lines.join('\n') + '\n';
+ // Add file header as leading comment on first statement
+ if (statements.length > 0) {
+ addJSDocComment(statements[0], [
+ 'Query hooks barrel export',
+ '@generated by @constructive-io/graphql-codegen',
+ 'DO NOT EDIT - changes will be overwritten',
+ ]);
+ }
+
+ return generateCode(statements);
}
/**
* Generate the mutations/index.ts barrel file
*/
export function generateMutationsBarrel(tables: CleanTable[]): string {
- const lines: string[] = [
- createFileHeader('Mutation hooks barrel export'),
- '',
- ];
+ const statements: t.Statement[] = [];
// Export all mutation hooks
for (const table of tables) {
@@ -48,18 +61,27 @@ export function generateMutationsBarrel(tables: CleanTable[]): string {
const updateHookName = getUpdateMutationHookName(table);
const deleteHookName = getDeleteMutationHookName(table);
- lines.push(`export * from './${createHookName}';`);
+ statements.push(exportAllFrom(`./${createHookName}`));
// Only add update/delete if they exist
if (table.query?.update !== null) {
- lines.push(`export * from './${updateHookName}';`);
+ statements.push(exportAllFrom(`./${updateHookName}`));
}
if (table.query?.delete !== null) {
- lines.push(`export * from './${deleteHookName}';`);
+ statements.push(exportAllFrom(`./${deleteHookName}`));
}
}
- return lines.join('\n') + '\n';
+ // Add file header as leading comment on first statement
+ if (statements.length > 0) {
+ addJSDocComment(statements[0], [
+ 'Mutation hooks barrel export',
+ '@generated by @constructive-io/graphql-codegen',
+ 'DO NOT EDIT - changes will be overwritten',
+ ]);
+ }
+
+ return generateCode(statements);
}
/**
@@ -71,6 +93,12 @@ export function generateMutationsBarrel(tables: CleanTable[]): string {
export interface MainBarrelOptions {
hasSchemaTypes?: boolean;
hasMutations?: boolean;
+ /** Whether query-keys.ts was generated */
+ hasQueryKeys?: boolean;
+ /** Whether mutation-keys.ts was generated */
+ hasMutationKeys?: boolean;
+ /** Whether invalidation.ts was generated */
+ hasInvalidation?: boolean;
}
export function generateMainBarrel(
@@ -83,62 +111,85 @@ export function generateMainBarrel(
? { hasSchemaTypes: options, hasMutations: true }
: options;
- const { hasSchemaTypes = false, hasMutations = true } = opts;
- const tableNames = tables.map((t) => t.name).join(', ');
-
- const schemaTypesExport = hasSchemaTypes
- ? `
-// Schema types (input, payload, enum types)
-export * from './schema-types';
-`
- : '';
-
- const mutationsExport = hasMutations
- ? `
-// Mutation hooks
-export * from './mutations';
-`
- : '';
-
- return `/**
- * Auto-generated GraphQL SDK
- * @generated by @constructive-io/graphql-codegen
- *
- * Tables: ${tableNames}
- *
- * Usage:
- *
- * 1. Configure the client:
- * \`\`\`ts
- * import { configure } from './generated';
- *
- * configure({
- * endpoint: 'https://api.example.com/graphql',
- * headers: { Authorization: 'Bearer ' },
- * });
- * \`\`\`
- *
- * 2. Use the hooks:
- * \`\`\`tsx
- * import { useCarsQuery, useCreateCarMutation } from './generated';
- *
- * function MyComponent() {
- * const { data, isLoading } = useCarsQuery({ first: 10 });
- * const { mutate } = useCreateCarMutation();
- * // ...
- * }
- * \`\`\`
- */
+ const {
+ hasSchemaTypes = false,
+ hasMutations = true,
+ hasQueryKeys = false,
+ hasMutationKeys = false,
+ hasInvalidation = false,
+ } = opts;
+ const tableNames = tables.map((tbl) => tbl.name).join(', ');
+
+ const statements: t.Statement[] = [];
+
+ // Client configuration
+ statements.push(exportAllFrom('./client'));
+
+ // Entity and filter types
+ statements.push(exportAllFrom('./types'));
-// Client configuration
-export * from './client';
+ // Schema types (input, payload, enum types)
+ if (hasSchemaTypes) {
+ statements.push(exportAllFrom('./schema-types'));
+ }
+
+ // Centralized query keys (for cache management)
+ if (hasQueryKeys) {
+ statements.push(exportAllFrom('./query-keys'));
+ }
+
+ // Centralized mutation keys (for tracking in-flight mutations)
+ if (hasMutationKeys) {
+ statements.push(exportAllFrom('./mutation-keys'));
+ }
+
+ // Cache invalidation helpers
+ if (hasInvalidation) {
+ statements.push(exportAllFrom('./invalidation'));
+ }
+
+ // Query hooks
+ statements.push(exportAllFrom('./queries'));
+
+ // Mutation hooks
+ if (hasMutations) {
+ statements.push(exportAllFrom('./mutations'));
+ }
+
+ // Add file header as leading comment on first statement
+ if (statements.length > 0) {
+ addJSDocComment(statements[0], [
+ 'Auto-generated GraphQL SDK',
+ '@generated by @constructive-io/graphql-codegen',
+ '',
+ `Tables: ${tableNames}`,
+ '',
+ 'Usage:',
+ '',
+ '1. Configure the client:',
+ '```ts',
+ "import { configure } from './generated';",
+ '',
+ 'configure({',
+ " endpoint: 'https://api.example.com/graphql',",
+ " headers: { Authorization: 'Bearer ' },",
+ '});',
+ '```',
+ '',
+ '2. Use the hooks:',
+ '```tsx',
+ "import { useCarsQuery, useCreateCarMutation } from './generated';",
+ '',
+ 'function MyComponent() {',
+ ' const { data, isLoading } = useCarsQuery({ first: 10 });',
+ ' const { mutate } = useCreateCarMutation();',
+ ' // ...',
+ '}',
+ '```',
+ ]);
+ }
-// Entity and filter types
-export * from './types';
-${schemaTypesExport}
-// Query hooks
-export * from './queries';
-${mutationsExport}`;
+ return generateCode(statements);
}
// ============================================================================
@@ -152,32 +203,33 @@ export function generateCustomQueriesBarrel(
tables: CleanTable[],
customQueryNames: string[]
): string {
- const lines: string[] = [
- createFileHeader('Query hooks barrel export'),
- '',
- '// Table-based query hooks',
- ];
+ const statements: t.Statement[] = [];
// Export all table query hooks
for (const table of tables) {
const listHookName = getListQueryHookName(table);
const singleHookName = getSingleQueryHookName(table);
- lines.push(`export * from './${listHookName}';`);
- lines.push(`export * from './${singleHookName}';`);
+ statements.push(exportAllFrom(`./${listHookName}`));
+ statements.push(exportAllFrom(`./${singleHookName}`));
}
// Add custom query hooks
- if (customQueryNames.length > 0) {
- lines.push('');
- lines.push('// Custom query hooks');
- for (const name of customQueryNames) {
- const hookName = getOperationHookName(name, 'query');
- lines.push(`export * from './${hookName}';`);
- }
+ for (const name of customQueryNames) {
+ const hookName = getOperationHookName(name, 'query');
+ statements.push(exportAllFrom(`./${hookName}`));
}
- return lines.join('\n') + '\n';
+ // Add file header as leading comment on first statement
+ if (statements.length > 0) {
+ addJSDocComment(statements[0], [
+ 'Query hooks barrel export',
+ '@generated by @constructive-io/graphql-codegen',
+ 'DO NOT EDIT - changes will be overwritten',
+ ]);
+ }
+
+ return generateCode(statements);
}
/**
@@ -187,11 +239,7 @@ export function generateCustomMutationsBarrel(
tables: CleanTable[],
customMutationNames: string[]
): string {
- const lines: string[] = [
- createFileHeader('Mutation hooks barrel export'),
- '',
- '// Table-based mutation hooks',
- ];
+ const statements: t.Statement[] = [];
// Export all table mutation hooks
for (const table of tables) {
@@ -199,26 +247,31 @@ export function generateCustomMutationsBarrel(
const updateHookName = getUpdateMutationHookName(table);
const deleteHookName = getDeleteMutationHookName(table);
- lines.push(`export * from './${createHookName}';`);
+ statements.push(exportAllFrom(`./${createHookName}`));
// Only add update/delete if they exist
if (table.query?.update !== null) {
- lines.push(`export * from './${updateHookName}';`);
+ statements.push(exportAllFrom(`./${updateHookName}`));
}
if (table.query?.delete !== null) {
- lines.push(`export * from './${deleteHookName}';`);
+ statements.push(exportAllFrom(`./${deleteHookName}`));
}
}
// Add custom mutation hooks
- if (customMutationNames.length > 0) {
- lines.push('');
- lines.push('// Custom mutation hooks');
- for (const name of customMutationNames) {
- const hookName = getOperationHookName(name, 'mutation');
- lines.push(`export * from './${hookName}';`);
- }
+ for (const name of customMutationNames) {
+ const hookName = getOperationHookName(name, 'mutation');
+ statements.push(exportAllFrom(`./${hookName}`));
+ }
+
+ // Add file header as leading comment on first statement
+ if (statements.length > 0) {
+ addJSDocComment(statements[0], [
+ 'Mutation hooks barrel export',
+ '@generated by @constructive-io/graphql-codegen',
+ 'DO NOT EDIT - changes will be overwritten',
+ ]);
}
- return lines.join('\n') + '\n';
+ return generateCode(statements);
}
diff --git a/graphql/codegen/src/cli/codegen/client.ts b/graphql/codegen/src/cli/codegen/client.ts
index dd572f883..5db32717d 100644
--- a/graphql/codegen/src/cli/codegen/client.ts
+++ b/graphql/codegen/src/cli/codegen/client.ts
@@ -197,5 +197,66 @@ export async function executeWithErrors number);
+ };
+ mutations?: {
+ retry?: number | boolean;
+ retryDelay?: number | ((attemptIndex: number) => number);
+ };
+ };
+}
+
+// Note: createQueryClient is available when using with @tanstack/react-query
+// Import QueryClient from '@tanstack/react-query' and use these options:
+//
+// import { QueryClient } from '@tanstack/react-query';
+// const queryClient = new QueryClient(defaultQueryClientOptions);
+//
+// Or merge with your own options:
+// const queryClient = new QueryClient({
+// ...defaultQueryClientOptions,
+// defaultOptions: {
+// ...defaultQueryClientOptions.defaultOptions,
+// queries: {
+// ...defaultQueryClientOptions.defaultOptions.queries,
+// staleTime: 30000, // Override specific options
+// },
+// },
+// });
`;
}
diff --git a/graphql/codegen/src/cli/codegen/custom-mutations.ts b/graphql/codegen/src/cli/codegen/custom-mutations.ts
index 46c73b933..f9156cadb 100644
--- a/graphql/codegen/src/cli/codegen/custom-mutations.ts
+++ b/graphql/codegen/src/cli/codegen/custom-mutations.ts
@@ -15,16 +15,8 @@ import type {
CleanArgument,
TypeRegistry,
} from '../../types/schema';
-import {
- createProject,
- createSourceFile,
- getFormattedOutput,
- createFileHeader,
- createImport,
- createInterface,
- createConst,
- type InterfaceProperty,
-} from './ts-ast';
+import * as t from '@babel/types';
+import { generateCode, addJSDocComment, typedParam } from './babel-ast';
import { buildCustomMutationString } from './schema-gql-ast';
import {
typeRefToTsType,
@@ -37,6 +29,7 @@ import {
createTypeTracker,
type TypeTracker,
} from './type-resolver';
+import { getGeneratedFileHeader } from './utils';
export interface GeneratedCustomMutationFile {
fileName: string;
@@ -44,31 +37,40 @@ export interface GeneratedCustomMutationFile {
operationName: string;
}
-// ============================================================================
-// Single custom mutation hook generator
-// ============================================================================
-
export interface GenerateCustomMutationHookOptions {
operation: CleanOperation;
typeRegistry: TypeRegistry;
maxDepth?: number;
skipQueryField?: boolean;
- /** Whether to generate React Query hooks (default: true for backwards compatibility) */
reactQueryEnabled?: boolean;
- /** Table entity type names (for import path resolution) */
tableTypeNames?: Set;
+ useCentralizedKeys?: boolean;
+}
+
+interface VariablesProp {
+ name: string;
+ type: string;
+ optional: boolean;
+ docs?: string[];
+}
+
+function generateVariablesProperties(
+ args: CleanArgument[],
+ tracker?: TypeTracker
+): VariablesProp[] {
+ return args.map((arg) => ({
+ name: arg.name,
+ type: typeRefToTsType(arg.type, tracker),
+ optional: !isTypeRequired(arg.type),
+ docs: arg.description ? [arg.description] : undefined,
+ }));
}
-/**
- * Generate a custom mutation hook file
- * When reactQueryEnabled is false, returns null since mutations require React Query
- */
export function generateCustomMutationHook(
options: GenerateCustomMutationHookOptions
): GeneratedCustomMutationFile | null {
const { operation, reactQueryEnabled = true } = options;
- // Mutations require React Query - skip generation when disabled
if (!reactQueryEnabled) {
return null;
}
@@ -85,19 +87,23 @@ export function generateCustomMutationHook(
function generateCustomMutationHookInternal(
options: GenerateCustomMutationHookOptions
): GeneratedCustomMutationFile {
- const { operation, typeRegistry, maxDepth = 2, skipQueryField = true, tableTypeNames } = options;
+ const {
+ operation,
+ typeRegistry,
+ maxDepth = 2,
+ skipQueryField = true,
+ tableTypeNames,
+ useCentralizedKeys = true,
+ } = options;
- const project = createProject();
const hookName = getOperationHookName(operation.name, 'mutation');
const fileName = getOperationFileName(operation.name, 'mutation');
const variablesTypeName = getOperationVariablesTypeName(operation.name, 'mutation');
const resultTypeName = getOperationResultTypeName(operation.name, 'mutation');
const documentConstName = getDocumentConstName(operation.name, 'mutation');
- // Create type tracker to collect referenced types (with table type awareness)
const tracker = createTypeTracker({ tableTypeNames });
- // Generate GraphQL document
const mutationDocument = buildCustomMutationString({
operation,
typeRegistry,
@@ -105,195 +111,206 @@ function generateCustomMutationHookInternal(
skipQueryField,
});
- const sourceFile = createSourceFile(project, fileName);
+ const statements: t.Statement[] = [];
+
+ const variablesProps =
+ operation.args.length > 0
+ ? generateVariablesProperties(operation.args, tracker)
+ : [];
+
+ const resultType = typeRefToTsType(operation.returnType, tracker);
- // Add file header
- sourceFile.insertText(
- 0,
- createFileHeader(`Custom mutation hook for ${operation.name}`) + '\n\n'
+ const schemaTypes = tracker.getImportableTypes();
+ const tableTypes = tracker.getTableTypes();
+
+ const reactQueryImport = t.importDeclaration(
+ [t.importSpecifier(t.identifier('useMutation'), t.identifier('useMutation'))],
+ t.stringLiteral('@tanstack/react-query')
);
+ statements.push(reactQueryImport);
- // Generate variables interface if there are arguments (with tracking)
- let variablesProps: InterfaceProperty[] = [];
- if (operation.args.length > 0) {
- variablesProps = generateVariablesProperties(operation.args, tracker);
- }
+ const reactQueryTypeImport = t.importDeclaration(
+ [t.importSpecifier(t.identifier('UseMutationOptions'), t.identifier('UseMutationOptions'))],
+ t.stringLiteral('@tanstack/react-query')
+ );
+ reactQueryTypeImport.importKind = 'type';
+ statements.push(reactQueryTypeImport);
+
+ const clientImport = t.importDeclaration(
+ [t.importSpecifier(t.identifier('execute'), t.identifier('execute'))],
+ t.stringLiteral('../client')
+ );
+ statements.push(clientImport);
- // Generate result interface (with tracking)
- const resultType = typeRefToTsType(operation.returnType, tracker);
- const resultProps: InterfaceProperty[] = [
- { name: operation.name, type: resultType },
- ];
-
- // Get importable types from tracker (separated by source)
- const schemaTypes = tracker.getImportableTypes(); // From schema-types.ts
- const tableTypes = tracker.getTableTypes(); // From types.ts
-
- // Add imports
- const imports = [
- createImport({
- moduleSpecifier: '@tanstack/react-query',
- namedImports: ['useMutation'],
- typeOnlyNamedImports: ['UseMutationOptions'],
- }),
- createImport({
- moduleSpecifier: '../client',
- namedImports: ['execute'],
- }),
- ];
-
- // Add types.ts import for table entity types
if (tableTypes.length > 0) {
- imports.push(
- createImport({
- moduleSpecifier: '../types',
- typeOnlyNamedImports: tableTypes,
- })
+ const typesImport = t.importDeclaration(
+ tableTypes.map((tt) => t.importSpecifier(t.identifier(tt), t.identifier(tt))),
+ t.stringLiteral('../types')
);
+ typesImport.importKind = 'type';
+ statements.push(typesImport);
}
- // Add schema-types import for Input/Payload/Enum types
if (schemaTypes.length > 0) {
- imports.push(
- createImport({
- moduleSpecifier: '../schema-types',
- typeOnlyNamedImports: schemaTypes,
- })
+ const schemaTypesImport = t.importDeclaration(
+ schemaTypes.map((st) => t.importSpecifier(t.identifier(st), t.identifier(st))),
+ t.stringLiteral('../schema-types')
);
+ schemaTypesImport.importKind = 'type';
+ statements.push(schemaTypesImport);
}
- sourceFile.addImportDeclarations(imports);
+ if (useCentralizedKeys) {
+ const mutationKeyImport = t.importDeclaration(
+ [t.importSpecifier(t.identifier('customMutationKeys'), t.identifier('customMutationKeys'))],
+ t.stringLiteral('../mutation-keys')
+ );
+ statements.push(mutationKeyImport);
+ }
- // Add mutation document constant
- sourceFile.addVariableStatement(
- createConst(documentConstName, '`\n' + mutationDocument + '`', {
- docs: ['GraphQL mutation document'],
- })
- );
+ const mutationDocConst = t.variableDeclaration('const', [
+ t.variableDeclarator(
+ t.identifier(documentConstName),
+ t.templateLiteral(
+ [t.templateElement({ raw: '\n' + mutationDocument, cooked: '\n' + mutationDocument }, true)],
+ []
+ )
+ ),
+ ]);
+ const mutationDocExport = t.exportNamedDeclaration(mutationDocConst);
+ addJSDocComment(mutationDocExport, ['GraphQL mutation document']);
+ statements.push(mutationDocExport);
- // Add variables interface
if (operation.args.length > 0) {
- sourceFile.addInterface(createInterface(variablesTypeName, variablesProps));
+ const variablesInterfaceProps = variablesProps.map((vp) => {
+ const prop = t.tsPropertySignature(
+ t.identifier(vp.name),
+ t.tsTypeAnnotation(t.tsTypeReference(t.identifier(vp.type)))
+ );
+ prop.optional = vp.optional;
+ return prop;
+ });
+ const variablesInterface = t.tsInterfaceDeclaration(
+ t.identifier(variablesTypeName),
+ null,
+ null,
+ t.tsInterfaceBody(variablesInterfaceProps)
+ );
+ statements.push(t.exportNamedDeclaration(variablesInterface));
}
- // Add result interface
- sourceFile.addInterface(createInterface(resultTypeName, resultProps));
-
- // Generate hook function
- const hookParams = generateHookParameters(operation, variablesTypeName, resultTypeName);
- const hookBody = generateHookBody(operation, documentConstName, variablesTypeName, resultTypeName);
+ const resultInterfaceBody = t.tsInterfaceBody([
+ t.tsPropertySignature(
+ t.identifier(operation.name),
+ t.tsTypeAnnotation(t.tsTypeReference(t.identifier(resultType)))
+ ),
+ ]);
+ const resultInterface = t.tsInterfaceDeclaration(
+ t.identifier(resultTypeName),
+ null,
+ null,
+ resultInterfaceBody
+ );
+ statements.push(t.exportNamedDeclaration(resultInterface));
- // Note: docs can cause ts-morph issues with certain content, so we skip them
- sourceFile.addFunction({
- name: hookName,
- isExported: true,
- parameters: hookParams,
- statements: hookBody,
- });
+ const hasArgs = operation.args.length > 0;
- return {
- fileName,
- content: getFormattedOutput(sourceFile),
- operationName: operation.name,
- };
-}
+ const hookBodyStatements: t.Statement[] = [];
+ const mutationOptions: (t.ObjectProperty | t.SpreadElement)[] = [];
+
+ if (useCentralizedKeys) {
+ mutationOptions.push(
+ t.objectProperty(
+ t.identifier('mutationKey'),
+ t.callExpression(
+ t.memberExpression(t.identifier('customMutationKeys'), t.identifier(operation.name)),
+ []
+ )
+ )
+ );
+ }
-// ============================================================================
-// Helper functions
-// ============================================================================
+ if (hasArgs) {
+ mutationOptions.push(
+ t.objectProperty(
+ t.identifier('mutationFn'),
+ t.arrowFunctionExpression(
+ [typedParam('variables', t.tsTypeReference(t.identifier(variablesTypeName)))],
+ t.callExpression(t.identifier('execute'), [
+ t.identifier(documentConstName),
+ t.identifier('variables'),
+ ])
+ )
+ )
+ );
+ } else {
+ mutationOptions.push(
+ t.objectProperty(
+ t.identifier('mutationFn'),
+ t.arrowFunctionExpression(
+ [],
+ t.callExpression(t.identifier('execute'), [t.identifier(documentConstName)])
+ )
+ )
+ );
+ }
-/**
- * Generate interface properties from CleanArguments
- */
-function generateVariablesProperties(
- args: CleanArgument[],
- tracker?: TypeTracker
-): InterfaceProperty[] {
- return args.map((arg) => ({
- name: arg.name,
- type: typeRefToTsType(arg.type, tracker),
- optional: !isTypeRequired(arg.type),
- docs: arg.description ? [arg.description] : undefined,
- }));
-}
+ mutationOptions.push(t.spreadElement(t.identifier('options')));
-/**
- * Generate hook function parameters
- */
-function generateHookParameters(
- operation: CleanOperation,
- variablesTypeName: string,
- resultTypeName: string
-): Array<{ name: string; type: string; hasQuestionToken?: boolean }> {
- const hasArgs = operation.args.length > 0;
+ hookBodyStatements.push(
+ t.returnStatement(
+ t.callExpression(t.identifier('useMutation'), [t.objectExpression(mutationOptions)])
+ )
+ );
- // Mutation hooks use UseMutationOptions with variables as the second type param
const optionsType = hasArgs
? `Omit, 'mutationFn'>`
: `Omit, 'mutationFn'>`;
- return [
- {
- name: 'options',
- type: optionsType,
- hasQuestionToken: true,
- },
- ];
-}
+ const optionsParam = t.identifier('options');
+ optionsParam.optional = true;
+ optionsParam.typeAnnotation = t.tsTypeAnnotation(t.tsTypeReference(t.identifier(optionsType)));
-/**
- * Generate hook function body
- */
-function generateHookBody(
- operation: CleanOperation,
- documentConstName: string,
- variablesTypeName: string,
- resultTypeName: string
-): string {
- const hasArgs = operation.args.length > 0;
-
- if (hasArgs) {
- return `return useMutation({
- mutationFn: (variables: ${variablesTypeName}) =>
- execute<${resultTypeName}, ${variablesTypeName}>(
- ${documentConstName},
- variables
- ),
- ...options,
- });`;
- } else {
- return `return useMutation({
- mutationFn: () => execute<${resultTypeName}>(${documentConstName}),
- ...options,
- });`;
- }
-}
+ const hookFunc = t.functionDeclaration(
+ t.identifier(hookName),
+ [optionsParam],
+ t.blockStatement(hookBodyStatements)
+ );
+ const hookExport = t.exportNamedDeclaration(hookFunc);
+ statements.push(hookExport);
-// NOTE: JSDoc generation removed due to ts-morph issues with certain content
+ const code = generateCode(statements);
+ const content = getGeneratedFileHeader(`Custom mutation hook for ${operation.name}`) + '\n\n' + code;
-// ============================================================================
-// Batch generator
-// ============================================================================
+ return {
+ fileName,
+ content,
+ operationName: operation.name,
+ };
+}
export interface GenerateAllCustomMutationHooksOptions {
operations: CleanOperation[];
typeRegistry: TypeRegistry;
maxDepth?: number;
skipQueryField?: boolean;
- /** Whether to generate React Query hooks (default: true for backwards compatibility) */
reactQueryEnabled?: boolean;
- /** Table entity type names (for import path resolution) */
tableTypeNames?: Set;
+ useCentralizedKeys?: boolean;
}
-/**
- * Generate all custom mutation hook files
- * When reactQueryEnabled is false, returns empty array since mutations require React Query
- */
export function generateAllCustomMutationHooks(
options: GenerateAllCustomMutationHooksOptions
): GeneratedCustomMutationFile[] {
- const { operations, typeRegistry, maxDepth = 2, skipQueryField = true, reactQueryEnabled = true, tableTypeNames } = options;
+ const {
+ operations,
+ typeRegistry,
+ maxDepth = 2,
+ skipQueryField = true,
+ reactQueryEnabled = true,
+ tableTypeNames,
+ useCentralizedKeys = true,
+ } = options;
return operations
.filter((op) => op.kind === 'mutation')
@@ -305,6 +322,7 @@ export function generateAllCustomMutationHooks(
skipQueryField,
reactQueryEnabled,
tableTypeNames,
+ useCentralizedKeys,
})
)
.filter((result): result is GeneratedCustomMutationFile => result !== null);
diff --git a/graphql/codegen/src/cli/codegen/custom-queries.ts b/graphql/codegen/src/cli/codegen/custom-queries.ts
index 286cb4381..4bcbd2d9f 100644
--- a/graphql/codegen/src/cli/codegen/custom-queries.ts
+++ b/graphql/codegen/src/cli/codegen/custom-queries.ts
@@ -15,16 +15,8 @@ import type {
CleanArgument,
TypeRegistry,
} from '../../types/schema';
-import {
- createProject,
- createSourceFile,
- getFormattedOutput,
- createFileHeader,
- createImport,
- createInterface,
- createConst,
- type InterfaceProperty,
-} from './ts-ast';
+import * as t from '@babel/types';
+import { generateCode, addJSDocComment, typedParam } from './babel-ast';
import { buildCustomQueryString } from './schema-gql-ast';
import {
typeRefToTsType,
@@ -38,7 +30,7 @@ import {
createTypeTracker,
type TypeTracker,
} from './type-resolver';
-import { ucFirst } from './utils';
+import { ucFirst, getGeneratedFileHeader } from './utils';
export interface GeneratedCustomQueryFile {
fileName: string;
@@ -46,30 +38,48 @@ export interface GeneratedCustomQueryFile {
operationName: string;
}
-// ============================================================================
-// Single custom query hook generator
-// ============================================================================
-
export interface GenerateCustomQueryHookOptions {
operation: CleanOperation;
typeRegistry: TypeRegistry;
maxDepth?: number;
skipQueryField?: boolean;
- /** Whether to generate React Query hooks (default: true for backwards compatibility) */
reactQueryEnabled?: boolean;
- /** Table entity type names (for import path resolution) */
tableTypeNames?: Set;
+ useCentralizedKeys?: boolean;
+}
+
+interface VariablesProp {
+ name: string;
+ type: string;
+ optional: boolean;
+ docs?: string[];
+}
+
+function generateVariablesProperties(
+ args: CleanArgument[],
+ tracker?: TypeTracker
+): VariablesProp[] {
+ return args.map((arg) => ({
+ name: arg.name,
+ type: typeRefToTsType(arg.type, tracker),
+ optional: !isTypeRequired(arg.type),
+ docs: arg.description ? [arg.description] : undefined,
+ }));
}
-/**
- * Generate a custom query hook file
- */
export function generateCustomQueryHook(
options: GenerateCustomQueryHookOptions
): GeneratedCustomQueryFile {
- const { operation, typeRegistry, maxDepth = 2, skipQueryField = true, reactQueryEnabled = true, tableTypeNames } = options;
+ const {
+ operation,
+ typeRegistry,
+ maxDepth = 2,
+ skipQueryField = true,
+ reactQueryEnabled = true,
+ tableTypeNames,
+ useCentralizedKeys = true,
+ } = options;
- const project = createProject();
const hookName = getOperationHookName(operation.name, 'query');
const fileName = getOperationFileName(operation.name, 'query');
const variablesTypeName = getOperationVariablesTypeName(operation.name, 'query');
@@ -77,10 +87,8 @@ export function generateCustomQueryHook(
const documentConstName = getDocumentConstName(operation.name, 'query');
const queryKeyName = getQueryKeyName(operation.name);
- // Create type tracker to collect referenced types (with table type awareness)
const tracker = createTypeTracker({ tableTypeNames });
- // Generate GraphQL document
const queryDocument = buildCustomQueryString({
operation,
typeRegistry,
@@ -88,467 +96,460 @@ export function generateCustomQueryHook(
skipQueryField,
});
- const sourceFile = createSourceFile(project, fileName);
+ const statements: t.Statement[] = [];
- // Add file header
- const headerText = reactQueryEnabled
- ? `Custom query hook for ${operation.name}`
- : `Custom query functions for ${operation.name}`;
- sourceFile.insertText(0, createFileHeader(headerText) + '\n\n');
+ const variablesProps =
+ operation.args.length > 0
+ ? generateVariablesProperties(operation.args, tracker)
+ : [];
- // Generate variables interface if there are arguments (with tracking)
- let variablesProps: InterfaceProperty[] = [];
- if (operation.args.length > 0) {
- variablesProps = generateVariablesProperties(operation.args, tracker);
- }
-
- // Generate result interface (with tracking)
const resultType = typeRefToTsType(operation.returnType, tracker);
- const resultProps: InterfaceProperty[] = [
- { name: operation.name, type: resultType },
- ];
- // Get importable types from tracker (separated by source)
- const schemaTypes = tracker.getImportableTypes(); // From schema-types.ts
- const tableTypes = tracker.getTableTypes(); // From types.ts
+ const schemaTypes = tracker.getImportableTypes();
+ const tableTypes = tracker.getTableTypes();
- // Add imports - conditionally include React Query imports
- const imports = [];
if (reactQueryEnabled) {
- imports.push(
- createImport({
- moduleSpecifier: '@tanstack/react-query',
- namedImports: ['useQuery'],
- typeOnlyNamedImports: ['UseQueryOptions', 'QueryClient'],
- })
+ const reactQueryImport = t.importDeclaration(
+ [t.importSpecifier(t.identifier('useQuery'), t.identifier('useQuery'))],
+ t.stringLiteral('@tanstack/react-query')
+ );
+ statements.push(reactQueryImport);
+ const reactQueryTypeImport = t.importDeclaration(
+ [
+ t.importSpecifier(t.identifier('UseQueryOptions'), t.identifier('UseQueryOptions')),
+ t.importSpecifier(t.identifier('QueryClient'), t.identifier('QueryClient')),
+ ],
+ t.stringLiteral('@tanstack/react-query')
);
+ reactQueryTypeImport.importKind = 'type';
+ statements.push(reactQueryTypeImport);
}
- imports.push(
- createImport({
- moduleSpecifier: '../client',
- namedImports: ['execute'],
- typeOnlyNamedImports: ['ExecuteOptions'],
- })
+
+ const clientImport = t.importDeclaration(
+ [t.importSpecifier(t.identifier('execute'), t.identifier('execute'))],
+ t.stringLiteral('../client')
+ );
+ statements.push(clientImport);
+ const clientTypeImport = t.importDeclaration(
+ [t.importSpecifier(t.identifier('ExecuteOptions'), t.identifier('ExecuteOptions'))],
+ t.stringLiteral('../client')
);
+ clientTypeImport.importKind = 'type';
+ statements.push(clientTypeImport);
- // Add types.ts import for table entity types
if (tableTypes.length > 0) {
- imports.push(
- createImport({
- moduleSpecifier: '../types',
- typeOnlyNamedImports: tableTypes,
- })
+ const typesImport = t.importDeclaration(
+ tableTypes.map((tt) => t.importSpecifier(t.identifier(tt), t.identifier(tt))),
+ t.stringLiteral('../types')
);
+ typesImport.importKind = 'type';
+ statements.push(typesImport);
}
- // Add schema-types import for Input/Payload/Enum types
if (schemaTypes.length > 0) {
- imports.push(
- createImport({
- moduleSpecifier: '../schema-types',
- typeOnlyNamedImports: schemaTypes,
- })
+ const schemaTypesImport = t.importDeclaration(
+ schemaTypes.map((st) => t.importSpecifier(t.identifier(st), t.identifier(st))),
+ t.stringLiteral('../schema-types')
);
+ schemaTypesImport.importKind = 'type';
+ statements.push(schemaTypesImport);
}
- sourceFile.addImportDeclarations(imports);
+ if (useCentralizedKeys) {
+ const queryKeyImport = t.importDeclaration(
+ [t.importSpecifier(t.identifier('customQueryKeys'), t.identifier('customQueryKeys'))],
+ t.stringLiteral('../query-keys')
+ );
+ statements.push(queryKeyImport);
+ }
- // Add query document constant
- sourceFile.addVariableStatement(
- createConst(documentConstName, '`\n' + queryDocument + '`', {
- docs: ['GraphQL query document'],
- })
- );
+ const queryDocConst = t.variableDeclaration('const', [
+ t.variableDeclarator(
+ t.identifier(documentConstName),
+ t.templateLiteral(
+ [t.templateElement({ raw: '\n' + queryDocument, cooked: '\n' + queryDocument }, true)],
+ []
+ )
+ ),
+ ]);
+ const queryDocExport = t.exportNamedDeclaration(queryDocConst);
+ addJSDocComment(queryDocExport, ['GraphQL query document']);
+ statements.push(queryDocExport);
- // Add variables interface
if (operation.args.length > 0) {
- sourceFile.addInterface(createInterface(variablesTypeName, variablesProps));
+ const variablesInterfaceProps = variablesProps.map((vp) => {
+ const prop = t.tsPropertySignature(
+ t.identifier(vp.name),
+ t.tsTypeAnnotation(t.tsTypeReference(t.identifier(vp.type)))
+ );
+ prop.optional = vp.optional;
+ return prop;
+ });
+ const variablesInterface = t.tsInterfaceDeclaration(
+ t.identifier(variablesTypeName),
+ null,
+ null,
+ t.tsInterfaceBody(variablesInterfaceProps)
+ );
+ statements.push(t.exportNamedDeclaration(variablesInterface));
}
- // Add result interface
- sourceFile.addInterface(createInterface(resultTypeName, resultProps));
-
- // Query key factory
- if (operation.args.length > 0) {
- sourceFile.addVariableStatement(
- createConst(
- queryKeyName,
- `(variables?: ${variablesTypeName}) =>
- ['${operation.name}', variables] as const`,
- { docs: ['Query key factory for caching'] }
+ const resultInterfaceBody = t.tsInterfaceBody([
+ t.tsPropertySignature(
+ t.identifier(operation.name),
+ t.tsTypeAnnotation(t.tsTypeReference(t.identifier(resultType)))
+ ),
+ ]);
+ const resultInterface = t.tsInterfaceDeclaration(
+ t.identifier(resultTypeName),
+ null,
+ null,
+ resultInterfaceBody
+ );
+ statements.push(t.exportNamedDeclaration(resultInterface));
+
+ if (useCentralizedKeys) {
+ const queryKeyConst = t.variableDeclaration('const', [
+ t.variableDeclarator(
+ t.identifier(queryKeyName),
+ t.memberExpression(t.identifier('customQueryKeys'), t.identifier(operation.name))
+ ),
+ ]);
+ const queryKeyExport = t.exportNamedDeclaration(queryKeyConst);
+ addJSDocComment(queryKeyExport, ['Query key factory - re-exported from query-keys.ts']);
+ statements.push(queryKeyExport);
+ } else if (operation.args.length > 0) {
+ const queryKeyArrow = t.arrowFunctionExpression(
+ [typedParam('variables', t.tsTypeReference(t.identifier(variablesTypeName)), true)],
+ t.tsAsExpression(
+ t.arrayExpression([t.stringLiteral(operation.name), t.identifier('variables')]),
+ t.tsTypeReference(t.identifier('const'))
)
);
+ const queryKeyConst = t.variableDeclaration('const', [
+ t.variableDeclarator(t.identifier(queryKeyName), queryKeyArrow),
+ ]);
+ const queryKeyExport = t.exportNamedDeclaration(queryKeyConst);
+ addJSDocComment(queryKeyExport, ['Query key factory for caching']);
+ statements.push(queryKeyExport);
} else {
- sourceFile.addVariableStatement(
- createConst(queryKeyName, `() => ['${operation.name}'] as const`, {
- docs: ['Query key factory for caching'],
- })
+ const queryKeyArrow = t.arrowFunctionExpression(
+ [],
+ t.tsAsExpression(
+ t.arrayExpression([t.stringLiteral(operation.name)]),
+ t.tsTypeReference(t.identifier('const'))
+ )
);
+ const queryKeyConst = t.variableDeclaration('const', [
+ t.variableDeclarator(t.identifier(queryKeyName), queryKeyArrow),
+ ]);
+ const queryKeyExport = t.exportNamedDeclaration(queryKeyConst);
+ addJSDocComment(queryKeyExport, ['Query key factory for caching']);
+ statements.push(queryKeyExport);
}
- // Generate hook function (only if React Query is enabled)
if (reactQueryEnabled) {
- const hookParams = generateHookParameters(operation, variablesTypeName, resultTypeName);
- const hookBody = generateHookBody(operation, documentConstName, queryKeyName, variablesTypeName, resultTypeName);
- const hookDoc = generateHookDoc(operation, hookName);
-
- sourceFile.addFunction({
- name: hookName,
- isExported: true,
- parameters: hookParams,
- statements: hookBody,
- docs: [{ description: hookDoc }],
- });
- }
-
- // Add standalone functions section
- sourceFile.addStatements('\n// ============================================================================');
- sourceFile.addStatements('// Standalone Functions (non-React)');
- sourceFile.addStatements('// ============================================================================\n');
-
- // Generate standalone fetch function
- const fetchFnName = `fetch${ucFirst(operation.name)}Query`;
- const fetchParams = generateFetchParameters(operation, variablesTypeName);
- const fetchBody = generateFetchBody(operation, documentConstName, variablesTypeName, resultTypeName);
- const fetchDoc = generateFetchDoc(operation, fetchFnName);
-
- sourceFile.addFunction({
- name: fetchFnName,
- isExported: true,
- isAsync: true,
- parameters: fetchParams,
- returnType: `Promise<${resultTypeName}>`,
- statements: fetchBody,
- docs: [{ description: fetchDoc }],
- });
-
- // Generate prefetch function (only if React Query is enabled)
- if (reactQueryEnabled) {
- const prefetchFnName = `prefetch${ucFirst(operation.name)}Query`;
- const prefetchParams = generatePrefetchParameters(operation, variablesTypeName);
- const prefetchBody = generatePrefetchBody(operation, documentConstName, queryKeyName, variablesTypeName, resultTypeName);
- const prefetchDoc = generatePrefetchDoc(operation, prefetchFnName);
-
- sourceFile.addFunction({
- name: prefetchFnName,
- isExported: true,
- isAsync: true,
- parameters: prefetchParams,
- returnType: 'Promise',
- statements: prefetchBody,
- docs: [{ description: prefetchDoc }],
- });
- }
-
- return {
- fileName,
- content: getFormattedOutput(sourceFile),
- operationName: operation.name,
- };
-}
-
-// ============================================================================
-// Helper functions
-// ============================================================================
+ const hasArgs = operation.args.length > 0;
+ const hasRequiredArgs = operation.args.some((arg) => isTypeRequired(arg.type));
-/**
- * Generate interface properties from CleanArguments
- */
-function generateVariablesProperties(
- args: CleanArgument[],
- tracker?: TypeTracker
-): InterfaceProperty[] {
- return args.map((arg) => ({
- name: arg.name,
- type: typeRefToTsType(arg.type, tracker),
- optional: !isTypeRequired(arg.type),
- docs: arg.description ? [arg.description] : undefined,
- }));
-}
+ const hookBodyStatements: t.Statement[] = [];
+ const useQueryOptions: (t.ObjectProperty | t.SpreadElement)[] = [];
+
+ if (hasArgs) {
+ useQueryOptions.push(
+ t.objectProperty(
+ t.identifier('queryKey'),
+ t.callExpression(t.identifier(queryKeyName), [t.identifier('variables')])
+ )
+ );
+ useQueryOptions.push(
+ t.objectProperty(
+ t.identifier('queryFn'),
+ t.arrowFunctionExpression(
+ [],
+ t.callExpression(t.identifier('execute'), [
+ t.identifier(documentConstName),
+ t.identifier('variables'),
+ ])
+ )
+ )
+ );
+ if (hasRequiredArgs) {
+ useQueryOptions.push(
+ t.objectProperty(
+ t.identifier('enabled'),
+ t.logicalExpression(
+ '&&',
+ t.unaryExpression('!', t.unaryExpression('!', t.identifier('variables'))),
+ t.binaryExpression(
+ '!==',
+ t.optionalMemberExpression(
+ t.identifier('options'),
+ t.identifier('enabled'),
+ false,
+ true
+ ),
+ t.booleanLiteral(false)
+ )
+ )
+ )
+ );
+ }
+ } else {
+ useQueryOptions.push(
+ t.objectProperty(
+ t.identifier('queryKey'),
+ t.callExpression(t.identifier(queryKeyName), [])
+ )
+ );
+ useQueryOptions.push(
+ t.objectProperty(
+ t.identifier('queryFn'),
+ t.arrowFunctionExpression(
+ [],
+ t.callExpression(t.identifier('execute'), [t.identifier(documentConstName)])
+ )
+ )
+ );
+ }
+ useQueryOptions.push(t.spreadElement(t.identifier('options')));
+
+ hookBodyStatements.push(
+ t.returnStatement(
+ t.callExpression(t.identifier('useQuery'), [t.objectExpression(useQueryOptions)])
+ )
+ );
-/**
- * Generate hook function parameters
- */
-function generateHookParameters(
- operation: CleanOperation,
- variablesTypeName: string,
- resultTypeName: string
-): Array<{ name: string; type: string; hasQuestionToken?: boolean }> {
- const params: Array<{ name: string; type: string; hasQuestionToken?: boolean }> = [];
-
- // Add variables parameter if there are required args
- const hasRequiredArgs = operation.args.some((arg) => isTypeRequired(arg.type));
+ const hookParams: t.Identifier[] = [];
+ if (hasArgs) {
+ hookParams.push(
+ typedParam('variables', t.tsTypeReference(t.identifier(variablesTypeName)), !hasRequiredArgs)
+ );
+ }
+ const optionsTypeStr = `Omit, 'queryKey' | 'queryFn'>`;
+ const optionsParam = t.identifier('options');
+ optionsParam.optional = true;
+ optionsParam.typeAnnotation = t.tsTypeAnnotation(t.tsTypeReference(t.identifier(optionsTypeStr)));
+ hookParams.push(optionsParam);
+
+ const hookFunc = t.functionDeclaration(
+ t.identifier(hookName),
+ hookParams,
+ t.blockStatement(hookBodyStatements)
+ );
+ const hookExport = t.exportNamedDeclaration(hookFunc);
- if (operation.args.length > 0) {
- params.push({
- name: 'variables',
- type: variablesTypeName,
- hasQuestionToken: !hasRequiredArgs,
- });
+ const description = operation.description || `Query hook for ${operation.name}`;
+ const argNames = operation.args.map((a) => a.name).join(', ');
+ const exampleCall = hasArgs ? `${hookName}({ ${argNames} })` : `${hookName}()`;
+ addJSDocComment(hookExport, [
+ description,
+ '',
+ '@example',
+ '```tsx',
+ `const { data, isLoading } = ${exampleCall};`,
+ '',
+ `if (data?.${operation.name}) {`,
+ ` console.log(data.${operation.name});`,
+ '}',
+ '```',
+ ]);
+ statements.push(hookExport);
}
- // Add options parameter
- params.push({
- name: 'options',
- type: `Omit, 'queryKey' | 'queryFn'>`,
- hasQuestionToken: true,
- });
-
- return params;
-}
-
-/**
- * Generate hook function body
- */
-function generateHookBody(
- operation: CleanOperation,
- documentConstName: string,
- queryKeyName: string,
- variablesTypeName: string,
- resultTypeName: string
-): string {
+ const fetchFnName = `fetch${ucFirst(operation.name)}Query`;
const hasArgs = operation.args.length > 0;
const hasRequiredArgs = operation.args.some((arg) => isTypeRequired(arg.type));
+ const fetchBodyStatements: t.Statement[] = [];
if (hasArgs) {
- // With variables
- const enabledCondition = hasRequiredArgs
- ? `enabled: !!variables && (options?.enabled !== false),`
- : '';
-
- return `return useQuery({
- queryKey: ${queryKeyName}(variables),
- queryFn: () => execute<${resultTypeName}, ${variablesTypeName}>(
- ${documentConstName},
- variables
- ),
- ${enabledCondition}
- ...options,
- });`;
+ fetchBodyStatements.push(
+ t.returnStatement(
+ t.callExpression(t.identifier('execute'), [
+ t.identifier(documentConstName),
+ t.identifier('variables'),
+ t.identifier('options'),
+ ])
+ )
+ );
} else {
- // No variables
- return `return useQuery({
- queryKey: ${queryKeyName}(),
- queryFn: () => execute<${resultTypeName}>(${documentConstName}),
- ...options,
- });`;
+ fetchBodyStatements.push(
+ t.returnStatement(
+ t.callExpression(t.identifier('execute'), [
+ t.identifier(documentConstName),
+ t.identifier('undefined'),
+ t.identifier('options'),
+ ])
+ )
+ );
}
-}
-
-/**
- * Generate hook JSDoc documentation
- */
-function generateHookDoc(operation: CleanOperation, hookName: string): string {
- const description = operation.description
- ? operation.description
- : `Query hook for ${operation.name}`;
-
- const hasArgs = operation.args.length > 0;
- let example: string;
+ const fetchParams: t.Identifier[] = [];
if (hasArgs) {
- const argNames = operation.args.map((a) => a.name).join(', ');
- example = `
-@example
-\`\`\`tsx
-const { data, isLoading } = ${hookName}({ ${argNames} });
-
-if (data?.${operation.name}) {
- console.log(data.${operation.name});
-}
-\`\`\``;
- } else {
- example = `
-@example
-\`\`\`tsx
-const { data, isLoading } = ${hookName}();
-
-if (data?.${operation.name}) {
- console.log(data.${operation.name});
-}
-\`\`\``;
- }
-
- return description + '\n' + example;
-}
-
-// ============================================================================
-// Standalone function generators
-// ============================================================================
-
-/**
- * Generate fetch function parameters
- */
-function generateFetchParameters(
- operation: CleanOperation,
- variablesTypeName: string
-): Array<{ name: string; type: string; hasQuestionToken?: boolean }> {
- const params: Array<{ name: string; type: string; hasQuestionToken?: boolean }> = [];
-
- if (operation.args.length > 0) {
- const hasRequiredArgs = operation.args.some((arg) => isTypeRequired(arg.type));
- params.push({
- name: 'variables',
- type: variablesTypeName,
- hasQuestionToken: !hasRequiredArgs,
- });
- }
-
- params.push({
- name: 'options',
- type: 'ExecuteOptions',
- hasQuestionToken: true,
- });
-
- return params;
-}
-
-/**
- * Generate fetch function body
- */
-function generateFetchBody(
- operation: CleanOperation,
- documentConstName: string,
- variablesTypeName: string,
- resultTypeName: string
-): string {
- if (operation.args.length > 0) {
- return `return execute<${resultTypeName}, ${variablesTypeName}>(
- ${documentConstName},
- variables,
- options
- );`;
- } else {
- return `return execute<${resultTypeName}>(${documentConstName}, undefined, options);`;
- }
-}
-
-/**
- * Generate fetch function documentation
- */
-function generateFetchDoc(operation: CleanOperation, fnName: string): string {
- const description = `Fetch ${operation.name} without React hooks`;
-
- if (operation.args.length > 0) {
- const argNames = operation.args.map((a) => a.name).join(', ');
- return `${description}
-
-@example
-\`\`\`ts
-const data = await ${fnName}({ ${argNames} });
-\`\`\``;
- } else {
- return `${description}
-
-@example
-\`\`\`ts
-const data = await ${fnName}();
-\`\`\``;
+ fetchParams.push(
+ typedParam('variables', t.tsTypeReference(t.identifier(variablesTypeName)), !hasRequiredArgs)
+ );
}
-}
-
-/**
- * Generate prefetch function parameters
- */
-function generatePrefetchParameters(
- operation: CleanOperation,
- variablesTypeName: string
-): Array<{ name: string; type: string; hasQuestionToken?: boolean }> {
- const params: Array<{ name: string; type: string; hasQuestionToken?: boolean }> = [
- { name: 'queryClient', type: 'QueryClient' },
- ];
+ fetchParams.push(typedParam('options', t.tsTypeReference(t.identifier('ExecuteOptions')), true));
- if (operation.args.length > 0) {
- const hasRequiredArgs = operation.args.some((arg) => isTypeRequired(arg.type));
- params.push({
- name: 'variables',
- type: variablesTypeName,
- hasQuestionToken: !hasRequiredArgs,
- });
- }
+ const fetchFunc = t.functionDeclaration(
+ t.identifier(fetchFnName),
+ fetchParams,
+ t.blockStatement(fetchBodyStatements)
+ );
+ fetchFunc.async = true;
+ fetchFunc.returnType = t.tsTypeAnnotation(
+ t.tsTypeReference(
+ t.identifier('Promise'),
+ t.tsTypeParameterInstantiation([t.tsTypeReference(t.identifier(resultTypeName))])
+ )
+ );
+ const fetchExport = t.exportNamedDeclaration(fetchFunc);
+
+ const argNames = operation.args.map((a) => a.name).join(', ');
+ const fetchExampleCall = hasArgs ? `${fetchFnName}({ ${argNames} })` : `${fetchFnName}()`;
+ addJSDocComment(fetchExport, [
+ `Fetch ${operation.name} without React hooks`,
+ '',
+ '@example',
+ '```ts',
+ `const data = await ${fetchExampleCall};`,
+ '```',
+ ]);
+ statements.push(fetchExport);
- params.push({
- name: 'options',
- type: 'ExecuteOptions',
- hasQuestionToken: true,
- });
+ if (reactQueryEnabled) {
+ const prefetchFnName = `prefetch${ucFirst(operation.name)}Query`;
- return params;
-}
+ const prefetchBodyStatements: t.Statement[] = [];
+ const prefetchQueryOptions: t.ObjectProperty[] = [];
+
+ if (hasArgs) {
+ prefetchQueryOptions.push(
+ t.objectProperty(
+ t.identifier('queryKey'),
+ t.callExpression(t.identifier(queryKeyName), [t.identifier('variables')])
+ )
+ );
+ prefetchQueryOptions.push(
+ t.objectProperty(
+ t.identifier('queryFn'),
+ t.arrowFunctionExpression(
+ [],
+ t.callExpression(t.identifier('execute'), [
+ t.identifier(documentConstName),
+ t.identifier('variables'),
+ t.identifier('options'),
+ ])
+ )
+ )
+ );
+ } else {
+ prefetchQueryOptions.push(
+ t.objectProperty(
+ t.identifier('queryKey'),
+ t.callExpression(t.identifier(queryKeyName), [])
+ )
+ );
+ prefetchQueryOptions.push(
+ t.objectProperty(
+ t.identifier('queryFn'),
+ t.arrowFunctionExpression(
+ [],
+ t.callExpression(t.identifier('execute'), [
+ t.identifier(documentConstName),
+ t.identifier('undefined'),
+ t.identifier('options'),
+ ])
+ )
+ )
+ );
+ }
+
+ prefetchBodyStatements.push(
+ t.expressionStatement(
+ t.awaitExpression(
+ t.callExpression(
+ t.memberExpression(t.identifier('queryClient'), t.identifier('prefetchQuery')),
+ [t.objectExpression(prefetchQueryOptions)]
+ )
+ )
+ )
+ );
-/**
- * Generate prefetch function body
- */
-function generatePrefetchBody(
- operation: CleanOperation,
- documentConstName: string,
- queryKeyName: string,
- variablesTypeName: string,
- resultTypeName: string
-): string {
- if (operation.args.length > 0) {
- return `await queryClient.prefetchQuery({
- queryKey: ${queryKeyName}(variables),
- queryFn: () => execute<${resultTypeName}, ${variablesTypeName}>(
- ${documentConstName},
- variables,
- options
- ),
- });`;
- } else {
- return `await queryClient.prefetchQuery({
- queryKey: ${queryKeyName}(),
- queryFn: () => execute<${resultTypeName}>(${documentConstName}, undefined, options),
- });`;
+ const prefetchParams: t.Identifier[] = [
+ typedParam('queryClient', t.tsTypeReference(t.identifier('QueryClient'))),
+ ];
+ if (hasArgs) {
+ prefetchParams.push(
+ typedParam('variables', t.tsTypeReference(t.identifier(variablesTypeName)), !hasRequiredArgs)
+ );
+ }
+ prefetchParams.push(typedParam('options', t.tsTypeReference(t.identifier('ExecuteOptions')), true));
+
+ const prefetchFunc = t.functionDeclaration(
+ t.identifier(prefetchFnName),
+ prefetchParams,
+ t.blockStatement(prefetchBodyStatements)
+ );
+ prefetchFunc.async = true;
+ prefetchFunc.returnType = t.tsTypeAnnotation(
+ t.tsTypeReference(
+ t.identifier('Promise'),
+ t.tsTypeParameterInstantiation([t.tsVoidKeyword()])
+ )
+ );
+ const prefetchExport = t.exportNamedDeclaration(prefetchFunc);
+
+ const prefetchExampleCall = hasArgs
+ ? `${prefetchFnName}(queryClient, { ${argNames} })`
+ : `${prefetchFnName}(queryClient)`;
+ addJSDocComment(prefetchExport, [
+ `Prefetch ${operation.name} for SSR or cache warming`,
+ '',
+ '@example',
+ '```ts',
+ `await ${prefetchExampleCall};`,
+ '```',
+ ]);
+ statements.push(prefetchExport);
}
-}
-
-/**
- * Generate prefetch function documentation
- */
-function generatePrefetchDoc(operation: CleanOperation, fnName: string): string {
- const description = `Prefetch ${operation.name} for SSR or cache warming`;
-
- if (operation.args.length > 0) {
- const argNames = operation.args.map((a) => a.name).join(', ');
- return `${description}
-@example
-\`\`\`ts
-await ${fnName}(queryClient, { ${argNames} });
-\`\`\``;
- } else {
- return `${description}
+ const code = generateCode(statements);
+ const headerText = reactQueryEnabled
+ ? `Custom query hook for ${operation.name}`
+ : `Custom query functions for ${operation.name}`;
+ const content = getGeneratedFileHeader(headerText) + '\n\n' + code;
-@example
-\`\`\`ts
-await ${fnName}(queryClient);
-\`\`\``;
- }
+ return {
+ fileName,
+ content,
+ operationName: operation.name,
+ };
}
-// ============================================================================
-// Batch generator
-// ============================================================================
-
export interface GenerateAllCustomQueryHooksOptions {
operations: CleanOperation[];
typeRegistry: TypeRegistry;
maxDepth?: number;
skipQueryField?: boolean;
- /** Whether to generate React Query hooks (default: true for backwards compatibility) */
reactQueryEnabled?: boolean;
- /** Table entity type names (for import path resolution) */
tableTypeNames?: Set;
+ useCentralizedKeys?: boolean;
}
-/**
- * Generate all custom query hook files
- */
export function generateAllCustomQueryHooks(
options: GenerateAllCustomQueryHooksOptions
): GeneratedCustomQueryFile[] {
- const { operations, typeRegistry, maxDepth = 2, skipQueryField = true, reactQueryEnabled = true, tableTypeNames } = options;
+ const {
+ operations,
+ typeRegistry,
+ maxDepth = 2,
+ skipQueryField = true,
+ reactQueryEnabled = true,
+ tableTypeNames,
+ useCentralizedKeys = true,
+ } = options;
return operations
.filter((op) => op.kind === 'query')
@@ -560,6 +561,7 @@ export function generateAllCustomQueryHooks(
skipQueryField,
reactQueryEnabled,
tableTypeNames,
+ useCentralizedKeys,
})
);
}
diff --git a/graphql/codegen/src/cli/codegen/index.ts b/graphql/codegen/src/cli/codegen/index.ts
index 4d4b65629..163a5acd8 100644
--- a/graphql/codegen/src/cli/codegen/index.ts
+++ b/graphql/codegen/src/cli/codegen/index.ts
@@ -28,7 +28,8 @@ import type {
CleanOperation,
TypeRegistry,
} from '../../types/schema';
-import type { ResolvedConfig } from '../../types/config';
+import type { ResolvedConfig, ResolvedQueryKeyConfig } from '../../types/config';
+import { DEFAULT_QUERY_KEY_CONFIG } from '../../types/config';
import { generateClientFile } from './client';
import { generateTypesFile } from './types';
@@ -37,6 +38,9 @@ import { generateAllQueryHooks } from './queries';
import { generateAllMutationHooks } from './mutations';
import { generateAllCustomQueryHooks } from './custom-queries';
import { generateAllCustomMutationHooks } from './custom-mutations';
+import { generateQueryKeysFile } from './query-keys';
+import { generateMutationKeysFile } from './mutation-keys';
+import { generateInvalidationFile } from './invalidation';
import {
generateQueriesBarrel,
generateMutationsBarrel,
@@ -108,6 +112,11 @@ export function generate(options: GenerateOptions): GenerateResult {
const skipQueryField = config.codegen.skipQueryField;
const reactQueryEnabled = config.reactQuery.enabled;
+ // Query key configuration (use defaults if not provided)
+ const queryKeyConfig: ResolvedQueryKeyConfig = config.queryKeys ?? DEFAULT_QUERY_KEY_CONFIG;
+ const useCentralizedKeys = queryKeyConfig.generateScopedKeys;
+ const hasRelationships = Object.keys(queryKeyConfig.relationships).length > 0;
+
// 1. Generate client.ts
files.push({
path: 'client.ts',
@@ -146,8 +155,56 @@ export function generate(options: GenerateOptions): GenerateResult {
}),
});
+ // 3b. Generate centralized query keys (query-keys.ts)
+ let hasQueryKeys = false;
+ if (useCentralizedKeys) {
+ const queryKeysResult = generateQueryKeysFile({
+ tables,
+ customQueries: customOperations?.queries ?? [],
+ config: queryKeyConfig,
+ });
+ files.push({
+ path: queryKeysResult.fileName,
+ content: queryKeysResult.content,
+ });
+ hasQueryKeys = true;
+ }
+
+ // 3c. Generate centralized mutation keys (mutation-keys.ts)
+ let hasMutationKeys = false;
+ if (useCentralizedKeys && queryKeyConfig.generateMutationKeys) {
+ const mutationKeysResult = generateMutationKeysFile({
+ tables,
+ customMutations: customOperations?.mutations ?? [],
+ config: queryKeyConfig,
+ });
+ files.push({
+ path: mutationKeysResult.fileName,
+ content: mutationKeysResult.content,
+ });
+ hasMutationKeys = true;
+ }
+
+ // 3d. Generate cache invalidation helpers (invalidation.ts)
+ let hasInvalidation = false;
+ if (useCentralizedKeys && queryKeyConfig.generateCascadeHelpers) {
+ const invalidationResult = generateInvalidationFile({
+ tables,
+ config: queryKeyConfig,
+ });
+ files.push({
+ path: invalidationResult.fileName,
+ content: invalidationResult.content,
+ });
+ hasInvalidation = true;
+ }
+
// 4. Generate table-based query hooks (queries/*.ts)
- const queryHooks = generateAllQueryHooks(tables, { reactQueryEnabled });
+ const queryHooks = generateAllQueryHooks(tables, {
+ reactQueryEnabled,
+ useCentralizedKeys,
+ hasRelationships,
+ });
for (const hook of queryHooks) {
files.push({
path: `queries/${hook.fileName}`,
@@ -169,6 +226,7 @@ export function generate(options: GenerateOptions): GenerateResult {
skipQueryField,
reactQueryEnabled,
tableTypeNames,
+ useCentralizedKeys,
});
for (const hook of customQueryHooks) {
@@ -195,6 +253,8 @@ export function generate(options: GenerateOptions): GenerateResult {
const mutationHooks = generateAllMutationHooks(tables, {
reactQueryEnabled,
enumsFromSchemaTypes: generatedEnumNames,
+ useCentralizedKeys,
+ hasRelationships,
});
for (const hook of mutationHooks) {
files.push({
@@ -217,6 +277,7 @@ export function generate(options: GenerateOptions): GenerateResult {
skipQueryField,
reactQueryEnabled,
tableTypeNames,
+ useCentralizedKeys,
});
for (const hook of customMutationHooks) {
@@ -247,7 +308,13 @@ export function generate(options: GenerateOptions): GenerateResult {
// 9. Generate main index.ts barrel (with schema-types if present)
files.push({
path: 'index.ts',
- content: generateMainBarrel(tables, { hasSchemaTypes, hasMutations }),
+ content: generateMainBarrel(tables, {
+ hasSchemaTypes,
+ hasMutations,
+ hasQueryKeys,
+ hasMutationKeys,
+ hasInvalidation,
+ }),
});
return {
@@ -295,3 +362,6 @@ export {
generateCustomQueriesBarrel,
generateCustomMutationsBarrel,
} from './barrel';
+export { generateQueryKeysFile } from './query-keys';
+export { generateMutationKeysFile } from './mutation-keys';
+export { generateInvalidationFile } from './invalidation';
diff --git a/graphql/codegen/src/cli/codegen/invalidation.ts b/graphql/codegen/src/cli/codegen/invalidation.ts
new file mode 100644
index 000000000..e7f07add6
--- /dev/null
+++ b/graphql/codegen/src/cli/codegen/invalidation.ts
@@ -0,0 +1,489 @@
+/**
+ * Cache invalidation helpers generator
+ *
+ * Generates type-safe cache invalidation utilities with cascade support
+ * for parent-child entity relationships.
+ */
+import type { CleanTable } from '../../types/schema';
+import type { ResolvedQueryKeyConfig, EntityRelationship } from '../../types/config';
+import { getTableNames, getGeneratedFileHeader, ucFirst, lcFirst } from './utils';
+import * as t from '@babel/types';
+import {
+ generateCode,
+ addJSDocComment,
+ asConst,
+ typedParam,
+ addLineComment,
+} from './babel-ast';
+
+export interface InvalidationGeneratorOptions {
+ tables: CleanTable[];
+ config: ResolvedQueryKeyConfig;
+}
+
+export interface GeneratedInvalidationFile {
+ fileName: string;
+ content: string;
+}
+
+/**
+ * Build a map of parent -> children for cascade invalidation
+ */
+function buildChildrenMap(
+ relationships: Record
+): Map {
+ const childrenMap = new Map();
+
+ for (const [child, rel] of Object.entries(relationships)) {
+ const parent = rel.parent.toLowerCase();
+ if (!childrenMap.has(parent)) {
+ childrenMap.set(parent, []);
+ }
+ childrenMap.get(parent)!.push(child);
+ }
+
+ return childrenMap;
+}
+
+/**
+ * Get all descendants (children, grandchildren, etc.) of an entity
+ */
+function getAllDescendants(
+ entity: string,
+ childrenMap: Map
+): string[] {
+ const descendants: string[] = [];
+ const queue = [entity.toLowerCase()];
+
+ while (queue.length > 0) {
+ const current = queue.shift()!;
+ const children = childrenMap.get(current) ?? [];
+ for (const child of children) {
+ descendants.push(child);
+ queue.push(child);
+ }
+ }
+
+ return descendants;
+}
+
+/**
+ * Build the invalidate object property for a single entity
+ */
+function buildEntityInvalidateProperty(
+ table: CleanTable,
+ relationships: Record,
+ childrenMap: Map,
+ allTables: CleanTable[]
+): t.ObjectProperty {
+ const { typeName, singularName } = getTableNames(table);
+ const entityKey = typeName.toLowerCase();
+ const keysName = `${lcFirst(typeName)}Keys`;
+
+ const descendants = getAllDescendants(entityKey, childrenMap);
+ const hasDescendants = descendants.length > 0;
+ const relationship = relationships[entityKey];
+ const hasParent = !!relationship;
+
+ const innerProperties: t.ObjectProperty[] = [];
+
+ // Helper to create QueryClient type reference
+ const queryClientTypeRef = () => t.tsTypeReference(t.identifier('QueryClient'));
+ const stringOrNumberType = () => t.tsUnionType([t.tsStringKeyword(), t.tsNumberKeyword()]);
+
+ // Helper to create queryClient.invalidateQueries({ queryKey: ... })
+ const invalidateCall = (queryKeyExpr: t.Expression) =>
+ t.callExpression(
+ t.memberExpression(t.identifier('queryClient'), t.identifier('invalidateQueries')),
+ [t.objectExpression([t.objectProperty(t.identifier('queryKey'), queryKeyExpr)])]
+ );
+
+ // all property
+ const allArrowFn = t.arrowFunctionExpression(
+ [typedParam('queryClient', queryClientTypeRef())],
+ invalidateCall(t.memberExpression(t.identifier(keysName), t.identifier('all')))
+ );
+ const allProp = t.objectProperty(t.identifier('all'), allArrowFn);
+ addJSDocComment(allProp, [`Invalidate all ${singularName} queries`]);
+ innerProperties.push(allProp);
+
+ // lists property
+ let listsProp: t.ObjectProperty;
+ if (hasParent) {
+ const scopeTypeName = `${typeName}Scope`;
+ const scopeParam = typedParam('scope', t.tsTypeReference(t.identifier(scopeTypeName)), true);
+ const listsArrowFn = t.arrowFunctionExpression(
+ [typedParam('queryClient', queryClientTypeRef()), scopeParam],
+ invalidateCall(
+ t.callExpression(
+ t.memberExpression(t.identifier(keysName), t.identifier('lists')),
+ [t.identifier('scope')]
+ )
+ )
+ );
+ listsProp = t.objectProperty(t.identifier('lists'), listsArrowFn);
+ } else {
+ const listsArrowFn = t.arrowFunctionExpression(
+ [typedParam('queryClient', queryClientTypeRef())],
+ invalidateCall(
+ t.callExpression(
+ t.memberExpression(t.identifier(keysName), t.identifier('lists')),
+ []
+ )
+ )
+ );
+ listsProp = t.objectProperty(t.identifier('lists'), listsArrowFn);
+ }
+ addJSDocComment(listsProp, [`Invalidate ${singularName} list queries`]);
+ innerProperties.push(listsProp);
+
+ // detail property
+ let detailProp: t.ObjectProperty;
+ if (hasParent) {
+ const scopeTypeName = `${typeName}Scope`;
+ const scopeParam = typedParam('scope', t.tsTypeReference(t.identifier(scopeTypeName)), true);
+ const detailArrowFn = t.arrowFunctionExpression(
+ [typedParam('queryClient', queryClientTypeRef()), typedParam('id', stringOrNumberType()), scopeParam],
+ invalidateCall(
+ t.callExpression(
+ t.memberExpression(t.identifier(keysName), t.identifier('detail')),
+ [t.identifier('id'), t.identifier('scope')]
+ )
+ )
+ );
+ detailProp = t.objectProperty(t.identifier('detail'), detailArrowFn);
+ } else {
+ const detailArrowFn = t.arrowFunctionExpression(
+ [typedParam('queryClient', queryClientTypeRef()), typedParam('id', stringOrNumberType())],
+ invalidateCall(
+ t.callExpression(
+ t.memberExpression(t.identifier(keysName), t.identifier('detail')),
+ [t.identifier('id')]
+ )
+ )
+ );
+ detailProp = t.objectProperty(t.identifier('detail'), detailArrowFn);
+ }
+ addJSDocComment(detailProp, [`Invalidate a specific ${singularName}`]);
+ innerProperties.push(detailProp);
+
+ // withChildren property (cascade)
+ if (hasDescendants) {
+ const cascadeStatements: t.Statement[] = [];
+
+ // Comment: Invalidate this entity
+ const selfDetailStmt = t.expressionStatement(
+ invalidateCall(
+ t.callExpression(
+ t.memberExpression(t.identifier(keysName), t.identifier('detail')),
+ [t.identifier('id')]
+ )
+ )
+ );
+ addLineComment(selfDetailStmt, `Invalidate this ${singularName}`);
+ cascadeStatements.push(selfDetailStmt);
+
+ cascadeStatements.push(
+ t.expressionStatement(
+ invalidateCall(
+ t.callExpression(
+ t.memberExpression(t.identifier(keysName), t.identifier('lists')),
+ []
+ )
+ )
+ )
+ );
+
+ // Comment: Cascade to child entities
+ let firstCascade = true;
+ for (const descendant of descendants) {
+ const descendantTable = allTables.find(
+ (tbl) => getTableNames(tbl).typeName.toLowerCase() === descendant
+ );
+ if (descendantTable) {
+ const { typeName: descTypeName } = getTableNames(descendantTable);
+ const descRel = relationships[descendant];
+
+ if (descRel) {
+ let fkField: string | null = null;
+ if (descRel.parent.toLowerCase() === entityKey) {
+ fkField = descRel.foreignKey;
+ } else if (descRel.ancestors?.includes(typeName.toLowerCase())) {
+ fkField = `${lcFirst(typeName)}Id`;
+ }
+
+ const descKeysName = `${lcFirst(descTypeName)}Keys`;
+ let cascadeStmt: t.Statement;
+ if (fkField) {
+ cascadeStmt = t.expressionStatement(
+ invalidateCall(
+ t.callExpression(
+ t.memberExpression(t.identifier(descKeysName), t.identifier(`by${ucFirst(typeName)}`)),
+ [t.identifier('id')]
+ )
+ )
+ );
+ } else {
+ cascadeStmt = t.expressionStatement(
+ invalidateCall(
+ t.memberExpression(t.identifier(descKeysName), t.identifier('all'))
+ )
+ );
+ }
+
+ if (firstCascade) {
+ addLineComment(cascadeStmt, 'Cascade to child entities');
+ firstCascade = false;
+ }
+ cascadeStatements.push(cascadeStmt);
+ }
+ }
+ }
+
+ const withChildrenArrowFn = t.arrowFunctionExpression(
+ [typedParam('queryClient', queryClientTypeRef()), typedParam('id', stringOrNumberType())],
+ t.blockStatement(cascadeStatements)
+ );
+ const withChildrenProp = t.objectProperty(t.identifier('withChildren'), withChildrenArrowFn);
+ addJSDocComment(withChildrenProp, [
+ `Invalidate ${singularName} and all child entities`,
+ `Cascades to: ${descendants.join(', ')}`,
+ ]);
+ innerProperties.push(withChildrenProp);
+ }
+
+ const entityProp = t.objectProperty(t.identifier(singularName), t.objectExpression(innerProperties));
+ addJSDocComment(entityProp, [`Invalidate ${singularName} queries`]);
+ return entityProp;
+}
+
+/**
+ * Build the remove object property for a single entity
+ */
+function buildEntityRemoveProperty(
+ table: CleanTable,
+ relationships: Record
+): t.ObjectProperty {
+ const { typeName, singularName } = getTableNames(table);
+ const keysName = `${lcFirst(typeName)}Keys`;
+ const relationship = relationships[typeName.toLowerCase()];
+
+ // Helper types
+ const queryClientTypeRef = () => t.tsTypeReference(t.identifier('QueryClient'));
+ const stringOrNumberType = () => t.tsUnionType([t.tsStringKeyword(), t.tsNumberKeyword()]);
+
+ // Helper to create queryClient.removeQueries({ queryKey: ... })
+ const removeCall = (queryKeyExpr: t.Expression) =>
+ t.callExpression(
+ t.memberExpression(t.identifier('queryClient'), t.identifier('removeQueries')),
+ [t.objectExpression([t.objectProperty(t.identifier('queryKey'), queryKeyExpr)])]
+ );
+
+ let removeProp: t.ObjectProperty;
+ if (relationship) {
+ const scopeTypeName = `${typeName}Scope`;
+ const scopeParam = typedParam('scope', t.tsTypeReference(t.identifier(scopeTypeName)), true);
+ const removeArrowFn = t.arrowFunctionExpression(
+ [typedParam('queryClient', queryClientTypeRef()), typedParam('id', stringOrNumberType()), scopeParam],
+ t.blockStatement([
+ t.expressionStatement(
+ removeCall(
+ t.callExpression(
+ t.memberExpression(t.identifier(keysName), t.identifier('detail')),
+ [t.identifier('id'), t.identifier('scope')]
+ )
+ )
+ )
+ ])
+ );
+ removeProp = t.objectProperty(t.identifier(singularName), removeArrowFn);
+ } else {
+ const removeArrowFn = t.arrowFunctionExpression(
+ [typedParam('queryClient', queryClientTypeRef()), typedParam('id', stringOrNumberType())],
+ t.blockStatement([
+ t.expressionStatement(
+ removeCall(
+ t.callExpression(
+ t.memberExpression(t.identifier(keysName), t.identifier('detail')),
+ [t.identifier('id')]
+ )
+ )
+ )
+ ])
+ );
+ removeProp = t.objectProperty(t.identifier(singularName), removeArrowFn);
+ }
+
+ addJSDocComment(removeProp, [`Remove ${singularName} from cache`]);
+ return removeProp;
+}
+
+/**
+ * Generate the complete invalidation.ts file
+ */
+export function generateInvalidationFile(
+ options: InvalidationGeneratorOptions
+): GeneratedInvalidationFile {
+ const { tables, config } = options;
+ const { relationships, generateCascadeHelpers } = config;
+
+ const childrenMap = buildChildrenMap(relationships);
+
+ const statements: t.Statement[] = [];
+
+ // Import QueryClient type
+ const queryClientImport = t.importDeclaration(
+ [t.importSpecifier(t.identifier('QueryClient'), t.identifier('QueryClient'))],
+ t.stringLiteral('@tanstack/react-query')
+ );
+ queryClientImport.importKind = 'type';
+ statements.push(queryClientImport);
+
+ // Import query keys
+ const keyImports: string[] = [];
+ for (const table of tables) {
+ const { typeName } = getTableNames(table);
+ keyImports.push(`${lcFirst(typeName)}Keys`);
+ }
+ statements.push(
+ t.importDeclaration(
+ keyImports.map(name => t.importSpecifier(t.identifier(name), t.identifier(name))),
+ t.stringLiteral('./query-keys')
+ )
+ );
+
+ // Import scope types if needed
+ const scopeTypes: string[] = [];
+ for (const table of tables) {
+ const { typeName } = getTableNames(table);
+ if (relationships[typeName.toLowerCase()]) {
+ scopeTypes.push(`${typeName}Scope`);
+ }
+ }
+ if (scopeTypes.length > 0) {
+ const scopeImport = t.importDeclaration(
+ scopeTypes.map(name => t.importSpecifier(t.identifier(name), t.identifier(name))),
+ t.stringLiteral('./query-keys')
+ );
+ scopeImport.importKind = 'type';
+ statements.push(scopeImport);
+ }
+
+ // Generate invalidate object
+ const invalidateProperties: t.ObjectProperty[] = [];
+ for (const table of tables) {
+ invalidateProperties.push(buildEntityInvalidateProperty(table, relationships, childrenMap, tables));
+ }
+
+ const invalidateDecl = t.exportNamedDeclaration(
+ t.variableDeclaration('const', [
+ t.variableDeclarator(
+ t.identifier('invalidate'),
+ asConst(t.objectExpression(invalidateProperties))
+ )
+ ])
+ );
+
+ // Build JSDoc for invalidate
+ const invalidateDocLines = [
+ 'Type-safe query invalidation helpers',
+ '',
+ '@example',
+ '```ts',
+ '// Invalidate all user queries',
+ 'invalidate.user.all(queryClient);',
+ '',
+ '// Invalidate user lists',
+ 'invalidate.user.lists(queryClient);',
+ '',
+ '// Invalidate specific user',
+ 'invalidate.user.detail(queryClient, userId);',
+ ];
+ if (generateCascadeHelpers && Object.keys(relationships).length > 0) {
+ invalidateDocLines.push('');
+ invalidateDocLines.push('// Cascade invalidate (entity + all children)');
+ invalidateDocLines.push('invalidate.database.withChildren(queryClient, databaseId);');
+ }
+ invalidateDocLines.push('```');
+ addJSDocComment(invalidateDecl, invalidateDocLines);
+ statements.push(invalidateDecl);
+
+ // Generate remove object
+ const removeProperties: t.ObjectProperty[] = [];
+ for (const table of tables) {
+ removeProperties.push(buildEntityRemoveProperty(table, relationships));
+ }
+
+ const removeDecl = t.exportNamedDeclaration(
+ t.variableDeclaration('const', [
+ t.variableDeclarator(
+ t.identifier('remove'),
+ asConst(t.objectExpression(removeProperties))
+ )
+ ])
+ );
+ addJSDocComment(removeDecl, [
+ 'Remove queries from cache (for delete operations)',
+ '',
+ 'Use these when an entity is deleted to remove it from cache',
+ 'instead of just invalidating (which would trigger a refetch).',
+ ]);
+ statements.push(removeDecl);
+
+ // Generate code from AST
+ const code = generateCode(statements);
+
+ // Build final content with header and section comments
+ const header = getGeneratedFileHeader('Cache invalidation helpers');
+ const description = `// ============================================================================
+// Type-safe cache invalidation utilities
+//
+// Features:
+// - Simple invalidation helpers per entity
+// - Cascade invalidation for parent-child relationships
+// - Remove helpers for delete operations
+// ============================================================================`;
+
+ let content = `${header}
+
+${description}
+
+`;
+
+ // Insert section comments into the generated code
+ const codeLines = code.split('\n');
+ let addedInvalidationSection = false;
+ let addedRemoveSection = false;
+
+ for (let i = 0; i < codeLines.length; i++) {
+ const line = codeLines[i];
+
+ // Detect invalidation section (after imports)
+ if (!addedInvalidationSection && line.includes('* Type-safe query invalidation helpers')) {
+ content += `// ============================================================================
+// Invalidation Helpers
+// ============================================================================
+
+`;
+ addedInvalidationSection = true;
+ }
+
+ // Detect remove section
+ if (!addedRemoveSection && line.includes('* Remove queries from cache')) {
+ content += `
+// ============================================================================
+// Remove Helpers (for delete operations)
+// ============================================================================
+
+`;
+ addedRemoveSection = true;
+ }
+
+ content += line + '\n';
+ }
+
+ return {
+ fileName: 'invalidation.ts',
+ content,
+ };
+}
diff --git a/graphql/codegen/src/cli/codegen/mutation-keys.ts b/graphql/codegen/src/cli/codegen/mutation-keys.ts
new file mode 100644
index 000000000..657e1fb5a
--- /dev/null
+++ b/graphql/codegen/src/cli/codegen/mutation-keys.ts
@@ -0,0 +1,340 @@
+/**
+ * Mutation key factory generator
+ *
+ * Generates centralized mutation keys for tracking in-flight mutations.
+ * Useful for:
+ * - Optimistic updates with rollback
+ * - Mutation deduplication
+ * - Tracking mutation state with useIsMutating
+ */
+import type { CleanTable, CleanOperation } from '../../types/schema';
+import type { ResolvedQueryKeyConfig, EntityRelationship } from '../../types/config';
+import { getTableNames, getGeneratedFileHeader, lcFirst } from './utils';
+import * as t from '@babel/types';
+import {
+ generateCode,
+ addJSDocComment,
+ asConst,
+ constArray,
+ typedParam,
+} from './babel-ast';
+
+export interface MutationKeyGeneratorOptions {
+ tables: CleanTable[];
+ customMutations: CleanOperation[];
+ config: ResolvedQueryKeyConfig;
+}
+
+export interface GeneratedMutationKeysFile {
+ fileName: string;
+ content: string;
+}
+
+/**
+ * Generate mutation keys declaration for a single table entity
+ */
+function generateEntityMutationKeysDeclaration(
+ table: CleanTable,
+ relationships: Record
+): t.ExportNamedDeclaration {
+ const { typeName, singularName } = getTableNames(table);
+ const entityKey = typeName.toLowerCase();
+ const keysName = `${lcFirst(typeName)}MutationKeys`;
+
+ const relationship = relationships[entityKey];
+
+ const properties: t.ObjectProperty[] = [];
+
+ // all property
+ const allProp = t.objectProperty(
+ t.identifier('all'),
+ constArray([t.stringLiteral('mutation'), t.stringLiteral(entityKey)])
+ );
+ addJSDocComment(allProp, [`All ${singularName} mutation keys`]);
+ properties.push(allProp);
+
+ // create property
+ let createProp: t.ObjectProperty;
+ if (relationship) {
+ const fkParam = t.identifier(relationship.foreignKey);
+ fkParam.optional = true;
+ fkParam.typeAnnotation = t.tsTypeAnnotation(t.tsStringKeyword());
+
+ const arrowFn = t.arrowFunctionExpression(
+ [fkParam],
+ t.conditionalExpression(
+ t.identifier(relationship.foreignKey),
+ constArray([
+ t.stringLiteral('mutation'),
+ t.stringLiteral(entityKey),
+ t.stringLiteral('create'),
+ t.objectExpression([
+ t.objectProperty(
+ t.identifier(relationship.foreignKey),
+ t.identifier(relationship.foreignKey),
+ false,
+ true
+ )
+ ]),
+ ]),
+ constArray([
+ t.stringLiteral('mutation'),
+ t.stringLiteral(entityKey),
+ t.stringLiteral('create'),
+ ])
+ )
+ );
+
+ createProp = t.objectProperty(t.identifier('create'), arrowFn);
+ } else {
+ const arrowFn = t.arrowFunctionExpression(
+ [],
+ constArray([
+ t.stringLiteral('mutation'),
+ t.stringLiteral(entityKey),
+ t.stringLiteral('create'),
+ ])
+ );
+
+ createProp = t.objectProperty(t.identifier('create'), arrowFn);
+ }
+ addJSDocComment(createProp, [`Create ${singularName} mutation key`]);
+ properties.push(createProp);
+
+ // update property
+ const updateArrowFn = t.arrowFunctionExpression(
+ [typedParam('id', t.tsUnionType([t.tsStringKeyword(), t.tsNumberKeyword()]))],
+ constArray([
+ t.stringLiteral('mutation'),
+ t.stringLiteral(entityKey),
+ t.stringLiteral('update'),
+ t.identifier('id'),
+ ])
+ );
+ const updateProp = t.objectProperty(t.identifier('update'), updateArrowFn);
+ addJSDocComment(updateProp, [`Update ${singularName} mutation key`]);
+ properties.push(updateProp);
+
+ // delete property
+ const deleteArrowFn = t.arrowFunctionExpression(
+ [typedParam('id', t.tsUnionType([t.tsStringKeyword(), t.tsNumberKeyword()]))],
+ constArray([
+ t.stringLiteral('mutation'),
+ t.stringLiteral(entityKey),
+ t.stringLiteral('delete'),
+ t.identifier('id'),
+ ])
+ );
+ const deleteProp = t.objectProperty(t.identifier('delete'), deleteArrowFn);
+ addJSDocComment(deleteProp, [`Delete ${singularName} mutation key`]);
+ properties.push(deleteProp);
+
+ return t.exportNamedDeclaration(
+ t.variableDeclaration('const', [
+ t.variableDeclarator(
+ t.identifier(keysName),
+ asConst(t.objectExpression(properties))
+ )
+ ])
+ );
+}
+
+/**
+ * Generate custom mutation keys declaration
+ */
+function generateCustomMutationKeysDeclaration(
+ operations: CleanOperation[]
+): t.ExportNamedDeclaration | null {
+ if (operations.length === 0) return null;
+
+ const properties: t.ObjectProperty[] = [];
+
+ for (const op of operations) {
+ const hasArgs = op.args.length > 0;
+
+ let prop: t.ObjectProperty;
+
+ if (hasArgs) {
+ const identifierParam = t.identifier('identifier');
+ identifierParam.optional = true;
+ identifierParam.typeAnnotation = t.tsTypeAnnotation(t.tsStringKeyword());
+
+ const arrowFn = t.arrowFunctionExpression(
+ [identifierParam],
+ t.conditionalExpression(
+ t.identifier('identifier'),
+ constArray([
+ t.stringLiteral('mutation'),
+ t.stringLiteral(op.name),
+ t.identifier('identifier'),
+ ]),
+ constArray([t.stringLiteral('mutation'), t.stringLiteral(op.name)])
+ )
+ );
+
+ prop = t.objectProperty(t.identifier(op.name), arrowFn);
+ } else {
+ const arrowFn = t.arrowFunctionExpression(
+ [],
+ constArray([t.stringLiteral('mutation'), t.stringLiteral(op.name)])
+ );
+
+ prop = t.objectProperty(t.identifier(op.name), arrowFn);
+ }
+
+ addJSDocComment(prop, [`Mutation key for ${op.name}`]);
+ properties.push(prop);
+ }
+
+ return t.exportNamedDeclaration(
+ t.variableDeclaration('const', [
+ t.variableDeclarator(
+ t.identifier('customMutationKeys'),
+ asConst(t.objectExpression(properties))
+ )
+ ])
+ );
+}
+
+/**
+ * Generate the unified mutation keys store declaration
+ */
+function generateUnifiedMutationStoreDeclaration(
+ tables: CleanTable[],
+ hasCustomMutations: boolean
+): t.ExportNamedDeclaration {
+ const properties: t.ObjectProperty[] = [];
+
+ for (const table of tables) {
+ const { typeName } = getTableNames(table);
+ const keysName = `${lcFirst(typeName)}MutationKeys`;
+ properties.push(
+ t.objectProperty(t.identifier(lcFirst(typeName)), t.identifier(keysName))
+ );
+ }
+
+ if (hasCustomMutations) {
+ properties.push(
+ t.objectProperty(t.identifier('custom'), t.identifier('customMutationKeys'))
+ );
+ }
+
+ const decl = t.exportNamedDeclaration(
+ t.variableDeclaration('const', [
+ t.variableDeclarator(
+ t.identifier('mutationKeys'),
+ asConst(t.objectExpression(properties))
+ )
+ ])
+ );
+
+ addJSDocComment(decl, [
+ 'Unified mutation key store',
+ '',
+ 'Use this for tracking in-flight mutations with useIsMutating.',
+ '',
+ '@example',
+ '```ts',
+ "import { useIsMutating } from '@tanstack/react-query';",
+ "import { mutationKeys } from './generated';",
+ '',
+ '// Check if any user mutations are in progress',
+ 'const isMutatingUser = useIsMutating({ mutationKey: mutationKeys.user.all });',
+ '',
+ '// Check if a specific user is being updated',
+ 'const isUpdating = useIsMutating({ mutationKey: mutationKeys.user.update(userId) });',
+ '```',
+ ]);
+
+ return decl;
+}
+
+/**
+ * Generate the complete mutation-keys.ts file
+ */
+export function generateMutationKeysFile(
+ options: MutationKeyGeneratorOptions
+): GeneratedMutationKeysFile {
+ const { tables, customMutations, config } = options;
+ const { relationships } = config;
+
+ const statements: t.Statement[] = [];
+
+ // Generate entity mutation keys
+ for (const table of tables) {
+ statements.push(generateEntityMutationKeysDeclaration(table, relationships));
+ }
+
+ // Generate custom mutation keys
+ const mutationOperations = customMutations.filter((op) => op.kind === 'mutation');
+ const customKeysDecl = generateCustomMutationKeysDeclaration(mutationOperations);
+ if (customKeysDecl) {
+ statements.push(customKeysDecl);
+ }
+
+ // Generate unified store
+ statements.push(generateUnifiedMutationStoreDeclaration(tables, mutationOperations.length > 0));
+
+ // Generate code from AST
+ const code = generateCode(statements);
+
+ // Build final content with header and section comments
+ const header = getGeneratedFileHeader('Centralized mutation key factory');
+ const description = `// ============================================================================
+// Mutation keys for tracking in-flight mutations
+//
+// Benefits:
+// - Track mutation state with useIsMutating
+// - Implement optimistic updates with proper rollback
+// - Deduplicate identical mutations
+// - Coordinate related mutations
+// ============================================================================`;
+
+ let content = `${header}
+
+${description}
+
+// ============================================================================
+// Entity Mutation Keys
+// ============================================================================
+
+`;
+
+ // Insert section comments into the generated code
+ const codeLines = code.split('\n');
+ let addedCustomSection = false;
+ let addedUnifiedSection = false;
+
+ for (let i = 0; i < codeLines.length; i++) {
+ const line = codeLines[i];
+
+ // Detect custom mutation keys section
+ if (!addedCustomSection && line.startsWith('export const customMutationKeys')) {
+ content += `
+// ============================================================================
+// Custom Mutation Keys
+// ============================================================================
+
+`;
+ addedCustomSection = true;
+ }
+
+ // Detect unified store section
+ if (!addedUnifiedSection && line.includes('* Unified mutation key store')) {
+ content += `
+// ============================================================================
+// Unified Mutation Key Store
+// ============================================================================
+
+`;
+ addedUnifiedSection = true;
+ }
+
+ content += line + '\n';
+ }
+
+ return {
+ fileName: 'mutation-keys.ts',
+ content,
+ };
+}
diff --git a/graphql/codegen/src/cli/codegen/mutations.ts b/graphql/codegen/src/cli/codegen/mutations.ts
index f302ecfdc..d0f5f4fce 100644
--- a/graphql/codegen/src/cli/codegen/mutations.ts
+++ b/graphql/codegen/src/cli/codegen/mutations.ts
@@ -1,5 +1,5 @@
/**
- * Mutation hook generators using AST-based code generation
+ * Mutation hook generators using Babel AST-based code generation
*
* Output structure:
* mutations/
@@ -8,16 +8,8 @@
* useDeleteCarMutation.ts
*/
import type { CleanTable } from '../../types/schema';
-import {
- createProject,
- createSourceFile,
- getFormattedOutput,
- createFileHeader,
- createImport,
- createInterface,
- createConst,
- type InterfaceProperty,
-} from './ts-ast';
+import * as t from '@babel/types';
+import { generateCode, addJSDocComment, typedParam } from './babel-ast';
import {
buildCreateMutationAST,
buildUpdateMutationAST,
@@ -40,26 +32,17 @@ import {
fieldTypeToTs,
ucFirst,
lcFirst,
+ getGeneratedFileHeader,
} from './utils';
-/**
- * Check if a field is auto-generated and should be excluded from create inputs
- * Uses primary key from constraints and common timestamp patterns
- */
function isAutoGeneratedField(fieldName: string, pkFieldNames: Set): boolean {
const name = fieldName.toLowerCase();
-
- // Exclude primary key fields (from constraints)
if (pkFieldNames.has(fieldName)) return true;
-
- // Exclude common timestamp patterns (case-insensitive)
- // These are typically auto-set by database triggers or defaults
const timestampPatterns = [
'createdat', 'created_at', 'createddate', 'created_date',
'updatedat', 'updated_at', 'updateddate', 'updated_date',
- 'deletedat', 'deleted_at', // soft delete timestamps
+ 'deletedat', 'deleted_at',
];
-
return timestampPatterns.includes(name);
}
@@ -69,43 +52,38 @@ export interface GeneratedMutationFile {
}
export interface MutationGeneratorOptions {
- /** Whether to generate React Query hooks (default: true for backwards compatibility) */
reactQueryEnabled?: boolean;
- /** Enum type names that are available from schema-types.ts */
enumsFromSchemaTypes?: string[];
+ useCentralizedKeys?: boolean;
+ hasRelationships?: boolean;
}
-// ============================================================================
-// Create mutation hook generator
-// ============================================================================
-
-/**
- * Generate create mutation hook file content using AST
- * When reactQueryEnabled is false, returns null since mutations require React Query
- */
export function generateCreateMutationHook(
table: CleanTable,
options: MutationGeneratorOptions = {}
): GeneratedMutationFile | null {
- const { reactQueryEnabled = true, enumsFromSchemaTypes = [] } = options;
+ const {
+ reactQueryEnabled = true,
+ enumsFromSchemaTypes = [],
+ useCentralizedKeys = true,
+ hasRelationships = false,
+ } = options;
- // Mutations require React Query - skip generation when disabled
if (!reactQueryEnabled) {
return null;
}
const enumSet = new Set(enumsFromSchemaTypes);
-
- const project = createProject();
const { typeName, singularName } = getTableNames(table);
const hookName = getCreateMutationHookName(table);
+ const keysName = `${lcFirst(typeName)}Keys`;
+ const mutationKeysName = `${lcFirst(typeName)}MutationKeys`;
+ const scopeTypeName = `${typeName}Scope`;
const mutationName = getCreateMutationName(table);
const scalarFields = getScalarFields(table);
- // Get primary key field names dynamically from table constraints
- const pkFieldNames = new Set(getPrimaryKeyInfo(table).map(pk => pk.name));
+ const pkFieldNames = new Set(getPrimaryKeyInfo(table).map((pk) => pk.name));
- // Collect which enums are used by this table's fields
const usedEnums = new Set();
for (const field of scalarFields) {
const cleanType = field.type.gqlType.replace(/!/g, '');
@@ -114,198 +92,289 @@ export function generateCreateMutationHook(
}
}
- // Generate GraphQL document via AST
const mutationAST = buildCreateMutationAST({ table });
const mutationDocument = printGraphQL(mutationAST);
- const sourceFile = createSourceFile(project, getCreateMutationFileName(table));
-
- // Add file header
- sourceFile.insertText(0, createFileHeader(`Create mutation hook for ${typeName}`) + '\n\n');
-
- // Build import declarations
- const imports = [
- createImport({
- moduleSpecifier: '@tanstack/react-query',
- namedImports: ['useMutation', 'useQueryClient'],
- typeOnlyNamedImports: ['UseMutationOptions'],
- }),
- createImport({
- moduleSpecifier: '../client',
- namedImports: ['execute'],
- }),
- createImport({
- moduleSpecifier: '../types',
- typeOnlyNamedImports: [typeName],
- }),
- ];
+ const statements: t.Statement[] = [];
+
+ const reactQueryImport = t.importDeclaration(
+ [
+ t.importSpecifier(t.identifier('useMutation'), t.identifier('useMutation')),
+ t.importSpecifier(t.identifier('useQueryClient'), t.identifier('useQueryClient')),
+ ],
+ t.stringLiteral('@tanstack/react-query')
+ );
+ statements.push(reactQueryImport);
+
+ const reactQueryTypeImport = t.importDeclaration(
+ [t.importSpecifier(t.identifier('UseMutationOptions'), t.identifier('UseMutationOptions'))],
+ t.stringLiteral('@tanstack/react-query')
+ );
+ reactQueryTypeImport.importKind = 'type';
+ statements.push(reactQueryTypeImport);
+
+ const clientImport = t.importDeclaration(
+ [t.importSpecifier(t.identifier('execute'), t.identifier('execute'))],
+ t.stringLiteral('../client')
+ );
+ statements.push(clientImport);
+
+ const typesImport = t.importDeclaration(
+ [t.importSpecifier(t.identifier(typeName), t.identifier(typeName))],
+ t.stringLiteral('../types')
+ );
+ typesImport.importKind = 'type';
+ statements.push(typesImport);
- // Add import for enum types from schema-types if any are used
if (usedEnums.size > 0) {
- imports.push(
- createImport({
- moduleSpecifier: '../schema-types',
- typeOnlyNamedImports: Array.from(usedEnums).sort(),
- })
+ const enumImport = t.importDeclaration(
+ Array.from(usedEnums).sort().map((e) => t.importSpecifier(t.identifier(e), t.identifier(e))),
+ t.stringLiteral('../schema-types')
);
+ enumImport.importKind = 'type';
+ statements.push(enumImport);
}
- // Add imports
- sourceFile.addImportDeclarations(imports);
-
- // Re-export entity type
- sourceFile.addStatements(`\n// Re-export entity type for convenience\nexport type { ${typeName} };\n`);
-
- // Add section comment
- sourceFile.addStatements('\n// ============================================================================');
- sourceFile.addStatements('// GraphQL Document');
- sourceFile.addStatements('// ============================================================================\n');
+ if (useCentralizedKeys) {
+ const queryKeyImport = t.importDeclaration(
+ [t.importSpecifier(t.identifier(keysName), t.identifier(keysName))],
+ t.stringLiteral('../query-keys')
+ );
+ statements.push(queryKeyImport);
+ if (hasRelationships) {
+ const scopeTypeImport = t.importDeclaration(
+ [t.importSpecifier(t.identifier(scopeTypeName), t.identifier(scopeTypeName))],
+ t.stringLiteral('../query-keys')
+ );
+ scopeTypeImport.importKind = 'type';
+ statements.push(scopeTypeImport);
+ }
+ const mutationKeyImport = t.importDeclaration(
+ [t.importSpecifier(t.identifier(mutationKeysName), t.identifier(mutationKeysName))],
+ t.stringLiteral('../mutation-keys')
+ );
+ statements.push(mutationKeyImport);
+ }
- // Add mutation document constant
- sourceFile.addVariableStatement(
- createConst(`${mutationName}MutationDocument`, '`\n' + mutationDocument + '`')
+ const reExportDecl = t.exportNamedDeclaration(
+ null,
+ [t.exportSpecifier(t.identifier(typeName), t.identifier(typeName))],
+ t.stringLiteral('../types')
);
+ reExportDecl.exportKind = 'type';
+ statements.push(reExportDecl);
+
+ const mutationDocConst = t.variableDeclaration('const', [
+ t.variableDeclarator(
+ t.identifier(`${mutationName}MutationDocument`),
+ t.templateLiteral(
+ [t.templateElement({ raw: '\n' + mutationDocument, cooked: '\n' + mutationDocument }, true)],
+ []
+ )
+ ),
+ ]);
+ statements.push(t.exportNamedDeclaration(mutationDocConst));
- // Add section comment
- sourceFile.addStatements('\n// ============================================================================');
- sourceFile.addStatements('// Types');
- sourceFile.addStatements('// ============================================================================\n');
-
- // Generate CreateInput type - exclude auto-generated fields
- // Note: Not exported to avoid conflicts with schema-types
- const inputFields: InterfaceProperty[] = scalarFields
+ const inputFields = scalarFields
.filter((f) => !isAutoGeneratedField(f.name, pkFieldNames))
- .map((f) => ({
- name: f.name,
- type: `${fieldTypeToTs(f.type)} | null`,
- optional: true,
- }));
-
- sourceFile.addInterface(
- createInterface(`${typeName}CreateInput`, inputFields, {
- docs: [`Input type for creating a ${typeName}`],
- isExported: false,
- })
- );
-
- // Variables interface
- sourceFile.addInterface(
- createInterface(`${ucFirst(mutationName)}MutationVariables`, [
- {
- name: 'input',
- type: `{
- ${lcFirst(typeName)}: ${typeName}CreateInput;
- }`,
- },
+ .map((f) => {
+ const prop = t.tsPropertySignature(
+ t.identifier(f.name),
+ t.tsTypeAnnotation(
+ t.tsUnionType([
+ t.tsTypeReference(t.identifier(fieldTypeToTs(f.type))),
+ t.tsNullKeyword(),
+ ])
+ )
+ );
+ prop.optional = true;
+ return prop;
+ });
+
+ const createInputInterface = t.tsInterfaceDeclaration(
+ t.identifier(`${typeName}CreateInput`),
+ null,
+ null,
+ t.tsInterfaceBody(inputFields)
+ );
+ addJSDocComment(createInputInterface, [`Input type for creating a ${typeName}`]);
+ statements.push(createInputInterface);
+
+ const variablesInterfaceBody = t.tsInterfaceBody([
+ t.tsPropertySignature(
+ t.identifier('input'),
+ t.tsTypeAnnotation(
+ t.tsTypeLiteral([
+ t.tsPropertySignature(
+ t.identifier(lcFirst(typeName)),
+ t.tsTypeAnnotation(t.tsTypeReference(t.identifier(`${typeName}CreateInput`)))
+ ),
+ ])
+ )
+ ),
+ ]);
+ const variablesInterface = t.tsInterfaceDeclaration(
+ t.identifier(`${ucFirst(mutationName)}MutationVariables`),
+ null,
+ null,
+ variablesInterfaceBody
+ );
+ statements.push(t.exportNamedDeclaration(variablesInterface));
+
+ const resultInterfaceBody = t.tsInterfaceBody([
+ t.tsPropertySignature(
+ t.identifier(mutationName),
+ t.tsTypeAnnotation(
+ t.tsTypeLiteral([
+ t.tsPropertySignature(
+ t.identifier(singularName),
+ t.tsTypeAnnotation(t.tsTypeReference(t.identifier(typeName)))
+ ),
+ ])
+ )
+ ),
+ ]);
+ const resultInterface = t.tsInterfaceDeclaration(
+ t.identifier(`${ucFirst(mutationName)}MutationResult`),
+ null,
+ null,
+ resultInterfaceBody
+ );
+ statements.push(t.exportNamedDeclaration(resultInterface));
+
+ const hookBodyStatements: t.Statement[] = [];
+ hookBodyStatements.push(
+ t.variableDeclaration('const', [
+ t.variableDeclarator(
+ t.identifier('queryClient'),
+ t.callExpression(t.identifier('useQueryClient'), [])
+ ),
])
);
- // Result interface
- sourceFile.addInterface(
- createInterface(`${ucFirst(mutationName)}MutationResult`, [
- {
- name: mutationName,
- type: `{
- ${singularName}: ${typeName};
- }`,
- },
- ])
+ const mutationOptions: (t.ObjectProperty | t.SpreadElement)[] = [];
+ if (useCentralizedKeys) {
+ mutationOptions.push(
+ t.objectProperty(
+ t.identifier('mutationKey'),
+ t.callExpression(
+ t.memberExpression(t.identifier(mutationKeysName), t.identifier('create')),
+ []
+ )
+ )
+ );
+ }
+ mutationOptions.push(
+ t.objectProperty(
+ t.identifier('mutationFn'),
+ t.arrowFunctionExpression(
+ [typedParam('variables', t.tsTypeReference(t.identifier(`${ucFirst(mutationName)}MutationVariables`)))],
+ t.callExpression(t.identifier('execute'), [
+ t.identifier(`${mutationName}MutationDocument`),
+ t.identifier('variables'),
+ ])
+ )
+ )
+ );
+
+ const invalidateQueryKey = useCentralizedKeys
+ ? t.callExpression(t.memberExpression(t.identifier(keysName), t.identifier('lists')), [])
+ : t.arrayExpression([t.stringLiteral(typeName.toLowerCase()), t.stringLiteral('list')]);
+
+ mutationOptions.push(
+ t.objectProperty(
+ t.identifier('onSuccess'),
+ t.arrowFunctionExpression(
+ [],
+ t.blockStatement([
+ t.expressionStatement(
+ t.callExpression(
+ t.memberExpression(t.identifier('queryClient'), t.identifier('invalidateQueries')),
+ [t.objectExpression([t.objectProperty(t.identifier('queryKey'), invalidateQueryKey)])]
+ )
+ ),
+ ])
+ )
+ )
);
+ mutationOptions.push(t.spreadElement(t.identifier('options')));
- // Add section comment
- sourceFile.addStatements('\n// ============================================================================');
- sourceFile.addStatements('// Hook');
- sourceFile.addStatements('// ============================================================================\n');
-
- // Hook function
- sourceFile.addFunction({
- name: hookName,
- isExported: true,
- parameters: [
- {
- name: 'options',
- type: `Omit, 'mutationFn'>`,
- hasQuestionToken: true,
- },
- ],
- statements: `const queryClient = useQueryClient();
+ hookBodyStatements.push(
+ t.returnStatement(
+ t.callExpression(t.identifier('useMutation'), [t.objectExpression(mutationOptions)])
+ )
+ );
- return useMutation({
- mutationFn: (variables: ${ucFirst(mutationName)}MutationVariables) =>
- execute<${ucFirst(mutationName)}MutationResult, ${ucFirst(mutationName)}MutationVariables>(
- ${mutationName}MutationDocument,
- variables
- ),
- onSuccess: () => {
- // Invalidate list queries to refetch
- queryClient.invalidateQueries({ queryKey: ['${typeName.toLowerCase()}', 'list'] });
- },
- ...options,
- });`,
- docs: [
- {
- description: `Mutation hook for creating a ${typeName}
-
-@example
-\`\`\`tsx
-const { mutate, isPending } = ${hookName}();
-
-mutate({
- input: {
- ${lcFirst(typeName)}: {
- // ... fields
- },
- },
-});
-\`\`\``,
- },
- ],
- });
+ const optionsTypeStr = `Omit, 'mutationFn'>`;
+ const optionsParam = t.identifier('options');
+ optionsParam.optional = true;
+ optionsParam.typeAnnotation = t.tsTypeAnnotation(t.tsTypeReference(t.identifier(optionsTypeStr)));
+
+ const hookFunc = t.functionDeclaration(
+ t.identifier(hookName),
+ [optionsParam],
+ t.blockStatement(hookBodyStatements)
+ );
+ const hookExport = t.exportNamedDeclaration(hookFunc);
+ addJSDocComment(hookExport, [
+ `Mutation hook for creating a ${typeName}`,
+ '',
+ '@example',
+ '```tsx',
+ `const { mutate, isPending } = ${hookName}();`,
+ '',
+ 'mutate({',
+ ' input: {',
+ ` ${lcFirst(typeName)}: {`,
+ ' // ... fields',
+ ' },',
+ ' },',
+ '});',
+ '```',
+ ]);
+ statements.push(hookExport);
+
+ const code = generateCode(statements);
+ const content = getGeneratedFileHeader(`Create mutation hook for ${typeName}`) + '\n\n' + code;
return {
fileName: getCreateMutationFileName(table),
- content: getFormattedOutput(sourceFile),
+ content,
};
}
-// ============================================================================
-// Update mutation hook generator
-// ============================================================================
-
-/**
- * Generate update mutation hook file content using AST
- * When reactQueryEnabled is false, returns null since mutations require React Query
- */
export function generateUpdateMutationHook(
table: CleanTable,
options: MutationGeneratorOptions = {}
): GeneratedMutationFile | null {
- const { reactQueryEnabled = true, enumsFromSchemaTypes = [] } = options;
+ const {
+ reactQueryEnabled = true,
+ enumsFromSchemaTypes = [],
+ useCentralizedKeys = true,
+ hasRelationships = false,
+ } = options;
- // Mutations require React Query - skip generation when disabled
if (!reactQueryEnabled) {
return null;
}
- // Check if update mutation exists
if (table.query?.update === null) {
return null;
}
const enumSet = new Set(enumsFromSchemaTypes);
-
- const project = createProject();
const { typeName, singularName } = getTableNames(table);
const hookName = getUpdateMutationHookName(table);
const mutationName = getUpdateMutationName(table);
const scalarFields = getScalarFields(table);
+ const keysName = `${lcFirst(typeName)}Keys`;
+ const mutationKeysName = `${lcFirst(typeName)}MutationKeys`;
+ const scopeTypeName = `${typeName}Scope`;
- // Get primary key info dynamically from table constraints
const pkFields = getPrimaryKeyInfo(table);
- const pkField = pkFields[0]; // Use first PK field
- const pkFieldNames = new Set(pkFields.map(pk => pk.name));
+ const pkField = pkFields[0];
+ const pkFieldNames = new Set(pkFields.map((pk) => pk.name));
- // Collect which enums are used by this table's fields
const usedEnums = new Set();
for (const field of scalarFields) {
const cleanType = field.type.gqlType.replace(/!/g, '');
@@ -314,321 +383,528 @@ export function generateUpdateMutationHook(
}
}
- // Generate GraphQL document via AST
const mutationAST = buildUpdateMutationAST({ table });
const mutationDocument = printGraphQL(mutationAST);
- const sourceFile = createSourceFile(project, getUpdateMutationFileName(table));
-
- // Add file header
- sourceFile.insertText(0, createFileHeader(`Update mutation hook for ${typeName}`) + '\n\n');
-
- // Build import declarations
- const imports = [
- createImport({
- moduleSpecifier: '@tanstack/react-query',
- namedImports: ['useMutation', 'useQueryClient'],
- typeOnlyNamedImports: ['UseMutationOptions'],
- }),
- createImport({
- moduleSpecifier: '../client',
- namedImports: ['execute'],
- }),
- createImport({
- moduleSpecifier: '../types',
- typeOnlyNamedImports: [typeName],
- }),
- ];
+ const statements: t.Statement[] = [];
+
+ const reactQueryImport = t.importDeclaration(
+ [
+ t.importSpecifier(t.identifier('useMutation'), t.identifier('useMutation')),
+ t.importSpecifier(t.identifier('useQueryClient'), t.identifier('useQueryClient')),
+ ],
+ t.stringLiteral('@tanstack/react-query')
+ );
+ statements.push(reactQueryImport);
+
+ const reactQueryTypeImport = t.importDeclaration(
+ [t.importSpecifier(t.identifier('UseMutationOptions'), t.identifier('UseMutationOptions'))],
+ t.stringLiteral('@tanstack/react-query')
+ );
+ reactQueryTypeImport.importKind = 'type';
+ statements.push(reactQueryTypeImport);
+
+ const clientImport = t.importDeclaration(
+ [t.importSpecifier(t.identifier('execute'), t.identifier('execute'))],
+ t.stringLiteral('../client')
+ );
+ statements.push(clientImport);
+
+ const typesImport = t.importDeclaration(
+ [t.importSpecifier(t.identifier(typeName), t.identifier(typeName))],
+ t.stringLiteral('../types')
+ );
+ typesImport.importKind = 'type';
+ statements.push(typesImport);
- // Add import for enum types from schema-types if any are used
if (usedEnums.size > 0) {
- imports.push(
- createImport({
- moduleSpecifier: '../schema-types',
- typeOnlyNamedImports: Array.from(usedEnums).sort(),
- })
+ const enumImport = t.importDeclaration(
+ Array.from(usedEnums).sort().map((e) => t.importSpecifier(t.identifier(e), t.identifier(e))),
+ t.stringLiteral('../schema-types')
);
+ enumImport.importKind = 'type';
+ statements.push(enumImport);
}
- // Add imports
- sourceFile.addImportDeclarations(imports);
-
- // Re-export entity type
- sourceFile.addStatements(`\n// Re-export entity type for convenience\nexport type { ${typeName} };\n`);
-
- // Add section comment
- sourceFile.addStatements('\n// ============================================================================');
- sourceFile.addStatements('// GraphQL Document');
- sourceFile.addStatements('// ============================================================================\n');
+ if (useCentralizedKeys) {
+ const queryKeyImport = t.importDeclaration(
+ [t.importSpecifier(t.identifier(keysName), t.identifier(keysName))],
+ t.stringLiteral('../query-keys')
+ );
+ statements.push(queryKeyImport);
+ if (hasRelationships) {
+ const scopeTypeImport = t.importDeclaration(
+ [t.importSpecifier(t.identifier(scopeTypeName), t.identifier(scopeTypeName))],
+ t.stringLiteral('../query-keys')
+ );
+ scopeTypeImport.importKind = 'type';
+ statements.push(scopeTypeImport);
+ }
+ const mutationKeyImport = t.importDeclaration(
+ [t.importSpecifier(t.identifier(mutationKeysName), t.identifier(mutationKeysName))],
+ t.stringLiteral('../mutation-keys')
+ );
+ statements.push(mutationKeyImport);
+ }
- // Add mutation document constant
- sourceFile.addVariableStatement(
- createConst(`${mutationName}MutationDocument`, '`\n' + mutationDocument + '`')
+ const reExportDecl = t.exportNamedDeclaration(
+ null,
+ [t.exportSpecifier(t.identifier(typeName), t.identifier(typeName))],
+ t.stringLiteral('../types')
);
+ reExportDecl.exportKind = 'type';
+ statements.push(reExportDecl);
+
+ const mutationDocConst = t.variableDeclaration('const', [
+ t.variableDeclarator(
+ t.identifier(`${mutationName}MutationDocument`),
+ t.templateLiteral(
+ [t.templateElement({ raw: '\n' + mutationDocument, cooked: '\n' + mutationDocument }, true)],
+ []
+ )
+ ),
+ ]);
+ statements.push(t.exportNamedDeclaration(mutationDocConst));
- // Add section comment
- sourceFile.addStatements('\n// ============================================================================');
- sourceFile.addStatements('// Types');
- sourceFile.addStatements('// ============================================================================\n');
-
- // Generate Patch type - all fields optional, exclude primary key
- // Note: Not exported to avoid conflicts with schema-types
- const patchFields: InterfaceProperty[] = scalarFields
+ const patchFields = scalarFields
.filter((f) => !pkFieldNames.has(f.name))
- .map((f) => ({
- name: f.name,
- type: `${fieldTypeToTs(f.type)} | null`,
- optional: true,
- }));
-
- sourceFile.addInterface(
- createInterface(`${typeName}Patch`, patchFields, {
- docs: [`Patch type for updating a ${typeName} - all fields optional`],
- isExported: false,
- })
- );
-
- // Variables interface - use dynamic PK field name and type
- sourceFile.addInterface(
- createInterface(`${ucFirst(mutationName)}MutationVariables`, [
- {
- name: 'input',
- type: `{
- ${pkField.name}: ${pkField.tsType};
- patch: ${typeName}Patch;
- }`,
- },
+ .map((f) => {
+ const prop = t.tsPropertySignature(
+ t.identifier(f.name),
+ t.tsTypeAnnotation(
+ t.tsUnionType([
+ t.tsTypeReference(t.identifier(fieldTypeToTs(f.type))),
+ t.tsNullKeyword(),
+ ])
+ )
+ );
+ prop.optional = true;
+ return prop;
+ });
+
+ const patchInterface = t.tsInterfaceDeclaration(
+ t.identifier(`${typeName}Patch`),
+ null,
+ null,
+ t.tsInterfaceBody(patchFields)
+ );
+ addJSDocComment(patchInterface, [`Patch type for updating a ${typeName} - all fields optional`]);
+ statements.push(patchInterface);
+
+ const pkTypeAnnotation =
+ pkField.tsType === 'string'
+ ? t.tsStringKeyword()
+ : pkField.tsType === 'number'
+ ? t.tsNumberKeyword()
+ : t.tsTypeReference(t.identifier(pkField.tsType));
+
+ const variablesInterfaceBody = t.tsInterfaceBody([
+ t.tsPropertySignature(
+ t.identifier('input'),
+ t.tsTypeAnnotation(
+ t.tsTypeLiteral([
+ t.tsPropertySignature(t.identifier(pkField.name), t.tsTypeAnnotation(pkTypeAnnotation)),
+ t.tsPropertySignature(
+ t.identifier('patch'),
+ t.tsTypeAnnotation(t.tsTypeReference(t.identifier(`${typeName}Patch`)))
+ ),
+ ])
+ )
+ ),
+ ]);
+ const variablesInterface = t.tsInterfaceDeclaration(
+ t.identifier(`${ucFirst(mutationName)}MutationVariables`),
+ null,
+ null,
+ variablesInterfaceBody
+ );
+ statements.push(t.exportNamedDeclaration(variablesInterface));
+
+ const resultInterfaceBody = t.tsInterfaceBody([
+ t.tsPropertySignature(
+ t.identifier(mutationName),
+ t.tsTypeAnnotation(
+ t.tsTypeLiteral([
+ t.tsPropertySignature(
+ t.identifier(singularName),
+ t.tsTypeAnnotation(t.tsTypeReference(t.identifier(typeName)))
+ ),
+ ])
+ )
+ ),
+ ]);
+ const resultInterface = t.tsInterfaceDeclaration(
+ t.identifier(`${ucFirst(mutationName)}MutationResult`),
+ null,
+ null,
+ resultInterfaceBody
+ );
+ statements.push(t.exportNamedDeclaration(resultInterface));
+
+ const hookBodyStatements: t.Statement[] = [];
+ hookBodyStatements.push(
+ t.variableDeclaration('const', [
+ t.variableDeclarator(
+ t.identifier('queryClient'),
+ t.callExpression(t.identifier('useQueryClient'), [])
+ ),
])
);
- // Result interface
- sourceFile.addInterface(
- createInterface(`${ucFirst(mutationName)}MutationResult`, [
- {
- name: mutationName,
- type: `{
- ${singularName}: ${typeName};
- }`,
- },
- ])
+ const mutationOptions: (t.ObjectProperty | t.SpreadElement)[] = [];
+ if (useCentralizedKeys) {
+ mutationOptions.push(
+ t.objectProperty(
+ t.identifier('mutationKey'),
+ t.memberExpression(t.identifier(mutationKeysName), t.identifier('all'))
+ )
+ );
+ }
+ mutationOptions.push(
+ t.objectProperty(
+ t.identifier('mutationFn'),
+ t.arrowFunctionExpression(
+ [typedParam('variables', t.tsTypeReference(t.identifier(`${ucFirst(mutationName)}MutationVariables`)))],
+ t.callExpression(t.identifier('execute'), [
+ t.identifier(`${mutationName}MutationDocument`),
+ t.identifier('variables'),
+ ])
+ )
+ )
);
- // Add section comment
- sourceFile.addStatements('\n// ============================================================================');
- sourceFile.addStatements('// Hook');
- sourceFile.addStatements('// ============================================================================\n');
-
- // Hook function
- sourceFile.addFunction({
- name: hookName,
- isExported: true,
- parameters: [
- {
- name: 'options',
- type: `Omit, 'mutationFn'>`,
- hasQuestionToken: true,
- },
- ],
- statements: `const queryClient = useQueryClient();
+ const detailQueryKey = useCentralizedKeys
+ ? t.callExpression(
+ t.memberExpression(t.identifier(keysName), t.identifier('detail')),
+ [t.memberExpression(t.memberExpression(t.identifier('variables'), t.identifier('input')), t.identifier(pkField.name))]
+ )
+ : t.arrayExpression([
+ t.stringLiteral(typeName.toLowerCase()),
+ t.stringLiteral('detail'),
+ t.memberExpression(t.memberExpression(t.identifier('variables'), t.identifier('input')), t.identifier(pkField.name)),
+ ]);
+
+ const listQueryKey = useCentralizedKeys
+ ? t.callExpression(t.memberExpression(t.identifier(keysName), t.identifier('lists')), [])
+ : t.arrayExpression([t.stringLiteral(typeName.toLowerCase()), t.stringLiteral('list')]);
+
+ mutationOptions.push(
+ t.objectProperty(
+ t.identifier('onSuccess'),
+ t.arrowFunctionExpression(
+ [t.identifier('_'), t.identifier('variables')],
+ t.blockStatement([
+ t.expressionStatement(
+ t.callExpression(
+ t.memberExpression(t.identifier('queryClient'), t.identifier('invalidateQueries')),
+ [t.objectExpression([t.objectProperty(t.identifier('queryKey'), detailQueryKey)])]
+ )
+ ),
+ t.expressionStatement(
+ t.callExpression(
+ t.memberExpression(t.identifier('queryClient'), t.identifier('invalidateQueries')),
+ [t.objectExpression([t.objectProperty(t.identifier('queryKey'), listQueryKey)])]
+ )
+ ),
+ ])
+ )
+ )
+ );
+ mutationOptions.push(t.spreadElement(t.identifier('options')));
- return useMutation({
- mutationFn: (variables: ${ucFirst(mutationName)}MutationVariables) =>
- execute<${ucFirst(mutationName)}MutationResult, ${ucFirst(mutationName)}MutationVariables>(
- ${mutationName}MutationDocument,
- variables
- ),
- onSuccess: (_, variables) => {
- // Invalidate specific item and list queries
- queryClient.invalidateQueries({ queryKey: ['${typeName.toLowerCase()}', 'detail', variables.input.${pkField.name}] });
- queryClient.invalidateQueries({ queryKey: ['${typeName.toLowerCase()}', 'list'] });
- },
- ...options,
- });`,
- docs: [
- {
- description: `Mutation hook for updating a ${typeName}
-
-@example
-\`\`\`tsx
-const { mutate, isPending } = ${hookName}();
-
-mutate({
- input: {
- ${pkField.name}: ${pkField.tsType === 'string' ? "'value-here'" : '123'},
- patch: {
- // ... fields to update
- },
- },
-});
-\`\`\``,
- },
- ],
- });
+ hookBodyStatements.push(
+ t.returnStatement(
+ t.callExpression(t.identifier('useMutation'), [t.objectExpression(mutationOptions)])
+ )
+ );
+
+ const optionsTypeStr = `Omit, 'mutationFn'>`;
+ const optionsParam = t.identifier('options');
+ optionsParam.optional = true;
+ optionsParam.typeAnnotation = t.tsTypeAnnotation(t.tsTypeReference(t.identifier(optionsTypeStr)));
+
+ const hookFunc = t.functionDeclaration(
+ t.identifier(hookName),
+ [optionsParam],
+ t.blockStatement(hookBodyStatements)
+ );
+ const hookExport = t.exportNamedDeclaration(hookFunc);
+ addJSDocComment(hookExport, [
+ `Mutation hook for updating a ${typeName}`,
+ '',
+ '@example',
+ '```tsx',
+ `const { mutate, isPending } = ${hookName}();`,
+ '',
+ 'mutate({',
+ ' input: {',
+ ` ${pkField.name}: ${pkField.tsType === 'string' ? "'value-here'" : '123'},`,
+ ' patch: {',
+ ' // ... fields to update',
+ ' },',
+ ' },',
+ '});',
+ '```',
+ ]);
+ statements.push(hookExport);
+
+ const code = generateCode(statements);
+ const content = getGeneratedFileHeader(`Update mutation hook for ${typeName}`) + '\n\n' + code;
return {
fileName: getUpdateMutationFileName(table),
- content: getFormattedOutput(sourceFile),
+ content,
};
}
-// ============================================================================
-// Delete mutation hook generator
-// ============================================================================
-
-/**
- * Generate delete mutation hook file content using AST
- * When reactQueryEnabled is false, returns null since mutations require React Query
- */
export function generateDeleteMutationHook(
table: CleanTable,
options: MutationGeneratorOptions = {}
): GeneratedMutationFile | null {
- const { reactQueryEnabled = true } = options;
+ const {
+ reactQueryEnabled = true,
+ useCentralizedKeys = true,
+ hasRelationships = false,
+ } = options;
- // Mutations require React Query - skip generation when disabled
if (!reactQueryEnabled) {
return null;
}
- // Check if delete mutation exists
if (table.query?.delete === null) {
return null;
}
- const project = createProject();
const { typeName } = getTableNames(table);
const hookName = getDeleteMutationHookName(table);
const mutationName = getDeleteMutationName(table);
+ const keysName = `${lcFirst(typeName)}Keys`;
+ const mutationKeysName = `${lcFirst(typeName)}MutationKeys`;
+ const scopeTypeName = `${typeName}Scope`;
- // Get primary key info dynamically from table constraints
const pkFields = getPrimaryKeyInfo(table);
- const pkField = pkFields[0]; // Use first PK field
+ const pkField = pkFields[0];
- // Generate GraphQL document via AST
const mutationAST = buildDeleteMutationAST({ table });
const mutationDocument = printGraphQL(mutationAST);
- const sourceFile = createSourceFile(project, getDeleteMutationFileName(table));
-
- // Add file header
- sourceFile.insertText(0, createFileHeader(`Delete mutation hook for ${typeName}`) + '\n\n');
-
- // Add imports
- sourceFile.addImportDeclarations([
- createImport({
- moduleSpecifier: '@tanstack/react-query',
- namedImports: ['useMutation', 'useQueryClient'],
- typeOnlyNamedImports: ['UseMutationOptions'],
- }),
- createImport({
- moduleSpecifier: '../client',
- namedImports: ['execute'],
- }),
+ const statements: t.Statement[] = [];
+
+ const reactQueryImport = t.importDeclaration(
+ [
+ t.importSpecifier(t.identifier('useMutation'), t.identifier('useMutation')),
+ t.importSpecifier(t.identifier('useQueryClient'), t.identifier('useQueryClient')),
+ ],
+ t.stringLiteral('@tanstack/react-query')
+ );
+ statements.push(reactQueryImport);
+
+ const reactQueryTypeImport = t.importDeclaration(
+ [t.importSpecifier(t.identifier('UseMutationOptions'), t.identifier('UseMutationOptions'))],
+ t.stringLiteral('@tanstack/react-query')
+ );
+ reactQueryTypeImport.importKind = 'type';
+ statements.push(reactQueryTypeImport);
+
+ const clientImport = t.importDeclaration(
+ [t.importSpecifier(t.identifier('execute'), t.identifier('execute'))],
+ t.stringLiteral('../client')
+ );
+ statements.push(clientImport);
+
+ if (useCentralizedKeys) {
+ const queryKeyImport = t.importDeclaration(
+ [t.importSpecifier(t.identifier(keysName), t.identifier(keysName))],
+ t.stringLiteral('../query-keys')
+ );
+ statements.push(queryKeyImport);
+ if (hasRelationships) {
+ const scopeTypeImport = t.importDeclaration(
+ [t.importSpecifier(t.identifier(scopeTypeName), t.identifier(scopeTypeName))],
+ t.stringLiteral('../query-keys')
+ );
+ scopeTypeImport.importKind = 'type';
+ statements.push(scopeTypeImport);
+ }
+ const mutationKeyImport = t.importDeclaration(
+ [t.importSpecifier(t.identifier(mutationKeysName), t.identifier(mutationKeysName))],
+ t.stringLiteral('../mutation-keys')
+ );
+ statements.push(mutationKeyImport);
+ }
+
+ const mutationDocConst = t.variableDeclaration('const', [
+ t.variableDeclarator(
+ t.identifier(`${mutationName}MutationDocument`),
+ t.templateLiteral(
+ [t.templateElement({ raw: '\n' + mutationDocument, cooked: '\n' + mutationDocument }, true)],
+ []
+ )
+ ),
+ ]);
+ statements.push(t.exportNamedDeclaration(mutationDocConst));
+
+ const pkTypeAnnotation =
+ pkField.tsType === 'string'
+ ? t.tsStringKeyword()
+ : pkField.tsType === 'number'
+ ? t.tsNumberKeyword()
+ : t.tsTypeReference(t.identifier(pkField.tsType));
+
+ const variablesInterfaceBody = t.tsInterfaceBody([
+ t.tsPropertySignature(
+ t.identifier('input'),
+ t.tsTypeAnnotation(
+ t.tsTypeLiteral([
+ t.tsPropertySignature(t.identifier(pkField.name), t.tsTypeAnnotation(pkTypeAnnotation)),
+ ])
+ )
+ ),
]);
+ const variablesInterface = t.tsInterfaceDeclaration(
+ t.identifier(`${ucFirst(mutationName)}MutationVariables`),
+ null,
+ null,
+ variablesInterfaceBody
+ );
+ statements.push(t.exportNamedDeclaration(variablesInterface));
- // Add section comment
- sourceFile.addStatements('\n// ============================================================================');
- sourceFile.addStatements('// GraphQL Document');
- sourceFile.addStatements('// ============================================================================\n');
-
- // Add mutation document constant
- sourceFile.addVariableStatement(
- createConst(`${mutationName}MutationDocument`, '`\n' + mutationDocument + '`')
- );
-
- // Add section comment
- sourceFile.addStatements('\n// ============================================================================');
- sourceFile.addStatements('// Types');
- sourceFile.addStatements('// ============================================================================\n');
-
- // Variables interface - use dynamic PK field name and type
- sourceFile.addInterface(
- createInterface(`${ucFirst(mutationName)}MutationVariables`, [
- {
- name: 'input',
- type: `{
- ${pkField.name}: ${pkField.tsType};
- }`,
- },
- ])
+ const deletedPkProp = t.tsPropertySignature(
+ t.identifier(`deleted${ucFirst(pkField.name)}`),
+ t.tsTypeAnnotation(t.tsUnionType([pkTypeAnnotation, t.tsNullKeyword()]))
+ );
+ const clientMutationIdProp = t.tsPropertySignature(
+ t.identifier('clientMutationId'),
+ t.tsTypeAnnotation(t.tsUnionType([t.tsStringKeyword(), t.tsNullKeyword()]))
);
- // Result interface
- sourceFile.addInterface(
- createInterface(`${ucFirst(mutationName)}MutationResult`, [
- {
- name: mutationName,
- type: `{
- clientMutationId: string | null;
- deleted${ucFirst(pkField.name)}: ${pkField.tsType} | null;
- }`,
- },
+ const resultInterfaceBody = t.tsInterfaceBody([
+ t.tsPropertySignature(
+ t.identifier(mutationName),
+ t.tsTypeAnnotation(t.tsTypeLiteral([clientMutationIdProp, deletedPkProp]))
+ ),
+ ]);
+ const resultInterface = t.tsInterfaceDeclaration(
+ t.identifier(`${ucFirst(mutationName)}MutationResult`),
+ null,
+ null,
+ resultInterfaceBody
+ );
+ statements.push(t.exportNamedDeclaration(resultInterface));
+
+ const hookBodyStatements: t.Statement[] = [];
+ hookBodyStatements.push(
+ t.variableDeclaration('const', [
+ t.variableDeclarator(
+ t.identifier('queryClient'),
+ t.callExpression(t.identifier('useQueryClient'), [])
+ ),
])
);
- // Add section comment
- sourceFile.addStatements('\n// ============================================================================');
- sourceFile.addStatements('// Hook');
- sourceFile.addStatements('// ============================================================================\n');
-
- // Hook function
- sourceFile.addFunction({
- name: hookName,
- isExported: true,
- parameters: [
- {
- name: 'options',
- type: `Omit, 'mutationFn'>`,
- hasQuestionToken: true,
- },
- ],
- statements: `const queryClient = useQueryClient();
+ const mutationOptions: (t.ObjectProperty | t.SpreadElement)[] = [];
+ if (useCentralizedKeys) {
+ mutationOptions.push(
+ t.objectProperty(
+ t.identifier('mutationKey'),
+ t.memberExpression(t.identifier(mutationKeysName), t.identifier('all'))
+ )
+ );
+ }
+ mutationOptions.push(
+ t.objectProperty(
+ t.identifier('mutationFn'),
+ t.arrowFunctionExpression(
+ [typedParam('variables', t.tsTypeReference(t.identifier(`${ucFirst(mutationName)}MutationVariables`)))],
+ t.callExpression(t.identifier('execute'), [
+ t.identifier(`${mutationName}MutationDocument`),
+ t.identifier('variables'),
+ ])
+ )
+ )
+ );
- return useMutation({
- mutationFn: (variables: ${ucFirst(mutationName)}MutationVariables) =>
- execute<${ucFirst(mutationName)}MutationResult, ${ucFirst(mutationName)}MutationVariables>(
- ${mutationName}MutationDocument,
- variables
- ),
- onSuccess: (_, variables) => {
- // Remove from cache and invalidate list
- queryClient.removeQueries({ queryKey: ['${typeName.toLowerCase()}', 'detail', variables.input.${pkField.name}] });
- queryClient.invalidateQueries({ queryKey: ['${typeName.toLowerCase()}', 'list'] });
- },
- ...options,
- });`,
- docs: [
- {
- description: `Mutation hook for deleting a ${typeName}
-
-@example
-\`\`\`tsx
-const { mutate, isPending } = ${hookName}();
-
-mutate({
- input: {
- ${pkField.name}: ${pkField.tsType === 'string' ? "'value-to-delete'" : '123'},
- },
-});
-\`\`\``,
- },
- ],
- });
+ const detailQueryKey = useCentralizedKeys
+ ? t.callExpression(
+ t.memberExpression(t.identifier(keysName), t.identifier('detail')),
+ [t.memberExpression(t.memberExpression(t.identifier('variables'), t.identifier('input')), t.identifier(pkField.name))]
+ )
+ : t.arrayExpression([
+ t.stringLiteral(typeName.toLowerCase()),
+ t.stringLiteral('detail'),
+ t.memberExpression(t.memberExpression(t.identifier('variables'), t.identifier('input')), t.identifier(pkField.name)),
+ ]);
+
+ const listQueryKey = useCentralizedKeys
+ ? t.callExpression(t.memberExpression(t.identifier(keysName), t.identifier('lists')), [])
+ : t.arrayExpression([t.stringLiteral(typeName.toLowerCase()), t.stringLiteral('list')]);
+
+ mutationOptions.push(
+ t.objectProperty(
+ t.identifier('onSuccess'),
+ t.arrowFunctionExpression(
+ [t.identifier('_'), t.identifier('variables')],
+ t.blockStatement([
+ t.expressionStatement(
+ t.callExpression(
+ t.memberExpression(t.identifier('queryClient'), t.identifier('removeQueries')),
+ [t.objectExpression([t.objectProperty(t.identifier('queryKey'), detailQueryKey)])]
+ )
+ ),
+ t.expressionStatement(
+ t.callExpression(
+ t.memberExpression(t.identifier('queryClient'), t.identifier('invalidateQueries')),
+ [t.objectExpression([t.objectProperty(t.identifier('queryKey'), listQueryKey)])]
+ )
+ ),
+ ])
+ )
+ )
+ );
+ mutationOptions.push(t.spreadElement(t.identifier('options')));
+
+ hookBodyStatements.push(
+ t.returnStatement(
+ t.callExpression(t.identifier('useMutation'), [t.objectExpression(mutationOptions)])
+ )
+ );
+
+ const optionsTypeStr = `Omit, 'mutationFn'>`;
+ const optionsParam = t.identifier('options');
+ optionsParam.optional = true;
+ optionsParam.typeAnnotation = t.tsTypeAnnotation(t.tsTypeReference(t.identifier(optionsTypeStr)));
+
+ const hookFunc = t.functionDeclaration(
+ t.identifier(hookName),
+ [optionsParam],
+ t.blockStatement(hookBodyStatements)
+ );
+ const hookExport = t.exportNamedDeclaration(hookFunc);
+ addJSDocComment(hookExport, [
+ `Mutation hook for deleting a ${typeName}`,
+ '',
+ '@example',
+ '```tsx',
+ `const { mutate, isPending } = ${hookName}();`,
+ '',
+ 'mutate({',
+ ' input: {',
+ ` ${pkField.name}: ${pkField.tsType === 'string' ? "'value-to-delete'" : '123'},`,
+ ' },',
+ '});',
+ '```',
+ ]);
+ statements.push(hookExport);
+
+ const code = generateCode(statements);
+ const content = getGeneratedFileHeader(`Delete mutation hook for ${typeName}`) + '\n\n' + code;
return {
fileName: getDeleteMutationFileName(table),
- content: getFormattedOutput(sourceFile),
+ content,
};
}
-// ============================================================================
-// Batch generator
-// ============================================================================
-
-/**
- * Generate all mutation hook files for all tables
- * When reactQueryEnabled is false, returns empty array since mutations require React Query
- */
export function generateAllMutationHooks(
tables: CleanTable[],
options: MutationGeneratorOptions = {}
diff --git a/graphql/codegen/src/cli/codegen/orm/barrel.ts b/graphql/codegen/src/cli/codegen/orm/barrel.ts
index f3d03eaf5..fda3b5b15 100644
--- a/graphql/codegen/src/cli/codegen/orm/barrel.ts
+++ b/graphql/codegen/src/cli/codegen/orm/barrel.ts
@@ -1,16 +1,12 @@
/**
- * Barrel file generators for ORM client
+ * Barrel file generators for ORM client (Babel AST-based)
*
* Generates index.ts files that re-export all models and operations.
*/
import type { CleanTable } from '../../../types/schema';
-import {
- createProject,
- createSourceFile,
- getFormattedOutput,
- createFileHeader,
-} from '../ts-ast';
-import { getTableNames, lcFirst } from '../utils';
+import * as t from '@babel/types';
+import { generateCode } from '../babel-ast';
+import { getTableNames, lcFirst, getGeneratedFileHeader } from '../utils';
export interface GeneratedBarrelFile {
fileName: string;
@@ -21,14 +17,7 @@ export interface GeneratedBarrelFile {
* Generate the models/index.ts barrel file
*/
export function generateModelsBarrel(tables: CleanTable[]): GeneratedBarrelFile {
- const project = createProject();
- const sourceFile = createSourceFile(project, 'index.ts');
-
- // Add file header
- sourceFile.insertText(
- 0,
- createFileHeader('Models barrel export') + '\n\n'
- );
+ const statements: t.Statement[] = [];
// Export all model classes (Select types are now in input-types.ts)
for (const table of tables) {
@@ -38,15 +27,21 @@ export function generateModelsBarrel(tables: CleanTable[]): GeneratedBarrelFile
const baseFileName = lcFirst(typeName);
const moduleFileName = baseFileName === 'index' ? `${baseFileName}Model` : baseFileName;
- sourceFile.addExportDeclaration({
- moduleSpecifier: `./${moduleFileName}`,
- namedExports: [modelName],
- });
+ // Create: export { ModelName } from './moduleName';
+ const exportDecl = t.exportNamedDeclaration(
+ null,
+ [t.exportSpecifier(t.identifier(modelName), t.identifier(modelName))],
+ t.stringLiteral(`./${moduleFileName}`)
+ );
+ statements.push(exportDecl);
}
+ const header = getGeneratedFileHeader('Models barrel export');
+ const code = generateCode(statements);
+
return {
fileName: 'models/index.ts',
- content: getFormattedOutput(sourceFile),
+ content: header + '\n' + code,
};
}
diff --git a/graphql/codegen/src/cli/codegen/orm/client-generator.ts b/graphql/codegen/src/cli/codegen/orm/client-generator.ts
index 7c078e2d1..d38a1a7dd 100644
--- a/graphql/codegen/src/cli/codegen/orm/client-generator.ts
+++ b/graphql/codegen/src/cli/codegen/orm/client-generator.ts
@@ -1,35 +1,12 @@
/**
- * ORM Client generator
+ * ORM Client generator (Babel AST-based)
*
* Generates the createClient() factory function and main client file.
- *
- * Example output:
- * ```typescript
- * import { OrmClient, OrmClientConfig } from './client';
- * import { UserModel } from './models/user';
- * import { queryOperations } from './query';
- * import { mutationOperations } from './mutation';
- *
- * export function createClient(config: OrmClientConfig) {
- * const client = new OrmClient(config);
- * return {
- * user: new UserModel(client),
- * post: new PostModel(client),
- * query: queryOperations(client),
- * mutation: mutationOperations(client),
- * };
- * }
- * ```
*/
import type { CleanTable } from '../../../types/schema';
-import {
- createProject,
- createSourceFile,
- getFormattedOutput,
- createFileHeader,
- createImport,
-} from '../ts-ast';
-import { getTableNames, lcFirst } from '../utils';
+import * as t from '@babel/types';
+import { generateCode, commentBlock } from '../babel-ast';
+import { getTableNames, lcFirst, getGeneratedFileHeader } from '../utils';
export interface GeneratedClientFile {
fileName: string;
@@ -579,6 +556,19 @@ export type InferSelectResult = TSelect extends undefined
};
}
+function createImportDeclaration(
+ moduleSpecifier: string,
+ namedImports: string[],
+ typeOnly: boolean = false
+): t.ImportDeclaration {
+ const specifiers = namedImports.map((name) =>
+ t.importSpecifier(t.identifier(name), t.identifier(name))
+ );
+ const decl = t.importDeclaration(specifiers, t.stringLiteral(moduleSpecifier));
+ decl.importKind = typeOnly ? 'type' : 'value';
+ return decl;
+}
+
/**
* Generate the main index.ts with createClient factory
*/
@@ -587,127 +577,149 @@ export function generateCreateClientFile(
hasCustomQueries: boolean,
hasCustomMutations: boolean
): GeneratedClientFile {
- const project = createProject();
- const sourceFile = createSourceFile(project, 'index.ts');
-
- // Add file header
- sourceFile.insertText(
- 0,
- createFileHeader('ORM Client - createClient factory') + '\n\n'
- );
+ const statements: t.Statement[] = [];
// Add imports
- const imports = [
- createImport({
- moduleSpecifier: './client',
- namedImports: ['OrmClient'],
- typeOnlyNamedImports: ['OrmClientConfig'],
- }),
- ];
+ // Import OrmClient (value) and OrmClientConfig (type) separately
+ statements.push(createImportDeclaration('./client', ['OrmClient']));
+ statements.push(createImportDeclaration('./client', ['OrmClientConfig'], true));
// Import models
for (const table of tables) {
const { typeName } = getTableNames(table);
const modelName = `${typeName}Model`;
const fileName = lcFirst(typeName);
- imports.push(
- createImport({
- moduleSpecifier: `./models/${fileName}`,
- namedImports: [modelName],
- })
- );
+ statements.push(createImportDeclaration(`./models/${fileName}`, [modelName]));
}
// Import custom operations
if (hasCustomQueries) {
- imports.push(
- createImport({
- moduleSpecifier: './query',
- namedImports: ['createQueryOperations'],
- })
- );
+ statements.push(createImportDeclaration('./query', ['createQueryOperations']));
}
if (hasCustomMutations) {
- imports.push(
- createImport({
- moduleSpecifier: './mutation',
- namedImports: ['createMutationOperations'],
- })
- );
+ statements.push(createImportDeclaration('./mutation', ['createMutationOperations']));
}
- sourceFile.addImportDeclarations(imports);
-
// Re-export types and classes
- sourceFile.addStatements('\n// Re-export types and classes');
- sourceFile.addStatements(
- "export type { OrmClientConfig, QueryResult, GraphQLError } from './client';"
+ // export type { OrmClientConfig, QueryResult, GraphQLError } from './client';
+ const typeExportDecl = t.exportNamedDeclaration(
+ null,
+ [
+ t.exportSpecifier(t.identifier('OrmClientConfig'), t.identifier('OrmClientConfig')),
+ t.exportSpecifier(t.identifier('QueryResult'), t.identifier('QueryResult')),
+ t.exportSpecifier(t.identifier('GraphQLError'), t.identifier('GraphQLError')),
+ ],
+ t.stringLiteral('./client')
);
- sourceFile.addStatements("export { GraphQLRequestError } from './client';");
- sourceFile.addStatements("export { QueryBuilder } from './query-builder';");
- sourceFile.addStatements("export * from './select-types';");
-
- // Generate createClient function
- sourceFile.addStatements(
- '\n// ============================================================================'
+ typeExportDecl.exportKind = 'type';
+ statements.push(typeExportDecl);
+
+ // export { GraphQLRequestError } from './client';
+ statements.push(
+ t.exportNamedDeclaration(
+ null,
+ [t.exportSpecifier(t.identifier('GraphQLRequestError'), t.identifier('GraphQLRequestError'))],
+ t.stringLiteral('./client')
+ )
);
- sourceFile.addStatements('// Client Factory');
- sourceFile.addStatements(
- '// ============================================================================\n'
+
+ // export { QueryBuilder } from './query-builder';
+ statements.push(
+ t.exportNamedDeclaration(
+ null,
+ [t.exportSpecifier(t.identifier('QueryBuilder'), t.identifier('QueryBuilder'))],
+ t.stringLiteral('./query-builder')
+ )
);
- // Build the return object
- const modelEntries = tables.map((table) => {
+ // export * from './select-types';
+ statements.push(t.exportAllDeclaration(t.stringLiteral('./select-types')));
+
+ // Build the return object properties
+ const returnProperties: t.ObjectProperty[] = [];
+
+ for (const table of tables) {
const { typeName, singularName } = getTableNames(table);
- return `${singularName}: new ${typeName}Model(client)`;
- });
+ const modelName = `${typeName}Model`;
+ returnProperties.push(
+ t.objectProperty(
+ t.identifier(singularName),
+ t.newExpression(t.identifier(modelName), [t.identifier('client')])
+ )
+ );
+ }
- let returnObject = modelEntries.join(',\n ');
if (hasCustomQueries) {
- returnObject += ',\n query: createQueryOperations(client)';
+ returnProperties.push(
+ t.objectProperty(
+ t.identifier('query'),
+ t.callExpression(t.identifier('createQueryOperations'), [t.identifier('client')])
+ )
+ );
}
+
if (hasCustomMutations) {
- returnObject += ',\n mutation: createMutationOperations(client)';
+ returnProperties.push(
+ t.objectProperty(
+ t.identifier('mutation'),
+ t.callExpression(t.identifier('createMutationOperations'), [t.identifier('client')])
+ )
+ );
}
- sourceFile.addFunction({
- name: 'createClient',
- isExported: true,
- parameters: [{ name: 'config', type: 'OrmClientConfig' }],
- statements: `const client = new OrmClient(config);
-
- return {
- ${returnObject},
- };`,
- docs: [
- {
- description: `Create an ORM client instance
-
-@example
-\`\`\`typescript
-const db = createClient({
- endpoint: 'https://api.example.com/graphql',
- headers: { Authorization: 'Bearer token' },
-});
-
-// Query users
-const users = await db.user.findMany({
- select: { id: true, name: true },
- first: 10,
-}).execute();
-
-// Create a user
-const newUser = await db.user.create({
- data: { name: 'John', email: 'john@example.com' },
- select: { id: true },
-}).execute();
-\`\`\``,
- },
- ],
- });
+ // Build the createClient function body
+ const clientDecl = t.variableDeclaration('const', [
+ t.variableDeclarator(
+ t.identifier('client'),
+ t.newExpression(t.identifier('OrmClient'), [t.identifier('config')])
+ ),
+ ]);
+
+ const returnStmt = t.returnStatement(t.objectExpression(returnProperties));
+
+ const configParam = t.identifier('config');
+ configParam.typeAnnotation = t.tsTypeAnnotation(t.tsTypeReference(t.identifier('OrmClientConfig')));
+
+ const createClientFunc = t.functionDeclaration(
+ t.identifier('createClient'),
+ [configParam],
+ t.blockStatement([clientDecl, returnStmt])
+ );
+
+ // Add JSDoc comment
+ const jsdocComment = commentBlock(`*
+ * Create an ORM client instance
+ *
+ * @example
+ * \`\`\`typescript
+ * const db = createClient({
+ * endpoint: 'https://api.example.com/graphql',
+ * headers: { Authorization: 'Bearer token' },
+ * });
+ *
+ * // Query users
+ * const users = await db.user.findMany({
+ * select: { id: true, name: true },
+ * first: 10,
+ * }).execute();
+ *
+ * // Create a user
+ * const newUser = await db.user.create({
+ * data: { name: 'John', email: 'john@example.com' },
+ * select: { id: true },
+ * }).execute();
+ * \`\`\`
+ `);
+
+ const exportedFunc = t.exportNamedDeclaration(createClientFunc);
+ exportedFunc.leadingComments = [jsdocComment];
+ statements.push(exportedFunc);
+
+ const header = getGeneratedFileHeader('ORM Client - createClient factory');
+ const code = generateCode(statements);
return {
fileName: 'index.ts',
- content: getFormattedOutput(sourceFile),
+ content: header + '\n' + code,
};
}
diff --git a/graphql/codegen/src/cli/codegen/orm/custom-ops-generator.ts b/graphql/codegen/src/cli/codegen/orm/custom-ops-generator.ts
index de96429e9..0c9942968 100644
--- a/graphql/codegen/src/cli/codegen/orm/custom-ops-generator.ts
+++ b/graphql/codegen/src/cli/codegen/orm/custom-ops-generator.ts
@@ -1,29 +1,13 @@
/**
- * Custom operations generator for ORM client
+ * Custom operations generator for ORM client (Babel AST-based)
*
* Generates db.query.* and db.mutation.* namespaces for non-table operations
* like login, register, currentUser, etc.
- *
- * Example output:
- * ```typescript
- * // query/index.ts
- * export function createQueryOperations(client: OrmClient) {
- * return {
- * currentUser: (args?: { select?: CurrentUserSelect }) =>
- * new QueryBuilder({ ... }),
- * };
- * }
- * ```
*/
import type { CleanOperation, CleanArgument } from '../../../types/schema';
-import {
- createProject,
- createSourceFile,
- getFormattedOutput,
- createFileHeader,
- createImport,
-} from '../ts-ast';
-import { ucFirst } from '../utils';
+import * as t from '@babel/types';
+import { generateCode } from '../babel-ast';
+import { ucFirst, getGeneratedFileHeader } from '../utils';
import {
typeRefToTsType,
isTypeRequired,
@@ -111,167 +95,237 @@ function getSelectTypeName(returnType: CleanArgument['type']): string | null {
return null;
}
+function createImportDeclaration(
+ moduleSpecifier: string,
+ namedImports: string[],
+ typeOnly: boolean = false
+): t.ImportDeclaration {
+ const specifiers = namedImports.map((name) =>
+ t.importSpecifier(t.identifier(name), t.identifier(name))
+ );
+ const decl = t.importDeclaration(specifiers, t.stringLiteral(moduleSpecifier));
+ decl.importKind = typeOnly ? 'type' : 'value';
+ return decl;
+}
+
+function createVariablesInterface(
+ op: CleanOperation
+): t.ExportNamedDeclaration | null {
+ if (op.args.length === 0) return null;
+
+ const varTypeName = `${ucFirst(op.name)}Variables`;
+ const props = op.args.map((arg) => {
+ const optional = !isTypeRequired(arg.type);
+ const prop = t.tsPropertySignature(
+ t.identifier(arg.name),
+ t.tsTypeAnnotation(parseTypeAnnotation(typeRefToTsType(arg.type)))
+ );
+ prop.optional = optional;
+ return prop;
+ });
+
+ const interfaceDecl = t.tsInterfaceDeclaration(
+ t.identifier(varTypeName),
+ null,
+ null,
+ t.tsInterfaceBody(props)
+ );
+ return t.exportNamedDeclaration(interfaceDecl);
+}
+
+function parseTypeAnnotation(typeStr: string): t.TSType {
+ if (typeStr === 'string') return t.tsStringKeyword();
+ if (typeStr === 'number') return t.tsNumberKeyword();
+ if (typeStr === 'boolean') return t.tsBooleanKeyword();
+ if (typeStr === 'null') return t.tsNullKeyword();
+ if (typeStr === 'undefined') return t.tsUndefinedKeyword();
+ if (typeStr === 'unknown') return t.tsUnknownKeyword();
+
+ if (typeStr.includes(' | ')) {
+ const parts = typeStr.split(' | ').map((p) => parseTypeAnnotation(p.trim()));
+ return t.tsUnionType(parts);
+ }
+
+ if (typeStr.endsWith('[]')) {
+ return t.tsArrayType(parseTypeAnnotation(typeStr.slice(0, -2)));
+ }
+
+ return t.tsTypeReference(t.identifier(typeStr));
+}
+
+function buildOperationMethod(
+ op: CleanOperation,
+ operationType: 'query' | 'mutation'
+): t.ObjectProperty {
+ const hasArgs = op.args.length > 0;
+ const varTypeName = `${ucFirst(op.name)}Variables`;
+ const varDefs = op.args.map((arg) => ({
+ name: arg.name,
+ type: formatGraphQLType(arg.type),
+ }));
+
+ const selectTypeName = getSelectTypeName(op.returnType);
+ const payloadTypeName = getTypeBaseName(op.returnType);
+
+ // Build the arrow function parameters
+ const params: t.Identifier[] = [];
+
+ if (hasArgs) {
+ const argsParam = t.identifier('args');
+ argsParam.typeAnnotation = t.tsTypeAnnotation(t.tsTypeReference(t.identifier(varTypeName)));
+ params.push(argsParam);
+ }
+
+ const optionsParam = t.identifier('options');
+ optionsParam.optional = true;
+ if (selectTypeName) {
+ optionsParam.typeAnnotation = t.tsTypeAnnotation(
+ t.tsTypeLiteral([
+ (() => {
+ const prop = t.tsPropertySignature(
+ t.identifier('select'),
+ t.tsTypeAnnotation(t.tsTypeReference(t.identifier('S')))
+ );
+ prop.optional = true;
+ return prop;
+ })(),
+ ])
+ );
+ } else {
+ optionsParam.typeAnnotation = t.tsTypeAnnotation(
+ t.tsTypeLiteral([
+ (() => {
+ const prop = t.tsPropertySignature(
+ t.identifier('select'),
+ t.tsTypeAnnotation(
+ t.tsTypeReference(
+ t.identifier('Record'),
+ t.tsTypeParameterInstantiation([t.tsStringKeyword(), t.tsUnknownKeyword()])
+ )
+ )
+ );
+ prop.optional = true;
+ return prop;
+ })(),
+ ])
+ );
+ }
+ params.push(optionsParam);
+
+ // Build the QueryBuilder call
+ const queryBuilderArgs = t.objectExpression([
+ t.objectProperty(t.identifier('client'), t.identifier('client'), false, true),
+ t.objectProperty(t.identifier('operation'), t.stringLiteral(operationType)),
+ t.objectProperty(t.identifier('operationName'), t.stringLiteral(ucFirst(op.name))),
+ t.objectProperty(t.identifier('fieldName'), t.stringLiteral(op.name)),
+ t.spreadElement(
+ t.callExpression(t.identifier('buildCustomDocument'), [
+ t.stringLiteral(operationType),
+ t.stringLiteral(ucFirst(op.name)),
+ t.stringLiteral(op.name),
+ t.optionalMemberExpression(t.identifier('options'), t.identifier('select'), false, true),
+ hasArgs ? t.identifier('args') : t.identifier('undefined'),
+ t.arrayExpression(
+ varDefs.map((v) =>
+ t.objectExpression([
+ t.objectProperty(t.identifier('name'), t.stringLiteral(v.name)),
+ t.objectProperty(t.identifier('type'), t.stringLiteral(v.type)),
+ ])
+ )
+ ),
+ ])
+ ),
+ ]);
+
+ const newExpr = t.newExpression(t.identifier('QueryBuilder'), [queryBuilderArgs]);
+
+ // Add type parameter if we have a select type
+ if (selectTypeName && payloadTypeName) {
+ (newExpr as any).typeParameters = t.tsTypeParameterInstantiation([
+ t.tsTypeLiteral([
+ t.tsPropertySignature(
+ t.identifier(op.name),
+ t.tsTypeAnnotation(
+ t.tsTypeReference(
+ t.identifier('InferSelectResult'),
+ t.tsTypeParameterInstantiation([
+ t.tsTypeReference(t.identifier(payloadTypeName)),
+ t.tsTypeReference(t.identifier('S')),
+ ])
+ )
+ )
+ ),
+ ]),
+ ]);
+ }
+
+ const arrowFunc = t.arrowFunctionExpression(params, newExpr);
+
+ // Add type parameters to arrow function if we have a select type
+ if (selectTypeName) {
+ const typeParam = t.tsTypeParameter(
+ t.tsTypeReference(t.identifier(selectTypeName)),
+ null,
+ 'S'
+ );
+ (typeParam as any).const = true;
+ arrowFunc.typeParameters = t.tsTypeParameterDeclaration([typeParam]);
+ }
+
+ return t.objectProperty(t.identifier(op.name), arrowFunc);
+}
+
/**
* Generate the query/index.ts file for custom query operations
*/
export function generateCustomQueryOpsFile(
operations: CleanOperation[]
): GeneratedCustomOpsFile {
- const project = createProject();
- const sourceFile = createSourceFile(project, 'index.ts');
+ const statements: t.Statement[] = [];
// Collect all input type names and payload type names
const inputTypeNames = collectInputTypeNamesFromOps(operations);
const payloadTypeNames = collectPayloadTypeNamesFromOps(operations);
-
- // Generate Select type names for payloads
const selectTypeNames = payloadTypeNames.map((p) => `${p}Select`);
-
- // Combine all type imports
- const allTypeImports = [
- ...new Set([...inputTypeNames, ...payloadTypeNames, ...selectTypeNames]),
- ];
-
- // Add file header
- sourceFile.insertText(
- 0,
- createFileHeader('Custom query operations') + '\n\n'
- );
+ const allTypeImports = [...new Set([...inputTypeNames, ...payloadTypeNames, ...selectTypeNames])];
// Add imports
- sourceFile.addImportDeclarations([
- createImport({
- moduleSpecifier: '../client',
- namedImports: ['OrmClient'],
- }),
- createImport({
- moduleSpecifier: '../query-builder',
- namedImports: ['QueryBuilder', 'buildCustomDocument'],
- }),
- createImport({
- moduleSpecifier: '../select-types',
- typeOnlyNamedImports: ['InferSelectResult'],
- }),
- ]);
+ statements.push(createImportDeclaration('../client', ['OrmClient']));
+ statements.push(createImportDeclaration('../query-builder', ['QueryBuilder', 'buildCustomDocument']));
+ statements.push(createImportDeclaration('../select-types', ['InferSelectResult'], true));
- // Import types from input-types if we have any
if (allTypeImports.length > 0) {
- sourceFile.addImportDeclarations([
- createImport({
- moduleSpecifier: '../input-types',
- typeOnlyNamedImports: allTypeImports,
- }),
- ]);
+ statements.push(createImportDeclaration('../input-types', allTypeImports, true));
}
- // Generate variable definitions type for each operation
- sourceFile.addStatements(
- '\n// ============================================================================'
- );
- sourceFile.addStatements('// Variable Types');
- sourceFile.addStatements(
- '// ============================================================================\n'
- );
-
+ // Generate variable interfaces
for (const op of operations) {
- if (op.args.length > 0) {
- const varTypeName = `${ucFirst(op.name)}Variables`;
- const props = op.args.map((arg) => {
- const optional = !isTypeRequired(arg.type);
- return `${arg.name}${optional ? '?' : ''}: ${typeRefToTsType(arg.type)};`;
- });
- sourceFile.addStatements(
- `export interface ${varTypeName} {\n ${props.join('\n ')}\n}\n`
- );
- }
+ const varInterface = createVariablesInterface(op);
+ if (varInterface) statements.push(varInterface);
}
// Generate factory function
- sourceFile.addStatements(
- '\n// ============================================================================'
- );
- sourceFile.addStatements('// Query Operations Factory');
- sourceFile.addStatements(
- '// ============================================================================\n'
- );
+ const operationProperties = operations.map((op) => buildOperationMethod(op, 'query'));
- // Build the operations object
- const operationMethods = operations.map((op) => {
- const hasArgs = op.args.length > 0;
- const varTypeName = `${ucFirst(op.name)}Variables`;
- const varDefs = op.args.map((arg) => ({
- name: arg.name,
- type: formatGraphQLType(arg.type),
- }));
- const varDefsJson = JSON.stringify(varDefs);
-
- // Get Select type for return type
- const selectTypeName = getSelectTypeName(op.returnType);
- const payloadTypeName = getTypeBaseName(op.returnType);
-
- // Use typed select if available, otherwise fall back to Record
- const selectType = selectTypeName ?? 'Record';
- const returnTypePart =
- selectTypeName && payloadTypeName
- ? `{ ${op.name}: InferSelectResult<${payloadTypeName}, S> }`
- : 'unknown';
-
- if (hasArgs) {
- if (selectTypeName) {
- return `${op.name}: (args: ${varTypeName}, options?: { select?: S }) =>
- new QueryBuilder<${returnTypePart}>({
- client,
- operation: 'query',
- operationName: '${ucFirst(op.name)}',
- fieldName: '${op.name}',
- ...buildCustomDocument('query', '${ucFirst(op.name)}', '${op.name}', options?.select, args, ${varDefsJson}),
- })`;
- } else {
- return `${op.name}: (args: ${varTypeName}, options?: { select?: Record }) =>
- new QueryBuilder({
- client,
- operation: 'query',
- operationName: '${ucFirst(op.name)}',
- fieldName: '${op.name}',
- ...buildCustomDocument('query', '${ucFirst(op.name)}', '${op.name}', options?.select, args, ${varDefsJson}),
- })`;
- }
- } else {
- // No args - still provide typed select
- if (selectTypeName) {
- return `${op.name}: (options?: { select?: S }) =>
- new QueryBuilder<${returnTypePart}>({
- client,
- operation: 'query',
- operationName: '${ucFirst(op.name)}',
- fieldName: '${op.name}',
- ...buildCustomDocument('query', '${ucFirst(op.name)}', '${op.name}', options?.select, undefined, []),
- })`;
- } else {
- return `${op.name}: (options?: { select?: Record }) =>
- new QueryBuilder({
- client,
- operation: 'query',
- operationName: '${ucFirst(op.name)}',
- fieldName: '${op.name}',
- ...buildCustomDocument('query', '${ucFirst(op.name)}', '${op.name}', options?.select, undefined, []),
- })`;
- }
- }
- });
+ const returnObj = t.objectExpression(operationProperties);
+ const returnStmt = t.returnStatement(returnObj);
- sourceFile.addFunction({
- name: 'createQueryOperations',
- isExported: true,
- parameters: [{ name: 'client', type: 'OrmClient' }],
- statements: `return {
- ${operationMethods.join(',\n ')},
- };`,
- });
+ const clientParam = t.identifier('client');
+ clientParam.typeAnnotation = t.tsTypeAnnotation(t.tsTypeReference(t.identifier('OrmClient')));
+
+ const factoryFunc = t.functionDeclaration(
+ t.identifier('createQueryOperations'),
+ [clientParam],
+ t.blockStatement([returnStmt])
+ );
+ statements.push(t.exportNamedDeclaration(factoryFunc));
+
+ const header = getGeneratedFileHeader('Custom query operations');
+ const code = generateCode(statements);
return {
fileName: 'query/index.ts',
- content: getFormattedOutput(sourceFile),
+ content: header + '\n' + code,
};
}
@@ -281,161 +335,51 @@ export function generateCustomQueryOpsFile(
export function generateCustomMutationOpsFile(
operations: CleanOperation[]
): GeneratedCustomOpsFile {
- const project = createProject();
- const sourceFile = createSourceFile(project, 'index.ts');
+ const statements: t.Statement[] = [];
// Collect all input type names and payload type names
const inputTypeNames = collectInputTypeNamesFromOps(operations);
const payloadTypeNames = collectPayloadTypeNamesFromOps(operations);
-
- // Generate Select type names for payloads
const selectTypeNames = payloadTypeNames.map((p) => `${p}Select`);
-
- // Combine all type imports
- const allTypeImports = [
- ...new Set([...inputTypeNames, ...payloadTypeNames, ...selectTypeNames]),
- ];
-
- // Add file header
- sourceFile.insertText(
- 0,
- createFileHeader('Custom mutation operations') + '\n\n'
- );
+ const allTypeImports = [...new Set([...inputTypeNames, ...payloadTypeNames, ...selectTypeNames])];
// Add imports
- sourceFile.addImportDeclarations([
- createImport({
- moduleSpecifier: '../client',
- namedImports: ['OrmClient'],
- }),
- createImport({
- moduleSpecifier: '../query-builder',
- namedImports: ['QueryBuilder', 'buildCustomDocument'],
- }),
- createImport({
- moduleSpecifier: '../select-types',
- typeOnlyNamedImports: ['InferSelectResult'],
- }),
- ]);
+ statements.push(createImportDeclaration('../client', ['OrmClient']));
+ statements.push(createImportDeclaration('../query-builder', ['QueryBuilder', 'buildCustomDocument']));
+ statements.push(createImportDeclaration('../select-types', ['InferSelectResult'], true));
- // Import types from input-types if we have any
if (allTypeImports.length > 0) {
- sourceFile.addImportDeclarations([
- createImport({
- moduleSpecifier: '../input-types',
- typeOnlyNamedImports: allTypeImports,
- }),
- ]);
+ statements.push(createImportDeclaration('../input-types', allTypeImports, true));
}
- // Generate variable definitions type for each operation
- sourceFile.addStatements(
- '\n// ============================================================================'
- );
- sourceFile.addStatements('// Variable Types');
- sourceFile.addStatements(
- '// ============================================================================\n'
- );
-
+ // Generate variable interfaces
for (const op of operations) {
- if (op.args.length > 0) {
- const varTypeName = `${ucFirst(op.name)}Variables`;
- const props = op.args.map((arg) => {
- const optional = !isTypeRequired(arg.type);
- return `${arg.name}${optional ? '?' : ''}: ${typeRefToTsType(arg.type)};`;
- });
- sourceFile.addStatements(
- `export interface ${varTypeName} {\n ${props.join('\n ')}\n}\n`
- );
- }
+ const varInterface = createVariablesInterface(op);
+ if (varInterface) statements.push(varInterface);
}
// Generate factory function
- sourceFile.addStatements(
- '\n// ============================================================================'
- );
- sourceFile.addStatements('// Mutation Operations Factory');
- sourceFile.addStatements(
- '// ============================================================================\n'
- );
+ const operationProperties = operations.map((op) => buildOperationMethod(op, 'mutation'));
- // Build the operations object
- const operationMethods = operations.map((op) => {
- const hasArgs = op.args.length > 0;
- const varTypeName = `${ucFirst(op.name)}Variables`;
- const varDefs = op.args.map((arg) => ({
- name: arg.name,
- type: formatGraphQLType(arg.type),
- }));
- const varDefsJson = JSON.stringify(varDefs);
-
- // Get Select type for return type
- const selectTypeName = getSelectTypeName(op.returnType);
- const payloadTypeName = getTypeBaseName(op.returnType);
-
- // Use typed select if available, otherwise fall back to Record
- const selectType = selectTypeName ?? 'Record';
- const returnTypePart =
- selectTypeName && payloadTypeName
- ? `{ ${op.name}: InferSelectResult<${payloadTypeName}, S> }`
- : 'unknown';
-
- if (hasArgs) {
- if (selectTypeName) {
- return `${op.name}: (args: ${varTypeName}, options?: { select?: S }) =>
- new QueryBuilder<${returnTypePart}>({
- client,
- operation: 'mutation',
- operationName: '${ucFirst(op.name)}',
- fieldName: '${op.name}',
- ...buildCustomDocument('mutation', '${ucFirst(op.name)}', '${op.name}', options?.select, args, ${varDefsJson}),
- })`;
- } else {
- return `${op.name}: (args: ${varTypeName}, options?: { select?: Record }) =>
- new QueryBuilder({
- client,
- operation: 'mutation',
- operationName: '${ucFirst(op.name)}',
- fieldName: '${op.name}',
- ...buildCustomDocument('mutation', '${ucFirst(op.name)}', '${op.name}', options?.select, args, ${varDefsJson}),
- })`;
- }
- } else {
- // No args - still provide typed select
- if (selectTypeName) {
- return `${op.name}: (options?: { select?: S }) =>
- new QueryBuilder<${returnTypePart}>({
- client,
- operation: 'mutation',
- operationName: '${ucFirst(op.name)}',
- fieldName: '${op.name}',
- ...buildCustomDocument('mutation', '${ucFirst(op.name)}', '${op.name}', options?.select, undefined, []),
- })`;
- } else {
- return `${op.name}: (options?: { select?: Record }) =>
- new QueryBuilder({
- client,
- operation: 'mutation',
- operationName: '${ucFirst(op.name)}',
- fieldName: '${op.name}',
- ...buildCustomDocument('mutation', '${ucFirst(op.name)}', '${op.name}', options?.select, undefined, []),
- })`;
- }
- }
- });
+ const returnObj = t.objectExpression(operationProperties);
+ const returnStmt = t.returnStatement(returnObj);
- sourceFile.addFunction({
- name: 'createMutationOperations',
- isExported: true,
- parameters: [{ name: 'client', type: 'OrmClient' }],
- statements: `return {
- ${operationMethods.join(',\n ')},
- };`,
- });
+ const clientParam = t.identifier('client');
+ clientParam.typeAnnotation = t.tsTypeAnnotation(t.tsTypeReference(t.identifier('OrmClient')));
+
+ const factoryFunc = t.functionDeclaration(
+ t.identifier('createMutationOperations'),
+ [clientParam],
+ t.blockStatement([returnStmt])
+ );
+ statements.push(t.exportNamedDeclaration(factoryFunc));
+
+ const header = getGeneratedFileHeader('Custom mutation operations');
+ const code = generateCode(statements);
return {
fileName: 'mutation/index.ts',
- content: getFormattedOutput(sourceFile),
+ content: header + '\n' + code,
};
}
diff --git a/graphql/codegen/src/cli/codegen/orm/input-types-generator.ts b/graphql/codegen/src/cli/codegen/orm/input-types-generator.ts
index ebd0a53a5..f5d0246c3 100644
--- a/graphql/codegen/src/cli/codegen/orm/input-types-generator.ts
+++ b/graphql/codegen/src/cli/codegen/orm/input-types-generator.ts
@@ -1,5 +1,5 @@
/**
- * Input types generator for ORM client (AST-based)
+ * Input types generator for ORM client (Babel AST-based)
*
* Generates TypeScript interfaces for:
* 1. Scalar filter types (StringFilter, IntFilter, UUIDFilter, etc.)
@@ -8,30 +8,22 @@
* 4. OrderBy enums (UsersOrderBy, OrdersOrderBy, etc.)
* 5. Input types (LoginInput, CreateUserInput, etc.)
*
- * Uses ts-morph for robust AST-based code generation.
+ * Uses Babel AST for robust code generation.
*/
-import type { SourceFile } from 'ts-morph';
import type {
TypeRegistry,
CleanArgument,
CleanTable,
} from '../../../types/schema';
-import {
- createProject,
- createSourceFile,
- getMinimalFormattedOutput,
- createFileHeader,
- createInterface,
- createTypeAlias,
- addSectionComment,
- type InterfaceProperty,
-} from '../ts-ast';
+import * as t from '@babel/types';
+import { generateCode, addLineComment } from '../babel-ast';
import {
getTableNames,
getFilterTypeName,
getConditionTypeName,
getOrderByTypeName,
isRelationField,
+ getGeneratedFileHeader,
} from '../utils';
import { pluralize } from 'inflekt';
import { getTypeBaseName } from '../type-resolver';
@@ -105,6 +97,138 @@ function isRequired(typeRef: CleanArgument['type']): boolean {
return typeRef.kind === 'NON_NULL';
}
+// ============================================================================
+// Babel AST Helper Functions
+// ============================================================================
+
+/**
+ * Parse a type string into a TSType node
+ */
+function parseTypeString(typeStr: string): t.TSType {
+ // Handle union types like "string | null"
+ if (typeStr.includes(' | ')) {
+ const parts = typeStr.split(' | ').map((p) => p.trim());
+ return t.tsUnionType(parts.map((p) => parseTypeString(p)));
+ }
+
+ // Handle array types like "string[]"
+ if (typeStr.endsWith('[]')) {
+ const elementType = typeStr.slice(0, -2);
+ return t.tsArrayType(parseTypeString(elementType));
+ }
+
+ // Handle generic types like "Record"
+ if (typeStr.includes('<')) {
+ const match = typeStr.match(/^([^<]+)<(.+)>$/);
+ if (match) {
+ const [, baseName, params] = match;
+ const typeParams = params.split(',').map((p) => parseTypeString(p.trim()));
+ return t.tsTypeReference(
+ t.identifier(baseName),
+ t.tsTypeParameterInstantiation(typeParams)
+ );
+ }
+ }
+
+ // Handle primitive types
+ switch (typeStr) {
+ case 'string':
+ return t.tsStringKeyword();
+ case 'number':
+ return t.tsNumberKeyword();
+ case 'boolean':
+ return t.tsBooleanKeyword();
+ case 'null':
+ return t.tsNullKeyword();
+ case 'unknown':
+ return t.tsUnknownKeyword();
+ default:
+ return t.tsTypeReference(t.identifier(typeStr));
+ }
+}
+
+/**
+ * Create an interface property signature
+ */
+function createPropertySignature(
+ name: string,
+ typeStr: string,
+ optional: boolean
+): t.TSPropertySignature {
+ const prop = t.tsPropertySignature(
+ t.identifier(name),
+ t.tsTypeAnnotation(parseTypeString(typeStr))
+ );
+ prop.optional = optional;
+ return prop;
+}
+
+/**
+ * Create an exported interface declaration
+ */
+function createExportedInterface(
+ name: string,
+ properties: Array<{ name: string; type: string; optional: boolean }>
+): t.ExportNamedDeclaration {
+ const props = properties.map((p) =>
+ createPropertySignature(p.name, p.type, p.optional)
+ );
+ const body = t.tsInterfaceBody(props);
+ const interfaceDecl = t.tsInterfaceDeclaration(
+ t.identifier(name),
+ null,
+ null,
+ body
+ );
+ return t.exportNamedDeclaration(interfaceDecl);
+}
+
+/**
+ * Create an exported type alias declaration
+ */
+function createExportedTypeAlias(
+ name: string,
+ typeStr: string
+): t.ExportNamedDeclaration {
+ const typeAlias = t.tsTypeAliasDeclaration(
+ t.identifier(name),
+ null,
+ parseTypeString(typeStr)
+ );
+ return t.exportNamedDeclaration(typeAlias);
+}
+
+/**
+ * Create a union type from string literals
+ */
+function createStringLiteralUnion(values: string[]): t.TSUnionType {
+ return t.tsUnionType(
+ values.map((v) => t.tsLiteralType(t.stringLiteral(v)))
+ );
+}
+
+/**
+ * Add a section comment to the first statement in an array
+ */
+function addSectionComment(
+ statements: t.Statement[],
+ sectionName: string
+): void {
+ if (statements.length > 0) {
+ addLineComment(statements[0], `============ ${sectionName} ============`);
+ }
+}
+
+// ============================================================================
+// Interface Property Type
+// ============================================================================
+
+interface InterfaceProperty {
+ name: string;
+ type: string;
+ optional: boolean;
+}
+
// ============================================================================
// Scalar Filter Types Generator (AST-based)
// ============================================================================
@@ -280,16 +404,19 @@ function buildScalarFilterProperties(
}
/**
- * Add scalar filter types to source file using ts-morph
+ * Generate scalar filter type statements
*/
-function addScalarFilterTypes(sourceFile: SourceFile): void {
- addSectionComment(sourceFile, 'Scalar Filter Types');
+function generateScalarFilterTypes(): t.Statement[] {
+ const statements: t.Statement[] = [];
for (const config of SCALAR_FILTER_CONFIGS) {
- sourceFile.addInterface(
- createInterface(config.name, buildScalarFilterProperties(config))
+ statements.push(
+ createExportedInterface(config.name, buildScalarFilterProperties(config))
);
}
+
+ addSectionComment(statements, 'Scalar Filter Types');
+ return statements;
}
// ============================================================================
@@ -331,24 +458,33 @@ function collectEnumTypesFromTables(
}
/**
- * Add enum types to source file
+ * Generate enum type statements
*/
-function addEnumTypes(
- sourceFile: SourceFile,
+function generateEnumTypes(
typeRegistry: TypeRegistry,
enumTypeNames: Set
-): void {
- if (enumTypeNames.size === 0) return;
+): t.Statement[] {
+ if (enumTypeNames.size === 0) return [];
- addSectionComment(sourceFile, 'Enum Types');
+ const statements: t.Statement[] = [];
for (const typeName of Array.from(enumTypeNames).sort()) {
const typeInfo = typeRegistry.get(typeName);
if (!typeInfo || typeInfo.kind !== 'ENUM' || !typeInfo.enumValues) continue;
- const values = typeInfo.enumValues.map((v) => `'${v}'`).join(' | ');
- sourceFile.addTypeAlias(createTypeAlias(typeName, values));
+ const unionType = createStringLiteralUnion(typeInfo.enumValues);
+ const typeAlias = t.tsTypeAliasDeclaration(
+ t.identifier(typeName),
+ null,
+ unionType
+ );
+ statements.push(t.exportNamedDeclaration(typeAlias));
+ }
+
+ if (statements.length > 0) {
+ addSectionComment(statements, 'Enum Types');
}
+ return statements;
}
// ============================================================================
@@ -380,23 +516,22 @@ function buildEntityProperties(table: CleanTable): InterfaceProperty[] {
}
/**
- * Add entity type interface for a table
+ * Generate entity type statements
*/
-function addEntityType(sourceFile: SourceFile, table: CleanTable): void {
- const { typeName } = getTableNames(table);
- sourceFile.addInterface(
- createInterface(typeName, buildEntityProperties(table))
- );
-}
+function generateEntityTypes(tables: CleanTable[]): t.Statement[] {
+ const statements: t.Statement[] = [];
-/**
- * Add all entity types
- */
-function addEntityTypes(sourceFile: SourceFile, tables: CleanTable[]): void {
- addSectionComment(sourceFile, 'Entity Types');
for (const table of tables) {
- addEntityType(sourceFile, table);
+ const { typeName } = getTableNames(table);
+ statements.push(
+ createExportedInterface(typeName, buildEntityProperties(table))
+ );
+ }
+
+ if (statements.length > 0) {
+ addSectionComment(statements, 'Entity Types');
}
+ return statements;
}
// ============================================================================
@@ -404,27 +539,40 @@ function addEntityTypes(sourceFile: SourceFile, tables: CleanTable[]): void {
// ============================================================================
/**
- * Add relation helper types (ConnectionResult, PageInfo)
+ * Generate relation helper type statements (ConnectionResult, PageInfo)
*/
-function addRelationHelperTypes(sourceFile: SourceFile): void {
- addSectionComment(sourceFile, 'Relation Helper Types');
-
- sourceFile.addInterface(
- createInterface('ConnectionResult', [
- { name: 'nodes', type: 'T[]', optional: false },
- { name: 'totalCount', type: 'number', optional: false },
- { name: 'pageInfo', type: 'PageInfo', optional: false },
- ])
+function generateRelationHelperTypes(): t.Statement[] {
+ const statements: t.Statement[] = [];
+
+ // ConnectionResult interface with type parameter
+ const connectionResultProps: t.TSPropertySignature[] = [
+ createPropertySignature('nodes', 'T[]', false),
+ createPropertySignature('totalCount', 'number', false),
+ createPropertySignature('pageInfo', 'PageInfo', false),
+ ];
+ const connectionResultBody = t.tsInterfaceBody(connectionResultProps);
+ const connectionResultDecl = t.tsInterfaceDeclaration(
+ t.identifier('ConnectionResult'),
+ t.tsTypeParameterDeclaration([
+ t.tsTypeParameter(null, null, 'T'),
+ ]),
+ null,
+ connectionResultBody
);
+ statements.push(t.exportNamedDeclaration(connectionResultDecl));
- sourceFile.addInterface(
- createInterface('PageInfo', [
+ // PageInfo interface
+ statements.push(
+ createExportedInterface('PageInfo', [
{ name: 'hasNextPage', type: 'boolean', optional: false },
{ name: 'hasPreviousPage', type: 'boolean', optional: false },
{ name: 'startCursor', type: 'string | null', optional: true },
{ name: 'endCursor', type: 'string | null', optional: true },
])
);
+
+ addSectionComment(statements, 'Relation Helper Types');
+ return statements;
}
// ============================================================================
@@ -528,44 +676,50 @@ function buildEntityRelationProperties(
}
/**
- * Add entity relation types
+ * Generate entity relation type statements
*/
-function addEntityRelationTypes(
- sourceFile: SourceFile,
+function generateEntityRelationTypes(
tables: CleanTable[],
tableByName: Map
-): void {
- addSectionComment(sourceFile, 'Entity Relation Types');
+): t.Statement[] {
+ const statements: t.Statement[] = [];
for (const table of tables) {
const { typeName } = getTableNames(table);
- sourceFile.addInterface(
- createInterface(
+ statements.push(
+ createExportedInterface(
`${typeName}Relations`,
buildEntityRelationProperties(table, tableByName)
)
);
}
+
+ if (statements.length > 0) {
+ addSectionComment(statements, 'Entity Relation Types');
+ }
+ return statements;
}
/**
- * Add entity types with relations (intersection types)
+ * Generate entity types with relations (intersection types)
*/
-function addEntityWithRelations(
- sourceFile: SourceFile,
- tables: CleanTable[]
-): void {
- addSectionComment(sourceFile, 'Entity Types With Relations');
+function generateEntityWithRelations(tables: CleanTable[]): t.Statement[] {
+ const statements: t.Statement[] = [];
for (const table of tables) {
const { typeName } = getTableNames(table);
- sourceFile.addTypeAlias(
- createTypeAlias(
+ statements.push(
+ createExportedTypeAlias(
`${typeName}WithRelations`,
`${typeName} & ${typeName}Relations`
)
);
}
+
+ if (statements.length > 0) {
+ addSectionComment(statements, 'Entity Types With Relations');
+ }
+ return statements;
}
// ============================================================================
@@ -573,18 +727,23 @@ function addEntityWithRelations(
// ============================================================================
/**
- * Build the type string for a Select type (as object type literal)
+ * Build the Select type as a TSTypeLiteral
*/
-function buildSelectTypeBody(
+function buildSelectTypeLiteral(
table: CleanTable,
tableByName: Map
-): string {
- const lines: string[] = ['{'];
+): t.TSTypeLiteral {
+ const members: t.TSTypeElement[] = [];
// Add scalar fields
for (const field of table.fields) {
if (!isRelationField(field.name, table)) {
- lines.push(`${field.name}?: boolean;`);
+ const prop = t.tsPropertySignature(
+ t.identifier(field.name),
+ t.tsTypeAnnotation(t.tsBooleanKeyword())
+ );
+ prop.optional = true;
+ members.push(prop);
}
}
@@ -595,9 +754,28 @@ function buildSelectTypeBody(
relation.referencesTable,
tableByName
);
- lines.push(
- `${relation.fieldName}?: boolean | { select?: ${relatedTypeName}Select };`
+ const prop = t.tsPropertySignature(
+ t.identifier(relation.fieldName),
+ t.tsTypeAnnotation(
+ t.tsUnionType([
+ t.tsBooleanKeyword(),
+ t.tsTypeLiteral([
+ (() => {
+ const selectProp = t.tsPropertySignature(
+ t.identifier('select'),
+ t.tsTypeAnnotation(
+ t.tsTypeReference(t.identifier(`${relatedTypeName}Select`))
+ )
+ );
+ selectProp.optional = true;
+ return selectProp;
+ })(),
+ ]),
+ ])
+ )
);
+ prop.optional = true;
+ members.push(prop);
}
}
@@ -616,12 +794,54 @@ function buildSelectTypeBody(
relation.referencedByTable,
tableByName
);
- lines.push(`${relation.fieldName}?: boolean | {`);
- lines.push(` select?: ${relatedTypeName}Select;`);
- lines.push(` first?: number;`);
- lines.push(` filter?: ${filterName};`);
- lines.push(` orderBy?: ${orderByName}[];`);
- lines.push(`};`);
+ const prop = t.tsPropertySignature(
+ t.identifier(relation.fieldName),
+ t.tsTypeAnnotation(
+ t.tsUnionType([
+ t.tsBooleanKeyword(),
+ t.tsTypeLiteral([
+ (() => {
+ const p = t.tsPropertySignature(
+ t.identifier('select'),
+ t.tsTypeAnnotation(
+ t.tsTypeReference(t.identifier(`${relatedTypeName}Select`))
+ )
+ );
+ p.optional = true;
+ return p;
+ })(),
+ (() => {
+ const p = t.tsPropertySignature(
+ t.identifier('first'),
+ t.tsTypeAnnotation(t.tsNumberKeyword())
+ );
+ p.optional = true;
+ return p;
+ })(),
+ (() => {
+ const p = t.tsPropertySignature(
+ t.identifier('filter'),
+ t.tsTypeAnnotation(t.tsTypeReference(t.identifier(filterName)))
+ );
+ p.optional = true;
+ return p;
+ })(),
+ (() => {
+ const p = t.tsPropertySignature(
+ t.identifier('orderBy'),
+ t.tsTypeAnnotation(
+ t.tsArrayType(t.tsTypeReference(t.identifier(orderByName)))
+ )
+ );
+ p.optional = true;
+ return p;
+ })(),
+ ]),
+ ])
+ )
+ );
+ prop.optional = true;
+ members.push(prop);
}
}
@@ -637,12 +857,54 @@ function buildSelectTypeBody(
relation.rightTable,
tableByName
);
- lines.push(`${relation.fieldName}?: boolean | {`);
- lines.push(` select?: ${relatedTypeName}Select;`);
- lines.push(` first?: number;`);
- lines.push(` filter?: ${filterName};`);
- lines.push(` orderBy?: ${orderByName}[];`);
- lines.push(`};`);
+ const prop = t.tsPropertySignature(
+ t.identifier(relation.fieldName),
+ t.tsTypeAnnotation(
+ t.tsUnionType([
+ t.tsBooleanKeyword(),
+ t.tsTypeLiteral([
+ (() => {
+ const p = t.tsPropertySignature(
+ t.identifier('select'),
+ t.tsTypeAnnotation(
+ t.tsTypeReference(t.identifier(`${relatedTypeName}Select`))
+ )
+ );
+ p.optional = true;
+ return p;
+ })(),
+ (() => {
+ const p = t.tsPropertySignature(
+ t.identifier('first'),
+ t.tsTypeAnnotation(t.tsNumberKeyword())
+ );
+ p.optional = true;
+ return p;
+ })(),
+ (() => {
+ const p = t.tsPropertySignature(
+ t.identifier('filter'),
+ t.tsTypeAnnotation(t.tsTypeReference(t.identifier(filterName)))
+ );
+ p.optional = true;
+ return p;
+ })(),
+ (() => {
+ const p = t.tsPropertySignature(
+ t.identifier('orderBy'),
+ t.tsTypeAnnotation(
+ t.tsArrayType(t.tsTypeReference(t.identifier(orderByName)))
+ )
+ );
+ p.optional = true;
+ return p;
+ })(),
+ ]),
+ ])
+ )
+ );
+ prop.optional = true;
+ members.push(prop);
}
}
@@ -653,35 +915,57 @@ function buildSelectTypeBody(
relation.referencedByTable,
tableByName
);
- lines.push(
- `${relation.fieldName}?: boolean | { select?: ${relatedTypeName}Select };`
+ const prop = t.tsPropertySignature(
+ t.identifier(relation.fieldName),
+ t.tsTypeAnnotation(
+ t.tsUnionType([
+ t.tsBooleanKeyword(),
+ t.tsTypeLiteral([
+ (() => {
+ const selectProp = t.tsPropertySignature(
+ t.identifier('select'),
+ t.tsTypeAnnotation(
+ t.tsTypeReference(t.identifier(`${relatedTypeName}Select`))
+ )
+ );
+ selectProp.optional = true;
+ return selectProp;
+ })(),
+ ]),
+ ])
+ )
);
+ prop.optional = true;
+ members.push(prop);
}
}
- lines.push('}');
- return lines.join('\n');
+ return t.tsTypeLiteral(members);
}
/**
- * Add entity Select types
+ * Generate entity Select type statements
*/
-function addEntitySelectTypes(
- sourceFile: SourceFile,
+function generateEntitySelectTypes(
tables: CleanTable[],
tableByName: Map
-): void {
- addSectionComment(sourceFile, 'Entity Select Types');
+): t.Statement[] {
+ const statements: t.Statement[] = [];
for (const table of tables) {
const { typeName } = getTableNames(table);
- sourceFile.addTypeAlias(
- createTypeAlias(
- `${typeName}Select`,
- buildSelectTypeBody(table, tableByName)
- )
+ const typeAlias = t.tsTypeAliasDeclaration(
+ t.identifier(`${typeName}Select`),
+ null,
+ buildSelectTypeLiteral(table, tableByName)
);
+ statements.push(t.exportNamedDeclaration(typeAlias));
+ }
+
+ if (statements.length > 0) {
+ addSectionComment(statements, 'Entity Select Types');
}
+ return statements;
}
// ============================================================================
@@ -720,20 +1004,22 @@ function buildTableFilterProperties(table: CleanTable): InterfaceProperty[] {
}
/**
- * Add table filter types
+ * Generate table filter type statements
*/
-function addTableFilterTypes(
- sourceFile: SourceFile,
- tables: CleanTable[]
-): void {
- addSectionComment(sourceFile, 'Table Filter Types');
+function generateTableFilterTypes(tables: CleanTable[]): t.Statement[] {
+ const statements: t.Statement[] = [];
for (const table of tables) {
const filterName = getFilterTypeName(table);
- sourceFile.addInterface(
- createInterface(filterName, buildTableFilterProperties(table))
+ statements.push(
+ createExportedInterface(filterName, buildTableFilterProperties(table))
);
}
+
+ if (statements.length > 0) {
+ addSectionComment(statements, 'Table Filter Types');
+ }
+ return statements;
}
// ============================================================================
@@ -765,20 +1051,25 @@ function buildTableConditionProperties(table: CleanTable): InterfaceProperty[] {
}
/**
- * Add table condition types
+ * Generate table condition type statements
*/
-function addTableConditionTypes(
- sourceFile: SourceFile,
- tables: CleanTable[]
-): void {
- addSectionComment(sourceFile, 'Table Condition Types');
+function generateTableConditionTypes(tables: CleanTable[]): t.Statement[] {
+ const statements: t.Statement[] = [];
for (const table of tables) {
const conditionName = getConditionTypeName(table);
- sourceFile.addInterface(
- createInterface(conditionName, buildTableConditionProperties(table))
+ statements.push(
+ createExportedInterface(
+ conditionName,
+ buildTableConditionProperties(table)
+ )
);
}
+
+ if (statements.length > 0) {
+ addSectionComment(statements, 'Table Condition Types');
+ }
+ return statements;
}
// ============================================================================
@@ -786,9 +1077,9 @@ function addTableConditionTypes(
// ============================================================================
/**
- * Build OrderBy union type string
+ * Build OrderBy union type values
*/
-function buildOrderByUnion(table: CleanTable): string {
+function buildOrderByValues(table: CleanTable): string[] {
const values: string[] = ['PRIMARY_KEY_ASC', 'PRIMARY_KEY_DESC', 'NATURAL'];
for (const field of table.fields) {
@@ -798,23 +1089,31 @@ function buildOrderByUnion(table: CleanTable): string {
values.push(`${upperSnake}_DESC`);
}
- return values.map((v) => `'${v}'`).join(' | ');
+ return values;
}
/**
- * Add OrderBy types
- * Uses inflection from table metadata for correct pluralization
+ * Generate OrderBy type statements
*/
-function addOrderByTypes(sourceFile: SourceFile, tables: CleanTable[]): void {
- addSectionComment(sourceFile, 'OrderBy Types');
+function generateOrderByTypes(tables: CleanTable[]): t.Statement[] {
+ const statements: t.Statement[] = [];
for (const table of tables) {
- // Use getOrderByTypeName which respects table.inflection.orderByType
const enumName = getOrderByTypeName(table);
- sourceFile.addTypeAlias(
- createTypeAlias(enumName, buildOrderByUnion(table))
+ const values = buildOrderByValues(table);
+ const unionType = createStringLiteralUnion(values);
+ const typeAlias = t.tsTypeAliasDeclaration(
+ t.identifier(enumName),
+ null,
+ unionType
);
+ statements.push(t.exportNamedDeclaration(typeAlias));
}
+
+ if (statements.length > 0) {
+ addSectionComment(statements, 'OrderBy Types');
+ }
+ return statements;
}
// ============================================================================
@@ -850,31 +1149,48 @@ function buildCreateDataFields(
}
/**
- * Generate Create input interface as formatted string.
- *
- * ts-morph doesn't handle nested object types in interface properties well,
- * so we build this manually with pre-doubled indentation (4→2, 8→4) since
- * getMinimalFormattedOutput halves all indentation.
+ * Build Create input interface as AST
*/
-function buildCreateInputInterface(table: CleanTable): string {
+function buildCreateInputInterface(table: CleanTable): t.ExportNamedDeclaration {
const { typeName, singularName } = getTableNames(table);
const fields = buildCreateDataFields(table);
- const lines = [
- `export interface Create${typeName}Input {`,
- ` clientMutationId?: string;`,
- ` ${singularName}: {`,
- ];
+ // Build the nested object type for the entity data
+ const nestedProps: t.TSPropertySignature[] = fields.map((field) => {
+ const prop = t.tsPropertySignature(
+ t.identifier(field.name),
+ t.tsTypeAnnotation(parseTypeString(field.type))
+ );
+ prop.optional = field.optional;
+ return prop;
+ });
- for (const field of fields) {
- const opt = field.optional ? '?' : '';
- lines.push(` ${field.name}${opt}: ${field.type};`);
- }
+ const nestedObjectType = t.tsTypeLiteral(nestedProps);
- lines.push(' };');
- lines.push('}');
+ // Build the main interface properties
+ const mainProps: t.TSPropertySignature[] = [
+ (() => {
+ const prop = t.tsPropertySignature(
+ t.identifier('clientMutationId'),
+ t.tsTypeAnnotation(t.tsStringKeyword())
+ );
+ prop.optional = true;
+ return prop;
+ })(),
+ t.tsPropertySignature(
+ t.identifier(singularName),
+ t.tsTypeAnnotation(nestedObjectType)
+ ),
+ ];
- return lines.join('\n');
+ const body = t.tsInterfaceBody(mainProps);
+ const interfaceDecl = t.tsInterfaceDeclaration(
+ t.identifier(`Create${typeName}Input`),
+ null,
+ null,
+ body
+ );
+ return t.exportNamedDeclaration(interfaceDecl);
}
/**
@@ -907,23 +1223,24 @@ function buildPatchProperties(table: CleanTable): InterfaceProperty[] {
}
/**
- * Add CRUD input types for a table
+ * Generate CRUD input type statements for a table
*/
-function addCrudInputTypes(sourceFile: SourceFile, table: CleanTable): void {
+function generateCrudInputTypes(table: CleanTable): t.Statement[] {
+ const statements: t.Statement[] = [];
const { typeName } = getTableNames(table);
const patchName = `${typeName}Patch`;
- // Create input - build as raw statement due to nested object type formatting
- sourceFile.addStatements(buildCreateInputInterface(table));
+ // Create input
+ statements.push(buildCreateInputInterface(table));
// Patch interface
- sourceFile.addInterface(
- createInterface(patchName, buildPatchProperties(table))
+ statements.push(
+ createExportedInterface(patchName, buildPatchProperties(table))
);
// Update input
- sourceFile.addInterface(
- createInterface(`Update${typeName}Input`, [
+ statements.push(
+ createExportedInterface(`Update${typeName}Input`, [
{ name: 'clientMutationId', type: 'string', optional: true },
{ name: 'id', type: 'string', optional: false },
{ name: 'patch', type: patchName, optional: false },
@@ -931,26 +1248,30 @@ function addCrudInputTypes(sourceFile: SourceFile, table: CleanTable): void {
);
// Delete input
- sourceFile.addInterface(
- createInterface(`Delete${typeName}Input`, [
+ statements.push(
+ createExportedInterface(`Delete${typeName}Input`, [
{ name: 'clientMutationId', type: 'string', optional: true },
{ name: 'id', type: 'string', optional: false },
])
);
+
+ return statements;
}
/**
- * Add all CRUD input types
+ * Generate all CRUD input type statements
*/
-function addAllCrudInputTypes(
- sourceFile: SourceFile,
- tables: CleanTable[]
-): void {
- addSectionComment(sourceFile, 'CRUD Input Types');
+function generateAllCrudInputTypes(tables: CleanTable[]): t.Statement[] {
+ const statements: t.Statement[] = [];
for (const table of tables) {
- addCrudInputTypes(sourceFile, table);
+ statements.push(...generateCrudInputTypes(table));
}
+
+ if (statements.length > 0) {
+ addSectionComment(statements, 'CRUD Input Types');
+ }
+ return statements;
}
// ============================================================================
@@ -986,7 +1307,7 @@ export function collectInputTypeNames(
/**
* Build a set of exact table CRUD input type names to skip
- * These are generated by addAllCrudInputTypes, so we don't need to regenerate them
+ * These are generated by generateAllCrudInputTypes, so we don't need to regenerate them
*/
function buildTableCrudTypeNames(tables: CleanTable[]): Set {
const crudTypes = new Set();
@@ -1002,16 +1323,14 @@ function buildTableCrudTypeNames(tables: CleanTable[]): Set {
}
/**
- * Add custom input types from TypeRegistry
+ * Generate custom input type statements from TypeRegistry
*/
-function addCustomInputTypes(
- sourceFile: SourceFile,
+function generateCustomInputTypes(
typeRegistry: TypeRegistry,
usedInputTypes: Set,
tableCrudTypes?: Set
-): void {
- addSectionComment(sourceFile, 'Custom Input Types (from schema)');
-
+): t.Statement[] {
+ const statements: t.Statement[] = [];
const generatedTypes = new Set();
const typesToGenerate = new Set(Array.from(usedInputTypes));
@@ -1036,9 +1355,12 @@ function addCustomInputTypes(
const typeInfo = typeRegistry.get(typeName);
if (!typeInfo) {
- sourceFile.addStatements(`// Type '${typeName}' not found in schema`);
- sourceFile.addTypeAlias(
- createTypeAlias(typeName, 'Record')
+ // Add comment for missing type
+ const commentStmt = t.emptyStatement();
+ addLineComment(commentStmt, ` Type '${typeName}' not found in schema`);
+ statements.push(commentStmt);
+ statements.push(
+ createExportedTypeAlias(typeName, 'Record')
);
continue;
}
@@ -1062,15 +1384,28 @@ function addCustomInputTypes(
}
}
- sourceFile.addInterface(createInterface(typeName, properties));
+ statements.push(createExportedInterface(typeName, properties));
} else if (typeInfo.kind === 'ENUM' && typeInfo.enumValues) {
- const values = typeInfo.enumValues.map((v) => `'${v}'`).join(' | ');
- sourceFile.addTypeAlias(createTypeAlias(typeName, values));
+ const unionType = createStringLiteralUnion(typeInfo.enumValues);
+ const typeAlias = t.tsTypeAliasDeclaration(
+ t.identifier(typeName),
+ null,
+ unionType
+ );
+ statements.push(t.exportNamedDeclaration(typeAlias));
} else {
- sourceFile.addStatements(`// Type '${typeName}' is ${typeInfo.kind}`);
- sourceFile.addTypeAlias(createTypeAlias(typeName, 'unknown'));
+ // Add comment for unsupported type kind
+ const commentStmt = t.emptyStatement();
+ addLineComment(commentStmt, ` Type '${typeName}' is ${typeInfo.kind}`);
+ statements.push(commentStmt);
+ statements.push(createExportedTypeAlias(typeName, 'unknown'));
}
}
+
+ if (statements.length > 0) {
+ addSectionComment(statements, 'Custom Input Types (from schema)');
+ }
+ return statements;
}
// ============================================================================
@@ -1099,16 +1434,14 @@ export function collectPayloadTypeNames(
}
/**
- * Add payload/return types
+ * Generate payload/return type statements
*/
-function addPayloadTypes(
- sourceFile: SourceFile,
+function generatePayloadTypes(
typeRegistry: TypeRegistry,
usedPayloadTypes: Set,
alreadyGeneratedTypes: Set
-): void {
- addSectionComment(sourceFile, 'Payload/Return Types (for custom operations)');
-
+): t.Statement[] {
+ const statements: t.Statement[] = [];
const generatedTypes = new Set(alreadyGeneratedTypes);
const typesToGenerate = new Set(Array.from(usedPayloadTypes));
@@ -1173,29 +1506,56 @@ function addPayloadTypes(
}
}
- sourceFile.addInterface(createInterface(typeName, interfaceProps));
+ statements.push(createExportedInterface(typeName, interfaceProps));
- // Build Select type (no indentation - ts-morph adds it)
- const selectLines: string[] = ['{'];
+ // Build Select type
+ const selectMembers: t.TSTypeElement[] = [];
for (const field of typeInfo.fields) {
const baseType = getTypeBaseName(field.type);
if (baseType === 'Query' || baseType === 'Mutation') continue;
const nestedType = baseType ? typeRegistry.get(baseType) : null;
+ let propType: t.TSType;
if (nestedType?.kind === 'OBJECT') {
- selectLines.push(
- `${field.name}?: boolean | { select?: ${baseType}Select };`
- );
+ propType = t.tsUnionType([
+ t.tsBooleanKeyword(),
+ t.tsTypeLiteral([
+ (() => {
+ const p = t.tsPropertySignature(
+ t.identifier('select'),
+ t.tsTypeAnnotation(
+ t.tsTypeReference(t.identifier(`${baseType}Select`))
+ )
+ );
+ p.optional = true;
+ return p;
+ })(),
+ ]),
+ ]);
} else {
- selectLines.push(`${field.name}?: boolean;`);
+ propType = t.tsBooleanKeyword();
}
+
+ const prop = t.tsPropertySignature(
+ t.identifier(field.name),
+ t.tsTypeAnnotation(propType)
+ );
+ prop.optional = true;
+ selectMembers.push(prop);
}
- selectLines.push('}');
- sourceFile.addTypeAlias(
- createTypeAlias(`${typeName}Select`, selectLines.join('\n'))
+ const selectTypeAlias = t.tsTypeAliasDeclaration(
+ t.identifier(`${typeName}Select`),
+ null,
+ t.tsTypeLiteral(selectMembers)
);
+ statements.push(t.exportNamedDeclaration(selectTypeAlias));
}
+
+ if (statements.length > 0) {
+ addSectionComment(statements, 'Payload/Return Types (for custom operations)');
+ }
+ return statements;
}
// ============================================================================
@@ -1203,7 +1563,7 @@ function addPayloadTypes(
// ============================================================================
/**
- * Generate comprehensive input-types.ts file using ts-morph AST
+ * Generate comprehensive input-types.ts file using Babel AST
*/
export function generateInputTypesFile(
typeRegistry: TypeRegistry,
@@ -1211,50 +1571,45 @@ export function generateInputTypesFile(
tables?: CleanTable[],
usedPayloadTypes?: Set
): GeneratedInputTypesFile {
- const project = createProject();
- const sourceFile = createSourceFile(project, 'input-types.ts');
-
- // Add file header
- sourceFile.insertText(
- 0,
- createFileHeader('GraphQL types for ORM client') + '\n'
- );
+ const statements: t.Statement[] = [];
// 1. Scalar filter types
- addScalarFilterTypes(sourceFile);
+ statements.push(...generateScalarFilterTypes());
// 2. Enum types used by table fields
if (tables && tables.length > 0) {
const enumTypes = collectEnumTypesFromTables(tables, typeRegistry);
- addEnumTypes(sourceFile, typeRegistry, enumTypes);
+ statements.push(...generateEnumTypes(typeRegistry, enumTypes));
}
// 3. Entity and relation types (if tables provided)
if (tables && tables.length > 0) {
const tableByName = new Map(tables.map((table) => [table.name, table]));
- addEntityTypes(sourceFile, tables);
- addRelationHelperTypes(sourceFile);
- addEntityRelationTypes(sourceFile, tables, tableByName);
- addEntityWithRelations(sourceFile, tables);
- addEntitySelectTypes(sourceFile, tables, tableByName);
+ statements.push(...generateEntityTypes(tables));
+ statements.push(...generateRelationHelperTypes());
+ statements.push(...generateEntityRelationTypes(tables, tableByName));
+ statements.push(...generateEntityWithRelations(tables));
+ statements.push(...generateEntitySelectTypes(tables, tableByName));
// 4. Table filter types
- addTableFilterTypes(sourceFile, tables);
+ statements.push(...generateTableFilterTypes(tables));
// 4b. Table condition types (simple equality filter)
- addTableConditionTypes(sourceFile, tables);
+ statements.push(...generateTableConditionTypes(tables));
// 5. OrderBy types
- addOrderByTypes(sourceFile, tables);
+ statements.push(...generateOrderByTypes(tables));
// 6. CRUD input types
- addAllCrudInputTypes(sourceFile, tables);
+ statements.push(...generateAllCrudInputTypes(tables));
}
// 7. Custom input types from TypeRegistry
const tableCrudTypes = tables ? buildTableCrudTypeNames(tables) : undefined;
- addCustomInputTypes(sourceFile, typeRegistry, usedInputTypes, tableCrudTypes);
+ statements.push(
+ ...generateCustomInputTypes(typeRegistry, usedInputTypes, tableCrudTypes)
+ );
// 8. Payload/return types for custom operations
if (usedPayloadTypes && usedPayloadTypes.size > 0) {
@@ -1265,16 +1620,21 @@ export function generateInputTypesFile(
alreadyGeneratedTypes.add(typeName);
}
}
- addPayloadTypes(
- sourceFile,
- typeRegistry,
- usedPayloadTypes,
- alreadyGeneratedTypes
+ statements.push(
+ ...generatePayloadTypes(
+ typeRegistry,
+ usedPayloadTypes,
+ alreadyGeneratedTypes
+ )
);
}
+ // Generate code with file header
+ const header = getGeneratedFileHeader('GraphQL types for ORM client');
+ const code = generateCode(statements);
+
return {
fileName: 'input-types.ts',
- content: getMinimalFormattedOutput(sourceFile),
+ content: header + '\n' + code,
};
}
diff --git a/graphql/codegen/src/cli/codegen/orm/model-generator.ts b/graphql/codegen/src/cli/codegen/orm/model-generator.ts
index b61f37d1e..f5661f6f4 100644
--- a/graphql/codegen/src/cli/codegen/orm/model-generator.ts
+++ b/graphql/codegen/src/cli/codegen/orm/model-generator.ts
@@ -1,33 +1,17 @@
/**
- * Model class generator for ORM client
+ * Model class generator for ORM client (Babel AST-based)
*
* Generates per-table model classes with findMany, findFirst, create, update, delete methods.
- *
- * Example output:
- * ```typescript
- * export class UserModel {
- * constructor(private client: OrmClient) {}
- *
- * findMany(args?: FindManyArgs) {
- * return new QueryBuilder<...>({ ... });
- * }
- * // ...
- * }
- * ```
*/
import type { CleanTable } from '../../../types/schema';
-import {
- createProject,
- createSourceFile,
- getFormattedOutput,
- createFileHeader,
- createImport,
-} from '../ts-ast';
+import * as t from '@babel/types';
+import { generateCode } from '../babel-ast';
import {
getTableNames,
getOrderByTypeName,
getFilterTypeName,
lcFirst,
+ getGeneratedFileHeader,
} from '../utils';
export interface GeneratedModelFile {
@@ -37,23 +21,85 @@ export interface GeneratedModelFile {
tableName: string;
}
-/**
- * Generate a model class file for a table
- */
+function createImportDeclaration(
+ moduleSpecifier: string,
+ namedImports: string[],
+ typeOnly: boolean = false
+): t.ImportDeclaration {
+ const specifiers = namedImports.map((name) =>
+ t.importSpecifier(t.identifier(name), t.identifier(name))
+ );
+ const decl = t.importDeclaration(specifiers, t.stringLiteral(moduleSpecifier));
+ decl.importKind = typeOnly ? 'type' : 'value';
+ return decl;
+}
+
+function buildMethodBody(
+ builderFn: string,
+ args: t.Expression[],
+ operation: string,
+ typeName: string,
+ fieldName: string
+): t.Statement[] {
+ const destructureDecl = t.variableDeclaration('const', [
+ t.variableDeclarator(
+ t.objectPattern([
+ t.objectProperty(t.identifier('document'), t.identifier('document'), false, true),
+ t.objectProperty(t.identifier('variables'), t.identifier('variables'), false, true),
+ ]),
+ t.callExpression(t.identifier(builderFn), args)
+ ),
+ ]);
+
+ const returnStmt = t.returnStatement(
+ t.newExpression(t.identifier('QueryBuilder'), [
+ t.objectExpression([
+ t.objectProperty(t.identifier('client'), t.memberExpression(t.thisExpression(), t.identifier('client'))),
+ t.objectProperty(t.identifier('operation'), t.stringLiteral(operation)),
+ t.objectProperty(t.identifier('operationName'), t.stringLiteral(typeName)),
+ t.objectProperty(t.identifier('fieldName'), t.stringLiteral(fieldName)),
+ t.objectProperty(t.identifier('document'), t.identifier('document'), false, true),
+ t.objectProperty(t.identifier('variables'), t.identifier('variables'), false, true),
+ ]),
+ ])
+ );
+
+ return [destructureDecl, returnStmt];
+}
+
+function createClassMethod(
+ name: string,
+ typeParameters: t.TSTypeParameterDeclaration | null,
+ params: (t.Identifier | t.TSParameterProperty)[],
+ returnType: t.TSTypeAnnotation | null,
+ body: t.Statement[]
+): t.ClassMethod {
+ const method = t.classMethod('method', t.identifier(name), params, t.blockStatement(body));
+ method.typeParameters = typeParameters;
+ method.returnType = returnType;
+ return method;
+}
+
+function createConstTypeParam(constraintTypeName: string): t.TSTypeParameterDeclaration {
+ const param = t.tsTypeParameter(
+ t.tsTypeReference(t.identifier(constraintTypeName)),
+ null,
+ 'S'
+ );
+ (param as any).const = true;
+ return t.tsTypeParameterDeclaration([param]);
+}
+
export function generateModelFile(
table: CleanTable,
_useSharedTypes: boolean
): GeneratedModelFile {
- const project = createProject();
const { typeName, singularName, pluralName } = getTableNames(table);
const modelName = `${typeName}Model`;
- // Avoid "index.ts" which clashes with barrel file
const baseFileName = lcFirst(typeName);
- const fileName =
- baseFileName === 'index' ? `${baseFileName}Model.ts` : `${baseFileName}.ts`;
+ const fileName = baseFileName === 'index' ? `${baseFileName}Model.ts` : `${baseFileName}.ts`;
const entityLower = singularName;
- // Type names for this entity - use inflection from table metadata
const selectTypeName = `${typeName}Select`;
const relationTypeName = `${typeName}WithRelations`;
const whereTypeName = getFilterTypeName(table);
@@ -62,270 +108,235 @@ export function generateModelFile(
const updateInputTypeName = `Update${typeName}Input`;
const deleteInputTypeName = `Delete${typeName}Input`;
const patchTypeName = `${typeName}Patch`;
- const createDataType = `${createInputTypeName}['${singularName}']`;
- // Query names from PostGraphile
const pluralQueryName = table.query?.all ?? pluralName;
const createMutationName = table.query?.create ?? `create${typeName}`;
const updateMutationName = table.query?.update;
const deleteMutationName = table.query?.delete;
- const sourceFile = createSourceFile(project, fileName);
+ const statements: t.Statement[] = [];
- // Add file header
- sourceFile.insertText(
- 0,
- createFileHeader(`${typeName} model for ORM client`) + '\n\n'
- );
+ statements.push(createImportDeclaration('../client', ['OrmClient']));
+ statements.push(createImportDeclaration('../query-builder', [
+ 'QueryBuilder', 'buildFindManyDocument', 'buildFindFirstDocument',
+ 'buildCreateDocument', 'buildUpdateDocument', 'buildDeleteDocument',
+ ]));
+ statements.push(createImportDeclaration('../select-types', [
+ 'ConnectionResult', 'FindManyArgs', 'FindFirstArgs', 'CreateArgs',
+ 'UpdateArgs', 'DeleteArgs', 'InferSelectResult',
+ ], true));
+ statements.push(createImportDeclaration('../input-types', [
+ typeName, relationTypeName, selectTypeName, whereTypeName, orderByTypeName,
+ createInputTypeName, updateInputTypeName, patchTypeName,
+ ], true));
- // Add imports - import types from respective modules
- sourceFile.addImportDeclarations([
- createImport({
- moduleSpecifier: '../client',
- namedImports: ['OrmClient'],
- }),
- createImport({
- moduleSpecifier: '../query-builder',
- namedImports: [
- 'QueryBuilder',
- 'buildFindManyDocument',
- 'buildFindFirstDocument',
- 'buildCreateDocument',
- 'buildUpdateDocument',
- 'buildDeleteDocument',
- ],
- }),
- createImport({
- moduleSpecifier: '../select-types',
- typeOnlyNamedImports: [
- 'ConnectionResult',
- 'FindManyArgs',
- 'FindFirstArgs',
- 'CreateArgs',
- 'UpdateArgs',
- 'DeleteArgs',
- 'InferSelectResult',
- ],
- }),
- ]);
+ const classBody: t.ClassBody['body'] = [];
- // Build complete set of input-types imports
- // Select types are now centralized in input-types.ts with relations included
- const inputTypeImports = new Set([
- typeName,
- relationTypeName,
- selectTypeName,
- whereTypeName,
- orderByTypeName,
- createInputTypeName,
- updateInputTypeName,
- patchTypeName,
- ]);
+ // Constructor
+ const constructorParam = t.identifier('client');
+ constructorParam.typeAnnotation = t.tsTypeAnnotation(t.tsTypeReference(t.identifier('OrmClient')));
+ const paramProp = t.tsParameterProperty(constructorParam);
+ paramProp.accessibility = 'private';
+ classBody.push(t.classMethod('constructor', t.identifier('constructor'), [paramProp], t.blockStatement([])));
- // Add single combined import from input-types
- sourceFile.addImportDeclaration(
- createImport({
- moduleSpecifier: '../input-types',
- typeOnlyNamedImports: Array.from(inputTypeImports),
- })
+ // findMany method
+ const findManyParam = t.identifier('args');
+ findManyParam.optional = true;
+ findManyParam.typeAnnotation = t.tsTypeAnnotation(
+ t.tsTypeReference(t.identifier('FindManyArgs'), t.tsTypeParameterInstantiation([
+ t.tsTypeReference(t.identifier('S')),
+ t.tsTypeReference(t.identifier(whereTypeName)),
+ t.tsTypeReference(t.identifier(orderByTypeName)),
+ ]))
+ );
+ const findManyReturnType = t.tsTypeAnnotation(
+ t.tsTypeReference(t.identifier('QueryBuilder'), t.tsTypeParameterInstantiation([
+ t.tsTypeLiteral([
+ t.tsPropertySignature(t.identifier(pluralQueryName), t.tsTypeAnnotation(
+ t.tsTypeReference(t.identifier('ConnectionResult'), t.tsTypeParameterInstantiation([
+ t.tsTypeReference(t.identifier('InferSelectResult'), t.tsTypeParameterInstantiation([
+ t.tsTypeReference(t.identifier(relationTypeName)),
+ t.tsTypeReference(t.identifier('S')),
+ ])),
+ ]))
+ )),
+ ]),
+ ]))
);
+ const findManyArgs = [
+ t.stringLiteral(typeName),
+ t.stringLiteral(pluralQueryName),
+ t.optionalMemberExpression(t.identifier('args'), t.identifier('select'), false, true),
+ t.objectExpression([
+ t.objectProperty(t.identifier('where'), t.optionalMemberExpression(t.identifier('args'), t.identifier('where'), false, true)),
+ t.objectProperty(t.identifier('orderBy'), t.tsAsExpression(
+ t.optionalMemberExpression(t.identifier('args'), t.identifier('orderBy'), false, true),
+ t.tsUnionType([t.tsArrayType(t.tsStringKeyword()), t.tsUndefinedKeyword()])
+ )),
+ t.objectProperty(t.identifier('first'), t.optionalMemberExpression(t.identifier('args'), t.identifier('first'), false, true)),
+ t.objectProperty(t.identifier('last'), t.optionalMemberExpression(t.identifier('args'), t.identifier('last'), false, true)),
+ t.objectProperty(t.identifier('after'), t.optionalMemberExpression(t.identifier('args'), t.identifier('after'), false, true)),
+ t.objectProperty(t.identifier('before'), t.optionalMemberExpression(t.identifier('args'), t.identifier('before'), false, true)),
+ t.objectProperty(t.identifier('offset'), t.optionalMemberExpression(t.identifier('args'), t.identifier('offset'), false, true)),
+ ]),
+ t.stringLiteral(whereTypeName),
+ t.stringLiteral(orderByTypeName),
+ ];
+ classBody.push(createClassMethod('findMany', createConstTypeParam(selectTypeName), [findManyParam], findManyReturnType,
+ buildMethodBody('buildFindManyDocument', findManyArgs, 'query', typeName, pluralQueryName)));
- // Add Model class
- sourceFile.addStatements(
- '\n// ============================================================================'
+ // findFirst method
+ const findFirstParam = t.identifier('args');
+ findFirstParam.optional = true;
+ findFirstParam.typeAnnotation = t.tsTypeAnnotation(
+ t.tsTypeReference(t.identifier('FindFirstArgs'), t.tsTypeParameterInstantiation([
+ t.tsTypeReference(t.identifier('S')),
+ t.tsTypeReference(t.identifier(whereTypeName)),
+ ]))
);
- sourceFile.addStatements('// Model Class');
- sourceFile.addStatements(
- '// ============================================================================\n'
+ const findFirstReturnType = t.tsTypeAnnotation(
+ t.tsTypeReference(t.identifier('QueryBuilder'), t.tsTypeParameterInstantiation([
+ t.tsTypeLiteral([
+ t.tsPropertySignature(t.identifier(pluralQueryName), t.tsTypeAnnotation(
+ t.tsTypeLiteral([
+ t.tsPropertySignature(t.identifier('nodes'), t.tsTypeAnnotation(
+ t.tsArrayType(t.tsTypeReference(t.identifier('InferSelectResult'), t.tsTypeParameterInstantiation([
+ t.tsTypeReference(t.identifier(relationTypeName)),
+ t.tsTypeReference(t.identifier('S')),
+ ])))
+ )),
+ ])
+ )),
+ ]),
+ ]))
);
+ const findFirstArgs = [
+ t.stringLiteral(typeName),
+ t.stringLiteral(pluralQueryName),
+ t.optionalMemberExpression(t.identifier('args'), t.identifier('select'), false, true),
+ t.objectExpression([
+ t.objectProperty(t.identifier('where'), t.optionalMemberExpression(t.identifier('args'), t.identifier('where'), false, true)),
+ ]),
+ t.stringLiteral(whereTypeName),
+ ];
+ classBody.push(createClassMethod('findFirst', createConstTypeParam(selectTypeName), [findFirstParam], findFirstReturnType,
+ buildMethodBody('buildFindFirstDocument', findFirstArgs, 'query', typeName, pluralQueryName)));
- // Generate the model class
- const classDeclaration = sourceFile.addClass({
- name: modelName,
- isExported: true,
- });
-
- // Constructor
- classDeclaration.addConstructor({
- parameters: [
- {
- name: 'client',
- type: 'OrmClient',
- scope: 'private' as any,
- },
- ],
- });
-
- // findMany method - uses const generic for proper literal type inference
- classDeclaration.addMethod({
- name: 'findMany',
- typeParameters: [`const S extends ${selectTypeName}`],
- parameters: [
- {
- name: 'args',
- type: `FindManyArgs`,
- hasQuestionToken: true,
- },
- ],
- returnType: `QueryBuilder<{ ${pluralQueryName}: ConnectionResult> }>`,
- statements: `const { document, variables } = buildFindManyDocument(
- '${typeName}',
- '${pluralQueryName}',
- args?.select,
- {
- where: args?.where,
- orderBy: args?.orderBy as string[] | undefined,
- first: args?.first,
- last: args?.last,
- after: args?.after,
- before: args?.before,
- offset: args?.offset,
- },
- '${whereTypeName}',
- '${orderByTypeName}'
- );
- return new QueryBuilder({
- client: this.client,
- operation: 'query',
- operationName: '${typeName}',
- fieldName: '${pluralQueryName}',
- document,
- variables,
- });`,
- });
-
- // findFirst method - uses const generic for proper literal type inference
- classDeclaration.addMethod({
- name: 'findFirst',
- typeParameters: [`const S extends ${selectTypeName}`],
- parameters: [
- {
- name: 'args',
- type: `FindFirstArgs`,
- hasQuestionToken: true,
- },
- ],
- returnType: `QueryBuilder<{ ${pluralQueryName}: { nodes: InferSelectResult<${relationTypeName}, S>[] } }>`,
- statements: `const { document, variables } = buildFindFirstDocument(
- '${typeName}',
- '${pluralQueryName}',
- args?.select,
- { where: args?.where },
- '${whereTypeName}'
- );
- return new QueryBuilder({
- client: this.client,
- operation: 'query',
- operationName: '${typeName}',
- fieldName: '${pluralQueryName}',
- document,
- variables,
- });`,
- });
-
- // create method - uses const generic for proper literal type inference
- classDeclaration.addMethod({
- name: 'create',
- typeParameters: [`const S extends ${selectTypeName}`],
- parameters: [
- {
- name: 'args',
- type: `CreateArgs`,
- },
- ],
- returnType: `QueryBuilder<{ ${createMutationName}: { ${entityLower}: InferSelectResult<${relationTypeName}, S> } }>`,
- statements: `const { document, variables } = buildCreateDocument(
- '${typeName}',
- '${createMutationName}',
- '${entityLower}',
- args.select,
- args.data,
- '${createInputTypeName}'
- );
- return new QueryBuilder({
- client: this.client,
- operation: 'mutation',
- operationName: '${typeName}',
- fieldName: '${createMutationName}',
- document,
- variables,
- });`,
- });
+ // create method
+ const createParam = t.identifier('args');
+ createParam.typeAnnotation = t.tsTypeAnnotation(
+ t.tsTypeReference(t.identifier('CreateArgs'), t.tsTypeParameterInstantiation([
+ t.tsTypeReference(t.identifier('S')),
+ t.tsIndexedAccessType(t.tsTypeReference(t.identifier(createInputTypeName)), t.tsLiteralType(t.stringLiteral(singularName))),
+ ]))
+ );
+ const createReturnType = t.tsTypeAnnotation(
+ t.tsTypeReference(t.identifier('QueryBuilder'), t.tsTypeParameterInstantiation([
+ t.tsTypeLiteral([
+ t.tsPropertySignature(t.identifier(createMutationName), t.tsTypeAnnotation(
+ t.tsTypeLiteral([
+ t.tsPropertySignature(t.identifier(entityLower), t.tsTypeAnnotation(
+ t.tsTypeReference(t.identifier('InferSelectResult'), t.tsTypeParameterInstantiation([
+ t.tsTypeReference(t.identifier(relationTypeName)),
+ t.tsTypeReference(t.identifier('S')),
+ ]))
+ )),
+ ])
+ )),
+ ]),
+ ]))
+ );
+ const createArgs = [
+ t.stringLiteral(typeName),
+ t.stringLiteral(createMutationName),
+ t.stringLiteral(entityLower),
+ t.memberExpression(t.identifier('args'), t.identifier('select')),
+ t.memberExpression(t.identifier('args'), t.identifier('data')),
+ t.stringLiteral(createInputTypeName),
+ ];
+ classBody.push(createClassMethod('create', createConstTypeParam(selectTypeName), [createParam], createReturnType,
+ buildMethodBody('buildCreateDocument', createArgs, 'mutation', typeName, createMutationName)));
- // update method (if available) - uses const generic for proper literal type inference
+ // update method (if available)
if (updateMutationName) {
- classDeclaration.addMethod({
- name: 'update',
- typeParameters: [`const S extends ${selectTypeName}`],
- parameters: [
- {
- name: 'args',
- type: `UpdateArgs`,
- },
- ],
- returnType: `QueryBuilder<{ ${updateMutationName}: { ${entityLower}: InferSelectResult<${relationTypeName}, S> } }>`,
- statements: `const { document, variables } = buildUpdateDocument(
- '${typeName}',
- '${updateMutationName}',
- '${entityLower}',
- args.select,
- args.where,
- args.data,
- '${updateInputTypeName}'
+ const updateParam = t.identifier('args');
+ updateParam.typeAnnotation = t.tsTypeAnnotation(
+ t.tsTypeReference(t.identifier('UpdateArgs'), t.tsTypeParameterInstantiation([
+ t.tsTypeReference(t.identifier('S')),
+ t.tsTypeLiteral([t.tsPropertySignature(t.identifier('id'), t.tsTypeAnnotation(t.tsStringKeyword()))]),
+ t.tsTypeReference(t.identifier(patchTypeName)),
+ ]))
);
- return new QueryBuilder({
- client: this.client,
- operation: 'mutation',
- operationName: '${typeName}',
- fieldName: '${updateMutationName}',
- document,
- variables,
- });`,
- });
+ const updateReturnType = t.tsTypeAnnotation(
+ t.tsTypeReference(t.identifier('QueryBuilder'), t.tsTypeParameterInstantiation([
+ t.tsTypeLiteral([
+ t.tsPropertySignature(t.identifier(updateMutationName), t.tsTypeAnnotation(
+ t.tsTypeLiteral([
+ t.tsPropertySignature(t.identifier(entityLower), t.tsTypeAnnotation(
+ t.tsTypeReference(t.identifier('InferSelectResult'), t.tsTypeParameterInstantiation([
+ t.tsTypeReference(t.identifier(relationTypeName)),
+ t.tsTypeReference(t.identifier('S')),
+ ]))
+ )),
+ ])
+ )),
+ ]),
+ ]))
+ );
+ const updateArgs = [
+ t.stringLiteral(typeName),
+ t.stringLiteral(updateMutationName),
+ t.stringLiteral(entityLower),
+ t.memberExpression(t.identifier('args'), t.identifier('select')),
+ t.memberExpression(t.identifier('args'), t.identifier('where')),
+ t.memberExpression(t.identifier('args'), t.identifier('data')),
+ t.stringLiteral(updateInputTypeName),
+ ];
+ classBody.push(createClassMethod('update', createConstTypeParam(selectTypeName), [updateParam], updateReturnType,
+ buildMethodBody('buildUpdateDocument', updateArgs, 'mutation', typeName, updateMutationName)));
}
// delete method (if available)
if (deleteMutationName) {
- classDeclaration.addMethod({
- name: 'delete',
- parameters: [
- {
- name: 'args',
- type: `DeleteArgs<{ id: string }>`,
- },
- ],
- returnType: `QueryBuilder<{ ${deleteMutationName}: { ${entityLower}: { id: string } } }>`,
- statements: `const { document, variables } = buildDeleteDocument(
- '${typeName}',
- '${deleteMutationName}',
- '${entityLower}',
- args.where,
- '${deleteInputTypeName}'
+ const deleteParam = t.identifier('args');
+ deleteParam.typeAnnotation = t.tsTypeAnnotation(
+ t.tsTypeReference(t.identifier('DeleteArgs'), t.tsTypeParameterInstantiation([
+ t.tsTypeLiteral([t.tsPropertySignature(t.identifier('id'), t.tsTypeAnnotation(t.tsStringKeyword()))]),
+ ]))
+ );
+ const deleteReturnType = t.tsTypeAnnotation(
+ t.tsTypeReference(t.identifier('QueryBuilder'), t.tsTypeParameterInstantiation([
+ t.tsTypeLiteral([
+ t.tsPropertySignature(t.identifier(deleteMutationName), t.tsTypeAnnotation(
+ t.tsTypeLiteral([
+ t.tsPropertySignature(t.identifier(entityLower), t.tsTypeAnnotation(
+ t.tsTypeLiteral([t.tsPropertySignature(t.identifier('id'), t.tsTypeAnnotation(t.tsStringKeyword()))])
+ )),
+ ])
+ )),
+ ]),
+ ]))
);
- return new QueryBuilder({
- client: this.client,
- operation: 'mutation',
- operationName: '${typeName}',
- fieldName: '${deleteMutationName}',
- document,
- variables,
- });`,
- });
+ const deleteArgs = [
+ t.stringLiteral(typeName),
+ t.stringLiteral(deleteMutationName),
+ t.stringLiteral(entityLower),
+ t.memberExpression(t.identifier('args'), t.identifier('where')),
+ t.stringLiteral(deleteInputTypeName),
+ ];
+ classBody.push(createClassMethod('delete', null, [deleteParam], deleteReturnType,
+ buildMethodBody('buildDeleteDocument', deleteArgs, 'mutation', typeName, deleteMutationName)));
}
- return {
- fileName,
- content: getFormattedOutput(sourceFile),
- modelName,
- tableName: table.name,
- };
-}
+ const classDecl = t.classDeclaration(t.identifier(modelName), null, t.classBody(classBody));
+ statements.push(t.exportNamedDeclaration(classDecl));
-// Select types with relations are now generated in input-types.ts
+ const header = getGeneratedFileHeader(`${typeName} model for ORM client`);
+ const code = generateCode(statements);
+
+ return { fileName, content: header + '\n' + code, modelName, tableName: table.name };
+}
-/**
- * Generate all model files for a list of tables
- */
export function generateAllModelFiles(
tables: CleanTable[],
useSharedTypes: boolean
diff --git a/graphql/codegen/src/cli/codegen/queries.ts b/graphql/codegen/src/cli/codegen/queries.ts
index bc83baffc..3e4ae2775 100644
--- a/graphql/codegen/src/cli/codegen/queries.ts
+++ b/graphql/codegen/src/cli/codegen/queries.ts
@@ -1,5 +1,5 @@
/**
- * Query hook generators using AST-based code generation
+ * Query hook generators using Babel AST-based code generation
*
* Output structure:
* queries/
@@ -7,19 +7,8 @@
* useCarQuery.ts - Single item query hook
*/
import type { CleanTable } from '../../types/schema';
-import {
- createProject,
- createSourceFile,
- getFormattedOutput,
- createFileHeader,
- createImport,
- createInterface,
- createConst,
- createTypeAlias,
- createUnionType,
- createFilterInterface,
- type InterfaceProperty,
-} from './ts-ast';
+import * as t from '@babel/types';
+import { generateCode, addJSDocComment, typedParam } from './babel-ast';
import {
buildListQueryAST,
buildSingleQueryAST,
@@ -40,6 +29,8 @@ import {
getPrimaryKeyInfo,
toScreamingSnake,
ucFirst,
+ lcFirst,
+ getGeneratedFileHeader,
} from './utils';
export interface GeneratedQueryFile {
@@ -48,43 +39,83 @@ export interface GeneratedQueryFile {
}
export interface QueryGeneratorOptions {
- /** Whether to generate React Query hooks (default: true for backwards compatibility) */
reactQueryEnabled?: boolean;
+ useCentralizedKeys?: boolean;
+ hasRelationships?: boolean;
}
-// ============================================================================
-// List query hook generator
-// ============================================================================
+function createUnionType(values: string[]): t.TSUnionType {
+ return t.tsUnionType(values.map((v) => t.tsLiteralType(t.stringLiteral(v))));
+}
+
+function createFilterInterfaceDeclaration(
+ name: string,
+ fieldFilters: Array<{ fieldName: string; filterType: string }>,
+ isExported: boolean = true
+): t.Statement {
+ const properties: t.TSPropertySignature[] = [];
+ for (const filter of fieldFilters) {
+ const prop = t.tsPropertySignature(
+ t.identifier(filter.fieldName),
+ t.tsTypeAnnotation(t.tsTypeReference(t.identifier(filter.filterType)))
+ );
+ prop.optional = true;
+ properties.push(prop);
+ }
+ const andProp = t.tsPropertySignature(
+ t.identifier('and'),
+ t.tsTypeAnnotation(t.tsArrayType(t.tsTypeReference(t.identifier(name))))
+ );
+ andProp.optional = true;
+ properties.push(andProp);
+ const orProp = t.tsPropertySignature(
+ t.identifier('or'),
+ t.tsTypeAnnotation(t.tsArrayType(t.tsTypeReference(t.identifier(name))))
+ );
+ orProp.optional = true;
+ properties.push(orProp);
+ const notProp = t.tsPropertySignature(
+ t.identifier('not'),
+ t.tsTypeAnnotation(t.tsTypeReference(t.identifier(name)))
+ );
+ notProp.optional = true;
+ properties.push(notProp);
+ const body = t.tsInterfaceBody(properties);
+ const interfaceDecl = t.tsInterfaceDeclaration(
+ t.identifier(name),
+ null,
+ null,
+ body
+ );
+ if (isExported) {
+ return t.exportNamedDeclaration(interfaceDecl);
+ }
+ return interfaceDecl;
+}
-/**
- * Generate list query hook file content using AST
- */
export function generateListQueryHook(
table: CleanTable,
options: QueryGeneratorOptions = {}
): GeneratedQueryFile {
- const { reactQueryEnabled = true } = options;
- const project = createProject();
+ const {
+ reactQueryEnabled = true,
+ useCentralizedKeys = true,
+ hasRelationships = false,
+ } = options;
const { typeName, pluralName } = getTableNames(table);
const hookName = getListQueryHookName(table);
const queryName = getAllRowsQueryName(table);
const filterTypeName = getFilterTypeName(table);
const orderByTypeName = getOrderByTypeName(table);
const scalarFields = getScalarFields(table);
+ const keysName = `${lcFirst(typeName)}Keys`;
+ const scopeTypeName = `${typeName}Scope`;
- // Generate GraphQL document via AST
const queryAST = buildListQueryAST({ table });
const queryDocument = printGraphQL(queryAST);
- const sourceFile = createSourceFile(project, getListQueryFileName(table));
-
- // Add file header as leading comment
- const headerText = reactQueryEnabled
- ? `List query hook for ${typeName}`
- : `List query functions for ${typeName}`;
- sourceFile.insertText(0, createFileHeader(headerText) + '\n\n');
+ const statements: t.Statement[] = [];
- // Collect all filter types used by this table's fields
const filterTypesUsed = new Set();
for (const field of scalarFields) {
const filterType = getScalarFilterType(field.type.gqlType, field.type.isArray);
@@ -93,49 +124,103 @@ export function generateListQueryHook(
}
}
- // Add imports - conditionally include React Query imports
- const imports = [];
if (reactQueryEnabled) {
- imports.push(
- createImport({
- moduleSpecifier: '@tanstack/react-query',
- namedImports: ['useQuery'],
- typeOnlyNamedImports: ['UseQueryOptions', 'QueryClient'],
- })
+ const reactQueryImport = t.importDeclaration(
+ [t.importSpecifier(t.identifier('useQuery'), t.identifier('useQuery'))],
+ t.stringLiteral('@tanstack/react-query')
);
+ statements.push(reactQueryImport);
+ const reactQueryTypeImport = t.importDeclaration(
+ [
+ t.importSpecifier(
+ t.identifier('UseQueryOptions'),
+ t.identifier('UseQueryOptions')
+ ),
+ t.importSpecifier(
+ t.identifier('QueryClient'),
+ t.identifier('QueryClient')
+ ),
+ ],
+ t.stringLiteral('@tanstack/react-query')
+ );
+ reactQueryTypeImport.importKind = 'type';
+ statements.push(reactQueryTypeImport);
}
- imports.push(
- createImport({
- moduleSpecifier: '../client',
- namedImports: ['execute'],
- typeOnlyNamedImports: ['ExecuteOptions'],
- }),
- createImport({
- moduleSpecifier: '../types',
- typeOnlyNamedImports: [typeName, ...Array.from(filterTypesUsed)],
- })
+
+ const clientImport = t.importDeclaration(
+ [t.importSpecifier(t.identifier('execute'), t.identifier('execute'))],
+ t.stringLiteral('../client')
);
- sourceFile.addImportDeclarations(imports);
+ statements.push(clientImport);
+ const clientTypeImport = t.importDeclaration(
+ [
+ t.importSpecifier(
+ t.identifier('ExecuteOptions'),
+ t.identifier('ExecuteOptions')
+ ),
+ ],
+ t.stringLiteral('../client')
+ );
+ clientTypeImport.importKind = 'type';
+ statements.push(clientTypeImport);
- // Re-export entity type
- sourceFile.addStatements(`\n// Re-export entity type for convenience\nexport type { ${typeName} };\n`);
+ const typesImport = t.importDeclaration(
+ [
+ t.importSpecifier(t.identifier(typeName), t.identifier(typeName)),
+ ...Array.from(filterTypesUsed).map((ft) =>
+ t.importSpecifier(t.identifier(ft), t.identifier(ft))
+ ),
+ ],
+ t.stringLiteral('../types')
+ );
+ typesImport.importKind = 'type';
+ statements.push(typesImport);
- // Add section comment
- sourceFile.addStatements('\n// ============================================================================');
- sourceFile.addStatements('// GraphQL Document');
- sourceFile.addStatements('// ============================================================================\n');
+ if (useCentralizedKeys) {
+ const queryKeyImport = t.importDeclaration(
+ [t.importSpecifier(t.identifier(keysName), t.identifier(keysName))],
+ t.stringLiteral('../query-keys')
+ );
+ statements.push(queryKeyImport);
+ if (hasRelationships) {
+ const scopeTypeImport = t.importDeclaration(
+ [
+ t.importSpecifier(
+ t.identifier(scopeTypeName),
+ t.identifier(scopeTypeName)
+ ),
+ ],
+ t.stringLiteral('../query-keys')
+ );
+ scopeTypeImport.importKind = 'type';
+ statements.push(scopeTypeImport);
+ }
+ }
- // Add query document constant
- sourceFile.addVariableStatement(
- createConst(`${queryName}QueryDocument`, '`\n' + queryDocument + '`')
+ const reExportDecl = t.exportNamedDeclaration(
+ null,
+ [t.exportSpecifier(t.identifier(typeName), t.identifier(typeName))],
+ t.stringLiteral('../types')
);
+ reExportDecl.exportKind = 'type';
+ statements.push(reExportDecl);
- // Add section comment
- sourceFile.addStatements('\n// ============================================================================');
- sourceFile.addStatements('// Types');
- sourceFile.addStatements('// ============================================================================\n');
+ const queryDocConst = t.variableDeclaration('const', [
+ t.variableDeclarator(
+ t.identifier(`${queryName}QueryDocument`),
+ t.templateLiteral(
+ [
+ t.templateElement(
+ { raw: '\n' + queryDocument, cooked: '\n' + queryDocument },
+ true
+ ),
+ ],
+ []
+ )
+ ),
+ ]);
+ statements.push(t.exportNamedDeclaration(queryDocConst));
- // Generate filter interface
const fieldFilters = scalarFields
.map((field) => {
const filterType = getScalarFilterType(field.type.gqlType, field.type.isArray);
@@ -143,11 +228,10 @@ export function generateListQueryHook(
})
.filter((f): f is { fieldName: string; filterType: string } => f !== null);
- // Note: Not exported to avoid conflicts with schema-types
- sourceFile.addInterface(createFilterInterface(filterTypeName, fieldFilters, { isExported: false }));
+ statements.push(
+ createFilterInterfaceDeclaration(filterTypeName, fieldFilters, false)
+ );
- // Generate OrderBy type
- // Note: Not exported to avoid conflicts with schema-types
const orderByValues = [
...scalarFields.flatMap((f) => [
`${toScreamingSnake(f.name)}_ASC`,
@@ -157,446 +241,1009 @@ export function generateListQueryHook(
'PRIMARY_KEY_ASC',
'PRIMARY_KEY_DESC',
];
- sourceFile.addTypeAlias(
- createTypeAlias(orderByTypeName, createUnionType(orderByValues), { isExported: false })
+ const orderByTypeAlias = t.tsTypeAliasDeclaration(
+ t.identifier(orderByTypeName),
+ null,
+ createUnionType(orderByValues)
);
+ statements.push(orderByTypeAlias);
- // Variables interface
- const variablesProps: InterfaceProperty[] = [
- { name: 'first', type: 'number', optional: true },
- { name: 'offset', type: 'number', optional: true },
- { name: 'filter', type: filterTypeName, optional: true },
- { name: 'orderBy', type: `${orderByTypeName}[]`, optional: true },
- ];
- sourceFile.addInterface(
- createInterface(`${ucFirst(pluralName)}QueryVariables`, variablesProps)
+ const variablesInterfaceBody = t.tsInterfaceBody([
+ (() => {
+ const p = t.tsPropertySignature(
+ t.identifier('first'),
+ t.tsTypeAnnotation(t.tsNumberKeyword())
+ );
+ p.optional = true;
+ return p;
+ })(),
+ (() => {
+ const p = t.tsPropertySignature(
+ t.identifier('offset'),
+ t.tsTypeAnnotation(t.tsNumberKeyword())
+ );
+ p.optional = true;
+ return p;
+ })(),
+ (() => {
+ const p = t.tsPropertySignature(
+ t.identifier('filter'),
+ t.tsTypeAnnotation(t.tsTypeReference(t.identifier(filterTypeName)))
+ );
+ p.optional = true;
+ return p;
+ })(),
+ (() => {
+ const p = t.tsPropertySignature(
+ t.identifier('orderBy'),
+ t.tsTypeAnnotation(
+ t.tsArrayType(t.tsTypeReference(t.identifier(orderByTypeName)))
+ )
+ );
+ p.optional = true;
+ return p;
+ })(),
+ ]);
+ const variablesInterface = t.tsInterfaceDeclaration(
+ t.identifier(`${ucFirst(pluralName)}QueryVariables`),
+ null,
+ null,
+ variablesInterfaceBody
);
+ statements.push(t.exportNamedDeclaration(variablesInterface));
- // Result interface
- const resultProps: InterfaceProperty[] = [
- {
- name: queryName,
- type: `{
- totalCount: number;
- nodes: ${typeName}[];
- pageInfo: {
- hasNextPage: boolean;
- hasPreviousPage: boolean;
- startCursor: string | null;
- endCursor: string | null;
- };
- }`,
- },
- ];
- sourceFile.addInterface(
- createInterface(`${ucFirst(pluralName)}QueryResult`, resultProps)
+ const pageInfoType = t.tsTypeLiteral([
+ t.tsPropertySignature(
+ t.identifier('hasNextPage'),
+ t.tsTypeAnnotation(t.tsBooleanKeyword())
+ ),
+ t.tsPropertySignature(
+ t.identifier('hasPreviousPage'),
+ t.tsTypeAnnotation(t.tsBooleanKeyword())
+ ),
+ t.tsPropertySignature(
+ t.identifier('startCursor'),
+ t.tsTypeAnnotation(
+ t.tsUnionType([t.tsStringKeyword(), t.tsNullKeyword()])
+ )
+ ),
+ t.tsPropertySignature(
+ t.identifier('endCursor'),
+ t.tsTypeAnnotation(
+ t.tsUnionType([t.tsStringKeyword(), t.tsNullKeyword()])
+ )
+ ),
+ ]);
+ const resultType = t.tsTypeLiteral([
+ t.tsPropertySignature(
+ t.identifier('totalCount'),
+ t.tsTypeAnnotation(t.tsNumberKeyword())
+ ),
+ t.tsPropertySignature(
+ t.identifier('nodes'),
+ t.tsTypeAnnotation(
+ t.tsArrayType(t.tsTypeReference(t.identifier(typeName)))
+ )
+ ),
+ t.tsPropertySignature(
+ t.identifier('pageInfo'),
+ t.tsTypeAnnotation(pageInfoType)
+ ),
+ ]);
+ const resultInterfaceBody = t.tsInterfaceBody([
+ t.tsPropertySignature(
+ t.identifier(queryName),
+ t.tsTypeAnnotation(resultType)
+ ),
+ ]);
+ const resultInterface = t.tsInterfaceDeclaration(
+ t.identifier(`${ucFirst(pluralName)}QueryResult`),
+ null,
+ null,
+ resultInterfaceBody
);
+ statements.push(t.exportNamedDeclaration(resultInterface));
- // Add section comment
- sourceFile.addStatements('\n// ============================================================================');
- sourceFile.addStatements('// Query Key');
- sourceFile.addStatements('// ============================================================================\n');
-
- // Query key factory
- sourceFile.addVariableStatement(
- createConst(
- `${queryName}QueryKey`,
- `(variables?: ${ucFirst(pluralName)}QueryVariables) =>
- ['${typeName.toLowerCase()}', 'list', variables] as const`
- )
- );
+ if (useCentralizedKeys) {
+ const queryKeyConst = t.variableDeclaration('const', [
+ t.variableDeclarator(
+ t.identifier(`${queryName}QueryKey`),
+ t.memberExpression(t.identifier(keysName), t.identifier('list'))
+ ),
+ ]);
+ const queryKeyExport = t.exportNamedDeclaration(queryKeyConst);
+ addJSDocComment(queryKeyExport, [
+ 'Query key factory - re-exported from query-keys.ts',
+ ]);
+ statements.push(queryKeyExport);
+ } else {
+ const queryKeyArrow = t.arrowFunctionExpression(
+ [
+ typedParam(
+ 'variables',
+ t.tsTypeReference(
+ t.identifier(`${ucFirst(pluralName)}QueryVariables`)
+ ),
+ true
+ ),
+ ],
+ t.tsAsExpression(
+ t.arrayExpression([
+ t.stringLiteral(typeName.toLowerCase()),
+ t.stringLiteral('list'),
+ t.identifier('variables'),
+ ]),
+ t.tsTypeReference(t.identifier('const'))
+ )
+ );
+ const queryKeyConst = t.variableDeclaration('const', [
+ t.variableDeclarator(
+ t.identifier(`${queryName}QueryKey`),
+ queryKeyArrow
+ ),
+ ]);
+ statements.push(t.exportNamedDeclaration(queryKeyConst));
+ }
- // Add React Query hook section (only if enabled)
if (reactQueryEnabled) {
- sourceFile.addStatements('\n// ============================================================================');
- sourceFile.addStatements('// Hook');
- sourceFile.addStatements('// ============================================================================\n');
-
- // Hook function
- sourceFile.addFunction({
- name: hookName,
- isExported: true,
- parameters: [
- {
- name: 'variables',
- type: `${ucFirst(pluralName)}QueryVariables`,
- hasQuestionToken: true,
- },
- {
- name: 'options',
- type: `Omit, 'queryKey' | 'queryFn'>`,
- hasQuestionToken: true,
- },
- ],
- statements: `return useQuery({
- queryKey: ${queryName}QueryKey(variables),
- queryFn: () => execute<${ucFirst(pluralName)}QueryResult, ${ucFirst(pluralName)}QueryVariables>(
- ${queryName}QueryDocument,
- variables
- ),
- ...options,
- });`,
- docs: [
- {
- description: `Query hook for fetching ${typeName} list
-
-@example
-\`\`\`tsx
-const { data, isLoading } = ${hookName}({
- first: 10,
- filter: { name: { equalTo: "example" } },
- orderBy: ['CREATED_AT_DESC'],
-});
-\`\`\``,
- },
- ],
- });
+ const hookBodyStatements: t.Statement[] = [];
+ if (hasRelationships && useCentralizedKeys) {
+ hookBodyStatements.push(
+ t.variableDeclaration('const', [
+ t.variableDeclarator(
+ t.objectPattern([
+ t.objectProperty(
+ t.identifier('scope'),
+ t.identifier('scope'),
+ false,
+ true
+ ),
+ t.restElement(t.identifier('queryOptions')),
+ ]),
+ t.logicalExpression(
+ '??',
+ t.identifier('options'),
+ t.objectExpression([])
+ )
+ ),
+ ])
+ );
+ hookBodyStatements.push(
+ t.returnStatement(
+ t.callExpression(t.identifier('useQuery'), [
+ t.objectExpression([
+ t.objectProperty(
+ t.identifier('queryKey'),
+ t.callExpression(
+ t.memberExpression(
+ t.identifier(keysName),
+ t.identifier('list')
+ ),
+ [t.identifier('variables'), t.identifier('scope')]
+ )
+ ),
+ t.objectProperty(
+ t.identifier('queryFn'),
+ t.arrowFunctionExpression(
+ [],
+ t.callExpression(t.identifier('execute'), [
+ t.identifier(`${queryName}QueryDocument`),
+ t.identifier('variables'),
+ ])
+ )
+ ),
+ t.spreadElement(t.identifier('queryOptions')),
+ ]),
+ ])
+ )
+ );
+ } else if (useCentralizedKeys) {
+ hookBodyStatements.push(
+ t.returnStatement(
+ t.callExpression(t.identifier('useQuery'), [
+ t.objectExpression([
+ t.objectProperty(
+ t.identifier('queryKey'),
+ t.callExpression(
+ t.memberExpression(
+ t.identifier(keysName),
+ t.identifier('list')
+ ),
+ [t.identifier('variables')]
+ )
+ ),
+ t.objectProperty(
+ t.identifier('queryFn'),
+ t.arrowFunctionExpression(
+ [],
+ t.callExpression(t.identifier('execute'), [
+ t.identifier(`${queryName}QueryDocument`),
+ t.identifier('variables'),
+ ])
+ )
+ ),
+ t.spreadElement(t.identifier('options')),
+ ]),
+ ])
+ )
+ );
+ } else {
+ hookBodyStatements.push(
+ t.returnStatement(
+ t.callExpression(t.identifier('useQuery'), [
+ t.objectExpression([
+ t.objectProperty(
+ t.identifier('queryKey'),
+ t.callExpression(t.identifier(`${queryName}QueryKey`), [
+ t.identifier('variables'),
+ ])
+ ),
+ t.objectProperty(
+ t.identifier('queryFn'),
+ t.arrowFunctionExpression(
+ [],
+ t.callExpression(t.identifier('execute'), [
+ t.identifier(`${queryName}QueryDocument`),
+ t.identifier('variables'),
+ ])
+ )
+ ),
+ t.spreadElement(t.identifier('options')),
+ ]),
+ ])
+ )
+ );
+ }
+
+ const hookParams: t.Identifier[] = [
+ typedParam(
+ 'variables',
+ t.tsTypeReference(t.identifier(`${ucFirst(pluralName)}QueryVariables`)),
+ true
+ ),
+ ];
+ let optionsTypeStr: string;
+ if (hasRelationships && useCentralizedKeys) {
+ optionsTypeStr = `Omit, 'queryKey' | 'queryFn'> & { scope?: ${scopeTypeName} }`;
+ } else {
+ optionsTypeStr = `Omit, 'queryKey' | 'queryFn'>`;
+ }
+ const optionsParam = t.identifier('options');
+ optionsParam.optional = true;
+ optionsParam.typeAnnotation = t.tsTypeAnnotation(
+ t.tsTypeReference(t.identifier(optionsTypeStr))
+ );
+ hookParams.push(optionsParam);
+
+ const hookFunc = t.functionDeclaration(
+ t.identifier(hookName),
+ hookParams,
+ t.blockStatement(hookBodyStatements)
+ );
+ const hookExport = t.exportNamedDeclaration(hookFunc);
+ const docLines = [
+ `Query hook for fetching ${typeName} list`,
+ '',
+ '@example',
+ '```tsx',
+ `const { data, isLoading } = ${hookName}({`,
+ ' first: 10,',
+ ' filter: { name: { equalTo: "example" } },',
+ " orderBy: ['CREATED_AT_DESC'],",
+ '});',
+ '```',
+ ];
+ if (hasRelationships && useCentralizedKeys) {
+ docLines.push('');
+ docLines.push('@example With scope for hierarchical cache invalidation');
+ docLines.push('```tsx');
+ docLines.push(`const { data } = ${hookName}(`);
+ docLines.push(' { first: 10 },');
+ docLines.push(" { scope: { parentId: 'parent-id' } }");
+ docLines.push(');');
+ docLines.push('```');
+ }
+ addJSDocComment(hookExport, docLines);
+ statements.push(hookExport);
}
- // Add section comment for standalone functions
- sourceFile.addStatements('\n// ============================================================================');
- sourceFile.addStatements('// Standalone Functions (non-React)');
- sourceFile.addStatements('// ============================================================================\n');
-
- // Fetch function (standalone, no React)
- sourceFile.addFunction({
- name: `fetch${ucFirst(pluralName)}Query`,
- isExported: true,
- isAsync: true,
- parameters: [
- {
- name: 'variables',
- type: `${ucFirst(pluralName)}QueryVariables`,
- hasQuestionToken: true,
- },
- {
- name: 'options',
- type: 'ExecuteOptions',
- hasQuestionToken: true,
- },
- ],
- returnType: `Promise<${ucFirst(pluralName)}QueryResult>`,
- statements: `return execute<${ucFirst(pluralName)}QueryResult, ${ucFirst(pluralName)}QueryVariables>(
- ${queryName}QueryDocument,
- variables,
- options
- );`,
- docs: [
- {
- description: `Fetch ${typeName} list without React hooks
-
-@example
-\`\`\`ts
-// Direct fetch
-const data = await fetch${ucFirst(pluralName)}Query({ first: 10 });
-
-// With QueryClient
-const data = await queryClient.fetchQuery({
- queryKey: ${queryName}QueryKey(variables),
- queryFn: () => fetch${ucFirst(pluralName)}Query(variables),
-});
-\`\`\``,
- },
+ const fetchFuncBody = t.blockStatement([
+ t.returnStatement(
+ t.callExpression(t.identifier('execute'), [
+ t.identifier(`${queryName}QueryDocument`),
+ t.identifier('variables'),
+ t.identifier('options'),
+ ])
+ ),
+ ]);
+ const fetchFunc = t.functionDeclaration(
+ t.identifier(`fetch${ucFirst(pluralName)}Query`),
+ [
+ typedParam(
+ 'variables',
+ t.tsTypeReference(t.identifier(`${ucFirst(pluralName)}QueryVariables`)),
+ true
+ ),
+ typedParam(
+ 'options',
+ t.tsTypeReference(t.identifier('ExecuteOptions')),
+ true
+ ),
],
- });
+ fetchFuncBody
+ );
+ fetchFunc.async = true;
+ fetchFunc.returnType = t.tsTypeAnnotation(
+ t.tsTypeReference(
+ t.identifier('Promise'),
+ t.tsTypeParameterInstantiation([
+ t.tsTypeReference(t.identifier(`${ucFirst(pluralName)}QueryResult`)),
+ ])
+ )
+ );
+ const fetchExport = t.exportNamedDeclaration(fetchFunc);
+ addJSDocComment(fetchExport, [
+ `Fetch ${typeName} list without React hooks`,
+ '',
+ '@example',
+ '```ts',
+ '// Direct fetch',
+ `const data = await fetch${ucFirst(pluralName)}Query({ first: 10 });`,
+ '',
+ '// With QueryClient',
+ 'const data = await queryClient.fetchQuery({',
+ ` queryKey: ${queryName}QueryKey(variables),`,
+ ` queryFn: () => fetch${ucFirst(pluralName)}Query(variables),`,
+ '});',
+ '```',
+ ]);
+ statements.push(fetchExport);
- // Prefetch function (for SSR/QueryClient) - only if React Query is enabled
if (reactQueryEnabled) {
- sourceFile.addFunction({
- name: `prefetch${ucFirst(pluralName)}Query`,
- isExported: true,
- isAsync: true,
- parameters: [
- {
- name: 'queryClient',
- type: 'QueryClient',
- },
- {
- name: 'variables',
- type: `${ucFirst(pluralName)}QueryVariables`,
- hasQuestionToken: true,
- },
- {
- name: 'options',
- type: 'ExecuteOptions',
- hasQuestionToken: true,
- },
- ],
- returnType: 'Promise',
- statements: `await queryClient.prefetchQuery({
- queryKey: ${queryName}QueryKey(variables),
- queryFn: () => execute<${ucFirst(pluralName)}QueryResult, ${ucFirst(pluralName)}QueryVariables>(
- ${queryName}QueryDocument,
- variables,
- options
- ),
- });`,
- docs: [
- {
- description: `Prefetch ${typeName} list for SSR or cache warming
-
-@example
-\`\`\`ts
-await prefetch${ucFirst(pluralName)}Query(queryClient, { first: 10 });
-\`\`\``,
- },
- ],
- });
+ const prefetchParams: t.Identifier[] = [
+ typedParam(
+ 'queryClient',
+ t.tsTypeReference(t.identifier('QueryClient'))
+ ),
+ typedParam(
+ 'variables',
+ t.tsTypeReference(t.identifier(`${ucFirst(pluralName)}QueryVariables`)),
+ true
+ ),
+ ];
+ if (hasRelationships && useCentralizedKeys) {
+ prefetchParams.push(
+ typedParam(
+ 'scope',
+ t.tsTypeReference(t.identifier(scopeTypeName)),
+ true
+ )
+ );
+ }
+ prefetchParams.push(
+ typedParam(
+ 'options',
+ t.tsTypeReference(t.identifier('ExecuteOptions')),
+ true
+ )
+ );
+
+ let prefetchQueryKeyExpr: t.Expression;
+ if (hasRelationships && useCentralizedKeys) {
+ prefetchQueryKeyExpr = t.callExpression(
+ t.memberExpression(t.identifier(keysName), t.identifier('list')),
+ [t.identifier('variables'), t.identifier('scope')]
+ );
+ } else if (useCentralizedKeys) {
+ prefetchQueryKeyExpr = t.callExpression(
+ t.memberExpression(t.identifier(keysName), t.identifier('list')),
+ [t.identifier('variables')]
+ );
+ } else {
+ prefetchQueryKeyExpr = t.callExpression(
+ t.identifier(`${queryName}QueryKey`),
+ [t.identifier('variables')]
+ );
+ }
+
+ const prefetchFuncBody = t.blockStatement([
+ t.expressionStatement(
+ t.awaitExpression(
+ t.callExpression(
+ t.memberExpression(
+ t.identifier('queryClient'),
+ t.identifier('prefetchQuery')
+ ),
+ [
+ t.objectExpression([
+ t.objectProperty(
+ t.identifier('queryKey'),
+ prefetchQueryKeyExpr
+ ),
+ t.objectProperty(
+ t.identifier('queryFn'),
+ t.arrowFunctionExpression(
+ [],
+ t.callExpression(t.identifier('execute'), [
+ t.identifier(`${queryName}QueryDocument`),
+ t.identifier('variables'),
+ t.identifier('options'),
+ ])
+ )
+ ),
+ ]),
+ ]
+ )
+ )
+ ),
+ ]);
+
+ const prefetchFunc = t.functionDeclaration(
+ t.identifier(`prefetch${ucFirst(pluralName)}Query`),
+ prefetchParams,
+ prefetchFuncBody
+ );
+ prefetchFunc.async = true;
+ prefetchFunc.returnType = t.tsTypeAnnotation(
+ t.tsTypeReference(
+ t.identifier('Promise'),
+ t.tsTypeParameterInstantiation([t.tsVoidKeyword()])
+ )
+ );
+ const prefetchExport = t.exportNamedDeclaration(prefetchFunc);
+ addJSDocComment(prefetchExport, [
+ `Prefetch ${typeName} list for SSR or cache warming`,
+ '',
+ '@example',
+ '```ts',
+ `await prefetch${ucFirst(pluralName)}Query(queryClient, { first: 10 });`,
+ '```',
+ ]);
+ statements.push(prefetchExport);
}
+ const code = generateCode(statements);
+ const headerText = reactQueryEnabled
+ ? `List query hook for ${typeName}`
+ : `List query functions for ${typeName}`;
+ const content = getGeneratedFileHeader(headerText) + '\n\n' + code;
+
return {
fileName: getListQueryFileName(table),
- content: getFormattedOutput(sourceFile),
+ content,
};
}
-// ============================================================================
-// Single item query hook generator
-// ============================================================================
-
-/**
- * Generate single item query hook file content using AST
- */
export function generateSingleQueryHook(
table: CleanTable,
options: QueryGeneratorOptions = {}
): GeneratedQueryFile {
- const { reactQueryEnabled = true } = options;
- const project = createProject();
+ const {
+ reactQueryEnabled = true,
+ useCentralizedKeys = true,
+ hasRelationships = false,
+ } = options;
const { typeName, singularName } = getTableNames(table);
const hookName = getSingleQueryHookName(table);
const queryName = getSingleRowQueryName(table);
+ const keysName = `${lcFirst(typeName)}Keys`;
+ const scopeTypeName = `${typeName}Scope`;
- // Get primary key info dynamically from table constraints
const pkFields = getPrimaryKeyInfo(table);
- // For simplicity, use first PK field (most common case)
- // Composite PKs would need more complex handling
const pkField = pkFields[0];
const pkName = pkField.name;
const pkTsType = pkField.tsType;
- // Generate GraphQL document via AST
const queryAST = buildSingleQueryAST({ table });
const queryDocument = printGraphQL(queryAST);
- const sourceFile = createSourceFile(project, getSingleQueryFileName(table));
-
- // Add file header
- const headerText = reactQueryEnabled
- ? `Single item query hook for ${typeName}`
- : `Single item query functions for ${typeName}`;
- sourceFile.insertText(0, createFileHeader(headerText) + '\n\n');
+ const statements: t.Statement[] = [];
- // Add imports - conditionally include React Query imports
- const imports = [];
if (reactQueryEnabled) {
- imports.push(
- createImport({
- moduleSpecifier: '@tanstack/react-query',
- namedImports: ['useQuery'],
- typeOnlyNamedImports: ['UseQueryOptions', 'QueryClient'],
- })
+ const reactQueryImport = t.importDeclaration(
+ [t.importSpecifier(t.identifier('useQuery'), t.identifier('useQuery'))],
+ t.stringLiteral('@tanstack/react-query')
+ );
+ statements.push(reactQueryImport);
+ const reactQueryTypeImport = t.importDeclaration(
+ [
+ t.importSpecifier(
+ t.identifier('UseQueryOptions'),
+ t.identifier('UseQueryOptions')
+ ),
+ t.importSpecifier(
+ t.identifier('QueryClient'),
+ t.identifier('QueryClient')
+ ),
+ ],
+ t.stringLiteral('@tanstack/react-query')
);
+ reactQueryTypeImport.importKind = 'type';
+ statements.push(reactQueryTypeImport);
}
- imports.push(
- createImport({
- moduleSpecifier: '../client',
- namedImports: ['execute'],
- typeOnlyNamedImports: ['ExecuteOptions'],
- }),
- createImport({
- moduleSpecifier: '../types',
- typeOnlyNamedImports: [typeName],
- })
+
+ const clientImport = t.importDeclaration(
+ [t.importSpecifier(t.identifier('execute'), t.identifier('execute'))],
+ t.stringLiteral('../client')
+ );
+ statements.push(clientImport);
+ const clientTypeImport = t.importDeclaration(
+ [
+ t.importSpecifier(
+ t.identifier('ExecuteOptions'),
+ t.identifier('ExecuteOptions')
+ ),
+ ],
+ t.stringLiteral('../client')
);
- sourceFile.addImportDeclarations(imports);
+ clientTypeImport.importKind = 'type';
+ statements.push(clientTypeImport);
- // Re-export entity type
- sourceFile.addStatements(`\n// Re-export entity type for convenience\nexport type { ${typeName} };\n`);
+ const typesImport = t.importDeclaration(
+ [t.importSpecifier(t.identifier(typeName), t.identifier(typeName))],
+ t.stringLiteral('../types')
+ );
+ typesImport.importKind = 'type';
+ statements.push(typesImport);
- // Add section comment
- sourceFile.addStatements('\n// ============================================================================');
- sourceFile.addStatements('// GraphQL Document');
- sourceFile.addStatements('// ============================================================================\n');
+ if (useCentralizedKeys) {
+ const queryKeyImport = t.importDeclaration(
+ [t.importSpecifier(t.identifier(keysName), t.identifier(keysName))],
+ t.stringLiteral('../query-keys')
+ );
+ statements.push(queryKeyImport);
+ if (hasRelationships) {
+ const scopeTypeImport = t.importDeclaration(
+ [
+ t.importSpecifier(
+ t.identifier(scopeTypeName),
+ t.identifier(scopeTypeName)
+ ),
+ ],
+ t.stringLiteral('../query-keys')
+ );
+ scopeTypeImport.importKind = 'type';
+ statements.push(scopeTypeImport);
+ }
+ }
- // Add query document constant
- sourceFile.addVariableStatement(
- createConst(`${queryName}QueryDocument`, '`\n' + queryDocument + '`')
+ const reExportDecl = t.exportNamedDeclaration(
+ null,
+ [t.exportSpecifier(t.identifier(typeName), t.identifier(typeName))],
+ t.stringLiteral('../types')
);
+ reExportDecl.exportKind = 'type';
+ statements.push(reExportDecl);
- // Add section comment
- sourceFile.addStatements('\n// ============================================================================');
- sourceFile.addStatements('// Types');
- sourceFile.addStatements('// ============================================================================\n');
+ const queryDocConst = t.variableDeclaration('const', [
+ t.variableDeclarator(
+ t.identifier(`${queryName}QueryDocument`),
+ t.templateLiteral(
+ [
+ t.templateElement(
+ { raw: '\n' + queryDocument, cooked: '\n' + queryDocument },
+ true
+ ),
+ ],
+ []
+ )
+ ),
+ ]);
+ statements.push(t.exportNamedDeclaration(queryDocConst));
- // Variables interface - use dynamic PK field name and type
- sourceFile.addInterface(
- createInterface(`${ucFirst(singularName)}QueryVariables`, [
- { name: pkName, type: pkTsType },
- ])
- );
+ const pkTypeAnnotation =
+ pkTsType === 'string'
+ ? t.tsStringKeyword()
+ : pkTsType === 'number'
+ ? t.tsNumberKeyword()
+ : t.tsTypeReference(t.identifier(pkTsType));
- // Result interface
- sourceFile.addInterface(
- createInterface(`${ucFirst(singularName)}QueryResult`, [
- { name: queryName, type: `${typeName} | null` },
- ])
+ const variablesInterfaceBody = t.tsInterfaceBody([
+ t.tsPropertySignature(
+ t.identifier(pkName),
+ t.tsTypeAnnotation(pkTypeAnnotation)
+ ),
+ ]);
+ const variablesInterface = t.tsInterfaceDeclaration(
+ t.identifier(`${ucFirst(singularName)}QueryVariables`),
+ null,
+ null,
+ variablesInterfaceBody
);
+ statements.push(t.exportNamedDeclaration(variablesInterface));
- // Add section comment
- sourceFile.addStatements('\n// ============================================================================');
- sourceFile.addStatements('// Query Key');
- sourceFile.addStatements('// ============================================================================\n');
-
- // Query key factory - use dynamic PK field name and type
- sourceFile.addVariableStatement(
- createConst(
- `${queryName}QueryKey`,
- `(${pkName}: ${pkTsType}) =>
- ['${typeName.toLowerCase()}', 'detail', ${pkName}] as const`
- )
+ const resultInterfaceBody = t.tsInterfaceBody([
+ t.tsPropertySignature(
+ t.identifier(queryName),
+ t.tsTypeAnnotation(
+ t.tsUnionType([
+ t.tsTypeReference(t.identifier(typeName)),
+ t.tsNullKeyword(),
+ ])
+ )
+ ),
+ ]);
+ const resultInterface = t.tsInterfaceDeclaration(
+ t.identifier(`${ucFirst(singularName)}QueryResult`),
+ null,
+ null,
+ resultInterfaceBody
);
+ statements.push(t.exportNamedDeclaration(resultInterface));
+
+ if (useCentralizedKeys) {
+ const queryKeyConst = t.variableDeclaration('const', [
+ t.variableDeclarator(
+ t.identifier(`${queryName}QueryKey`),
+ t.memberExpression(t.identifier(keysName), t.identifier('detail'))
+ ),
+ ]);
+ const queryKeyExport = t.exportNamedDeclaration(queryKeyConst);
+ addJSDocComment(queryKeyExport, [
+ 'Query key factory - re-exported from query-keys.ts',
+ ]);
+ statements.push(queryKeyExport);
+ } else {
+ const queryKeyArrow = t.arrowFunctionExpression(
+ [typedParam(pkName, pkTypeAnnotation)],
+ t.tsAsExpression(
+ t.arrayExpression([
+ t.stringLiteral(typeName.toLowerCase()),
+ t.stringLiteral('detail'),
+ t.identifier(pkName),
+ ]),
+ t.tsTypeReference(t.identifier('const'))
+ )
+ );
+ const queryKeyConst = t.variableDeclaration('const', [
+ t.variableDeclarator(
+ t.identifier(`${queryName}QueryKey`),
+ queryKeyArrow
+ ),
+ ]);
+ statements.push(t.exportNamedDeclaration(queryKeyConst));
+ }
- // Add React Query hook section (only if enabled)
if (reactQueryEnabled) {
- sourceFile.addStatements('\n// ============================================================================');
- sourceFile.addStatements('// Hook');
- sourceFile.addStatements('// ============================================================================\n');
-
- // Hook function - use dynamic PK field name and type
- sourceFile.addFunction({
- name: hookName,
- isExported: true,
- parameters: [
- { name: pkName, type: pkTsType },
- {
- name: 'options',
- type: `Omit, 'queryKey' | 'queryFn'>`,
- hasQuestionToken: true,
- },
- ],
- statements: `return useQuery({
- queryKey: ${queryName}QueryKey(${pkName}),
- queryFn: () => execute<${ucFirst(singularName)}QueryResult, ${ucFirst(singularName)}QueryVariables>(
- ${queryName}QueryDocument,
- { ${pkName} }
- ),
- enabled: !!${pkName} && (options?.enabled !== false),
- ...options,
- });`,
- docs: [
- {
- description: `Query hook for fetching a single ${typeName} by primary key
-
-@example
-\`\`\`tsx
-const { data, isLoading } = ${hookName}(${pkTsType === 'string' ? "'value-here'" : '123'});
-
-if (data?.${queryName}) {
- console.log(data.${queryName}.${pkName});
-}
-\`\`\``,
- },
- ],
- });
+ const hookBodyStatements: t.Statement[] = [];
+ if (hasRelationships && useCentralizedKeys) {
+ hookBodyStatements.push(
+ t.variableDeclaration('const', [
+ t.variableDeclarator(
+ t.objectPattern([
+ t.objectProperty(
+ t.identifier('scope'),
+ t.identifier('scope'),
+ false,
+ true
+ ),
+ t.restElement(t.identifier('queryOptions')),
+ ]),
+ t.logicalExpression(
+ '??',
+ t.identifier('options'),
+ t.objectExpression([])
+ )
+ ),
+ ])
+ );
+ hookBodyStatements.push(
+ t.returnStatement(
+ t.callExpression(t.identifier('useQuery'), [
+ t.objectExpression([
+ t.objectProperty(
+ t.identifier('queryKey'),
+ t.callExpression(
+ t.memberExpression(
+ t.identifier(keysName),
+ t.identifier('detail')
+ ),
+ [
+ t.memberExpression(
+ t.identifier('variables'),
+ t.identifier(pkName)
+ ),
+ t.identifier('scope'),
+ ]
+ )
+ ),
+ t.objectProperty(
+ t.identifier('queryFn'),
+ t.arrowFunctionExpression(
+ [],
+ t.callExpression(t.identifier('execute'), [
+ t.identifier(`${queryName}QueryDocument`),
+ t.identifier('variables'),
+ ])
+ )
+ ),
+ t.spreadElement(t.identifier('queryOptions')),
+ ]),
+ ])
+ )
+ );
+ } else if (useCentralizedKeys) {
+ hookBodyStatements.push(
+ t.returnStatement(
+ t.callExpression(t.identifier('useQuery'), [
+ t.objectExpression([
+ t.objectProperty(
+ t.identifier('queryKey'),
+ t.callExpression(
+ t.memberExpression(
+ t.identifier(keysName),
+ t.identifier('detail')
+ ),
+ [
+ t.memberExpression(
+ t.identifier('variables'),
+ t.identifier(pkName)
+ ),
+ ]
+ )
+ ),
+ t.objectProperty(
+ t.identifier('queryFn'),
+ t.arrowFunctionExpression(
+ [],
+ t.callExpression(t.identifier('execute'), [
+ t.identifier(`${queryName}QueryDocument`),
+ t.identifier('variables'),
+ ])
+ )
+ ),
+ t.spreadElement(t.identifier('options')),
+ ]),
+ ])
+ )
+ );
+ } else {
+ hookBodyStatements.push(
+ t.returnStatement(
+ t.callExpression(t.identifier('useQuery'), [
+ t.objectExpression([
+ t.objectProperty(
+ t.identifier('queryKey'),
+ t.callExpression(t.identifier(`${queryName}QueryKey`), [
+ t.memberExpression(
+ t.identifier('variables'),
+ t.identifier(pkName)
+ ),
+ ])
+ ),
+ t.objectProperty(
+ t.identifier('queryFn'),
+ t.arrowFunctionExpression(
+ [],
+ t.callExpression(t.identifier('execute'), [
+ t.identifier(`${queryName}QueryDocument`),
+ t.identifier('variables'),
+ ])
+ )
+ ),
+ t.spreadElement(t.identifier('options')),
+ ]),
+ ])
+ )
+ );
+ }
+
+ const hookParams: t.Identifier[] = [
+ typedParam(
+ 'variables',
+ t.tsTypeReference(t.identifier(`${ucFirst(singularName)}QueryVariables`))
+ ),
+ ];
+ let optionsTypeStr: string;
+ if (hasRelationships && useCentralizedKeys) {
+ optionsTypeStr = `Omit, 'queryKey' | 'queryFn'> & { scope?: ${scopeTypeName} }`;
+ } else {
+ optionsTypeStr = `Omit, 'queryKey' | 'queryFn'>`;
+ }
+ const optionsParam = t.identifier('options');
+ optionsParam.optional = true;
+ optionsParam.typeAnnotation = t.tsTypeAnnotation(
+ t.tsTypeReference(t.identifier(optionsTypeStr))
+ );
+ hookParams.push(optionsParam);
+
+ const hookFunc = t.functionDeclaration(
+ t.identifier(hookName),
+ hookParams,
+ t.blockStatement(hookBodyStatements)
+ );
+ const hookExport = t.exportNamedDeclaration(hookFunc);
+ const docLines = [
+ `Query hook for fetching a single ${typeName}`,
+ '',
+ '@example',
+ '```tsx',
+ `const { data, isLoading } = ${hookName}({ ${pkName}: 'some-id' });`,
+ '```',
+ ];
+ if (hasRelationships && useCentralizedKeys) {
+ docLines.push('');
+ docLines.push('@example With scope for hierarchical cache invalidation');
+ docLines.push('```tsx');
+ docLines.push(`const { data } = ${hookName}(`);
+ docLines.push(` { ${pkName}: 'some-id' },`);
+ docLines.push(" { scope: { parentId: 'parent-id' } }");
+ docLines.push(');');
+ docLines.push('```');
+ }
+ addJSDocComment(hookExport, docLines);
+ statements.push(hookExport);
}
- // Add section comment for standalone functions
- sourceFile.addStatements('\n// ============================================================================');
- sourceFile.addStatements('// Standalone Functions (non-React)');
- sourceFile.addStatements('// ============================================================================\n');
-
- // Fetch function (standalone, no React) - use dynamic PK
- sourceFile.addFunction({
- name: `fetch${ucFirst(singularName)}Query`,
- isExported: true,
- isAsync: true,
- parameters: [
- { name: pkName, type: pkTsType },
- {
- name: 'options',
- type: 'ExecuteOptions',
- hasQuestionToken: true,
- },
- ],
- returnType: `Promise<${ucFirst(singularName)}QueryResult>`,
- statements: `return execute<${ucFirst(singularName)}QueryResult, ${ucFirst(singularName)}QueryVariables>(
- ${queryName}QueryDocument,
- { ${pkName} },
- options
- );`,
- docs: [
- {
- description: `Fetch a single ${typeName} by primary key without React hooks
-
-@example
-\`\`\`ts
-const data = await fetch${ucFirst(singularName)}Query(${pkTsType === 'string' ? "'value-here'" : '123'});
-\`\`\``,
- },
+ const fetchFuncBody = t.blockStatement([
+ t.returnStatement(
+ t.callExpression(t.identifier('execute'), [
+ t.identifier(`${queryName}QueryDocument`),
+ t.identifier('variables'),
+ t.identifier('options'),
+ ])
+ ),
+ ]);
+ const fetchFunc = t.functionDeclaration(
+ t.identifier(`fetch${ucFirst(singularName)}Query`),
+ [
+ typedParam(
+ 'variables',
+ t.tsTypeReference(t.identifier(`${ucFirst(singularName)}QueryVariables`))
+ ),
+ typedParam(
+ 'options',
+ t.tsTypeReference(t.identifier('ExecuteOptions')),
+ true
+ ),
],
- });
+ fetchFuncBody
+ );
+ fetchFunc.async = true;
+ fetchFunc.returnType = t.tsTypeAnnotation(
+ t.tsTypeReference(
+ t.identifier('Promise'),
+ t.tsTypeParameterInstantiation([
+ t.tsTypeReference(t.identifier(`${ucFirst(singularName)}QueryResult`)),
+ ])
+ )
+ );
+ const fetchExport = t.exportNamedDeclaration(fetchFunc);
+ addJSDocComment(fetchExport, [
+ `Fetch a single ${typeName} without React hooks`,
+ '',
+ '@example',
+ '```ts',
+ `const data = await fetch${ucFirst(singularName)}Query({ ${pkName}: 'some-id' });`,
+ '```',
+ ]);
+ statements.push(fetchExport);
- // Prefetch function (for SSR/QueryClient) - only if React Query is enabled, use dynamic PK
if (reactQueryEnabled) {
- sourceFile.addFunction({
- name: `prefetch${ucFirst(singularName)}Query`,
- isExported: true,
- isAsync: true,
- parameters: [
- { name: 'queryClient', type: 'QueryClient' },
- { name: pkName, type: pkTsType },
- {
- name: 'options',
- type: 'ExecuteOptions',
- hasQuestionToken: true,
- },
- ],
- returnType: 'Promise',
- statements: `await queryClient.prefetchQuery({
- queryKey: ${queryName}QueryKey(${pkName}),
- queryFn: () => execute<${ucFirst(singularName)}QueryResult, ${ucFirst(singularName)}QueryVariables>(
- ${queryName}QueryDocument,
- { ${pkName} },
- options
- ),
- });`,
- docs: [
- {
- description: `Prefetch a single ${typeName} for SSR or cache warming
-
-@example
-\`\`\`ts
-await prefetch${ucFirst(singularName)}Query(queryClient, ${pkTsType === 'string' ? "'value-here'" : '123'});
-\`\`\``,
- },
- ],
- });
+ const prefetchParams: t.Identifier[] = [
+ typedParam(
+ 'queryClient',
+ t.tsTypeReference(t.identifier('QueryClient'))
+ ),
+ typedParam(
+ 'variables',
+ t.tsTypeReference(t.identifier(`${ucFirst(singularName)}QueryVariables`))
+ ),
+ ];
+ if (hasRelationships && useCentralizedKeys) {
+ prefetchParams.push(
+ typedParam(
+ 'scope',
+ t.tsTypeReference(t.identifier(scopeTypeName)),
+ true
+ )
+ );
+ }
+ prefetchParams.push(
+ typedParam(
+ 'options',
+ t.tsTypeReference(t.identifier('ExecuteOptions')),
+ true
+ )
+ );
+
+ let prefetchQueryKeyExpr: t.Expression;
+ if (hasRelationships && useCentralizedKeys) {
+ prefetchQueryKeyExpr = t.callExpression(
+ t.memberExpression(t.identifier(keysName), t.identifier('detail')),
+ [
+ t.memberExpression(t.identifier('variables'), t.identifier(pkName)),
+ t.identifier('scope'),
+ ]
+ );
+ } else if (useCentralizedKeys) {
+ prefetchQueryKeyExpr = t.callExpression(
+ t.memberExpression(t.identifier(keysName), t.identifier('detail')),
+ [t.memberExpression(t.identifier('variables'), t.identifier(pkName))]
+ );
+ } else {
+ prefetchQueryKeyExpr = t.callExpression(
+ t.identifier(`${queryName}QueryKey`),
+ [t.memberExpression(t.identifier('variables'), t.identifier(pkName))]
+ );
+ }
+
+ const prefetchFuncBody = t.blockStatement([
+ t.expressionStatement(
+ t.awaitExpression(
+ t.callExpression(
+ t.memberExpression(
+ t.identifier('queryClient'),
+ t.identifier('prefetchQuery')
+ ),
+ [
+ t.objectExpression([
+ t.objectProperty(
+ t.identifier('queryKey'),
+ prefetchQueryKeyExpr
+ ),
+ t.objectProperty(
+ t.identifier('queryFn'),
+ t.arrowFunctionExpression(
+ [],
+ t.callExpression(t.identifier('execute'), [
+ t.identifier(`${queryName}QueryDocument`),
+ t.identifier('variables'),
+ t.identifier('options'),
+ ])
+ )
+ ),
+ ]),
+ ]
+ )
+ )
+ ),
+ ]);
+
+ const prefetchFunc = t.functionDeclaration(
+ t.identifier(`prefetch${ucFirst(singularName)}Query`),
+ prefetchParams,
+ prefetchFuncBody
+ );
+ prefetchFunc.async = true;
+ prefetchFunc.returnType = t.tsTypeAnnotation(
+ t.tsTypeReference(
+ t.identifier('Promise'),
+ t.tsTypeParameterInstantiation([t.tsVoidKeyword()])
+ )
+ );
+ const prefetchExport = t.exportNamedDeclaration(prefetchFunc);
+ addJSDocComment(prefetchExport, [
+ `Prefetch a single ${typeName} for SSR or cache warming`,
+ '',
+ '@example',
+ '```ts',
+ `await prefetch${ucFirst(singularName)}Query(queryClient, { ${pkName}: 'some-id' });`,
+ '```',
+ ]);
+ statements.push(prefetchExport);
}
+ const code = generateCode(statements);
+ const headerText = reactQueryEnabled
+ ? `Single item query hook for ${typeName}`
+ : `Single item query functions for ${typeName}`;
+ const content = getGeneratedFileHeader(headerText) + '\n\n' + code;
+
return {
fileName: getSingleQueryFileName(table),
- content: getFormattedOutput(sourceFile),
+ content,
};
}
-// ============================================================================
-// Batch generator
-// ============================================================================
-
-/**
- * Generate all query hook files for all tables
- */
export function generateAllQueryHooks(
tables: CleanTable[],
options: QueryGeneratorOptions = {}
): GeneratedQueryFile[] {
const files: GeneratedQueryFile[] = [];
-
for (const table of tables) {
files.push(generateListQueryHook(table, options));
files.push(generateSingleQueryHook(table, options));
}
-
return files;
}
diff --git a/graphql/codegen/src/cli/codegen/query-keys.ts b/graphql/codegen/src/cli/codegen/query-keys.ts
new file mode 100644
index 000000000..ba32cff8c
--- /dev/null
+++ b/graphql/codegen/src/cli/codegen/query-keys.ts
@@ -0,0 +1,719 @@
+/**
+ * Query key factory generator
+ *
+ * Generates centralized query keys following the lukemorales query-key-factory pattern.
+ * Supports hierarchical scoped keys for parent-child entity relationships.
+ *
+ * Uses Babel AST for code generation - no string concatenation.
+ *
+ * @see https://tanstack.com/query/docs/framework/react/community/lukemorales-query-key-factory
+ */
+import * as t from '@babel/types';
+
+import type { CleanTable, CleanOperation } from '../../types/schema';
+import type { ResolvedQueryKeyConfig, EntityRelationship } from '../../types/config';
+import { getTableNames, getGeneratedFileHeader, ucFirst, lcFirst } from './utils';
+import {
+ generateCode,
+ addJSDocComment,
+ asConst,
+ constArray,
+ typedParam,
+ keyofTypeof,
+} from './babel-ast';
+
+export interface QueryKeyGeneratorOptions {
+ tables: CleanTable[];
+ customQueries: CleanOperation[];
+ config: ResolvedQueryKeyConfig;
+}
+
+export interface GeneratedQueryKeysFile {
+ fileName: string;
+ content: string;
+}
+
+/**
+ * Get all ancestor entities for a given entity based on relationships
+ */
+function getAncestors(
+ entityName: string,
+ relationships: Record
+): string[] {
+ const relationship = relationships[entityName.toLowerCase()];
+ if (!relationship) return [];
+
+ if (relationship.ancestors && relationship.ancestors.length > 0) {
+ return relationship.ancestors;
+ }
+
+ const ancestors: string[] = [];
+ let current = relationship.parent;
+ while (current) {
+ ancestors.push(current);
+ const parentRel = relationships[current.toLowerCase()];
+ current = parentRel?.parent ?? null;
+ }
+ return ancestors;
+}
+
+/**
+ * Generate scope type declaration for an entity
+ */
+function generateScopeTypeDeclaration(
+ entityName: string,
+ relationships: Record
+): t.ExportNamedDeclaration | null {
+ const relationship = relationships[entityName.toLowerCase()];
+ if (!relationship) return null;
+
+ const ancestors = getAncestors(entityName, relationships);
+ const allParents = [relationship.parent, ...ancestors];
+
+ const typeName = `${ucFirst(entityName)}Scope`;
+ const members: t.TSPropertySignature[] = [];
+
+ for (const parent of allParents) {
+ const rel = relationships[entityName.toLowerCase()];
+ let fkField = `${lcFirst(parent)}Id`;
+ if (rel && rel.parent === parent) {
+ fkField = rel.foreignKey;
+ } else {
+ const directRel = Object.entries(relationships).find(
+ ([, r]) => r.parent === parent
+ );
+ if (directRel) {
+ fkField = directRel[1].foreignKey;
+ }
+ }
+
+ const signature = t.tsPropertySignature(
+ t.identifier(fkField),
+ t.tsTypeAnnotation(t.tsStringKeyword())
+ );
+ signature.optional = true;
+ members.push(signature);
+ }
+
+ return t.exportNamedDeclaration(
+ t.tsTypeAliasDeclaration(
+ t.identifier(typeName),
+ null,
+ t.tsTypeLiteral(members)
+ )
+ );
+}
+
+/**
+ * Build the 'all' property: all: ['entityKey'] as const
+ */
+function buildAllProperty(entityKey: string, singularName: string): t.ObjectProperty {
+ const prop = t.objectProperty(
+ t.identifier('all'),
+ constArray([t.stringLiteral(entityKey)])
+ );
+ addJSDocComment(prop, [`All ${singularName} queries`]);
+ return prop;
+}
+
+/**
+ * Build a byParent property for scoped keys
+ */
+function buildByParentProperty(
+ entityKey: string,
+ typeName: string,
+ parent: string,
+ fkField: string
+): t.ObjectProperty {
+ const parentUpper = ucFirst(parent);
+ const parentLower = lcFirst(parent);
+
+ const arrowFn = t.arrowFunctionExpression(
+ [typedParam(fkField, t.tsStringKeyword())],
+ constArray([
+ t.stringLiteral(entityKey),
+ t.objectExpression([
+ t.objectProperty(t.identifier(fkField), t.identifier(fkField), false, true)
+ ])
+ ])
+ );
+
+ const prop = t.objectProperty(
+ t.identifier(`by${parentUpper}`),
+ arrowFn
+ );
+ addJSDocComment(prop, [`${typeName} queries scoped to a specific ${parentLower}`]);
+ return prop;
+}
+
+/**
+ * Build the scoped helper function property
+ */
+function buildScopedProperty(
+ keysName: string,
+ typeName: string,
+ relationship: EntityRelationship,
+ ancestors: string[]
+): t.ObjectProperty {
+ const scopeTypeName = `${typeName}Scope`;
+ const scopeParam = typedParam('scope', t.tsTypeReference(t.identifier(scopeTypeName)), true);
+
+ const statements: t.Statement[] = [];
+
+ if (relationship.parent) {
+ statements.push(
+ t.ifStatement(
+ t.optionalMemberExpression(
+ t.identifier('scope'),
+ t.identifier(relationship.foreignKey),
+ false,
+ true
+ ),
+ t.blockStatement([
+ t.returnStatement(
+ t.callExpression(
+ t.memberExpression(
+ t.identifier(keysName),
+ t.identifier(`by${ucFirst(relationship.parent)}`)
+ ),
+ [t.memberExpression(t.identifier('scope'), t.identifier(relationship.foreignKey))]
+ )
+ )
+ ])
+ )
+ );
+ }
+
+ for (const ancestor of ancestors) {
+ const ancestorLower = lcFirst(ancestor);
+ const fkField = `${ancestorLower}Id`;
+ statements.push(
+ t.ifStatement(
+ t.optionalMemberExpression(
+ t.identifier('scope'),
+ t.identifier(fkField),
+ false,
+ true
+ ),
+ t.blockStatement([
+ t.returnStatement(
+ t.callExpression(
+ t.memberExpression(
+ t.identifier(keysName),
+ t.identifier(`by${ucFirst(ancestor)}`)
+ ),
+ [t.memberExpression(t.identifier('scope'), t.identifier(fkField))]
+ )
+ )
+ ])
+ )
+ );
+ }
+
+ statements.push(
+ t.returnStatement(
+ t.memberExpression(t.identifier(keysName), t.identifier('all'))
+ )
+ );
+
+ const arrowFn = t.arrowFunctionExpression(
+ [scopeParam],
+ t.blockStatement(statements)
+ );
+
+ const prop = t.objectProperty(t.identifier('scoped'), arrowFn);
+ addJSDocComment(prop, ['Get scope-aware base key']);
+ return prop;
+}
+
+/**
+ * Build lists property (scoped version)
+ */
+function buildScopedListsProperty(keysName: string, scopeTypeName: string): t.ObjectProperty {
+ const scopeParam = typedParam('scope', t.tsTypeReference(t.identifier(scopeTypeName)), true);
+
+ const arrowFn = t.arrowFunctionExpression(
+ [scopeParam],
+ constArray([
+ t.spreadElement(
+ t.callExpression(
+ t.memberExpression(t.identifier(keysName), t.identifier('scoped')),
+ [t.identifier('scope')]
+ )
+ ),
+ t.stringLiteral('list')
+ ])
+ );
+
+ const prop = t.objectProperty(t.identifier('lists'), arrowFn);
+ addJSDocComment(prop, ['List query keys (optionally scoped)']);
+ return prop;
+}
+
+/**
+ * Build list property (scoped version)
+ */
+function buildScopedListProperty(keysName: string, scopeTypeName: string): t.ObjectProperty {
+ const variablesParam = typedParam('variables', t.tsTypeReference(t.identifier('object')), true);
+ const scopeParam = typedParam('scope', t.tsTypeReference(t.identifier(scopeTypeName)), true);
+
+ const arrowFn = t.arrowFunctionExpression(
+ [variablesParam, scopeParam],
+ constArray([
+ t.spreadElement(
+ t.callExpression(
+ t.memberExpression(t.identifier(keysName), t.identifier('lists')),
+ [t.identifier('scope')]
+ )
+ ),
+ t.identifier('variables')
+ ])
+ );
+
+ const prop = t.objectProperty(t.identifier('list'), arrowFn);
+ addJSDocComment(prop, ['List query key with variables']);
+ return prop;
+}
+
+/**
+ * Build details property (scoped version)
+ */
+function buildScopedDetailsProperty(keysName: string, scopeTypeName: string): t.ObjectProperty {
+ const scopeParam = typedParam('scope', t.tsTypeReference(t.identifier(scopeTypeName)), true);
+
+ const arrowFn = t.arrowFunctionExpression(
+ [scopeParam],
+ constArray([
+ t.spreadElement(
+ t.callExpression(
+ t.memberExpression(t.identifier(keysName), t.identifier('scoped')),
+ [t.identifier('scope')]
+ )
+ ),
+ t.stringLiteral('detail')
+ ])
+ );
+
+ const prop = t.objectProperty(t.identifier('details'), arrowFn);
+ addJSDocComment(prop, ['Detail query keys (optionally scoped)']);
+ return prop;
+}
+
+/**
+ * Build detail property (scoped version)
+ */
+function buildScopedDetailProperty(keysName: string, scopeTypeName: string): t.ObjectProperty {
+ const idParam = typedParam('id', t.tsUnionType([t.tsStringKeyword(), t.tsNumberKeyword()]));
+ const scopeParam = typedParam('scope', t.tsTypeReference(t.identifier(scopeTypeName)), true);
+
+ const arrowFn = t.arrowFunctionExpression(
+ [idParam, scopeParam],
+ constArray([
+ t.spreadElement(
+ t.callExpression(
+ t.memberExpression(t.identifier(keysName), t.identifier('details')),
+ [t.identifier('scope')]
+ )
+ ),
+ t.identifier('id')
+ ])
+ );
+
+ const prop = t.objectProperty(t.identifier('detail'), arrowFn);
+ addJSDocComment(prop, ['Detail query key for specific item']);
+ return prop;
+}
+
+/**
+ * Build simple (non-scoped) lists property
+ */
+function buildSimpleListsProperty(keysName: string): t.ObjectProperty {
+ const arrowFn = t.arrowFunctionExpression(
+ [],
+ constArray([
+ t.spreadElement(t.memberExpression(t.identifier(keysName), t.identifier('all'))),
+ t.stringLiteral('list')
+ ])
+ );
+
+ const prop = t.objectProperty(t.identifier('lists'), arrowFn);
+ addJSDocComment(prop, ['List query keys']);
+ return prop;
+}
+
+/**
+ * Build simple (non-scoped) list property
+ */
+function buildSimpleListProperty(keysName: string): t.ObjectProperty {
+ const variablesParam = typedParam('variables', t.tsTypeReference(t.identifier('object')), true);
+
+ const arrowFn = t.arrowFunctionExpression(
+ [variablesParam],
+ constArray([
+ t.spreadElement(
+ t.callExpression(
+ t.memberExpression(t.identifier(keysName), t.identifier('lists')),
+ []
+ )
+ ),
+ t.identifier('variables')
+ ])
+ );
+
+ const prop = t.objectProperty(t.identifier('list'), arrowFn);
+ addJSDocComment(prop, ['List query key with variables']);
+ return prop;
+}
+
+/**
+ * Build simple (non-scoped) details property
+ */
+function buildSimpleDetailsProperty(keysName: string): t.ObjectProperty {
+ const arrowFn = t.arrowFunctionExpression(
+ [],
+ constArray([
+ t.spreadElement(t.memberExpression(t.identifier(keysName), t.identifier('all'))),
+ t.stringLiteral('detail')
+ ])
+ );
+
+ const prop = t.objectProperty(t.identifier('details'), arrowFn);
+ addJSDocComment(prop, ['Detail query keys']);
+ return prop;
+}
+
+/**
+ * Build simple (non-scoped) detail property
+ */
+function buildSimpleDetailProperty(keysName: string): t.ObjectProperty {
+ const idParam = typedParam('id', t.tsUnionType([t.tsStringKeyword(), t.tsNumberKeyword()]));
+
+ const arrowFn = t.arrowFunctionExpression(
+ [idParam],
+ constArray([
+ t.spreadElement(
+ t.callExpression(
+ t.memberExpression(t.identifier(keysName), t.identifier('details')),
+ []
+ )
+ ),
+ t.identifier('id')
+ ])
+ );
+
+ const prop = t.objectProperty(t.identifier('detail'), arrowFn);
+ addJSDocComment(prop, ['Detail query key for specific item']);
+ return prop;
+}
+
+/**
+ * Generate query keys declaration for a single table entity
+ */
+function generateEntityKeysDeclaration(
+ table: CleanTable,
+ relationships: Record,
+ generateScopedKeys: boolean
+): t.ExportNamedDeclaration {
+ const { typeName, singularName } = getTableNames(table);
+ const entityKey = typeName.toLowerCase();
+ const keysName = `${lcFirst(typeName)}Keys`;
+
+ const relationship = relationships[entityKey];
+ const hasRelationship = !!relationship && generateScopedKeys;
+
+ const properties: t.ObjectProperty[] = [];
+
+ properties.push(buildAllProperty(entityKey, singularName));
+
+ if (hasRelationship) {
+ const ancestors = getAncestors(typeName, relationships);
+ const allParents = [relationship.parent, ...ancestors];
+
+ for (const parent of allParents) {
+ let fkField = `${lcFirst(parent)}Id`;
+ if (relationship.parent === parent) {
+ fkField = relationship.foreignKey;
+ }
+ properties.push(buildByParentProperty(entityKey, typeName, parent, fkField));
+ }
+
+ properties.push(buildScopedProperty(keysName, typeName, relationship, ancestors));
+
+ const scopeTypeName = `${typeName}Scope`;
+ properties.push(buildScopedListsProperty(keysName, scopeTypeName));
+ properties.push(buildScopedListProperty(keysName, scopeTypeName));
+ properties.push(buildScopedDetailsProperty(keysName, scopeTypeName));
+ properties.push(buildScopedDetailProperty(keysName, scopeTypeName));
+ } else {
+ properties.push(buildSimpleListsProperty(keysName));
+ properties.push(buildSimpleListProperty(keysName));
+ properties.push(buildSimpleDetailsProperty(keysName));
+ properties.push(buildSimpleDetailProperty(keysName));
+ }
+
+ return t.exportNamedDeclaration(
+ t.variableDeclaration('const', [
+ t.variableDeclarator(
+ t.identifier(keysName),
+ asConst(t.objectExpression(properties))
+ )
+ ])
+ );
+}
+
+/**
+ * Generate query keys declaration for custom operations
+ */
+function generateCustomQueryKeysDeclaration(
+ operations: CleanOperation[]
+): t.ExportNamedDeclaration | null {
+ if (operations.length === 0) return null;
+
+ const properties: t.ObjectProperty[] = [];
+
+ for (const op of operations) {
+ const hasArgs = op.args.length > 0;
+ const hasRequiredArgs = op.args.some(
+ (arg) => arg.type.kind === 'NON_NULL'
+ );
+
+ let prop: t.ObjectProperty;
+
+ if (hasArgs) {
+ const variablesParam = typedParam('variables', t.tsTypeReference(t.identifier('object')), !hasRequiredArgs);
+
+ const arrowFn = t.arrowFunctionExpression(
+ [variablesParam],
+ constArray([t.stringLiteral(op.name), t.identifier('variables')])
+ );
+
+ prop = t.objectProperty(t.identifier(op.name), arrowFn);
+ } else {
+ const arrowFn = t.arrowFunctionExpression(
+ [],
+ constArray([t.stringLiteral(op.name)])
+ );
+
+ prop = t.objectProperty(t.identifier(op.name), arrowFn);
+ }
+
+ addJSDocComment(prop, [`Query key for ${op.name}`]);
+ properties.push(prop);
+ }
+
+ return t.exportNamedDeclaration(
+ t.variableDeclaration('const', [
+ t.variableDeclarator(
+ t.identifier('customQueryKeys'),
+ asConst(t.objectExpression(properties))
+ )
+ ])
+ );
+}
+
+/**
+ * Generate the unified query keys store declaration
+ */
+function generateUnifiedStoreDeclaration(
+ tables: CleanTable[],
+ hasCustomQueries: boolean
+): t.ExportNamedDeclaration {
+ const properties: t.ObjectProperty[] = [];
+
+ for (const table of tables) {
+ const { typeName } = getTableNames(table);
+ const keysName = `${lcFirst(typeName)}Keys`;
+ properties.push(
+ t.objectProperty(t.identifier(lcFirst(typeName)), t.identifier(keysName))
+ );
+ }
+
+ if (hasCustomQueries) {
+ properties.push(
+ t.objectProperty(t.identifier('custom'), t.identifier('customQueryKeys'))
+ );
+ }
+
+ const decl = t.exportNamedDeclaration(
+ t.variableDeclaration('const', [
+ t.variableDeclarator(
+ t.identifier('queryKeys'),
+ asConst(t.objectExpression(properties))
+ )
+ ])
+ );
+
+ addJSDocComment(decl, [
+ 'Unified query key store',
+ '',
+ 'Use this for type-safe query key access across your application.',
+ '',
+ '@example',
+ '```ts',
+ '// Invalidate all user queries',
+ 'queryClient.invalidateQueries({ queryKey: queryKeys.user.all });',
+ '',
+ '// Invalidate user list queries',
+ 'queryClient.invalidateQueries({ queryKey: queryKeys.user.lists() });',
+ '',
+ '// Invalidate specific user',
+ 'queryClient.invalidateQueries({ queryKey: queryKeys.user.detail(userId) });',
+ '```',
+ ]);
+
+ return decl;
+}
+
+/**
+ * Generate the complete query-keys.ts file
+ */
+export function generateQueryKeysFile(
+ options: QueryKeyGeneratorOptions
+): GeneratedQueryKeysFile {
+ const { tables, customQueries, config } = options;
+ const { relationships, generateScopedKeys } = config;
+
+ const statements: t.Statement[] = [];
+
+ // Generate scope types for entities with relationships
+ if (generateScopedKeys && Object.keys(relationships).length > 0) {
+ const generatedScopes = new Set();
+ for (const table of tables) {
+ const { typeName } = getTableNames(table);
+ const scopeTypeName = `${typeName}Scope`;
+ if (!generatedScopes.has(scopeTypeName)) {
+ const scopeType = generateScopeTypeDeclaration(typeName, relationships);
+ if (scopeType) {
+ statements.push(scopeType);
+ generatedScopes.add(scopeTypeName);
+ }
+ }
+ }
+ }
+
+ // Generate entity keys
+ for (const table of tables) {
+ statements.push(generateEntityKeysDeclaration(table, relationships, generateScopedKeys));
+ }
+
+ // Generate custom query keys
+ const queryOperations = customQueries.filter((op) => op.kind === 'query');
+ const customKeysDecl = generateCustomQueryKeysDeclaration(queryOperations);
+ if (customKeysDecl) {
+ statements.push(customKeysDecl);
+ }
+
+ // Generate unified store
+ statements.push(generateUnifiedStoreDeclaration(tables, queryOperations.length > 0));
+
+ // Generate QueryKeyScope type
+ const scopeTypeDecl = t.exportNamedDeclaration(
+ t.tsTypeAliasDeclaration(
+ t.identifier('QueryKeyScope'),
+ null,
+ keyofTypeof('queryKeys')
+ )
+ );
+ addJSDocComment(scopeTypeDecl, ['Type representing all available query key scopes']);
+ statements.push(scopeTypeDecl);
+
+ // Generate code from AST
+ const code = generateCode(statements);
+
+ // Build final content with header and section comments
+ const header = getGeneratedFileHeader('Centralized query key factory');
+ const description = `// ============================================================================
+// This file provides a centralized, type-safe query key factory following
+// the lukemorales query-key-factory pattern for React Query.
+//
+// Benefits:
+// - Single source of truth for all query keys
+// - Type-safe key access with autocomplete
+// - Hierarchical invalidation (invalidate all 'user.*' queries)
+// - Scoped keys for parent-child relationships
+// ============================================================================`;
+
+ let content = `${header}
+
+${description}
+
+`;
+
+ // Add scope types section if present
+ if (generateScopedKeys && Object.keys(relationships).length > 0) {
+ const hasScopes = tables.some(table => {
+ const { typeName } = getTableNames(table);
+ return !!relationships[typeName.toLowerCase()];
+ });
+ if (hasScopes) {
+ content += `// ============================================================================
+// Scope Types
+// ============================================================================
+
+`;
+ }
+ }
+
+ // Insert section comments into the generated code
+ const codeLines = code.split('\n');
+ let inScopeTypes = generateScopedKeys && Object.keys(relationships).length > 0;
+ let addedEntitySection = false;
+ let addedCustomSection = false;
+ let addedUnifiedSection = false;
+
+ for (let i = 0; i < codeLines.length; i++) {
+ const line = codeLines[i];
+
+ // Detect transition from scope types to entity keys
+ if (inScopeTypes && line.startsWith('export const') && line.includes('Keys =')) {
+ content += `// ============================================================================
+// Entity Query Keys
+// ============================================================================
+
+`;
+ inScopeTypes = false;
+ addedEntitySection = true;
+ }
+
+ // Detect custom query keys section
+ if (!addedCustomSection && line.startsWith('export const customQueryKeys')) {
+ content += `
+// ============================================================================
+// Custom Query Keys
+// ============================================================================
+
+`;
+ addedCustomSection = true;
+ }
+
+ // Detect unified store section
+ if (!addedUnifiedSection && line.includes('* Unified query key store')) {
+ content += `
+// ============================================================================
+// Unified Query Key Store
+// ============================================================================
+
+`;
+ addedUnifiedSection = true;
+ }
+
+ content += line + '\n';
+ }
+
+ // If no scope types, add entity section at the beginning
+ if (!addedEntitySection && !inScopeTypes) {
+ const firstExportIndex = content.indexOf('\nexport const');
+ if (firstExportIndex !== -1) {
+ content = content.slice(0, firstExportIndex) + `
+// ============================================================================
+// Entity Query Keys
+// ============================================================================
+` + content.slice(firstExportIndex);
+ }
+ }
+
+ return {
+ fileName: 'query-keys.ts',
+ content,
+ };
+}
diff --git a/graphql/codegen/src/cli/codegen/scalars.ts b/graphql/codegen/src/cli/codegen/scalars.ts
index 36f59bed9..f659cb095 100644
--- a/graphql/codegen/src/cli/codegen/scalars.ts
+++ b/graphql/codegen/src/cli/codegen/scalars.ts
@@ -23,6 +23,7 @@ export const SCALAR_TS_MAP: Record = {
// Geometry types
GeoJSON: 'unknown',
Geometry: 'unknown',
+ GeometryPoint: 'unknown',
Point: 'unknown',
// Interval
diff --git a/graphql/codegen/src/cli/codegen/schema-types-generator.ts b/graphql/codegen/src/cli/codegen/schema-types-generator.ts
index 38fddf63f..b4bc6a655 100644
--- a/graphql/codegen/src/cli/codegen/schema-types-generator.ts
+++ b/graphql/codegen/src/cli/codegen/schema-types-generator.ts
@@ -9,57 +9,37 @@
* These types are referenced by custom mutation/query hooks but not generated
* elsewhere in non-ORM mode.
*
- * Uses ts-morph for robust AST-based code generation.
+ * Uses Babel AST for robust code generation.
*/
-import type { SourceFile } from 'ts-morph';
import type {
TypeRegistry,
CleanArgument,
ResolvedType,
} from '../../types/schema';
-import {
- createProject,
- createSourceFile,
- getMinimalFormattedOutput,
- createFileHeader,
- createInterface,
- createTypeAlias,
- addSectionComment,
- type InterfaceProperty,
-} from './ts-ast';
+import * as t from '@babel/types';
+import { generateCode } from './babel-ast';
import { getTypeBaseName } from './type-resolver';
import {
scalarToTsType,
SCALAR_NAMES,
BASE_FILTER_TYPE_NAMES,
} from './scalars';
+import { getGeneratedFileHeader } from './utils';
export interface GeneratedSchemaTypesFile {
fileName: string;
content: string;
- /** List of enum type names that were generated */
generatedEnums: string[];
- /** List of table entity types that are referenced */
referencedTableTypes: string[];
}
export interface GenerateSchemaTypesOptions {
- /** The TypeRegistry containing all GraphQL types */
typeRegistry: TypeRegistry;
- /** Type names that already exist in types.ts (table entity types) */
tableTypeNames: Set;
}
-// ============================================================================
-// Constants
-// ============================================================================
-
-/**
- * Types that should not be generated (scalars, built-ins, types generated elsewhere)
- */
const SKIP_TYPES = new Set([
...SCALAR_NAMES,
- // GraphQL built-ins
'Query',
'Mutation',
'Subscription',
@@ -69,30 +49,11 @@ const SKIP_TYPES = new Set([
'__InputValue',
'__EnumValue',
'__Directive',
- // Note: PageInfo and Cursor are NOT skipped - they're needed by Connection types
- // Base filter types (generated in types.ts via filters.ts)
...BASE_FILTER_TYPE_NAMES,
]);
-/**
- * Type name patterns to skip (regex patterns)
- *
- * Note: We intentionally DO NOT skip Connection, Edge, Filter, Patch, Condition,
- * or OrderBy types because they may be referenced by custom operations.
- * Previously Condition and OrderBy were skipped but they ARE needed for
- * custom queries like `schemata`, `apiSchemata`, etc.
- */
-const SKIP_TYPE_PATTERNS: RegExp[] = [
- // Currently no patterns are skipped - all types may be needed by custom operations
-];
+const SKIP_TYPE_PATTERNS: RegExp[] = [];
-// ============================================================================
-// Type Conversion Utilities
-// ============================================================================
-
-/**
- * Convert a CleanTypeRef to TypeScript type string
- */
function typeRefToTs(typeRef: CleanArgument['type']): string {
if (typeRef.kind === 'NON_NULL') {
if (typeRef.ofType) {
@@ -108,93 +69,64 @@ function typeRefToTs(typeRef: CleanArgument['type']): string {
return 'unknown[]';
}
- // Scalar or named type
const name = typeRef.name ?? 'unknown';
return scalarToTsType(name, { unknownScalar: 'name' });
}
-/**
- * Check if a type is required (NON_NULL)
- */
function isRequired(typeRef: CleanArgument['type']): boolean {
return typeRef.kind === 'NON_NULL';
}
-/**
- * Check if a type should be skipped
- */
function shouldSkipType(
typeName: string,
tableTypeNames: Set
): boolean {
- // Skip scalars and built-ins
if (SKIP_TYPES.has(typeName)) return true;
-
- // Skip table entity types (already in types.ts)
if (tableTypeNames.has(typeName)) return true;
- // Skip types matching patterns
for (const pattern of SKIP_TYPE_PATTERNS) {
if (pattern.test(typeName)) return true;
}
- // Skip table-specific types that would conflict with inline types in table-based hooks.
- // Note: Patch and CreateInput are now NOT exported from hooks (isExported: false),
- // so we only skip Filter types here.
- // The Filter and OrderBy types are generated inline (non-exported) by table query hooks,
- // but schema-types should still generate them for custom operations that need them.
- // Actually, we don't skip any table-based types now since hooks don't export them.
-
return false;
}
-// ============================================================================
-// ENUM Types Generator
-// ============================================================================
-
-/**
- * Add ENUM types to source file
- */
-function addEnumTypes(
- sourceFile: SourceFile,
+function generateEnumTypes(
typeRegistry: TypeRegistry,
tableTypeNames: Set
-): Set {
+): { statements: t.Statement[]; generatedTypes: Set } {
+ const statements: t.Statement[] = [];
const generatedTypes = new Set();
- addSectionComment(sourceFile, 'Enum Types');
-
for (const [typeName, typeInfo] of typeRegistry) {
if (typeInfo.kind !== 'ENUM') continue;
if (shouldSkipType(typeName, tableTypeNames)) continue;
if (!typeInfo.enumValues || typeInfo.enumValues.length === 0) continue;
- const values = typeInfo.enumValues.map((v) => `'${v}'`).join(' | ');
- sourceFile.addTypeAlias(createTypeAlias(typeName, values));
+ const unionType = t.tsUnionType(
+ typeInfo.enumValues.map((v) => t.tsLiteralType(t.stringLiteral(v)))
+ );
+ const typeAlias = t.tsTypeAliasDeclaration(
+ t.identifier(typeName),
+ null,
+ unionType
+ );
+ statements.push(t.exportNamedDeclaration(typeAlias));
generatedTypes.add(typeName);
}
- return generatedTypes;
+ return { statements, generatedTypes };
}
-// ============================================================================
-// INPUT_OBJECT Types Generator
-// ============================================================================
-
-/**
- * Add INPUT_OBJECT types to source file
- * Uses iteration to handle nested input types
- */
-function addInputObjectTypes(
- sourceFile: SourceFile,
+function generateInputObjectTypes(
typeRegistry: TypeRegistry,
tableTypeNames: Set,
alreadyGenerated: Set
-): Set {
+): { statements: t.Statement[]; generatedTypes: Set } {
+ const statements: t.Statement[] = [];
const generatedTypes = new Set(alreadyGenerated);
const typesToGenerate = new Set();
- // Collect all INPUT_OBJECT types
for (const [typeName, typeInfo] of typeRegistry) {
if (typeInfo.kind !== 'INPUT_OBJECT') continue;
if (shouldSkipType(typeName, tableTypeNames)) continue;
@@ -202,11 +134,6 @@ function addInputObjectTypes(
typesToGenerate.add(typeName);
}
- if (typesToGenerate.size === 0) return generatedTypes;
-
- addSectionComment(sourceFile, 'Input Object Types');
-
- // Process all types - no artificial limit
while (typesToGenerate.size > 0) {
const typeNameResult = typesToGenerate.values().next();
if (typeNameResult.done) break;
@@ -220,20 +147,20 @@ function addInputObjectTypes(
generatedTypes.add(typeName);
- if (typeInfo.inputFields && typeInfo.inputFields.length > 0) {
- const properties: InterfaceProperty[] = [];
+ const properties: t.TSPropertySignature[] = [];
+ if (typeInfo.inputFields && typeInfo.inputFields.length > 0) {
for (const field of typeInfo.inputFields) {
const optional = !isRequired(field.type);
const tsType = typeRefToTs(field.type);
- properties.push({
- name: field.name,
- type: tsType,
- optional,
- docs: field.description ? [field.description] : undefined,
- });
-
- // Follow nested Input types
+
+ const prop = t.tsPropertySignature(
+ t.identifier(field.name),
+ t.tsTypeAnnotation(t.tsTypeReference(t.identifier(tsType)))
+ );
+ prop.optional = optional;
+ properties.push(prop);
+
const baseType = getTypeBaseName(field.type);
if (
baseType &&
@@ -246,81 +173,61 @@ function addInputObjectTypes(
}
}
}
-
- sourceFile.addInterface(createInterface(typeName, properties));
- } else {
- // Empty input object
- sourceFile.addInterface(createInterface(typeName, []));
}
+
+ const interfaceDecl = t.tsInterfaceDeclaration(
+ t.identifier(typeName),
+ null,
+ null,
+ t.tsInterfaceBody(properties)
+ );
+ statements.push(t.exportNamedDeclaration(interfaceDecl));
}
- return generatedTypes;
+ return { statements, generatedTypes };
}
-// ============================================================================
-// UNION Types Generator
-// ============================================================================
-
-/**
- * Add UNION types to source file
- */
-function addUnionTypes(
- sourceFile: SourceFile,
+function generateUnionTypes(
typeRegistry: TypeRegistry,
tableTypeNames: Set,
alreadyGenerated: Set
-): Set {
+): { statements: t.Statement[]; generatedTypes: Set } {
+ const statements: t.Statement[] = [];
const generatedTypes = new Set(alreadyGenerated);
- const unionTypesToGenerate = new Set();
- // Collect all UNION types
for (const [typeName, typeInfo] of typeRegistry) {
if (typeInfo.kind !== 'UNION') continue;
if (shouldSkipType(typeName, tableTypeNames)) continue;
if (generatedTypes.has(typeName)) continue;
- unionTypesToGenerate.add(typeName);
- }
-
- if (unionTypesToGenerate.size === 0) return generatedTypes;
-
- addSectionComment(sourceFile, 'Union Types');
-
- for (const typeName of unionTypesToGenerate) {
- const typeInfo = typeRegistry.get(typeName);
- if (!typeInfo || typeInfo.kind !== 'UNION') continue;
- if (!typeInfo.possibleTypes || typeInfo.possibleTypes.length === 0)
- continue;
-
- // Generate union type as TypeScript union
- const unionMembers = typeInfo.possibleTypes.join(' | ');
- sourceFile.addTypeAlias(createTypeAlias(typeName, unionMembers));
+ if (!typeInfo.possibleTypes || typeInfo.possibleTypes.length === 0) continue;
+
+ const unionType = t.tsUnionType(
+ typeInfo.possibleTypes.map((pt) => t.tsTypeReference(t.identifier(pt)))
+ );
+ const typeAlias = t.tsTypeAliasDeclaration(
+ t.identifier(typeName),
+ null,
+ unionType
+ );
+ statements.push(t.exportNamedDeclaration(typeAlias));
generatedTypes.add(typeName);
}
- return generatedTypes;
+ return { statements, generatedTypes };
}
-// ============================================================================
-// Payload/Return OBJECT Types Generator
-// ============================================================================
-
export interface PayloadTypesResult {
+ statements: t.Statement[];
generatedTypes: Set;
referencedTableTypes: Set;
}
-/**
- * Collect return types from Query and Mutation root types
- * This dynamically discovers what OBJECT types need to be generated
- * based on actual schema structure, not pattern matching
- */
function collectReturnTypesFromRootTypes(
typeRegistry: TypeRegistry,
tableTypeNames: Set
): Set {
const returnTypes = new Set();
- // Get Query and Mutation root types
const queryType = typeRegistry.get('Query');
const mutationType = typeRegistry.get('Mutation');
@@ -343,43 +250,26 @@ function collectReturnTypesFromRootTypes(
return returnTypes;
}
-/**
- * Add Payload OBJECT types to source file
- * These are return types from mutations (e.g., LoginPayload, BootstrapUserPayload)
- *
- * Also tracks which table entity types are referenced so they can be imported.
- *
- * Uses dynamic type discovery from Query/Mutation return types instead of pattern matching.
- */
-function addPayloadObjectTypes(
- sourceFile: SourceFile,
+function generatePayloadObjectTypes(
typeRegistry: TypeRegistry,
tableTypeNames: Set,
alreadyGenerated: Set
): PayloadTypesResult {
+ const statements: t.Statement[] = [];
const generatedTypes = new Set(alreadyGenerated);
const referencedTableTypes = new Set();
- // Dynamically collect return types from Query and Mutation
const typesToGenerate = collectReturnTypesFromRootTypes(
typeRegistry,
tableTypeNames
);
- // Filter out already generated types
for (const typeName of Array.from(typesToGenerate)) {
if (generatedTypes.has(typeName)) {
typesToGenerate.delete(typeName);
}
}
- if (typesToGenerate.size === 0) {
- return { generatedTypes, referencedTableTypes };
- }
-
- addSectionComment(sourceFile, 'Payload/Return Object Types');
-
- // Process all types - no artificial limit
while (typesToGenerate.size > 0) {
const typeNameResult = typesToGenerate.values().next();
if (typeNameResult.done) break;
@@ -393,31 +283,30 @@ function addPayloadObjectTypes(
generatedTypes.add(typeName);
- if (typeInfo.fields && typeInfo.fields.length > 0) {
- const properties: InterfaceProperty[] = [];
+ const properties: t.TSPropertySignature[] = [];
+ if (typeInfo.fields && typeInfo.fields.length > 0) {
for (const field of typeInfo.fields) {
const baseType = getTypeBaseName(field.type);
- // Skip Query and Mutation fields
if (baseType === 'Query' || baseType === 'Mutation') continue;
const tsType = typeRefToTs(field.type);
const isNullable = !isRequired(field.type);
- properties.push({
- name: field.name,
- type: isNullable ? `${tsType} | null` : tsType,
- optional: isNullable,
- docs: field.description ? [field.description] : undefined,
- });
+ const finalType = isNullable ? `${tsType} | null` : tsType;
+
+ const prop = t.tsPropertySignature(
+ t.identifier(field.name),
+ t.tsTypeAnnotation(t.tsTypeReference(t.identifier(finalType)))
+ );
+ prop.optional = isNullable;
+ properties.push(prop);
- // Track table entity types that are referenced
if (baseType && tableTypeNames.has(baseType)) {
referencedTableTypes.add(baseType);
}
- // Follow nested OBJECT types that aren't table types
if (
baseType &&
!generatedTypes.has(baseType) &&
@@ -429,94 +318,78 @@ function addPayloadObjectTypes(
}
}
}
-
- sourceFile.addInterface(createInterface(typeName, properties));
- } else {
- // Empty payload object
- sourceFile.addInterface(createInterface(typeName, []));
}
+
+ const interfaceDecl = t.tsInterfaceDeclaration(
+ t.identifier(typeName),
+ null,
+ null,
+ t.tsInterfaceBody(properties)
+ );
+ statements.push(t.exportNamedDeclaration(interfaceDecl));
}
- return { generatedTypes, referencedTableTypes };
+ return { statements, generatedTypes, referencedTableTypes };
}
-// ============================================================================
-// Main Generator
-// ============================================================================
-
-/**
- * Generate comprehensive schema-types.ts file using ts-morph AST
- *
- * This generates all Input/Payload/Enum types from the TypeRegistry
- * that are needed by custom mutation/query hooks.
- */
export function generateSchemaTypesFile(
options: GenerateSchemaTypesOptions
): GeneratedSchemaTypesFile {
const { typeRegistry, tableTypeNames } = options;
- const project = createProject();
- const sourceFile = createSourceFile(project, 'schema-types.ts');
-
- // Add file header
- sourceFile.insertText(
- 0,
- createFileHeader('GraphQL schema types for custom operations') + '\n'
- );
-
- // Track all generated types
+ const allStatements: t.Statement[] = [];
let generatedTypes = new Set();
- // 1. Generate ENUM types
- const enumTypes = addEnumTypes(sourceFile, typeRegistry, tableTypeNames);
- generatedTypes = new Set([...generatedTypes, ...enumTypes]);
+ const enumResult = generateEnumTypes(typeRegistry, tableTypeNames);
+ generatedTypes = new Set([...generatedTypes, ...enumResult.generatedTypes]);
- // 2. Generate UNION types
- const unionTypes = addUnionTypes(
- sourceFile,
+ const unionResult = generateUnionTypes(
typeRegistry,
tableTypeNames,
generatedTypes
);
- generatedTypes = new Set([...generatedTypes, ...unionTypes]);
+ generatedTypes = new Set([...generatedTypes, ...unionResult.generatedTypes]);
- // 3. Generate INPUT_OBJECT types
- const inputTypes = addInputObjectTypes(
- sourceFile,
+ const inputResult = generateInputObjectTypes(
typeRegistry,
tableTypeNames,
generatedTypes
);
- generatedTypes = new Set([...generatedTypes, ...inputTypes]);
+ generatedTypes = new Set([...generatedTypes, ...inputResult.generatedTypes]);
- // 4. Generate Payload OBJECT types
- const payloadResult = addPayloadObjectTypes(
- sourceFile,
+ const payloadResult = generatePayloadObjectTypes(
typeRegistry,
tableTypeNames,
generatedTypes
);
- // 5. Add imports from types.ts (table entity types + base filter types)
const referencedTableTypes = Array.from(
payloadResult.referencedTableTypes
).sort();
- // Always import base filter types since generated Filter interfaces reference them
const baseFilterImports = Array.from(BASE_FILTER_TYPE_NAMES).sort();
const allTypesImports = [...referencedTableTypes, ...baseFilterImports];
if (allTypesImports.length > 0) {
- // Insert import after the file header comment
- const importStatement = `import type { ${allTypesImports.join(', ')} } from './types';\n\n`;
- // Find position after header (after first */ + newlines)
- const headerEndIndex = sourceFile.getFullText().indexOf('*/') + 3;
- sourceFile.insertText(headerEndIndex, '\n' + importStatement);
+ const typesImport = t.importDeclaration(
+ allTypesImports.map((ti) => t.importSpecifier(t.identifier(ti), t.identifier(ti))),
+ t.stringLiteral('./types')
+ );
+ typesImport.importKind = 'type';
+ allStatements.push(typesImport);
}
+ allStatements.push(...enumResult.statements);
+ allStatements.push(...unionResult.statements);
+ allStatements.push(...inputResult.statements);
+ allStatements.push(...payloadResult.statements);
+
+ const code = generateCode(allStatements);
+ const content = getGeneratedFileHeader('GraphQL schema types for custom operations') + '\n\n' + code;
+
return {
fileName: 'schema-types.ts',
- content: getMinimalFormattedOutput(sourceFile),
- generatedEnums: Array.from(enumTypes).sort(),
+ content,
+ generatedEnums: Array.from(enumResult.generatedTypes).sort(),
referencedTableTypes,
};
}
diff --git a/graphql/codegen/src/cli/codegen/ts-ast.ts b/graphql/codegen/src/cli/codegen/ts-ast.ts
deleted file mode 100644
index 358f4447d..000000000
--- a/graphql/codegen/src/cli/codegen/ts-ast.ts
+++ /dev/null
@@ -1,390 +0,0 @@
-/**
- * TypeScript AST builders using ts-morph
- *
- * Provides utilities for generating TypeScript code via AST manipulation
- * instead of string concatenation.
- */
-import {
- Project,
- SourceFile,
- StructureKind,
- VariableDeclarationKind,
- ScriptTarget,
- ModuleKind,
- type InterfaceDeclarationStructure,
- type PropertySignatureStructure,
- type FunctionDeclarationStructure,
- type VariableStatementStructure,
- type ImportDeclarationStructure,
- type TypeAliasDeclarationStructure,
-} from 'ts-morph';
-
-// ============================================================================
-// Project management
-// ============================================================================
-
-/**
- * Create a new ts-morph project for code generation
- */
-export function createProject(): Project {
- return new Project({
- useInMemoryFileSystem: true,
- compilerOptions: {
- declaration: true,
- strict: true,
- target: ScriptTarget.ESNext,
- module: ModuleKind.ESNext,
- },
- });
-}
-
-/**
- * Create a source file in the project
- */
-export function createSourceFile(project: Project, fileName: string): SourceFile {
- return project.createSourceFile(fileName, '', { overwrite: true });
-}
-
-/**
- * Get formatted output from source file
- */
-export function getFormattedOutput(sourceFile: SourceFile): string {
- sourceFile.formatText({
- indentSize: 2,
- convertTabsToSpaces: true,
- });
- return sourceFile.getFullText();
-}
-
-/**
- * Get output with minimal formatting (preserves intentional blank lines)
- * Post-processes to fix indentation and section comment spacing
- *
- * ts-morph generates type alias bodies with extra indentation:
- * - Properties get 6 spaces (we want 2)
- * - Closing brace gets 4 spaces (we want 0)
- *
- * For interfaces it uses 4 spaces which we convert to 2.
- */
-export function getMinimalFormattedOutput(sourceFile: SourceFile): string {
- let text = sourceFile.getFullText();
-
- // Process each line to fix indentation
- // ts-morph uses inconsistent indentation for type alias bodies
- // We halve all indentation: 4->2, 6->3 (rounds to 2), 8->4, etc.
- text = text.split('\n').map(line => {
- // Match leading whitespace
- const match = line.match(/^(\s*)/);
- if (!match) return line;
-
- const spaces = match[1].length;
- const content = line.slice(spaces);
-
- // Skip empty lines
- if (content === '') return line;
-
- // No indentation - keep as-is
- if (spaces === 0) return line;
-
- // Halve the indentation (minimum 0)
- const newSpaces = Math.floor(spaces / 2);
- return ' '.repeat(newSpaces) + content;
- }).join('\n');
-
- // Ensure blank line after section comment blocks
- text = text.replace(
- /(\/\/ =+\n\/\/ .+\n\/\/ =+)\n(export|\/\/)/g,
- '$1\n\n$2'
- );
-
- // Add blank line between consecutive export declarations (type aliases, interfaces)
- // Pattern: "}\nexport" or ";\nexport" should become "}\n\nexport" or ";\n\nexport"
- text = text.replace(/(\}|\;)\n(export )/g, '$1\n\n$2');
-
- // Remove trailing extra blank lines at end of file
- text = text.replace(/\n\n+$/, '\n');
-
- return text;
-}
-
-// ============================================================================
-// Comment helpers
-// ============================================================================
-
-/**
- * Create a file header comment
- */
-export function createFileHeader(description: string): string {
- return [
- '/**',
- ` * ${description}`,
- ' * @generated by @constructive-io/graphql-codegen',
- ' * DO NOT EDIT - changes will be overwritten',
- ' */',
- ].join('\n');
-}
-
-/**
- * Create JSDoc comment for a declaration
- */
-export function createJsDoc(lines: string[]): string {
- if (lines.length === 1) {
- return `/** ${lines[0]} */`;
- }
- return ['/**', ...lines.map((l) => ` * ${l}`), ' */'].join('\n');
-}
-
-// ============================================================================
-// Import builders
-// ============================================================================
-
-export interface ImportSpec {
- moduleSpecifier: string;
- namedImports?: string[];
- typeOnlyNamedImports?: string[];
- defaultImport?: string;
-}
-
-/**
- * Create import declaration structure
- */
-export function createImport(spec: ImportSpec): ImportDeclarationStructure {
- const namedImports: Array<{ name: string; isTypeOnly?: boolean }> = [];
-
- if (spec.namedImports) {
- namedImports.push(...spec.namedImports.map((name) => ({ name })));
- }
-
- if (spec.typeOnlyNamedImports) {
- namedImports.push(
- ...spec.typeOnlyNamedImports.map((name) => ({ name, isTypeOnly: true }))
- );
- }
-
- return {
- kind: StructureKind.ImportDeclaration,
- moduleSpecifier: spec.moduleSpecifier,
- defaultImport: spec.defaultImport,
- namedImports: namedImports.length > 0 ? namedImports : undefined,
- };
-}
-
-// ============================================================================
-// Interface builders
-// ============================================================================
-
-export interface InterfaceProperty {
- name: string;
- type: string;
- optional?: boolean;
- docs?: string[];
-}
-
-/**
- * Create interface declaration structure
- */
-export function createInterface(
- name: string,
- properties: InterfaceProperty[],
- options?: {
- docs?: string[];
- isExported?: boolean;
- extends?: string[];
- }
-): InterfaceDeclarationStructure {
- return {
- kind: StructureKind.Interface,
- name,
- isExported: options?.isExported ?? true,
- extends: options?.extends,
- docs: options?.docs ? [{ description: options.docs.join('\n') }] : undefined,
- properties: properties.map(
- (prop): PropertySignatureStructure => ({
- kind: StructureKind.PropertySignature,
- name: prop.name,
- type: prop.type,
- hasQuestionToken: prop.optional,
- docs: prop.docs ? [{ description: prop.docs.join('\n') }] : undefined,
- })
- ),
- };
-}
-
-/**
- * Create filter interface with standard PostGraphile operators
- */
-export function createFilterInterface(
- name: string,
- fieldFilters: Array<{ fieldName: string; filterType: string }>,
- options?: { isExported?: boolean }
-): InterfaceDeclarationStructure {
- const properties: InterfaceProperty[] = [
- ...fieldFilters.map((f) => ({
- name: f.fieldName,
- type: f.filterType,
- optional: true,
- })),
- { name: 'and', type: `${name}[]`, optional: true, docs: ['Logical AND'] },
- { name: 'or', type: `${name}[]`, optional: true, docs: ['Logical OR'] },
- { name: 'not', type: name, optional: true, docs: ['Logical NOT'] },
- ];
-
- return createInterface(name, properties, { isExported: options?.isExported ?? true });
-}
-
-// ============================================================================
-// Type alias builders
-// ============================================================================
-
-/**
- * Create type alias declaration structure
- */
-export function createTypeAlias(
- name: string,
- type: string,
- options?: {
- docs?: string[];
- isExported?: boolean;
- }
-): TypeAliasDeclarationStructure {
- return {
- kind: StructureKind.TypeAlias,
- name,
- type,
- isExported: options?.isExported ?? true,
- docs: options?.docs ? [{ description: options.docs.join('\n') }] : undefined,
- };
-}
-
-/**
- * Create union type from string literals
- */
-export function createUnionType(values: string[]): string {
- return values.map((v) => `'${v}'`).join(' | ');
-}
-
-// ============================================================================
-// Variable/constant builders
-// ============================================================================
-
-/**
- * Create const variable statement structure
- */
-export function createConst(
- name: string,
- initializer: string,
- options?: {
- docs?: string[];
- isExported?: boolean;
- type?: string;
- }
-): VariableStatementStructure {
- return {
- kind: StructureKind.VariableStatement,
- declarationKind: VariableDeclarationKind.Const,
- isExported: options?.isExported ?? true,
- docs: options?.docs ? [{ description: options.docs.join('\n') }] : undefined,
- declarations: [
- {
- name,
- type: options?.type,
- initializer,
- },
- ],
- };
-}
-
-/**
- * Create a template literal string (for GraphQL documents)
- */
-export function createTemplateLiteral(content: string): string {
- return '`\n' + content + '\n`';
-}
-
-// ============================================================================
-// Function builders
-// ============================================================================
-
-export interface FunctionParameter {
- name: string;
- type: string;
- optional?: boolean;
- initializer?: string;
-}
-
-/**
- * Create function declaration structure
- */
-export function createFunction(
- name: string,
- parameters: FunctionParameter[],
- returnType: string,
- body: string,
- options?: {
- docs?: string[];
- isExported?: boolean;
- isAsync?: boolean;
- }
-): FunctionDeclarationStructure {
- return {
- kind: StructureKind.Function,
- name,
- isExported: options?.isExported ?? true,
- isAsync: options?.isAsync,
- parameters: parameters.map((p) => ({
- name: p.name,
- type: p.type,
- hasQuestionToken: p.optional,
- initializer: p.initializer,
- })),
- returnType,
- statements: body,
- };
-}
-
-// ============================================================================
-// Export builders
-// ============================================================================
-
-/**
- * Create re-export statement
- */
-export function createReExport(
- names: string[],
- moduleSpecifier: string,
- isTypeOnly: boolean = false
-): string {
- const typePrefix = isTypeOnly ? 'type ' : '';
- return `export ${typePrefix}{ ${names.join(', ')} } from '${moduleSpecifier}';`;
-}
-
-/**
- * Create barrel export statement
- */
-export function createBarrelExport(moduleSpecifier: string): string {
- return `export * from '${moduleSpecifier}';`;
-}
-
-// ============================================================================
-// Section comment helpers
-// ============================================================================
-
-/**
- * Create a section divider comment for generated code
- */
-export function createSectionComment(title: string): string {
- return [
- '// ============================================================================',
- `// ${title}`,
- '// ============================================================================',
- ].join('\n');
-}
-
-/**
- * Add a section comment to source file with proper spacing
- */
-export function addSectionComment(sourceFile: SourceFile, title: string): void {
- sourceFile.addStatements(`\n${createSectionComment(title)}\n\n`);
-}
-
-
diff --git a/graphql/codegen/src/cli/codegen/type-resolver.ts b/graphql/codegen/src/cli/codegen/type-resolver.ts
index cc8a213c1..f358cff12 100644
--- a/graphql/codegen/src/cli/codegen/type-resolver.ts
+++ b/graphql/codegen/src/cli/codegen/type-resolver.ts
@@ -9,7 +9,6 @@ import type {
CleanArgument,
CleanObjectField,
} from '../../types/schema';
-import type { InterfaceProperty } from './ts-ast';
import { scalarToTsType as resolveScalarToTs, SCALAR_NAMES } from './scalars';
// ============================================================================
@@ -214,60 +213,6 @@ export function getBaseTypeKind(typeRef: CleanTypeRef): CleanTypeRef['kind'] {
return typeRef.kind;
}
-// ============================================================================
-// Interface Property Generation
-// ============================================================================
-
-/**
- * Convert CleanArgument to InterfaceProperty for ts-morph
- *
- * @param arg - The GraphQL argument
- * @param tracker - Optional TypeTracker to collect referenced types
- */
-export function argumentToInterfaceProperty(arg: CleanArgument, tracker?: TypeTracker): InterfaceProperty {
- return {
- name: arg.name,
- type: typeRefToTsType(arg.type, tracker),
- optional: !isTypeRequired(arg.type),
- docs: arg.description ? [arg.description] : undefined,
- };
-}
-
-/**
- * Convert CleanObjectField to InterfaceProperty for ts-morph
- *
- * @param field - The GraphQL object field
- * @param tracker - Optional TypeTracker to collect referenced types
- */
-export function fieldToInterfaceProperty(field: CleanObjectField, tracker?: TypeTracker): InterfaceProperty {
- return {
- name: field.name,
- type: typeRefToNullableTsType(field.type, tracker),
- optional: false, // Fields are always present, just potentially null
- docs: field.description ? [field.description] : undefined,
- };
-}
-
-/**
- * Convert an array of CleanArguments to InterfaceProperty array
- *
- * @param args - The GraphQL arguments
- * @param tracker - Optional TypeTracker to collect referenced types
- */
-export function argumentsToInterfaceProperties(args: CleanArgument[], tracker?: TypeTracker): InterfaceProperty[] {
- return args.map((arg) => argumentToInterfaceProperty(arg, tracker));
-}
-
-/**
- * Convert an array of CleanObjectFields to InterfaceProperty array
- *
- * @param fields - The GraphQL object fields
- * @param tracker - Optional TypeTracker to collect referenced types
- */
-export function fieldsToInterfaceProperties(fields: CleanObjectField[], tracker?: TypeTracker): InterfaceProperty[] {
- return fields.map((field) => fieldToInterfaceProperty(field, tracker));
-}
-
// ============================================================================
// Type Filtering
// ============================================================================
diff --git a/graphql/codegen/src/cli/codegen/types.ts b/graphql/codegen/src/cli/codegen/types.ts
index cec801dd6..4491ed972 100644
--- a/graphql/codegen/src/cli/codegen/types.ts
+++ b/graphql/codegen/src/cli/codegen/types.ts
@@ -1,17 +1,16 @@
/**
- * Types generator - generates types.ts with entity interfaces using AST
+ * Types generator - generates types.ts with entity interfaces using Babel AST
*/
import type { CleanTable } from '../../types/schema';
-import {
- createProject,
- createSourceFile,
- getFormattedOutput,
- createFileHeader,
- createImport,
- createInterface,
- type InterfaceProperty,
-} from './ts-ast';
-import { getScalarFields, fieldTypeToTs } from './utils';
+import * as t from '@babel/types';
+import { generateCode } from './babel-ast';
+import { getScalarFields, fieldTypeToTs, getGeneratedFileHeader } from './utils';
+
+interface InterfaceProperty {
+ name: string;
+ type: string;
+ optional?: boolean;
+}
// ============================================================================
// Filter Types Configuration
@@ -155,6 +154,48 @@ export interface GenerateTypesOptions {
enumsFromSchemaTypes?: string[];
}
+function parseTypeAnnotation(typeStr: string): t.TSType {
+ if (typeStr === 'string') return t.tsStringKeyword();
+ if (typeStr === 'number') return t.tsNumberKeyword();
+ if (typeStr === 'boolean') return t.tsBooleanKeyword();
+ if (typeStr === 'unknown') return t.tsUnknownKeyword();
+
+ if (typeStr.includes(' | ')) {
+ const parts = typeStr.split(' | ').map((p) => parseTypeAnnotation(p.trim()));
+ return t.tsUnionType(parts);
+ }
+
+ if (typeStr.endsWith('[]')) {
+ return t.tsArrayType(parseTypeAnnotation(typeStr.slice(0, -2)));
+ }
+
+ if (typeStr === 'null') return t.tsNullKeyword();
+
+ return t.tsTypeReference(t.identifier(typeStr));
+}
+
+function createInterfaceDeclaration(
+ name: string,
+ properties: InterfaceProperty[]
+): t.ExportNamedDeclaration {
+ const props = properties.map((prop) => {
+ const propSig = t.tsPropertySignature(
+ t.identifier(prop.name),
+ t.tsTypeAnnotation(parseTypeAnnotation(prop.type))
+ );
+ propSig.optional = prop.optional ?? false;
+ return propSig;
+ });
+
+ const interfaceDecl = t.tsInterfaceDeclaration(
+ t.identifier(name),
+ null,
+ null,
+ t.tsInterfaceBody(props)
+ );
+ return t.exportNamedDeclaration(interfaceDecl);
+}
+
/**
* Generate types.ts content with all entity interfaces and base filter types
*/
@@ -165,11 +206,7 @@ export function generateTypesFile(
const { enumsFromSchemaTypes = [] } = options;
const enumSet = new Set(enumsFromSchemaTypes);
- const project = createProject();
- const sourceFile = createSourceFile(project, 'types.ts');
-
- // Add file header
- sourceFile.insertText(0, createFileHeader('Entity types and filter types') + '\n\n');
+ const statements: t.Statement[] = [];
// Collect which enums are actually used by entity fields
const usedEnums = new Set();
@@ -186,20 +223,14 @@ export function generateTypesFile(
// Add import for enum types from schema-types if any are used
if (usedEnums.size > 0) {
- sourceFile.addImportDeclaration(
- createImport({
- moduleSpecifier: './schema-types',
- typeOnlyNamedImports: Array.from(usedEnums).sort(),
- })
- );
- sourceFile.addStatements('');
+ const specifiers = Array.from(usedEnums)
+ .sort()
+ .map((name) => t.importSpecifier(t.identifier(name), t.identifier(name)));
+ const importDecl = t.importDeclaration(specifiers, t.stringLiteral('./schema-types'));
+ importDecl.importKind = 'type';
+ statements.push(importDecl);
}
- // Add section comment for entity types
- sourceFile.addStatements('// ============================================================================');
- sourceFile.addStatements('// Entity types');
- sourceFile.addStatements('// ============================================================================\n');
-
// Generate entity interfaces
for (const table of tables) {
const scalarFields = getScalarFields(table);
@@ -209,18 +240,16 @@ export function generateTypesFile(
type: `${fieldTypeToTs(field.type)} | null`,
}));
- sourceFile.addInterface(createInterface(table.name, properties));
+ statements.push(createInterfaceDeclaration(table.name, properties));
}
- // Add section comment for filter types
- sourceFile.addStatements('\n// ============================================================================');
- sourceFile.addStatements('// Filter types (shared PostGraphile filter interfaces)');
- sourceFile.addStatements('// ============================================================================\n');
-
// Generate all filter types
for (const { name, tsType, operators } of FILTER_CONFIGS) {
- sourceFile.addInterface(createInterface(name, buildFilterProperties(tsType, operators)));
+ statements.push(createInterfaceDeclaration(name, buildFilterProperties(tsType, operators)));
}
- return getFormattedOutput(sourceFile);
+ const header = getGeneratedFileHeader('Entity types and filter types');
+ const code = generateCode(statements);
+
+ return header + '\n' + code;
}
diff --git a/graphql/codegen/src/types/config.ts b/graphql/codegen/src/types/config.ts
index 412c39af0..68da99efb 100644
--- a/graphql/codegen/src/types/config.ts
+++ b/graphql/codegen/src/types/config.ts
@@ -2,6 +2,67 @@
* SDK Configuration types
*/
+/**
+ * Entity relationship definition for cascade invalidation
+ */
+export interface EntityRelationship {
+ /** Parent entity name (e.g., 'database' for a table) */
+ parent: string;
+ /** Foreign key field name that references the parent (e.g., 'databaseId') */
+ foreignKey: string;
+ /** Optional transitive ancestors for deep invalidation (e.g., ['database', 'organization']) */
+ ancestors?: string[];
+}
+
+/**
+ * Query key generation configuration
+ */
+export interface QueryKeyConfig {
+ /**
+ * Key structure style
+ * - 'flat': Simple ['entity', 'scope', data] structure
+ * - 'hierarchical': Nested factory pattern with scope support (lukemorales-style)
+ * @default 'hierarchical'
+ */
+ style?: 'flat' | 'hierarchical';
+
+ /**
+ * Define entity relationships for cascade invalidation and scoped keys
+ * Key: child entity name (lowercase), Value: relationship definition
+ *
+ * @example
+ * ```ts
+ * relationships: {
+ * database: { parent: 'organization', foreignKey: 'organizationId' },
+ * table: { parent: 'database', foreignKey: 'databaseId', ancestors: ['organization'] },
+ * field: { parent: 'table', foreignKey: 'tableId', ancestors: ['database', 'organization'] },
+ * }
+ * ```
+ */
+ relationships?: Record;
+
+ /**
+ * Generate scope-aware query keys for entities with relationships
+ * When true, keys include optional scope parameters for hierarchical invalidation
+ * @default true
+ */
+ generateScopedKeys?: boolean;
+
+ /**
+ * Generate cascade invalidation helpers
+ * Creates helpers that invalidate parent entities and all their children
+ * @default true
+ */
+ generateCascadeHelpers?: boolean;
+
+ /**
+ * Generate mutation keys for tracking in-flight mutations
+ * Useful for optimistic updates and mutation deduplication
+ * @default true
+ */
+ generateMutationKeys?: boolean;
+}
+
/**
* Main configuration for graphql-codegen
*/
@@ -127,6 +188,12 @@ export interface GraphQLSDKConfig {
enabled?: boolean;
};
+ /**
+ * Query key generation configuration
+ * Controls how query keys are structured for cache management
+ */
+ queryKeys?: QueryKeyConfig;
+
/**
* Watch mode configuration (dev-only feature)
* When enabled via CLI --watch flag, the CLI will poll the endpoint for schema changes
@@ -177,6 +244,17 @@ export interface ResolvedWatchConfig {
clearScreen: boolean;
}
+/**
+ * Resolved query key configuration with defaults applied
+ */
+export interface ResolvedQueryKeyConfig {
+ style: 'flat' | 'hierarchical';
+ relationships: Record;
+ generateScopedKeys: boolean;
+ generateCascadeHelpers: boolean;
+ generateMutationKeys: boolean;
+}
+
/**
* Resolved configuration with defaults applied
*/
@@ -223,6 +301,7 @@ export interface ResolvedConfig {
reactQuery: {
enabled: boolean;
};
+ queryKeys: ResolvedQueryKeyConfig;
watch: ResolvedWatchConfig;
}
@@ -236,6 +315,17 @@ export const DEFAULT_WATCH_CONFIG: ResolvedWatchConfig = {
clearScreen: true,
};
+/**
+ * Default query key configuration values
+ */
+export const DEFAULT_QUERY_KEY_CONFIG: ResolvedQueryKeyConfig = {
+ style: 'hierarchical',
+ relationships: {},
+ generateScopedKeys: true,
+ generateCascadeHelpers: true,
+ generateMutationKeys: true,
+};
+
/**
* Default configuration values
*/
@@ -271,6 +361,7 @@ export const DEFAULT_CONFIG: Omit = {
reactQuery: {
enabled: true, // React Query hooks enabled by default for generate command
},
+ queryKeys: DEFAULT_QUERY_KEY_CONFIG,
watch: DEFAULT_WATCH_CONFIG,
};
@@ -336,6 +427,13 @@ export function resolveConfig(config: GraphQLSDKConfig): ResolvedConfig {
reactQuery: {
enabled: config.reactQuery?.enabled ?? DEFAULT_CONFIG.reactQuery.enabled,
},
+ queryKeys: {
+ style: config.queryKeys?.style ?? DEFAULT_QUERY_KEY_CONFIG.style,
+ relationships: config.queryKeys?.relationships ?? DEFAULT_QUERY_KEY_CONFIG.relationships,
+ generateScopedKeys: config.queryKeys?.generateScopedKeys ?? DEFAULT_QUERY_KEY_CONFIG.generateScopedKeys,
+ generateCascadeHelpers: config.queryKeys?.generateCascadeHelpers ?? DEFAULT_QUERY_KEY_CONFIG.generateCascadeHelpers,
+ generateMutationKeys: config.queryKeys?.generateMutationKeys ?? DEFAULT_QUERY_KEY_CONFIG.generateMutationKeys,
+ },
watch: {
pollInterval:
config.watch?.pollInterval ?? DEFAULT_WATCH_CONFIG.pollInterval,
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index b5aec3b24..4f0ad85be 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -7,6 +7,7 @@ settings:
packageExtensionsChecksum: sha256-x8B4zkJ4KLRX+yspUWxuggXWlz6zrBLSIh72pNhpPiE=
importers:
+
.:
devDependencies:
'@jest/test-sequencer':
@@ -695,6 +696,12 @@ importers:
graphql/codegen:
dependencies:
+ '@babel/generator':
+ specifier: ^7.28.5
+ version: 7.28.5
+ '@babel/types':
+ specifier: ^7.28.5
+ version: 7.28.5
ajv:
specifier: ^8.17.1
version: 8.17.1
@@ -716,13 +723,13 @@ importers:
prettier:
specifier: ^3.7.4
version: 3.7.4
- ts-morph:
- specifier: ^27.0.2
- version: 27.0.2
devDependencies:
'@tanstack/react-query':
specifier: ^5.90.16
version: 5.90.16(react@19.2.3)
+ '@types/babel__generator':
+ specifier: ^7.27.0
+ version: 7.27.0
'@types/jest':
specifier: ^29.5.14
version: 29.5.14
@@ -2107,287 +2114,165 @@ importers:
publishDirectory: dist
packages:
+
12factor-env@0.1.0:
- resolution:
- {
- integrity: sha512-4SaHhlxwOSizIK5P/14r7V7HxcHmip1fpX2HEToV7NpLWVDkI+eb+nskkq5F0XzC5bq2vhzpIAHQwZVeEibZLg==,
- }
+ resolution: {integrity: sha512-4SaHhlxwOSizIK5P/14r7V7HxcHmip1fpX2HEToV7NpLWVDkI+eb+nskkq5F0XzC5bq2vhzpIAHQwZVeEibZLg==}
'@aws-crypto/crc32@5.2.0':
- resolution:
- {
- integrity: sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg==,
- }
- engines: { node: '>=16.0.0' }
+ resolution: {integrity: sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg==}
+ engines: {node: '>=16.0.0'}
'@aws-crypto/crc32c@5.2.0':
- resolution:
- {
- integrity: sha512-+iWb8qaHLYKrNvGRbiYRHSdKRWhto5XlZUEBwDjYNf+ly5SVYG6zEoYIdxvf5R3zyeP16w4PLBn3rH1xc74Rag==,
- }
+ resolution: {integrity: sha512-+iWb8qaHLYKrNvGRbiYRHSdKRWhto5XlZUEBwDjYNf+ly5SVYG6zEoYIdxvf5R3zyeP16w4PLBn3rH1xc74Rag==}
'@aws-crypto/sha1-browser@5.2.0':
- resolution:
- {
- integrity: sha512-OH6lveCFfcDjX4dbAvCFSYUjJZjDr/3XJ3xHtjn3Oj5b9RjojQo8npoLeA/bNwkOkrSQ0wgrHzXk4tDRxGKJeg==,
- }
+ resolution: {integrity: sha512-OH6lveCFfcDjX4dbAvCFSYUjJZjDr/3XJ3xHtjn3Oj5b9RjojQo8npoLeA/bNwkOkrSQ0wgrHzXk4tDRxGKJeg==}
'@aws-crypto/sha256-browser@5.2.0':
- resolution:
- {
- integrity: sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==,
- }
+ resolution: {integrity: sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==}
'@aws-crypto/sha256-js@5.2.0':
- resolution:
- {
- integrity: sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==,
- }
- engines: { node: '>=16.0.0' }
+ resolution: {integrity: sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==}
+ engines: {node: '>=16.0.0'}
'@aws-crypto/supports-web-crypto@5.2.0':
- resolution:
- {
- integrity: sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==,
- }
+ resolution: {integrity: sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==}
'@aws-crypto/util@5.2.0':
- resolution:
- {
- integrity: sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==,
- }
+ resolution: {integrity: sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==}
'@aws-sdk/client-s3@3.958.0':
- resolution:
- {
- integrity: sha512-ol8Sw37AToBWb6PjRuT/Wu40SrrZSA0N4F7U3yTkjUNX0lirfO1VFLZ0hZtZplVJv8GNPITbiczxQ8VjxESXxg==,
- }
- engines: { node: '>=18.0.0' }
+ resolution: {integrity: sha512-ol8Sw37AToBWb6PjRuT/Wu40SrrZSA0N4F7U3yTkjUNX0lirfO1VFLZ0hZtZplVJv8GNPITbiczxQ8VjxESXxg==}
+ engines: {node: '>=18.0.0'}
'@aws-sdk/client-sso@3.958.0':
- resolution:
- {
- integrity: sha512-6qNCIeaMzKzfqasy2nNRuYnMuaMebCcCPP4J2CVGkA8QYMbIVKPlkn9bpB20Vxe6H/r3jtCCLQaOJjVTx/6dXg==,
- }
- engines: { node: '>=18.0.0' }
+ resolution: {integrity: sha512-6qNCIeaMzKzfqasy2nNRuYnMuaMebCcCPP4J2CVGkA8QYMbIVKPlkn9bpB20Vxe6H/r3jtCCLQaOJjVTx/6dXg==}
+ engines: {node: '>=18.0.0'}
'@aws-sdk/core@3.957.0':
- resolution:
- {
- integrity: sha512-DrZgDnF1lQZv75a52nFWs6MExihJF2GZB6ETZRqr6jMwhrk2kbJPUtvgbifwcL7AYmVqHQDJBrR/MqkwwFCpiw==,
- }
- engines: { node: '>=18.0.0' }
+ resolution: {integrity: sha512-DrZgDnF1lQZv75a52nFWs6MExihJF2GZB6ETZRqr6jMwhrk2kbJPUtvgbifwcL7AYmVqHQDJBrR/MqkwwFCpiw==}
+ engines: {node: '>=18.0.0'}
'@aws-sdk/crc64-nvme@3.957.0':
- resolution:
- {
- integrity: sha512-qSwSfI+qBU9HDsd6/4fM9faCxYJx2yDuHtj+NVOQ6XYDWQzFab/hUdwuKZ77Pi6goLF1pBZhJ2azaC2w7LbnTA==,
- }
- engines: { node: '>=18.0.0' }
+ resolution: {integrity: sha512-qSwSfI+qBU9HDsd6/4fM9faCxYJx2yDuHtj+NVOQ6XYDWQzFab/hUdwuKZ77Pi6goLF1pBZhJ2azaC2w7LbnTA==}
+ engines: {node: '>=18.0.0'}
'@aws-sdk/credential-provider-env@3.957.0':
- resolution:
- {
- integrity: sha512-475mkhGaWCr+Z52fOOVb/q2VHuNvqEDixlYIkeaO6xJ6t9qR0wpLt4hOQaR6zR1wfZV0SlE7d8RErdYq/PByog==,
- }
- engines: { node: '>=18.0.0' }
+ resolution: {integrity: sha512-475mkhGaWCr+Z52fOOVb/q2VHuNvqEDixlYIkeaO6xJ6t9qR0wpLt4hOQaR6zR1wfZV0SlE7d8RErdYq/PByog==}
+ engines: {node: '>=18.0.0'}
'@aws-sdk/credential-provider-http@3.957.0':
- resolution:
- {
- integrity: sha512-8dS55QHRxXgJlHkEYaCGZIhieCs9NU1HU1BcqQ4RfUdSsfRdxxktqUKgCnBnOOn0oD3PPA8cQOCAVgIyRb3Rfw==,
- }
- engines: { node: '>=18.0.0' }
+ resolution: {integrity: sha512-8dS55QHRxXgJlHkEYaCGZIhieCs9NU1HU1BcqQ4RfUdSsfRdxxktqUKgCnBnOOn0oD3PPA8cQOCAVgIyRb3Rfw==}
+ engines: {node: '>=18.0.0'}
'@aws-sdk/credential-provider-ini@3.958.0':
- resolution:
- {
- integrity: sha512-u7twvZa1/6GWmPBZs6DbjlegCoNzNjBsMS/6fvh5quByYrcJr/uLd8YEr7S3UIq4kR/gSnHqcae7y2nL2bqZdg==,
- }
- engines: { node: '>=18.0.0' }
+ resolution: {integrity: sha512-u7twvZa1/6GWmPBZs6DbjlegCoNzNjBsMS/6fvh5quByYrcJr/uLd8YEr7S3UIq4kR/gSnHqcae7y2nL2bqZdg==}
+ engines: {node: '>=18.0.0'}
'@aws-sdk/credential-provider-login@3.958.0':
- resolution:
- {
- integrity: sha512-sDwtDnBSszUIbzbOORGh5gmXGl9aK25+BHb4gb1aVlqB+nNL2+IUEJA62+CE55lXSH8qXF90paivjK8tOHTwPA==,
- }
- engines: { node: '>=18.0.0' }
+ resolution: {integrity: sha512-sDwtDnBSszUIbzbOORGh5gmXGl9aK25+BHb4gb1aVlqB+nNL2+IUEJA62+CE55lXSH8qXF90paivjK8tOHTwPA==}
+ engines: {node: '>=18.0.0'}
'@aws-sdk/credential-provider-node@3.958.0':
- resolution:
- {
- integrity: sha512-vdoZbNG2dt66I7EpN3fKCzi6fp9xjIiwEA/vVVgqO4wXCGw8rKPIdDUus4e13VvTr330uQs2W0UNg/7AgtquEQ==,
- }
- engines: { node: '>=18.0.0' }
+ resolution: {integrity: sha512-vdoZbNG2dt66I7EpN3fKCzi6fp9xjIiwEA/vVVgqO4wXCGw8rKPIdDUus4e13VvTr330uQs2W0UNg/7AgtquEQ==}
+ engines: {node: '>=18.0.0'}
'@aws-sdk/credential-provider-process@3.957.0':
- resolution:
- {
- integrity: sha512-/KIz9kadwbeLy6SKvT79W81Y+hb/8LMDyeloA2zhouE28hmne+hLn0wNCQXAAupFFlYOAtZR2NTBs7HBAReJlg==,
- }
- engines: { node: '>=18.0.0' }
+ resolution: {integrity: sha512-/KIz9kadwbeLy6SKvT79W81Y+hb/8LMDyeloA2zhouE28hmne+hLn0wNCQXAAupFFlYOAtZR2NTBs7HBAReJlg==}
+ engines: {node: '>=18.0.0'}
'@aws-sdk/credential-provider-sso@3.958.0':
- resolution:
- {
- integrity: sha512-CBYHJ5ufp8HC4q+o7IJejCUctJXWaksgpmoFpXerbjAso7/Fg7LLUu9inXVOxlHKLlvYekDXjIUBXDJS2WYdgg==,
- }
- engines: { node: '>=18.0.0' }
+ resolution: {integrity: sha512-CBYHJ5ufp8HC4q+o7IJejCUctJXWaksgpmoFpXerbjAso7/Fg7LLUu9inXVOxlHKLlvYekDXjIUBXDJS2WYdgg==}
+ engines: {node: '>=18.0.0'}
'@aws-sdk/credential-provider-web-identity@3.958.0':
- resolution:
- {
- integrity: sha512-dgnvwjMq5Y66WozzUzxNkCFap+umHUtqMMKlr8z/vl9NYMLem/WUbWNpFFOVFWquXikc+ewtpBMR4KEDXfZ+KA==,
- }
- engines: { node: '>=18.0.0' }
+ resolution: {integrity: sha512-dgnvwjMq5Y66WozzUzxNkCFap+umHUtqMMKlr8z/vl9NYMLem/WUbWNpFFOVFWquXikc+ewtpBMR4KEDXfZ+KA==}
+ engines: {node: '>=18.0.0'}
'@aws-sdk/lib-storage@3.958.0':
- resolution:
- {
- integrity: sha512-cd8CTiJ165ep2DKTc2PHHhVCxDn3byv10BXMGn+lkDY3KwMoatcgZ1uhFWCBuJvsCUnSExqGouJN/Q0qgjkWtg==,
- }
- engines: { node: '>=18.0.0' }
+ resolution: {integrity: sha512-cd8CTiJ165ep2DKTc2PHHhVCxDn3byv10BXMGn+lkDY3KwMoatcgZ1uhFWCBuJvsCUnSExqGouJN/Q0qgjkWtg==}
+ engines: {node: '>=18.0.0'}
peerDependencies:
'@aws-sdk/client-s3': ^3.958.0
'@aws-sdk/middleware-bucket-endpoint@3.957.0':
- resolution:
- {
- integrity: sha512-iczcn/QRIBSpvsdAS/rbzmoBpleX1JBjXvCynMbDceVLBIcVrwT1hXECrhtIC2cjh4HaLo9ClAbiOiWuqt+6MA==,
- }
- engines: { node: '>=18.0.0' }
+ resolution: {integrity: sha512-iczcn/QRIBSpvsdAS/rbzmoBpleX1JBjXvCynMbDceVLBIcVrwT1hXECrhtIC2cjh4HaLo9ClAbiOiWuqt+6MA==}
+ engines: {node: '>=18.0.0'}
'@aws-sdk/middleware-expect-continue@3.957.0':
- resolution:
- {
- integrity: sha512-AlbK3OeVNwZZil0wlClgeI/ISlOt/SPUxBsIns876IFaVu/Pj3DgImnYhpcJuFRek4r4XM51xzIaGQXM6GDHGg==,
- }
- engines: { node: '>=18.0.0' }
+ resolution: {integrity: sha512-AlbK3OeVNwZZil0wlClgeI/ISlOt/SPUxBsIns876IFaVu/Pj3DgImnYhpcJuFRek4r4XM51xzIaGQXM6GDHGg==}
+ engines: {node: '>=18.0.0'}
'@aws-sdk/middleware-flexible-checksums@3.957.0':
- resolution:
- {
- integrity: sha512-iJpeVR5V8se1hl2pt+k8bF/e9JO4KWgPCMjg8BtRspNtKIUGy7j6msYvbDixaKZaF2Veg9+HoYcOhwnZumjXSA==,
- }
- engines: { node: '>=18.0.0' }
+ resolution: {integrity: sha512-iJpeVR5V8se1hl2pt+k8bF/e9JO4KWgPCMjg8BtRspNtKIUGy7j6msYvbDixaKZaF2Veg9+HoYcOhwnZumjXSA==}
+ engines: {node: '>=18.0.0'}
'@aws-sdk/middleware-host-header@3.957.0':
- resolution:
- {
- integrity: sha512-BBgKawVyfQZglEkNTuBBdC3azlyqNXsvvN4jPkWAiNYcY0x1BasaJFl+7u/HisfULstryweJq/dAvIZIxzlZaA==,
- }
- engines: { node: '>=18.0.0' }
+ resolution: {integrity: sha512-BBgKawVyfQZglEkNTuBBdC3azlyqNXsvvN4jPkWAiNYcY0x1BasaJFl+7u/HisfULstryweJq/dAvIZIxzlZaA==}
+ engines: {node: '>=18.0.0'}
'@aws-sdk/middleware-location-constraint@3.957.0':
- resolution:
- {
- integrity: sha512-y8/W7TOQpmDJg/fPYlqAhwA4+I15LrS7TwgUEoxogtkD8gfur9wFMRLT8LCyc9o4NMEcAnK50hSb4+wB0qv6tQ==,
- }
- engines: { node: '>=18.0.0' }
+ resolution: {integrity: sha512-y8/W7TOQpmDJg/fPYlqAhwA4+I15LrS7TwgUEoxogtkD8gfur9wFMRLT8LCyc9o4NMEcAnK50hSb4+wB0qv6tQ==}
+ engines: {node: '>=18.0.0'}
'@aws-sdk/middleware-logger@3.957.0':
- resolution:
- {
- integrity: sha512-w1qfKrSKHf9b5a8O76yQ1t69u6NWuBjr5kBX+jRWFx/5mu6RLpqERXRpVJxfosbep7k3B+DSB5tZMZ82GKcJtQ==,
- }
- engines: { node: '>=18.0.0' }
+ resolution: {integrity: sha512-w1qfKrSKHf9b5a8O76yQ1t69u6NWuBjr5kBX+jRWFx/5mu6RLpqERXRpVJxfosbep7k3B+DSB5tZMZ82GKcJtQ==}
+ engines: {node: '>=18.0.0'}
'@aws-sdk/middleware-recursion-detection@3.957.0':
- resolution:
- {
- integrity: sha512-D2H/WoxhAZNYX+IjkKTdOhOkWQaK0jjJrDBj56hKjU5c9ltQiaX/1PqJ4dfjHntEshJfu0w+E6XJ+/6A6ILBBA==,
- }
- engines: { node: '>=18.0.0' }
+ resolution: {integrity: sha512-D2H/WoxhAZNYX+IjkKTdOhOkWQaK0jjJrDBj56hKjU5c9ltQiaX/1PqJ4dfjHntEshJfu0w+E6XJ+/6A6ILBBA==}
+ engines: {node: '>=18.0.0'}
'@aws-sdk/middleware-sdk-s3@3.957.0':
- resolution:
- {
- integrity: sha512-5B2qY2nR2LYpxoQP0xUum5A1UNvH2JQpLHDH1nWFNF/XetV7ipFHksMxPNhtJJ6ARaWhQIDXfOUj0jcnkJxXUg==,
- }
- engines: { node: '>=18.0.0' }
+ resolution: {integrity: sha512-5B2qY2nR2LYpxoQP0xUum5A1UNvH2JQpLHDH1nWFNF/XetV7ipFHksMxPNhtJJ6ARaWhQIDXfOUj0jcnkJxXUg==}
+ engines: {node: '>=18.0.0'}
'@aws-sdk/middleware-ssec@3.957.0':
- resolution:
- {
- integrity: sha512-qwkmrK0lizdjNt5qxl4tHYfASh8DFpHXM1iDVo+qHe+zuslfMqQEGRkzxS8tJq/I+8F0c6v3IKOveKJAfIvfqQ==,
- }
- engines: { node: '>=18.0.0' }
+ resolution: {integrity: sha512-qwkmrK0lizdjNt5qxl4tHYfASh8DFpHXM1iDVo+qHe+zuslfMqQEGRkzxS8tJq/I+8F0c6v3IKOveKJAfIvfqQ==}
+ engines: {node: '>=18.0.0'}
'@aws-sdk/middleware-user-agent@3.957.0':
- resolution:
- {
- integrity: sha512-50vcHu96XakQnIvlKJ1UoltrFODjsq2KvtTgHiPFteUS884lQnK5VC/8xd1Msz/1ONpLMzdCVproCQqhDTtMPQ==,
- }
- engines: { node: '>=18.0.0' }
+ resolution: {integrity: sha512-50vcHu96XakQnIvlKJ1UoltrFODjsq2KvtTgHiPFteUS884lQnK5VC/8xd1Msz/1ONpLMzdCVproCQqhDTtMPQ==}
+ engines: {node: '>=18.0.0'}
'@aws-sdk/nested-clients@3.958.0':
- resolution:
- {
- integrity: sha512-/KuCcS8b5TpQXkYOrPLYytrgxBhv81+5pChkOlhegbeHttjM69pyUpQVJqyfDM/A7wPLnDrzCAnk4zaAOkY0Nw==,
- }
- engines: { node: '>=18.0.0' }
+ resolution: {integrity: sha512-/KuCcS8b5TpQXkYOrPLYytrgxBhv81+5pChkOlhegbeHttjM69pyUpQVJqyfDM/A7wPLnDrzCAnk4zaAOkY0Nw==}
+ engines: {node: '>=18.0.0'}
'@aws-sdk/region-config-resolver@3.957.0':
- resolution:
- {
- integrity: sha512-V8iY3blh8l2iaOqXWW88HbkY5jDoWjH56jonprG/cpyqqCnprvpMUZWPWYJoI8rHRf2bqzZeql1slxG6EnKI7A==,
- }
- engines: { node: '>=18.0.0' }
+ resolution: {integrity: sha512-V8iY3blh8l2iaOqXWW88HbkY5jDoWjH56jonprG/cpyqqCnprvpMUZWPWYJoI8rHRf2bqzZeql1slxG6EnKI7A==}
+ engines: {node: '>=18.0.0'}
'@aws-sdk/signature-v4-multi-region@3.957.0':
- resolution:
- {
- integrity: sha512-t6UfP1xMUigMMzHcb7vaZcjv7dA2DQkk9C/OAP1dKyrE0vb4lFGDaTApi17GN6Km9zFxJthEMUbBc7DL0hq1Bg==,
- }
- engines: { node: '>=18.0.0' }
+ resolution: {integrity: sha512-t6UfP1xMUigMMzHcb7vaZcjv7dA2DQkk9C/OAP1dKyrE0vb4lFGDaTApi17GN6Km9zFxJthEMUbBc7DL0hq1Bg==}
+ engines: {node: '>=18.0.0'}
'@aws-sdk/token-providers@3.958.0':
- resolution:
- {
- integrity: sha512-UCj7lQXODduD1myNJQkV+LYcGYJ9iiMggR8ow8Hva1g3A/Na5imNXzz6O67k7DAee0TYpy+gkNw+SizC6min8Q==,
- }
- engines: { node: '>=18.0.0' }
+ resolution: {integrity: sha512-UCj7lQXODduD1myNJQkV+LYcGYJ9iiMggR8ow8Hva1g3A/Na5imNXzz6O67k7DAee0TYpy+gkNw+SizC6min8Q==}
+ engines: {node: '>=18.0.0'}
'@aws-sdk/types@3.957.0':
- resolution:
- {
- integrity: sha512-wzWC2Nrt859ABk6UCAVY/WYEbAd7FjkdrQL6m24+tfmWYDNRByTJ9uOgU/kw9zqLCAwb//CPvrJdhqjTznWXAg==,
- }
- engines: { node: '>=18.0.0' }
+ resolution: {integrity: sha512-wzWC2Nrt859ABk6UCAVY/WYEbAd7FjkdrQL6m24+tfmWYDNRByTJ9uOgU/kw9zqLCAwb//CPvrJdhqjTznWXAg==}
+ engines: {node: '>=18.0.0'}
'@aws-sdk/util-arn-parser@3.957.0':
- resolution:
- {
- integrity: sha512-Aj6m+AyrhWyg8YQ4LDPg2/gIfGHCEcoQdBt5DeSFogN5k9mmJPOJ+IAmNSWmWRjpOxEy6eY813RNDI6qS97M0g==,
- }
- engines: { node: '>=18.0.0' }
+ resolution: {integrity: sha512-Aj6m+AyrhWyg8YQ4LDPg2/gIfGHCEcoQdBt5DeSFogN5k9mmJPOJ+IAmNSWmWRjpOxEy6eY813RNDI6qS97M0g==}
+ engines: {node: '>=18.0.0'}
'@aws-sdk/util-endpoints@3.957.0':
- resolution:
- {
- integrity: sha512-xwF9K24mZSxcxKS3UKQFeX/dPYkEps9wF1b+MGON7EvnbcucrJGyQyK1v1xFPn1aqXkBTFi+SZaMRx5E5YCVFw==,
- }
- engines: { node: '>=18.0.0' }
+ resolution: {integrity: sha512-xwF9K24mZSxcxKS3UKQFeX/dPYkEps9wF1b+MGON7EvnbcucrJGyQyK1v1xFPn1aqXkBTFi+SZaMRx5E5YCVFw==}
+ engines: {node: '>=18.0.0'}
'@aws-sdk/util-locate-window@3.957.0':
- resolution:
- {
- integrity: sha512-nhmgKHnNV9K+i9daumaIz8JTLsIIML9PE/HUks5liyrjUzenjW/aHoc7WJ9/Td/gPZtayxFnXQSJRb/fDlBuJw==,
- }
- engines: { node: '>=18.0.0' }
+ resolution: {integrity: sha512-nhmgKHnNV9K+i9daumaIz8JTLsIIML9PE/HUks5liyrjUzenjW/aHoc7WJ9/Td/gPZtayxFnXQSJRb/fDlBuJw==}
+ engines: {node: '>=18.0.0'}
'@aws-sdk/util-user-agent-browser@3.957.0':
- resolution:
- {
- integrity: sha512-exueuwxef0lUJRnGaVkNSC674eAiWU07ORhxBnevFFZEKisln+09Qrtw823iyv5I1N8T+wKfh95xvtWQrNKNQw==,
- }
+ resolution: {integrity: sha512-exueuwxef0lUJRnGaVkNSC674eAiWU07ORhxBnevFFZEKisln+09Qrtw823iyv5I1N8T+wKfh95xvtWQrNKNQw==}
'@aws-sdk/util-user-agent-node@3.957.0':
- resolution:
- {
- integrity: sha512-ycbYCwqXk4gJGp0Oxkzf2KBeeGBdTxz559D41NJP8FlzSej1Gh7Rk40Zo6AyTfsNWkrl/kVi1t937OIzC5t+9Q==,
- }
- engines: { node: '>=18.0.0' }
+ resolution: {integrity: sha512-ycbYCwqXk4gJGp0Oxkzf2KBeeGBdTxz559D41NJP8FlzSej1Gh7Rk40Zo6AyTfsNWkrl/kVi1t937OIzC5t+9Q==}
+ engines: {node: '>=18.0.0'}
peerDependencies:
aws-crt: '>=1.0.0'
peerDependenciesMeta:
@@ -2395,726 +2280,447 @@ packages:
optional: true
'@aws-sdk/xml-builder@3.957.0':
- resolution:
- {
- integrity: sha512-Ai5iiQqS8kJ5PjzMhWcLKN0G2yasAkvpnPlq2EnqlIMdB48HsizElt62qcktdxp4neRMyGkFq4NzgmDbXnhRiA==,
- }
- engines: { node: '>=18.0.0' }
+ resolution: {integrity: sha512-Ai5iiQqS8kJ5PjzMhWcLKN0G2yasAkvpnPlq2EnqlIMdB48HsizElt62qcktdxp4neRMyGkFq4NzgmDbXnhRiA==}
+ engines: {node: '>=18.0.0'}
'@aws/lambda-invoke-store@0.2.2':
- resolution:
- {
- integrity: sha512-C0NBLsIqzDIae8HFw9YIrIBsbc0xTiOtt7fAukGPnqQ/+zZNaq+4jhuccltK0QuWHBnNm/a6kLIRA6GFiM10eg==,
- }
- engines: { node: '>=18.0.0' }
+ resolution: {integrity: sha512-C0NBLsIqzDIae8HFw9YIrIBsbc0xTiOtt7fAukGPnqQ/+zZNaq+4jhuccltK0QuWHBnNm/a6kLIRA6GFiM10eg==}
+ engines: {node: '>=18.0.0'}
'@babel/code-frame@7.27.1':
- resolution:
- {
- integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==,
- }
- engines: { node: '>=6.9.0' }
+ resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==}
+ engines: {node: '>=6.9.0'}
'@babel/compat-data@7.28.5':
- resolution:
- {
- integrity: sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA==,
- }
- engines: { node: '>=6.9.0' }
+ resolution: {integrity: sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA==}
+ engines: {node: '>=6.9.0'}
'@babel/core@7.28.5':
- resolution:
- {
- integrity: sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==,
- }
- engines: { node: '>=6.9.0' }
+ resolution: {integrity: sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==}
+ engines: {node: '>=6.9.0'}
'@babel/generator@7.28.5':
- resolution:
- {
- integrity: sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==,
- }
- engines: { node: '>=6.9.0' }
+ resolution: {integrity: sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==}
+ engines: {node: '>=6.9.0'}
'@babel/helper-annotate-as-pure@7.27.3':
- resolution:
- {
- integrity: sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==,
- }
- engines: { node: '>=6.9.0' }
+ resolution: {integrity: sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==}
+ engines: {node: '>=6.9.0'}
'@babel/helper-compilation-targets@7.27.2':
- resolution:
- {
- integrity: sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==,
- }
- engines: { node: '>=6.9.0' }
+ resolution: {integrity: sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==}
+ engines: {node: '>=6.9.0'}
'@babel/helper-globals@7.28.0':
- resolution:
- {
- integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==,
- }
- engines: { node: '>=6.9.0' }
+ resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==}
+ engines: {node: '>=6.9.0'}
'@babel/helper-module-imports@7.27.1':
- resolution:
- {
- integrity: sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==,
- }
- engines: { node: '>=6.9.0' }
+ resolution: {integrity: sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==}
+ engines: {node: '>=6.9.0'}
'@babel/helper-module-transforms@7.28.3':
- resolution:
- {
- integrity: sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==,
- }
- engines: { node: '>=6.9.0' }
+ resolution: {integrity: sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==}
+ engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0
'@babel/helper-plugin-utils@7.27.1':
- resolution:
- {
- integrity: sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==,
- }
- engines: { node: '>=6.9.0' }
+ resolution: {integrity: sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==}
+ engines: {node: '>=6.9.0'}
'@babel/helper-string-parser@7.27.1':
- resolution:
- {
- integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==,
- }
- engines: { node: '>=6.9.0' }
+ resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==}
+ engines: {node: '>=6.9.0'}
'@babel/helper-validator-identifier@7.28.5':
- resolution:
- {
- integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==,
- }
- engines: { node: '>=6.9.0' }
+ resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==}
+ engines: {node: '>=6.9.0'}
'@babel/helper-validator-option@7.27.1':
- resolution:
- {
- integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==,
- }
- engines: { node: '>=6.9.0' }
+ resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==}
+ engines: {node: '>=6.9.0'}
'@babel/helpers@7.28.4':
- resolution:
- {
- integrity: sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==,
- }
- engines: { node: '>=6.9.0' }
+ resolution: {integrity: sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==}
+ engines: {node: '>=6.9.0'}
'@babel/parser@7.28.5':
- resolution:
- {
- integrity: sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==,
- }
- engines: { node: '>=6.0.0' }
+ resolution: {integrity: sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==}
+ engines: {node: '>=6.0.0'}
hasBin: true
'@babel/plugin-syntax-async-generators@7.8.4':
- resolution:
- {
- integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==,
- }
+ resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==}
peerDependencies:
'@babel/core': ^7.0.0-0
'@babel/plugin-syntax-bigint@7.8.3':
- resolution:
- {
- integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==,
- }
+ resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==}
peerDependencies:
'@babel/core': ^7.0.0-0
'@babel/plugin-syntax-class-properties@7.12.13':
- resolution:
- {
- integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==,
- }
+ resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==}
peerDependencies:
'@babel/core': ^7.0.0-0
'@babel/plugin-syntax-class-static-block@7.14.5':
- resolution:
- {
- integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==,
- }
- engines: { node: '>=6.9.0' }
+ resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==}
+ engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
'@babel/plugin-syntax-import-attributes@7.27.1':
- resolution:
- {
- integrity: sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==,
- }
- engines: { node: '>=6.9.0' }
+ resolution: {integrity: sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==}
+ engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
'@babel/plugin-syntax-import-meta@7.10.4':
- resolution:
- {
- integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==,
- }
+ resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==}
peerDependencies:
'@babel/core': ^7.0.0-0
'@babel/plugin-syntax-json-strings@7.8.3':
- resolution:
- {
- integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==,
- }
+ resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==}
peerDependencies:
'@babel/core': ^7.0.0-0
'@babel/plugin-syntax-jsx@7.27.1':
- resolution:
- {
- integrity: sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==,
- }
- engines: { node: '>=6.9.0' }
+ resolution: {integrity: sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==}
+ engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
'@babel/plugin-syntax-logical-assignment-operators@7.10.4':
- resolution:
- {
- integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==,
- }
+ resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==}
peerDependencies:
'@babel/core': ^7.0.0-0
'@babel/plugin-syntax-nullish-coalescing-operator@7.8.3':
- resolution:
- {
- integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==,
- }
+ resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==}
peerDependencies:
'@babel/core': ^7.0.0-0
'@babel/plugin-syntax-numeric-separator@7.10.4':
- resolution:
- {
- integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==,
- }
+ resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==}
peerDependencies:
'@babel/core': ^7.0.0-0
'@babel/plugin-syntax-object-rest-spread@7.8.3':
- resolution:
- {
- integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==,
- }
+ resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==}
peerDependencies:
'@babel/core': ^7.0.0-0
'@babel/plugin-syntax-optional-catch-binding@7.8.3':
- resolution:
- {
- integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==,
- }
+ resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==}
peerDependencies:
'@babel/core': ^7.0.0-0
'@babel/plugin-syntax-optional-chaining@7.8.3':
- resolution:
- {
- integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==,
- }
+ resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==}
peerDependencies:
'@babel/core': ^7.0.0-0
'@babel/plugin-syntax-private-property-in-object@7.14.5':
- resolution:
- {
- integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==,
- }
- engines: { node: '>=6.9.0' }
+ resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==}
+ engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
'@babel/plugin-syntax-top-level-await@7.14.5':
- resolution:
- {
- integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==,
- }
- engines: { node: '>=6.9.0' }
+ resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==}
+ engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
'@babel/plugin-syntax-typescript@7.27.1':
- resolution:
- {
- integrity: sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==,
- }
- engines: { node: '>=6.9.0' }
+ resolution: {integrity: sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==}
+ engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
'@babel/runtime-corejs3@7.28.4':
- resolution:
- {
- integrity: sha512-h7iEYiW4HebClDEhtvFObtPmIvrd1SSfpI9EhOeKk4CtIK/ngBWFpuhCzhdmRKtg71ylcue+9I6dv54XYO1epQ==,
- }
- engines: { node: '>=6.9.0' }
+ resolution: {integrity: sha512-h7iEYiW4HebClDEhtvFObtPmIvrd1SSfpI9EhOeKk4CtIK/ngBWFpuhCzhdmRKtg71ylcue+9I6dv54XYO1epQ==}
+ engines: {node: '>=6.9.0'}
'@babel/runtime@7.28.4':
- resolution:
- {
- integrity: sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==,
- }
- engines: { node: '>=6.9.0' }
+ resolution: {integrity: sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==}
+ engines: {node: '>=6.9.0'}
'@babel/template@7.27.2':
- resolution:
- {
- integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==,
- }
- engines: { node: '>=6.9.0' }
+ resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==}
+ engines: {node: '>=6.9.0'}
'@babel/traverse@7.28.5':
- resolution:
- {
- integrity: sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==,
- }
- engines: { node: '>=6.9.0' }
+ resolution: {integrity: sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==}
+ engines: {node: '>=6.9.0'}
'@babel/types@7.28.5':
- resolution:
- {
- integrity: sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==,
- }
- engines: { node: '>=6.9.0' }
+ resolution: {integrity: sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==}
+ engines: {node: '>=6.9.0'}
'@bcoe/v8-coverage@0.2.3':
- resolution:
- {
- integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==,
- }
+ resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==}
'@cspotcode/source-map-support@0.8.1':
- resolution:
- {
- integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==,
- }
- engines: { node: '>=12' }
+ resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==}
+ engines: {node: '>=12'}
'@emnapi/core@1.7.1':
- resolution:
- {
- integrity: sha512-o1uhUASyo921r2XtHYOHy7gdkGLge8ghBEQHMWmyJFoXlpU58kIrhhN3w26lpQb6dspetweapMn2CSNwQ8I4wg==,
- }
+ resolution: {integrity: sha512-o1uhUASyo921r2XtHYOHy7gdkGLge8ghBEQHMWmyJFoXlpU58kIrhhN3w26lpQb6dspetweapMn2CSNwQ8I4wg==}
'@emnapi/runtime@1.7.1':
- resolution:
- {
- integrity: sha512-PVtJr5CmLwYAU9PZDMITZoR5iAOShYREoR45EyyLrbntV50mdePTgUn4AmOw90Ifcj+x2kRjdzr1HP3RrNiHGA==,
- }
+ resolution: {integrity: sha512-PVtJr5CmLwYAU9PZDMITZoR5iAOShYREoR45EyyLrbntV50mdePTgUn4AmOw90Ifcj+x2kRjdzr1HP3RrNiHGA==}
'@emnapi/wasi-threads@1.1.0':
- resolution:
- {
- integrity: sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==,
- }
+ resolution: {integrity: sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==}
'@emotion/is-prop-valid@1.4.0':
- resolution:
- {
- integrity: sha512-QgD4fyscGcbbKwJmqNvUMSE02OsHUa+lAWKdEUIJKgqe5IwRSKd7+KhibEWdaKwgjLj0DRSHA9biAIqGBk05lw==,
- }
+ resolution: {integrity: sha512-QgD4fyscGcbbKwJmqNvUMSE02OsHUa+lAWKdEUIJKgqe5IwRSKd7+KhibEWdaKwgjLj0DRSHA9biAIqGBk05lw==}
'@emotion/memoize@0.9.0':
- resolution:
- {
- integrity: sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==,
- }
+ resolution: {integrity: sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==}
'@emotion/stylis@0.8.5':
- resolution:
- {
- integrity: sha512-h6KtPihKFn3T9fuIrwvXXUOwlx3rfUvfZIcP5a6rh8Y7zjE3O06hT5Ss4S/YI1AYhuZ1kjaE/5EaOOI2NqSylQ==,
- }
+ resolution: {integrity: sha512-h6KtPihKFn3T9fuIrwvXXUOwlx3rfUvfZIcP5a6rh8Y7zjE3O06hT5Ss4S/YI1AYhuZ1kjaE/5EaOOI2NqSylQ==}
'@emotion/unitless@0.7.5':
- resolution:
- {
- integrity: sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==,
- }
+ resolution: {integrity: sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==}
'@esbuild/aix-ppc64@0.27.2':
- resolution:
- {
- integrity: sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw==,
- }
- engines: { node: '>=18' }
+ resolution: {integrity: sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw==}
+ engines: {node: '>=18'}
cpu: [ppc64]
os: [aix]
'@esbuild/android-arm64@0.27.2':
- resolution:
- {
- integrity: sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA==,
- }
- engines: { node: '>=18' }
+ resolution: {integrity: sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA==}
+ engines: {node: '>=18'}
cpu: [arm64]
os: [android]
'@esbuild/android-arm@0.27.2':
- resolution:
- {
- integrity: sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA==,
- }
- engines: { node: '>=18' }
+ resolution: {integrity: sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA==}
+ engines: {node: '>=18'}
cpu: [arm]
os: [android]
'@esbuild/android-x64@0.27.2':
- resolution:
- {
- integrity: sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A==,
- }
- engines: { node: '>=18' }
+ resolution: {integrity: sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A==}
+ engines: {node: '>=18'}
cpu: [x64]
os: [android]
'@esbuild/darwin-arm64@0.27.2':
- resolution:
- {
- integrity: sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg==,
- }
- engines: { node: '>=18' }
+ resolution: {integrity: sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg==}
+ engines: {node: '>=18'}
cpu: [arm64]
os: [darwin]
'@esbuild/darwin-x64@0.27.2':
- resolution:
- {
- integrity: sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA==,
- }
- engines: { node: '>=18' }
+ resolution: {integrity: sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA==}
+ engines: {node: '>=18'}
cpu: [x64]
os: [darwin]
'@esbuild/freebsd-arm64@0.27.2':
- resolution:
- {
- integrity: sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g==,
- }
- engines: { node: '>=18' }
+ resolution: {integrity: sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g==}
+ engines: {node: '>=18'}
cpu: [arm64]
os: [freebsd]
'@esbuild/freebsd-x64@0.27.2':
- resolution:
- {
- integrity: sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA==,
- }
- engines: { node: '>=18' }
+ resolution: {integrity: sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA==}
+ engines: {node: '>=18'}
cpu: [x64]
os: [freebsd]
'@esbuild/linux-arm64@0.27.2':
- resolution:
- {
- integrity: sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw==,
- }
- engines: { node: '>=18' }
+ resolution: {integrity: sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw==}
+ engines: {node: '>=18'}
cpu: [arm64]
os: [linux]
'@esbuild/linux-arm@0.27.2':
- resolution:
- {
- integrity: sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw==,
- }
- engines: { node: '>=18' }
+ resolution: {integrity: sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw==}
+ engines: {node: '>=18'}
cpu: [arm]
os: [linux]
'@esbuild/linux-ia32@0.27.2':
- resolution:
- {
- integrity: sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w==,
- }
- engines: { node: '>=18' }
+ resolution: {integrity: sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w==}
+ engines: {node: '>=18'}
cpu: [ia32]
os: [linux]
'@esbuild/linux-loong64@0.27.2':
- resolution:
- {
- integrity: sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg==,
- }
- engines: { node: '>=18' }
+ resolution: {integrity: sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg==}
+ engines: {node: '>=18'}
cpu: [loong64]
os: [linux]
'@esbuild/linux-mips64el@0.27.2':
- resolution:
- {
- integrity: sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw==,
- }
- engines: { node: '>=18' }
+ resolution: {integrity: sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw==}
+ engines: {node: '>=18'}
cpu: [mips64el]
os: [linux]
'@esbuild/linux-ppc64@0.27.2':
- resolution:
- {
- integrity: sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ==,
- }
- engines: { node: '>=18' }
+ resolution: {integrity: sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ==}
+ engines: {node: '>=18'}
cpu: [ppc64]
os: [linux]
'@esbuild/linux-riscv64@0.27.2':
- resolution:
- {
- integrity: sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA==,
- }
- engines: { node: '>=18' }
+ resolution: {integrity: sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA==}
+ engines: {node: '>=18'}
cpu: [riscv64]
os: [linux]
'@esbuild/linux-s390x@0.27.2':
- resolution:
- {
- integrity: sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w==,
- }
- engines: { node: '>=18' }
+ resolution: {integrity: sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w==}
+ engines: {node: '>=18'}
cpu: [s390x]
os: [linux]
'@esbuild/linux-x64@0.27.2':
- resolution:
- {
- integrity: sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA==,
- }
- engines: { node: '>=18' }
+ resolution: {integrity: sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA==}
+ engines: {node: '>=18'}
cpu: [x64]
os: [linux]
'@esbuild/netbsd-arm64@0.27.2':
- resolution:
- {
- integrity: sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw==,
- }
- engines: { node: '>=18' }
+ resolution: {integrity: sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw==}
+ engines: {node: '>=18'}
cpu: [arm64]
os: [netbsd]
'@esbuild/netbsd-x64@0.27.2':
- resolution:
- {
- integrity: sha512-HwGDZ0VLVBY3Y+Nw0JexZy9o/nUAWq9MlV7cahpaXKW6TOzfVno3y3/M8Ga8u8Yr7GldLOov27xiCnqRZf0tCA==,
- }
- engines: { node: '>=18' }
+ resolution: {integrity: sha512-HwGDZ0VLVBY3Y+Nw0JexZy9o/nUAWq9MlV7cahpaXKW6TOzfVno3y3/M8Ga8u8Yr7GldLOov27xiCnqRZf0tCA==}
+ engines: {node: '>=18'}
cpu: [x64]
os: [netbsd]
'@esbuild/openbsd-arm64@0.27.2':
- resolution:
- {
- integrity: sha512-DNIHH2BPQ5551A7oSHD0CKbwIA/Ox7+78/AWkbS5QoRzaqlev2uFayfSxq68EkonB+IKjiuxBFoV8ESJy8bOHA==,
- }
- engines: { node: '>=18' }
+ resolution: {integrity: sha512-DNIHH2BPQ5551A7oSHD0CKbwIA/Ox7+78/AWkbS5QoRzaqlev2uFayfSxq68EkonB+IKjiuxBFoV8ESJy8bOHA==}
+ engines: {node: '>=18'}
cpu: [arm64]
os: [openbsd]
'@esbuild/openbsd-x64@0.27.2':
- resolution:
- {
- integrity: sha512-/it7w9Nb7+0KFIzjalNJVR5bOzA9Vay+yIPLVHfIQYG/j+j9VTH84aNB8ExGKPU4AzfaEvN9/V4HV+F+vo8OEg==,
- }
- engines: { node: '>=18' }
+ resolution: {integrity: sha512-/it7w9Nb7+0KFIzjalNJVR5bOzA9Vay+yIPLVHfIQYG/j+j9VTH84aNB8ExGKPU4AzfaEvN9/V4HV+F+vo8OEg==}
+ engines: {node: '>=18'}
cpu: [x64]
os: [openbsd]
'@esbuild/openharmony-arm64@0.27.2':
- resolution:
- {
- integrity: sha512-LRBbCmiU51IXfeXk59csuX/aSaToeG7w48nMwA6049Y4J4+VbWALAuXcs+qcD04rHDuSCSRKdmY63sruDS5qag==,
- }
- engines: { node: '>=18' }
+ resolution: {integrity: sha512-LRBbCmiU51IXfeXk59csuX/aSaToeG7w48nMwA6049Y4J4+VbWALAuXcs+qcD04rHDuSCSRKdmY63sruDS5qag==}
+ engines: {node: '>=18'}
cpu: [arm64]
os: [openharmony]
'@esbuild/sunos-x64@0.27.2':
- resolution:
- {
- integrity: sha512-kMtx1yqJHTmqaqHPAzKCAkDaKsffmXkPHThSfRwZGyuqyIeBvf08KSsYXl+abf5HDAPMJIPnbBfXvP2ZC2TfHg==,
- }
- engines: { node: '>=18' }
+ resolution: {integrity: sha512-kMtx1yqJHTmqaqHPAzKCAkDaKsffmXkPHThSfRwZGyuqyIeBvf08KSsYXl+abf5HDAPMJIPnbBfXvP2ZC2TfHg==}
+ engines: {node: '>=18'}
cpu: [x64]
os: [sunos]
'@esbuild/win32-arm64@0.27.2':
- resolution:
- {
- integrity: sha512-Yaf78O/B3Kkh+nKABUF++bvJv5Ijoy9AN1ww904rOXZFLWVc5OLOfL56W+C8F9xn5JQZa3UX6m+IktJnIb1Jjg==,
- }
- engines: { node: '>=18' }
+ resolution: {integrity: sha512-Yaf78O/B3Kkh+nKABUF++bvJv5Ijoy9AN1ww904rOXZFLWVc5OLOfL56W+C8F9xn5JQZa3UX6m+IktJnIb1Jjg==}
+ engines: {node: '>=18'}
cpu: [arm64]
os: [win32]
'@esbuild/win32-ia32@0.27.2':
- resolution:
- {
- integrity: sha512-Iuws0kxo4yusk7sw70Xa2E2imZU5HoixzxfGCdxwBdhiDgt9vX9VUCBhqcwY7/uh//78A1hMkkROMJq9l27oLQ==,
- }
- engines: { node: '>=18' }
+ resolution: {integrity: sha512-Iuws0kxo4yusk7sw70Xa2E2imZU5HoixzxfGCdxwBdhiDgt9vX9VUCBhqcwY7/uh//78A1hMkkROMJq9l27oLQ==}
+ engines: {node: '>=18'}
cpu: [ia32]
os: [win32]
'@esbuild/win32-x64@0.27.2':
- resolution:
- {
- integrity: sha512-sRdU18mcKf7F+YgheI/zGf5alZatMUTKj/jNS6l744f9u3WFu4v7twcUI9vu4mknF4Y9aDlblIie0IM+5xxaqQ==,
- }
- engines: { node: '>=18' }
+ resolution: {integrity: sha512-sRdU18mcKf7F+YgheI/zGf5alZatMUTKj/jNS6l744f9u3WFu4v7twcUI9vu4mknF4Y9aDlblIie0IM+5xxaqQ==}
+ engines: {node: '>=18'}
cpu: [x64]
os: [win32]
'@eslint-community/eslint-utils@4.9.0':
- resolution:
- {
- integrity: sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==,
- }
- engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 }
+ resolution: {integrity: sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
'@eslint-community/regexpp@4.12.2':
- resolution:
- {
- integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==,
- }
- engines: { node: ^12.0.0 || ^14.0.0 || >=16.0.0 }
+ resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==}
+ engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
'@eslint/config-array@0.21.1':
- resolution:
- {
- integrity: sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==,
- }
- engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 }
+ resolution: {integrity: sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@eslint/config-helpers@0.4.2':
- resolution:
- {
- integrity: sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==,
- }
- engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 }
+ resolution: {integrity: sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@eslint/core@0.17.0':
- resolution:
- {
- integrity: sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==,
- }
- engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 }
+ resolution: {integrity: sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@eslint/eslintrc@3.3.3':
- resolution:
- {
- integrity: sha512-Kr+LPIUVKz2qkx1HAMH8q1q6azbqBAsXJUxBl/ODDuVPX45Z9DfwB8tPjTi6nNZ8BuM3nbJxC5zCAg5elnBUTQ==,
- }
- engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 }
+ resolution: {integrity: sha512-Kr+LPIUVKz2qkx1HAMH8q1q6azbqBAsXJUxBl/ODDuVPX45Z9DfwB8tPjTi6nNZ8BuM3nbJxC5zCAg5elnBUTQ==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@eslint/js@9.39.2':
- resolution:
- {
- integrity: sha512-q1mjIoW1VX4IvSocvM/vbTiveKC4k9eLrajNEuSsmjymSDEbpGddtpfOoN7YGAqBK3NG+uqo8ia4PDTt8buCYA==,
- }
- engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 }
+ resolution: {integrity: sha512-q1mjIoW1VX4IvSocvM/vbTiveKC4k9eLrajNEuSsmjymSDEbpGddtpfOoN7YGAqBK3NG+uqo8ia4PDTt8buCYA==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@eslint/object-schema@2.1.7':
- resolution:
- {
- integrity: sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==,
- }
- engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 }
+ resolution: {integrity: sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@eslint/plugin-kit@0.4.1':
- resolution:
- {
- integrity: sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==,
- }
- engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 }
+ resolution: {integrity: sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@graphile-contrib/pg-many-to-many@1.0.2':
- resolution:
- {
- integrity: sha512-ChSaSU7/n99Crdlink62cCGqlEYmjUJKizz2Nx0tdGgqSMkf6KTk00D3ILGybScywMcJGjJE2cc6FXYIHVlxCg==,
- }
+ resolution: {integrity: sha512-ChSaSU7/n99Crdlink62cCGqlEYmjUJKizz2Nx0tdGgqSMkf6KTk00D3ILGybScywMcJGjJE2cc6FXYIHVlxCg==}
'@graphile-contrib/pg-simplify-inflector@6.1.0':
- resolution:
- {
- integrity: sha512-3eI2FP4ulu/fxwkJBNXhR6XEzqVz4wJWFr4LfeyUNNArUtLFx0DpP6YdcARCYgwLExFcIQNE8fnul3JKiciYIw==,
- }
+ resolution: {integrity: sha512-3eI2FP4ulu/fxwkJBNXhR6XEzqVz4wJWFr4LfeyUNNArUtLFx0DpP6YdcARCYgwLExFcIQNE8fnul3JKiciYIw==}
'@graphile/lru@4.11.0':
- resolution:
- {
- integrity: sha512-Fakuk190EAKxWSa9YQyr/87g8mvAv8HBvk6yPCPuIoA3bYXF7n6kl0XSqKjSd5VfjEqhtnzQ6zJGzDf1Gv/tJg==,
- }
- engines: { node: '>=8.6' }
+ resolution: {integrity: sha512-Fakuk190EAKxWSa9YQyr/87g8mvAv8HBvk6yPCPuIoA3bYXF7n6kl0XSqKjSd5VfjEqhtnzQ6zJGzDf1Gv/tJg==}
+ engines: {node: '>=8.6'}
'@graphql-typed-document-node/core@3.2.0':
- resolution:
- {
- integrity: sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==,
- }
+ resolution: {integrity: sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==}
peerDependencies:
graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0
'@humanfs/core@0.19.1':
- resolution:
- {
- integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==,
- }
- engines: { node: '>=18.18.0' }
+ resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==}
+ engines: {node: '>=18.18.0'}
'@humanfs/node@0.16.7':
- resolution:
- {
- integrity: sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==,
- }
- engines: { node: '>=18.18.0' }
+ resolution: {integrity: sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==}
+ engines: {node: '>=18.18.0'}
'@humanwhocodes/module-importer@1.0.1':
- resolution:
- {
- integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==,
- }
- engines: { node: '>=12.22' }
+ resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==}
+ engines: {node: '>=12.22'}
'@humanwhocodes/retry@0.4.3':
- resolution:
- {
- integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==,
- }
- engines: { node: '>=18.18' }
+ resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==}
+ engines: {node: '>=18.18'}
'@hutson/parse-repository-url@3.0.2':
- resolution:
- {
- integrity: sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q==,
- }
- engines: { node: '>=6.9.0' }
+ resolution: {integrity: sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q==}
+ engines: {node: '>=6.9.0'}
'@inquirer/external-editor@1.0.3':
- resolution:
- {
- integrity: sha512-RWbSrDiYmO4LbejWY7ttpxczuwQyZLBUyygsA9Nsv95hpzUWwnNTVQmAq3xuh7vNwCp07UTmE5i11XAEExx4RA==,
- }
- engines: { node: '>=18' }
+ resolution: {integrity: sha512-RWbSrDiYmO4LbejWY7ttpxczuwQyZLBUyygsA9Nsv95hpzUWwnNTVQmAq3xuh7vNwCp07UTmE5i11XAEExx4RA==}
+ engines: {node: '>=18'}
peerDependencies:
'@types/node': '>=18'
peerDependenciesMeta:
@@ -3122,10 +2728,7 @@ packages:
optional: true
'@inquirerer/test@1.2.5':
- resolution:
- {
- integrity: sha512-KbYVzo/hquctlPuA2uRb0fPbMP6SWpmU8VlLQQuUYoBsAYmQ32QzlEZzbYqSM/4fjr6TqCkqsLrfpNiTnK3+cg==,
- }
+ resolution: {integrity: sha512-KbYVzo/hquctlPuA2uRb0fPbMP6SWpmU8VlLQQuUYoBsAYmQ32QzlEZzbYqSM/4fjr6TqCkqsLrfpNiTnK3+cg==}
peerDependencies:
jest: '>=29.0.0'
peerDependenciesMeta:
@@ -3133,72 +2736,42 @@ packages:
optional: true
'@inquirerer/utils@3.1.3':
- resolution:
- {
- integrity: sha512-aEw6nBfbVVv77pwNT0LJNHZiEwN/2rE8jiXLzeY+93cHgt4rPs0QY2A+/CPq6ryzAfXGnI5C79o6HbwZcODZMA==,
- }
+ resolution: {integrity: sha512-aEw6nBfbVVv77pwNT0LJNHZiEwN/2rE8jiXLzeY+93cHgt4rPs0QY2A+/CPq6ryzAfXGnI5C79o6HbwZcODZMA==}
'@isaacs/balanced-match@4.0.1':
- resolution:
- {
- integrity: sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==,
- }
- engines: { node: 20 || >=22 }
+ resolution: {integrity: sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==}
+ engines: {node: 20 || >=22}
'@isaacs/brace-expansion@5.0.0':
- resolution:
- {
- integrity: sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==,
- }
- engines: { node: 20 || >=22 }
+ resolution: {integrity: sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==}
+ engines: {node: 20 || >=22}
'@isaacs/cliui@8.0.2':
- resolution:
- {
- integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==,
- }
- engines: { node: '>=12' }
+ resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==}
+ engines: {node: '>=12'}
'@isaacs/string-locale-compare@1.1.0':
- resolution:
- {
- integrity: sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ==,
- }
+ resolution: {integrity: sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ==}
'@istanbuljs/load-nyc-config@1.1.0':
- resolution:
- {
- integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==,
- }
- engines: { node: '>=8' }
+ resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==}
+ engines: {node: '>=8'}
'@istanbuljs/schema@0.1.3':
- resolution:
- {
- integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==,
- }
- engines: { node: '>=8' }
+ resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==}
+ engines: {node: '>=8'}
'@jest/console@29.7.0':
- resolution:
- {
- integrity: sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==,
- }
- engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 }
+ resolution: {integrity: sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
'@jest/console@30.2.0':
- resolution:
- {
- integrity: sha512-+O1ifRjkvYIkBqASKWgLxrpEhQAAE7hY77ALLUufSk5717KfOShg6IbqLmdsLMPdUiFvA2kTs0R7YZy+l0IzZQ==,
- }
- engines: { node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0 }
+ resolution: {integrity: sha512-+O1ifRjkvYIkBqASKWgLxrpEhQAAE7hY77ALLUufSk5717KfOShg6IbqLmdsLMPdUiFvA2kTs0R7YZy+l0IzZQ==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
'@jest/core@29.7.0':
- resolution:
- {
- integrity: sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==,
- }
- engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 }
+ resolution: {integrity: sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
peerDependencies:
node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0
peerDependenciesMeta:
@@ -3206,11 +2779,8 @@ packages:
optional: true
'@jest/core@30.2.0':
- resolution:
- {
- integrity: sha512-03W6IhuhjqTlpzh/ojut/pDB2LPRygyWX8ExpgHtQA8H/3K7+1vKmcINx5UzeOX1se6YEsBsOHQ1CRzf3fOwTQ==,
- }
- engines: { node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0 }
+ resolution: {integrity: sha512-03W6IhuhjqTlpzh/ojut/pDB2LPRygyWX8ExpgHtQA8H/3K7+1vKmcINx5UzeOX1se6YEsBsOHQ1CRzf3fOwTQ==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
peerDependencies:
node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0
peerDependenciesMeta:
@@ -3218,102 +2788,60 @@ packages:
optional: true
'@jest/diff-sequences@30.0.1':
- resolution:
- {
- integrity: sha512-n5H8QLDJ47QqbCNn5SuFjCRDrOLEZ0h8vAHCK5RL9Ls7Xa8AQLa/YxAc9UjFqoEDM48muwtBGjtMY5cr0PLDCw==,
- }
- engines: { node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0 }
+ resolution: {integrity: sha512-n5H8QLDJ47QqbCNn5SuFjCRDrOLEZ0h8vAHCK5RL9Ls7Xa8AQLa/YxAc9UjFqoEDM48muwtBGjtMY5cr0PLDCw==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
'@jest/environment@29.7.0':
- resolution:
- {
- integrity: sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==,
- }
- engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 }
+ resolution: {integrity: sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
'@jest/environment@30.2.0':
- resolution:
- {
- integrity: sha512-/QPTL7OBJQ5ac09UDRa3EQes4gt1FTEG/8jZ/4v5IVzx+Cv7dLxlVIvfvSVRiiX2drWyXeBjkMSR8hvOWSog5g==,
- }
- engines: { node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0 }
+ resolution: {integrity: sha512-/QPTL7OBJQ5ac09UDRa3EQes4gt1FTEG/8jZ/4v5IVzx+Cv7dLxlVIvfvSVRiiX2drWyXeBjkMSR8hvOWSog5g==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
'@jest/expect-utils@29.7.0':
- resolution:
- {
- integrity: sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==,
- }
- engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 }
+ resolution: {integrity: sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
'@jest/expect-utils@30.2.0':
- resolution:
- {
- integrity: sha512-1JnRfhqpD8HGpOmQp180Fo9Zt69zNtC+9lR+kT7NVL05tNXIi+QC8Csz7lfidMoVLPD3FnOtcmp0CEFnxExGEA==,
- }
- engines: { node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0 }
+ resolution: {integrity: sha512-1JnRfhqpD8HGpOmQp180Fo9Zt69zNtC+9lR+kT7NVL05tNXIi+QC8Csz7lfidMoVLPD3FnOtcmp0CEFnxExGEA==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
'@jest/expect@29.7.0':
- resolution:
- {
- integrity: sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==,
- }
- engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 }
+ resolution: {integrity: sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
'@jest/expect@30.2.0':
- resolution:
- {
- integrity: sha512-V9yxQK5erfzx99Sf+7LbhBwNWEZ9eZay8qQ9+JSC0TrMR1pMDHLMY+BnVPacWU6Jamrh252/IKo4F1Xn/zfiqA==,
- }
- engines: { node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0 }
+ resolution: {integrity: sha512-V9yxQK5erfzx99Sf+7LbhBwNWEZ9eZay8qQ9+JSC0TrMR1pMDHLMY+BnVPacWU6Jamrh252/IKo4F1Xn/zfiqA==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
'@jest/fake-timers@29.7.0':
- resolution:
- {
- integrity: sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==,
- }
- engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 }
+ resolution: {integrity: sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
'@jest/fake-timers@30.2.0':
- resolution:
- {
- integrity: sha512-HI3tRLjRxAbBy0VO8dqqm7Hb2mIa8d5bg/NJkyQcOk7V118ObQML8RC5luTF/Zsg4474a+gDvhce7eTnP4GhYw==,
- }
- engines: { node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0 }
+ resolution: {integrity: sha512-HI3tRLjRxAbBy0VO8dqqm7Hb2mIa8d5bg/NJkyQcOk7V118ObQML8RC5luTF/Zsg4474a+gDvhce7eTnP4GhYw==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
'@jest/get-type@30.1.0':
- resolution:
- {
- integrity: sha512-eMbZE2hUnx1WV0pmURZY9XoXPkUYjpc55mb0CrhtdWLtzMQPFvu/rZkTLZFTsdaVQa+Tr4eWAteqcUzoawq/uA==,
- }
- engines: { node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0 }
+ resolution: {integrity: sha512-eMbZE2hUnx1WV0pmURZY9XoXPkUYjpc55mb0CrhtdWLtzMQPFvu/rZkTLZFTsdaVQa+Tr4eWAteqcUzoawq/uA==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
'@jest/globals@29.7.0':
- resolution:
- {
- integrity: sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==,
- }
- engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 }
+ resolution: {integrity: sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
'@jest/globals@30.2.0':
- resolution:
- {
- integrity: sha512-b63wmnKPaK+6ZZfpYhz9K61oybvbI1aMcIs80++JI1O1rR1vaxHUCNqo3ITu6NU0d4V34yZFoHMn/uoKr/Rwfw==,
- }
- engines: { node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0 }
+ resolution: {integrity: sha512-b63wmnKPaK+6ZZfpYhz9K61oybvbI1aMcIs80++JI1O1rR1vaxHUCNqo3ITu6NU0d4V34yZFoHMn/uoKr/Rwfw==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
'@jest/pattern@30.0.1':
- resolution:
- {
- integrity: sha512-gWp7NfQW27LaBQz3TITS8L7ZCQ0TLvtmI//4OwlQRx4rnWxcPNIYjxZpDcN4+UlGxgm3jS5QPz8IPTCkb59wZA==,
- }
- engines: { node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0 }
+ resolution: {integrity: sha512-gWp7NfQW27LaBQz3TITS8L7ZCQ0TLvtmI//4OwlQRx4rnWxcPNIYjxZpDcN4+UlGxgm3jS5QPz8IPTCkb59wZA==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
'@jest/reporters@29.7.0':
- resolution:
- {
- integrity: sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==,
- }
- engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 }
+ resolution: {integrity: sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
peerDependencies:
node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0
peerDependenciesMeta:
@@ -3321,11 +2849,8 @@ packages:
optional: true
'@jest/reporters@30.2.0':
- resolution:
- {
- integrity: sha512-DRyW6baWPqKMa9CzeiBjHwjd8XeAyco2Vt8XbcLFjiwCOEKOvy82GJ8QQnJE9ofsxCMPjH4MfH8fCWIHHDKpAQ==,
- }
- engines: { node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0 }
+ resolution: {integrity: sha512-DRyW6baWPqKMa9CzeiBjHwjd8XeAyco2Vt8XbcLFjiwCOEKOvy82GJ8QQnJE9ofsxCMPjH4MfH8fCWIHHDKpAQ==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
peerDependencies:
node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0
peerDependenciesMeta:
@@ -3333,2950 +2858,1648 @@ packages:
optional: true
'@jest/schemas@29.6.3':
- resolution:
- {
- integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==,
- }
- engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 }
+ resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
'@jest/schemas@30.0.5':
- resolution:
- {
- integrity: sha512-DmdYgtezMkh3cpU8/1uyXakv3tJRcmcXxBOcO0tbaozPwpmh4YMsnWrQm9ZmZMfa5ocbxzbFk6O4bDPEc/iAnA==,
- }
- engines: { node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0 }
+ resolution: {integrity: sha512-DmdYgtezMkh3cpU8/1uyXakv3tJRcmcXxBOcO0tbaozPwpmh4YMsnWrQm9ZmZMfa5ocbxzbFk6O4bDPEc/iAnA==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
'@jest/snapshot-utils@30.2.0':
- resolution:
- {
- integrity: sha512-0aVxM3RH6DaiLcjj/b0KrIBZhSX1373Xci4l3cW5xiUWPctZ59zQ7jj4rqcJQ/Z8JuN/4wX3FpJSa3RssVvCug==,
- }
- engines: { node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0 }
+ resolution: {integrity: sha512-0aVxM3RH6DaiLcjj/b0KrIBZhSX1373Xci4l3cW5xiUWPctZ59zQ7jj4rqcJQ/Z8JuN/4wX3FpJSa3RssVvCug==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
'@jest/source-map@29.6.3':
- resolution:
- {
- integrity: sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==,
- }
- engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 }
+ resolution: {integrity: sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
'@jest/source-map@30.0.1':
- resolution:
- {
- integrity: sha512-MIRWMUUR3sdbP36oyNyhbThLHyJ2eEDClPCiHVbrYAe5g3CHRArIVpBw7cdSB5fr+ofSfIb2Tnsw8iEHL0PYQg==,
- }
- engines: { node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0 }
+ resolution: {integrity: sha512-MIRWMUUR3sdbP36oyNyhbThLHyJ2eEDClPCiHVbrYAe5g3CHRArIVpBw7cdSB5fr+ofSfIb2Tnsw8iEHL0PYQg==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
'@jest/test-result@29.7.0':
- resolution:
- {
- integrity: sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==,
- }
- engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 }
+ resolution: {integrity: sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
'@jest/test-result@30.2.0':
- resolution:
- {
- integrity: sha512-RF+Z+0CCHkARz5HT9mcQCBulb1wgCP3FBvl9VFokMX27acKphwyQsNuWH3c+ojd1LeWBLoTYoxF0zm6S/66mjg==,
- }
- engines: { node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0 }
+ resolution: {integrity: sha512-RF+Z+0CCHkARz5HT9mcQCBulb1wgCP3FBvl9VFokMX27acKphwyQsNuWH3c+ojd1LeWBLoTYoxF0zm6S/66mjg==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
'@jest/test-sequencer@29.7.0':
- resolution:
- {
- integrity: sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==,
- }
- engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 }
+ resolution: {integrity: sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
'@jest/test-sequencer@30.2.0':
- resolution:
- {
- integrity: sha512-wXKgU/lk8fKXMu/l5Hog1R61bL4q5GCdT6OJvdAFz1P+QrpoFuLU68eoKuVc4RbrTtNnTL5FByhWdLgOPSph+Q==,
- }
- engines: { node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0 }
+ resolution: {integrity: sha512-wXKgU/lk8fKXMu/l5Hog1R61bL4q5GCdT6OJvdAFz1P+QrpoFuLU68eoKuVc4RbrTtNnTL5FByhWdLgOPSph+Q==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
'@jest/transform@29.7.0':
- resolution:
- {
- integrity: sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==,
- }
- engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 }
+ resolution: {integrity: sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
'@jest/transform@30.2.0':
- resolution:
- {
- integrity: sha512-XsauDV82o5qXbhalKxD7p4TZYYdwcaEXC77PPD2HixEFF+6YGppjrAAQurTl2ECWcEomHBMMNS9AH3kcCFx8jA==,
- }
- engines: { node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0 }
+ resolution: {integrity: sha512-XsauDV82o5qXbhalKxD7p4TZYYdwcaEXC77PPD2HixEFF+6YGppjrAAQurTl2ECWcEomHBMMNS9AH3kcCFx8jA==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
'@jest/types@26.6.2':
- resolution:
- {
- integrity: sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==,
- }
- engines: { node: '>= 10.14.2' }
+ resolution: {integrity: sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==}
+ engines: {node: '>= 10.14.2'}
'@jest/types@29.6.3':
- resolution:
- {
- integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==,
- }
- engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 }
+ resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
'@jest/types@30.2.0':
- resolution:
- {
- integrity: sha512-H9xg1/sfVvyfU7o3zMfBEjQ1gcsdeTMgqHoYdN79tuLqfTtuu7WckRA1R5whDwOzxaZAeMKTYWqP+WCAi0CHsg==,
- }
- engines: { node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0 }
+ resolution: {integrity: sha512-H9xg1/sfVvyfU7o3zMfBEjQ1gcsdeTMgqHoYdN79tuLqfTtuu7WckRA1R5whDwOzxaZAeMKTYWqP+WCAi0CHsg==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
'@jridgewell/gen-mapping@0.3.13':
- resolution:
- {
- integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==,
- }
+ resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==}
'@jridgewell/remapping@2.3.5':
- resolution:
- {
- integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==,
- }
+ resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==}
'@jridgewell/resolve-uri@3.1.2':
- resolution:
- {
- integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==,
- }
- engines: { node: '>=6.0.0' }
+ resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
+ engines: {node: '>=6.0.0'}
'@jridgewell/sourcemap-codec@1.5.5':
- resolution:
- {
- integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==,
- }
+ resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==}
'@jridgewell/trace-mapping@0.3.31':
- resolution:
- {
- integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==,
- }
+ resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==}
'@jridgewell/trace-mapping@0.3.9':
- resolution:
- {
- integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==,
- }
+ resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==}
'@launchql/mjml@0.1.1':
- resolution:
- {
- integrity: sha512-6+OEmECuu5atRZ43ovsMfFs+T4NWNaKbzNG0uA8HYaBSn3kWR7GH3QnmL3lCIeymLtvgua8aZChYvg6SxrQdnw==,
- }
+ resolution: {integrity: sha512-6+OEmECuu5atRZ43ovsMfFs+T4NWNaKbzNG0uA8HYaBSn3kWR7GH3QnmL3lCIeymLtvgua8aZChYvg6SxrQdnw==}
peerDependencies:
react: '>=16'
react-dom: '>=16'
'@launchql/postmaster@0.1.4':
- resolution:
- {
- integrity: sha512-TIWqKLd0Lb15lLdzMYeBk43VGOM4G3wm4cLdN9KHKYG/yho+gt9P1Zs23OewJfb0a0rKyhNWYewdHbEJ6Y/sYQ==,
- }
+ resolution: {integrity: sha512-TIWqKLd0Lb15lLdzMYeBk43VGOM4G3wm4cLdN9KHKYG/yho+gt9P1Zs23OewJfb0a0rKyhNWYewdHbEJ6Y/sYQ==}
'@launchql/protobufjs@7.2.6':
- resolution:
- {
- integrity: sha512-vwi1nG2/heVFsIMHQU1KxTjUp5c757CTtRAZn/jutApCkFlle1iv8tzM/DHlSZJKDldxaYqnNYTg0pTyp8Bbtg==,
- }
- engines: { node: '>=12.0.0' }
+ resolution: {integrity: sha512-vwi1nG2/heVFsIMHQU1KxTjUp5c757CTtRAZn/jutApCkFlle1iv8tzM/DHlSZJKDldxaYqnNYTg0pTyp8Bbtg==}
+ engines: {node: '>=12.0.0'}
'@launchql/styled-email@0.1.0':
- resolution:
- {
- integrity: sha512-ISjzsY+3EOH/qAKHPq3evw9QmmEyA8Vw+0pUf+Zf8l4/rAHJJKrSa/uPiaUf2Abi8yAZKyx2uyaZq4ExNNkD+w==,
- }
+ resolution: {integrity: sha512-ISjzsY+3EOH/qAKHPq3evw9QmmEyA8Vw+0pUf+Zf8l4/rAHJJKrSa/uPiaUf2Abi8yAZKyx2uyaZq4ExNNkD+w==}
peerDependencies:
react: '>=16'
react-dom: '>=16'
'@lerna/create@8.2.4':
- resolution:
- {
- integrity: sha512-A8AlzetnS2WIuhijdAzKUyFpR5YbLLfV3luQ4lzBgIBgRfuoBDZeF+RSZPhra+7A6/zTUlrbhKZIOi/MNhqgvQ==,
- }
- engines: { node: '>=18.0.0' }
+ resolution: {integrity: sha512-A8AlzetnS2WIuhijdAzKUyFpR5YbLLfV3luQ4lzBgIBgRfuoBDZeF+RSZPhra+7A6/zTUlrbhKZIOi/MNhqgvQ==}
+ engines: {node: '>=18.0.0'}
'@napi-rs/wasm-runtime@0.2.12':
- resolution:
- {
- integrity: sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==,
- }
+ resolution: {integrity: sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==}
'@napi-rs/wasm-runtime@0.2.4':
- resolution:
- {
- integrity: sha512-9zESzOO5aDByvhIAsOy9TbpZ0Ur2AJbUI7UT73kcUTS2mxAMHOBaa1st/jAymNoCtvrit99kkzT1FZuXVcgfIQ==,
- }
+ resolution: {integrity: sha512-9zESzOO5aDByvhIAsOy9TbpZ0Ur2AJbUI7UT73kcUTS2mxAMHOBaa1st/jAymNoCtvrit99kkzT1FZuXVcgfIQ==}
'@nodelib/fs.scandir@2.1.5':
- resolution:
- {
- integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==,
- }
- engines: { node: '>= 8' }
+ resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
+ engines: {node: '>= 8'}
'@nodelib/fs.stat@2.0.5':
- resolution:
- {
- integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==,
- }
- engines: { node: '>= 8' }
+ resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
+ engines: {node: '>= 8'}
'@nodelib/fs.walk@1.2.8':
- resolution:
- {
- integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==,
- }
- engines: { node: '>= 8' }
+ resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
+ engines: {node: '>= 8'}
'@npmcli/agent@2.2.2':
- resolution:
- {
- integrity: sha512-OrcNPXdpSl9UX7qPVRWbmWMCSXrcDa2M9DvrbOTj7ao1S4PlqVFYv9/yLKMkrJKZ/V5A/kDBC690or307i26Og==,
- }
- engines: { node: ^16.14.0 || >=18.0.0 }
+ resolution: {integrity: sha512-OrcNPXdpSl9UX7qPVRWbmWMCSXrcDa2M9DvrbOTj7ao1S4PlqVFYv9/yLKMkrJKZ/V5A/kDBC690or307i26Og==}
+ engines: {node: ^16.14.0 || >=18.0.0}
'@npmcli/arborist@7.5.4':
- resolution:
- {
- integrity: sha512-nWtIc6QwwoUORCRNzKx4ypHqCk3drI+5aeYdMTQQiRCcn4lOOgfQh7WyZobGYTxXPSq1VwV53lkpN/BRlRk08g==,
- }
- engines: { node: ^16.14.0 || >=18.0.0 }
+ resolution: {integrity: sha512-nWtIc6QwwoUORCRNzKx4ypHqCk3drI+5aeYdMTQQiRCcn4lOOgfQh7WyZobGYTxXPSq1VwV53lkpN/BRlRk08g==}
+ engines: {node: ^16.14.0 || >=18.0.0}
hasBin: true
'@npmcli/fs@3.1.1':
- resolution:
- {
- integrity: sha512-q9CRWjpHCMIh5sVyefoD1cA7PkvILqCZsnSOEUUivORLjxCO/Irmue2DprETiNgEqktDBZaM1Bi+jrarx1XdCg==,
- }
- engines: { node: ^14.17.0 || ^16.13.0 || >=18.0.0 }
+ resolution: {integrity: sha512-q9CRWjpHCMIh5sVyefoD1cA7PkvILqCZsnSOEUUivORLjxCO/Irmue2DprETiNgEqktDBZaM1Bi+jrarx1XdCg==}
+ engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
'@npmcli/git@5.0.8':
- resolution:
- {
- integrity: sha512-liASfw5cqhjNW9UFd+ruwwdEf/lbOAQjLL2XY2dFW/bkJheXDYZgOyul/4gVvEV4BWkTXjYGmDqMw9uegdbJNQ==,
- }
- engines: { node: ^16.14.0 || >=18.0.0 }
+ resolution: {integrity: sha512-liASfw5cqhjNW9UFd+ruwwdEf/lbOAQjLL2XY2dFW/bkJheXDYZgOyul/4gVvEV4BWkTXjYGmDqMw9uegdbJNQ==}
+ engines: {node: ^16.14.0 || >=18.0.0}
'@npmcli/installed-package-contents@2.1.0':
- resolution:
- {
- integrity: sha512-c8UuGLeZpm69BryRykLuKRyKFZYJsZSCT4aVY5ds4omyZqJ172ApzgfKJ5eV/r3HgLdUYgFVe54KSFVjKoe27w==,
- }
- engines: { node: ^14.17.0 || ^16.13.0 || >=18.0.0 }
+ resolution: {integrity: sha512-c8UuGLeZpm69BryRykLuKRyKFZYJsZSCT4aVY5ds4omyZqJ172ApzgfKJ5eV/r3HgLdUYgFVe54KSFVjKoe27w==}
+ engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
hasBin: true
'@npmcli/map-workspaces@3.0.6':
- resolution:
- {
- integrity: sha512-tkYs0OYnzQm6iIRdfy+LcLBjcKuQCeE5YLb8KnrIlutJfheNaPvPpgoFEyEFgbjzl5PLZ3IA/BWAwRU0eHuQDA==,
- }
- engines: { node: ^14.17.0 || ^16.13.0 || >=18.0.0 }
+ resolution: {integrity: sha512-tkYs0OYnzQm6iIRdfy+LcLBjcKuQCeE5YLb8KnrIlutJfheNaPvPpgoFEyEFgbjzl5PLZ3IA/BWAwRU0eHuQDA==}
+ engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
'@npmcli/metavuln-calculator@7.1.1':
- resolution:
- {
- integrity: sha512-Nkxf96V0lAx3HCpVda7Vw4P23RILgdi/5K1fmj2tZkWIYLpXAN8k2UVVOsW16TsS5F8Ws2I7Cm+PU1/rsVF47g==,
- }
- engines: { node: ^16.14.0 || >=18.0.0 }
+ resolution: {integrity: sha512-Nkxf96V0lAx3HCpVda7Vw4P23RILgdi/5K1fmj2tZkWIYLpXAN8k2UVVOsW16TsS5F8Ws2I7Cm+PU1/rsVF47g==}
+ engines: {node: ^16.14.0 || >=18.0.0}
'@npmcli/name-from-folder@2.0.0':
- resolution:
- {
- integrity: sha512-pwK+BfEBZJbKdNYpHHRTNBwBoqrN/iIMO0AiGvYsp3Hoaq0WbgGSWQR6SCldZovoDpY3yje5lkFUe6gsDgJ2vg==,
- }
- engines: { node: ^14.17.0 || ^16.13.0 || >=18.0.0 }
+ resolution: {integrity: sha512-pwK+BfEBZJbKdNYpHHRTNBwBoqrN/iIMO0AiGvYsp3Hoaq0WbgGSWQR6SCldZovoDpY3yje5lkFUe6gsDgJ2vg==}
+ engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
'@npmcli/node-gyp@3.0.0':
- resolution:
- {
- integrity: sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA==,
- }
- engines: { node: ^14.17.0 || ^16.13.0 || >=18.0.0 }
+ resolution: {integrity: sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA==}
+ engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
'@npmcli/package-json@5.2.0':
- resolution:
- {
- integrity: sha512-qe/kiqqkW0AGtvBjL8TJKZk/eBBSpnJkUWvHdQ9jM2lKHXRYYJuyNpJPlJw3c8QjC2ow6NZYiLExhUaeJelbxQ==,
- }
- engines: { node: ^16.14.0 || >=18.0.0 }
+ resolution: {integrity: sha512-qe/kiqqkW0AGtvBjL8TJKZk/eBBSpnJkUWvHdQ9jM2lKHXRYYJuyNpJPlJw3c8QjC2ow6NZYiLExhUaeJelbxQ==}
+ engines: {node: ^16.14.0 || >=18.0.0}
'@npmcli/promise-spawn@7.0.2':
- resolution:
- {
- integrity: sha512-xhfYPXoV5Dy4UkY0D+v2KkwvnDfiA/8Mt3sWCGI/hM03NsYIH8ZaG6QzS9x7pje5vHZBZJ2v6VRFVTWACnqcmQ==,
- }
- engines: { node: ^16.14.0 || >=18.0.0 }
+ resolution: {integrity: sha512-xhfYPXoV5Dy4UkY0D+v2KkwvnDfiA/8Mt3sWCGI/hM03NsYIH8ZaG6QzS9x7pje5vHZBZJ2v6VRFVTWACnqcmQ==}
+ engines: {node: ^16.14.0 || >=18.0.0}
'@npmcli/query@3.1.0':
- resolution:
- {
- integrity: sha512-C/iR0tk7KSKGldibYIB9x8GtO/0Bd0I2mhOaDb8ucQL/bQVTmGoeREaFj64Z5+iCBRf3dQfed0CjJL7I8iTkiQ==,
- }
- engines: { node: ^14.17.0 || ^16.13.0 || >=18.0.0 }
+ resolution: {integrity: sha512-C/iR0tk7KSKGldibYIB9x8GtO/0Bd0I2mhOaDb8ucQL/bQVTmGoeREaFj64Z5+iCBRf3dQfed0CjJL7I8iTkiQ==}
+ engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
'@npmcli/redact@2.0.1':
- resolution:
- {
- integrity: sha512-YgsR5jCQZhVmTJvjduTOIHph0L73pK8xwMVaDY0PatySqVM9AZj93jpoXYSJqfHFxFkN9dmqTw6OiqExsS3LPw==,
- }
- engines: { node: ^16.14.0 || >=18.0.0 }
+ resolution: {integrity: sha512-YgsR5jCQZhVmTJvjduTOIHph0L73pK8xwMVaDY0PatySqVM9AZj93jpoXYSJqfHFxFkN9dmqTw6OiqExsS3LPw==}
+ engines: {node: ^16.14.0 || >=18.0.0}
'@npmcli/run-script@8.1.0':
- resolution:
- {
- integrity: sha512-y7efHHwghQfk28G2z3tlZ67pLG0XdfYbcVG26r7YIXALRsrVQcTq4/tdenSmdOrEsNahIYA/eh8aEVROWGFUDg==,
- }
- engines: { node: ^16.14.0 || >=18.0.0 }
+ resolution: {integrity: sha512-y7efHHwghQfk28G2z3tlZ67pLG0XdfYbcVG26r7YIXALRsrVQcTq4/tdenSmdOrEsNahIYA/eh8aEVROWGFUDg==}
+ engines: {node: ^16.14.0 || >=18.0.0}
'@nx/devkit@20.8.3':
- resolution:
- {
- integrity: sha512-5lbfJ6ICFOiGeirldQOU5fQ/W/VQ8L3dfWnmHG4UgpWSLoK/YFdRf4lTB4rS0aDXsBL0gyWABz3sZGLPGNYnPA==,
- }
+ resolution: {integrity: sha512-5lbfJ6ICFOiGeirldQOU5fQ/W/VQ8L3dfWnmHG4UgpWSLoK/YFdRf4lTB4rS0aDXsBL0gyWABz3sZGLPGNYnPA==}
peerDependencies:
nx: '>= 19 <= 21'
'@nx/nx-darwin-arm64@20.8.3':
- resolution:
- {
- integrity: sha512-BeYnPAcnaerg6q+qR0bAb0nebwwrsvm4STSVqqVlaqLmmQpU3Bfpx44CEa5d6T9b0V11ZqVE/bkmRhMqhUcrhw==,
- }
- engines: { node: '>= 10' }
+ resolution: {integrity: sha512-BeYnPAcnaerg6q+qR0bAb0nebwwrsvm4STSVqqVlaqLmmQpU3Bfpx44CEa5d6T9b0V11ZqVE/bkmRhMqhUcrhw==}
+ engines: {node: '>= 10'}
cpu: [arm64]
os: [darwin]
'@nx/nx-darwin-x64@20.8.3':
- resolution:
- {
- integrity: sha512-RIFg1VkQ4jhI+ErqEZuIeGBcJGD8t+u9J5CdQBDIASd8QRhtudBkiYLYCJb+qaQly09G7nVfxuyItlS2uRW3qA==,
- }
- engines: { node: '>= 10' }
+ resolution: {integrity: sha512-RIFg1VkQ4jhI+ErqEZuIeGBcJGD8t+u9J5CdQBDIASd8QRhtudBkiYLYCJb+qaQly09G7nVfxuyItlS2uRW3qA==}
+ engines: {node: '>= 10'}
cpu: [x64]
os: [darwin]
'@nx/nx-freebsd-x64@20.8.3':
- resolution:
- {
- integrity: sha512-boQTgMUdnqpZhHMrV/xgnp/dTg5dfxw8I4d16NBwmW4j+Sez7zi/dydgsJpfZsj8TicOHvPu6KK4W5wzp82NPw==,
- }
- engines: { node: '>= 10' }
+ resolution: {integrity: sha512-boQTgMUdnqpZhHMrV/xgnp/dTg5dfxw8I4d16NBwmW4j+Sez7zi/dydgsJpfZsj8TicOHvPu6KK4W5wzp82NPw==}
+ engines: {node: '>= 10'}
cpu: [x64]
os: [freebsd]
'@nx/nx-linux-arm-gnueabihf@20.8.3':
- resolution:
- {
- integrity: sha512-wpiNyY1igx1rLN3EsTLum2lDtblFijdBZB9/9u/6UDub4z9CaQ4yaC4h9n5v7yFYILwfL44YTsQKzrE+iv0y1Q==,
- }
- engines: { node: '>= 10' }
+ resolution: {integrity: sha512-wpiNyY1igx1rLN3EsTLum2lDtblFijdBZB9/9u/6UDub4z9CaQ4yaC4h9n5v7yFYILwfL44YTsQKzrE+iv0y1Q==}
+ engines: {node: '>= 10'}
cpu: [arm]
os: [linux]
'@nx/nx-linux-arm64-gnu@20.8.3':
- resolution:
- {
- integrity: sha512-nbi/eZtJfWxuDwdUCiP+VJolFubtrz6XxVtB26eMAkODnREOKELHZtMOrlm8JBZCdtWCvTqibq9Az74XsqSfdA==,
- }
- engines: { node: '>= 10' }
+ resolution: {integrity: sha512-nbi/eZtJfWxuDwdUCiP+VJolFubtrz6XxVtB26eMAkODnREOKELHZtMOrlm8JBZCdtWCvTqibq9Az74XsqSfdA==}
+ engines: {node: '>= 10'}
cpu: [arm64]
os: [linux]
'@nx/nx-linux-arm64-musl@20.8.3':
- resolution:
- {
- integrity: sha512-LTTGzI8YVPlF1v0YlVf+exM+1q7rpsiUbjTTHJcfHFRU5t4BsiZD54K19Y1UBg1XFx5cwhEaIomSmJ88RwPPVQ==,
- }
- engines: { node: '>= 10' }
+ resolution: {integrity: sha512-LTTGzI8YVPlF1v0YlVf+exM+1q7rpsiUbjTTHJcfHFRU5t4BsiZD54K19Y1UBg1XFx5cwhEaIomSmJ88RwPPVQ==}
+ engines: {node: '>= 10'}
cpu: [arm64]
os: [linux]
'@nx/nx-linux-x64-gnu@20.8.3':
- resolution:
- {
- integrity: sha512-SlA4GtXvQbSzSIWLgiIiLBOjdINPOUR/im+TUbaEMZ8wiGrOY8cnk0PVt95TIQJVBeXBCeb5HnoY0lHJpMOODg==,
- }
- engines: { node: '>= 10' }
+ resolution: {integrity: sha512-SlA4GtXvQbSzSIWLgiIiLBOjdINPOUR/im+TUbaEMZ8wiGrOY8cnk0PVt95TIQJVBeXBCeb5HnoY0lHJpMOODg==}
+ engines: {node: '>= 10'}
cpu: [x64]
os: [linux]
'@nx/nx-linux-x64-musl@20.8.3':
- resolution:
- {
- integrity: sha512-MNzkEwPktp5SQH9dJDH2wP9hgG9LsBDhKJXJfKw6sUI/6qz5+/aAjFziKy+zBnhU4AO1yXt5qEWzR8lDcIriVQ==,
- }
- engines: { node: '>= 10' }
+ resolution: {integrity: sha512-MNzkEwPktp5SQH9dJDH2wP9hgG9LsBDhKJXJfKw6sUI/6qz5+/aAjFziKy+zBnhU4AO1yXt5qEWzR8lDcIriVQ==}
+ engines: {node: '>= 10'}
cpu: [x64]
os: [linux]
'@nx/nx-win32-arm64-msvc@20.8.3':
- resolution:
- {
- integrity: sha512-qUV7CyXKwRCM/lkvyS6Xa1MqgAuK5da6w27RAehh7LATBUKn1I4/M7DGn6L7ERCxpZuh1TrDz9pUzEy0R+Ekkg==,
- }
- engines: { node: '>= 10' }
+ resolution: {integrity: sha512-qUV7CyXKwRCM/lkvyS6Xa1MqgAuK5da6w27RAehh7LATBUKn1I4/M7DGn6L7ERCxpZuh1TrDz9pUzEy0R+Ekkg==}
+ engines: {node: '>= 10'}
cpu: [arm64]
os: [win32]
'@nx/nx-win32-x64-msvc@20.8.3':
- resolution:
- {
- integrity: sha512-gX1G8u6W6EPX6PO/wv07+B++UHyCHBXyVWXITA3Kv6HoSajOxIa2Kk1rv1iDQGmX1WWxBaj3bUyYJAFBDITe4w==,
- }
- engines: { node: '>= 10' }
+ resolution: {integrity: sha512-gX1G8u6W6EPX6PO/wv07+B++UHyCHBXyVWXITA3Kv6HoSajOxIa2Kk1rv1iDQGmX1WWxBaj3bUyYJAFBDITe4w==}
+ engines: {node: '>= 10'}
cpu: [x64]
os: [win32]
'@octokit/auth-token@4.0.0':
- resolution:
- {
- integrity: sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA==,
- }
- engines: { node: '>= 18' }
+ resolution: {integrity: sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA==}
+ engines: {node: '>= 18'}
'@octokit/core@5.2.2':
- resolution:
- {
- integrity: sha512-/g2d4sW9nUDJOMz3mabVQvOGhVa4e/BN/Um7yca9Bb2XTzPPnfTWHWQg+IsEYO7M3Vx+EXvaM/I2pJWIMun1bg==,
- }
- engines: { node: '>= 18' }
+ resolution: {integrity: sha512-/g2d4sW9nUDJOMz3mabVQvOGhVa4e/BN/Um7yca9Bb2XTzPPnfTWHWQg+IsEYO7M3Vx+EXvaM/I2pJWIMun1bg==}
+ engines: {node: '>= 18'}
'@octokit/endpoint@9.0.6':
- resolution:
- {
- integrity: sha512-H1fNTMA57HbkFESSt3Y9+FBICv+0jFceJFPWDePYlR/iMGrwM5ph+Dd4XRQs+8X+PUFURLQgX9ChPfhJ/1uNQw==,
- }
- engines: { node: '>= 18' }
+ resolution: {integrity: sha512-H1fNTMA57HbkFESSt3Y9+FBICv+0jFceJFPWDePYlR/iMGrwM5ph+Dd4XRQs+8X+PUFURLQgX9ChPfhJ/1uNQw==}
+ engines: {node: '>= 18'}
'@octokit/graphql@7.1.1':
- resolution:
- {
- integrity: sha512-3mkDltSfcDUoa176nlGoA32RGjeWjl3K7F/BwHwRMJUW/IteSa4bnSV8p2ThNkcIcZU2umkZWxwETSSCJf2Q7g==,
- }
- engines: { node: '>= 18' }
+ resolution: {integrity: sha512-3mkDltSfcDUoa176nlGoA32RGjeWjl3K7F/BwHwRMJUW/IteSa4bnSV8p2ThNkcIcZU2umkZWxwETSSCJf2Q7g==}
+ engines: {node: '>= 18'}
'@octokit/openapi-types@24.2.0':
- resolution:
- {
- integrity: sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg==,
- }
+ resolution: {integrity: sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg==}
'@octokit/plugin-enterprise-rest@6.0.1':
- resolution:
- {
- integrity: sha512-93uGjlhUD+iNg1iWhUENAtJata6w5nE+V4urXOAlIXdco6xNZtUSfYY8dzp3Udy74aqO/B5UZL80x/YMa5PKRw==,
- }
+ resolution: {integrity: sha512-93uGjlhUD+iNg1iWhUENAtJata6w5nE+V4urXOAlIXdco6xNZtUSfYY8dzp3Udy74aqO/B5UZL80x/YMa5PKRw==}
'@octokit/plugin-paginate-rest@11.4.4-cjs.2':
- resolution:
- {
- integrity: sha512-2dK6z8fhs8lla5PaOTgqfCGBxgAv/le+EhPs27KklPhm1bKObpu6lXzwfUEQ16ajXzqNrKMujsFyo9K2eaoISw==,
- }
- engines: { node: '>= 18' }
+ resolution: {integrity: sha512-2dK6z8fhs8lla5PaOTgqfCGBxgAv/le+EhPs27KklPhm1bKObpu6lXzwfUEQ16ajXzqNrKMujsFyo9K2eaoISw==}
+ engines: {node: '>= 18'}
peerDependencies:
'@octokit/core': '5'
'@octokit/plugin-request-log@4.0.1':
- resolution:
- {
- integrity: sha512-GihNqNpGHorUrO7Qa9JbAl0dbLnqJVrV8OXe2Zm5/Y4wFkZQDfTreBzVmiRfJVfE4mClXdihHnbpyyO9FSX4HA==,
- }
- engines: { node: '>= 18' }
+ resolution: {integrity: sha512-GihNqNpGHorUrO7Qa9JbAl0dbLnqJVrV8OXe2Zm5/Y4wFkZQDfTreBzVmiRfJVfE4mClXdihHnbpyyO9FSX4HA==}
+ engines: {node: '>= 18'}
peerDependencies:
'@octokit/core': '5'
'@octokit/plugin-rest-endpoint-methods@13.3.2-cjs.1':
- resolution:
- {
- integrity: sha512-VUjIjOOvF2oELQmiFpWA1aOPdawpyaCUqcEBc/UOUnj3Xp6DJGrJ1+bjUIIDzdHjnFNO6q57ODMfdEZnoBkCwQ==,
- }
- engines: { node: '>= 18' }
+ resolution: {integrity: sha512-VUjIjOOvF2oELQmiFpWA1aOPdawpyaCUqcEBc/UOUnj3Xp6DJGrJ1+bjUIIDzdHjnFNO6q57ODMfdEZnoBkCwQ==}
+ engines: {node: '>= 18'}
peerDependencies:
'@octokit/core': ^5
'@octokit/request-error@5.1.1':
- resolution:
- {
- integrity: sha512-v9iyEQJH6ZntoENr9/yXxjuezh4My67CBSu9r6Ve/05Iu5gNgnisNWOsoJHTP6k0Rr0+HQIpnH+kyammu90q/g==,
- }
- engines: { node: '>= 18' }
+ resolution: {integrity: sha512-v9iyEQJH6ZntoENr9/yXxjuezh4My67CBSu9r6Ve/05Iu5gNgnisNWOsoJHTP6k0Rr0+HQIpnH+kyammu90q/g==}
+ engines: {node: '>= 18'}
'@octokit/request@8.4.1':
- resolution:
- {
- integrity: sha512-qnB2+SY3hkCmBxZsR/MPCybNmbJe4KAlfWErXq+rBKkQJlbjdJeS85VI9r8UqeLYLvnAenU8Q1okM/0MBsAGXw==,
- }
- engines: { node: '>= 18' }
+ resolution: {integrity: sha512-qnB2+SY3hkCmBxZsR/MPCybNmbJe4KAlfWErXq+rBKkQJlbjdJeS85VI9r8UqeLYLvnAenU8Q1okM/0MBsAGXw==}
+ engines: {node: '>= 18'}
'@octokit/rest@20.1.2':
- resolution:
- {
- integrity: sha512-GmYiltypkHHtihFwPRxlaorG5R9VAHuk/vbszVoRTGXnAsY60wYLkh/E2XiFmdZmqrisw+9FaazS1i5SbdWYgA==,
- }
- engines: { node: '>= 18' }
+ resolution: {integrity: sha512-GmYiltypkHHtihFwPRxlaorG5R9VAHuk/vbszVoRTGXnAsY60wYLkh/E2XiFmdZmqrisw+9FaazS1i5SbdWYgA==}
+ engines: {node: '>= 18'}
'@octokit/types@13.10.0':
- resolution:
- {
- integrity: sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA==,
- }
+ resolution: {integrity: sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA==}
'@one-ini/wasm@0.1.1':
- resolution:
- {
- integrity: sha512-XuySG1E38YScSJoMlqovLru4KTUNSjgVTIjyh7qMX6aNN5HY5Ct5LhRJdxO79JtTzKfzV/bnWpz+zquYrISsvw==,
- }
+ resolution: {integrity: sha512-XuySG1E38YScSJoMlqovLru4KTUNSjgVTIjyh7qMX6aNN5HY5Ct5LhRJdxO79JtTzKfzV/bnWpz+zquYrISsvw==}
'@pgsql/types@17.6.2':
- resolution:
- {
- integrity: sha512-1UtbELdbqNdyOShhrVfSz3a1gDi0s9XXiQemx+6QqtsrXe62a6zOGU+vjb2GRfG5jeEokI1zBBcfD42enRv0Rw==,
- }
+ resolution: {integrity: sha512-1UtbELdbqNdyOShhrVfSz3a1gDi0s9XXiQemx+6QqtsrXe62a6zOGU+vjb2GRfG5jeEokI1zBBcfD42enRv0Rw==}
'@pgsql/utils@17.8.11':
- resolution:
- {
- integrity: sha512-gcaS9ATilQyGSIq8596tq+6rcb7TX54sdjOvOzGa9lu9NjqkptEKLbBae5UTjfkFGfH50duDFD1EpFogMnZToA==,
- }
+ resolution: {integrity: sha512-gcaS9ATilQyGSIq8596tq+6rcb7TX54sdjOvOzGa9lu9NjqkptEKLbBae5UTjfkFGfH50duDFD1EpFogMnZToA==}
'@pkgjs/parseargs@0.11.0':
- resolution:
- {
- integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==,
- }
- engines: { node: '>=14' }
+ resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
+ engines: {node: '>=14'}
'@pkgr/core@0.2.9':
- resolution:
- {
- integrity: sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==,
- }
- engines: { node: ^12.20.0 || ^14.18.0 || >=16.0.0 }
+ resolution: {integrity: sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==}
+ engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0}
'@playwright/test@1.57.0':
- resolution:
- {
- integrity: sha512-6TyEnHgd6SArQO8UO2OMTxshln3QMWBtPGrOCgs3wVEmQmwyuNtB10IZMfmYDE0riwNR1cu4q+pPcxMVtaG3TA==,
- }
- engines: { node: '>=18' }
+ resolution: {integrity: sha512-6TyEnHgd6SArQO8UO2OMTxshln3QMWBtPGrOCgs3wVEmQmwyuNtB10IZMfmYDE0riwNR1cu4q+pPcxMVtaG3TA==}
+ engines: {node: '>=18'}
hasBin: true
'@protobufjs/aspromise@1.1.2':
- resolution:
- {
- integrity: sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==,
- }
+ resolution: {integrity: sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==}
'@protobufjs/base64@1.1.2':
- resolution:
- {
- integrity: sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==,
- }
+ resolution: {integrity: sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==}
'@protobufjs/codegen@2.0.4':
- resolution:
- {
- integrity: sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==,
- }
+ resolution: {integrity: sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==}
'@protobufjs/eventemitter@1.1.0':
- resolution:
- {
- integrity: sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==,
- }
+ resolution: {integrity: sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==}
'@protobufjs/fetch@1.1.0':
- resolution:
- {
- integrity: sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==,
- }
+ resolution: {integrity: sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==}
'@protobufjs/float@1.0.2':
- resolution:
- {
- integrity: sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==,
- }
+ resolution: {integrity: sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==}
'@protobufjs/inquire@1.1.0':
- resolution:
- {
- integrity: sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==,
- }
+ resolution: {integrity: sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==}
'@protobufjs/path@1.1.2':
- resolution:
- {
- integrity: sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==,
- }
+ resolution: {integrity: sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==}
'@protobufjs/pool@1.1.0':
- resolution:
- {
- integrity: sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==,
- }
+ resolution: {integrity: sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==}
'@protobufjs/utf8@1.1.0':
- resolution:
- {
- integrity: sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==,
- }
+ resolution: {integrity: sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==}
'@sigstore/bundle@2.3.2':
- resolution:
- {
- integrity: sha512-wueKWDk70QixNLB363yHc2D2ItTgYiMTdPwK8D9dKQMR3ZQ0c35IxP5xnwQ8cNLoCgCRcHf14kE+CLIvNX1zmA==,
- }
- engines: { node: ^16.14.0 || >=18.0.0 }
+ resolution: {integrity: sha512-wueKWDk70QixNLB363yHc2D2ItTgYiMTdPwK8D9dKQMR3ZQ0c35IxP5xnwQ8cNLoCgCRcHf14kE+CLIvNX1zmA==}
+ engines: {node: ^16.14.0 || >=18.0.0}
'@sigstore/core@1.1.0':
- resolution:
- {
- integrity: sha512-JzBqdVIyqm2FRQCulY6nbQzMpJJpSiJ8XXWMhtOX9eKgaXXpfNOF53lzQEjIydlStnd/eFtuC1dW4VYdD93oRg==,
- }
- engines: { node: ^16.14.0 || >=18.0.0 }
+ resolution: {integrity: sha512-JzBqdVIyqm2FRQCulY6nbQzMpJJpSiJ8XXWMhtOX9eKgaXXpfNOF53lzQEjIydlStnd/eFtuC1dW4VYdD93oRg==}
+ engines: {node: ^16.14.0 || >=18.0.0}
'@sigstore/protobuf-specs@0.3.3':
- resolution:
- {
- integrity: sha512-RpacQhBlwpBWd7KEJsRKcBQalbV28fvkxwTOJIqhIuDysMMaJW47V4OqW30iJB9uRpqOSxxEAQFdr8tTattReQ==,
- }
- engines: { node: ^18.17.0 || >=20.5.0 }
+ resolution: {integrity: sha512-RpacQhBlwpBWd7KEJsRKcBQalbV28fvkxwTOJIqhIuDysMMaJW47V4OqW30iJB9uRpqOSxxEAQFdr8tTattReQ==}
+ engines: {node: ^18.17.0 || >=20.5.0}
'@sigstore/sign@2.3.2':
- resolution:
- {
- integrity: sha512-5Vz5dPVuunIIvC5vBb0APwo7qKA4G9yM48kPWJT+OEERs40md5GoUR1yedwpekWZ4m0Hhw44m6zU+ObsON+iDA==,
- }
- engines: { node: ^16.14.0 || >=18.0.0 }
+ resolution: {integrity: sha512-5Vz5dPVuunIIvC5vBb0APwo7qKA4G9yM48kPWJT+OEERs40md5GoUR1yedwpekWZ4m0Hhw44m6zU+ObsON+iDA==}
+ engines: {node: ^16.14.0 || >=18.0.0}
'@sigstore/tuf@2.3.4':
- resolution:
- {
- integrity: sha512-44vtsveTPUpqhm9NCrbU8CWLe3Vck2HO1PNLw7RIajbB7xhtn5RBPm1VNSCMwqGYHhDsBJG8gDF0q4lgydsJvw==,
- }
- engines: { node: ^16.14.0 || >=18.0.0 }
+ resolution: {integrity: sha512-44vtsveTPUpqhm9NCrbU8CWLe3Vck2HO1PNLw7RIajbB7xhtn5RBPm1VNSCMwqGYHhDsBJG8gDF0q4lgydsJvw==}
+ engines: {node: ^16.14.0 || >=18.0.0}
'@sigstore/verify@1.2.1':
- resolution:
- {
- integrity: sha512-8iKx79/F73DKbGfRf7+t4dqrc0bRr0thdPrxAtCKWRm/F0tG71i6O1rvlnScncJLLBZHn3h8M3c1BSUAb9yu8g==,
- }
- engines: { node: ^16.14.0 || >=18.0.0 }
+ resolution: {integrity: sha512-8iKx79/F73DKbGfRf7+t4dqrc0bRr0thdPrxAtCKWRm/F0tG71i6O1rvlnScncJLLBZHn3h8M3c1BSUAb9yu8g==}
+ engines: {node: ^16.14.0 || >=18.0.0}
'@sinclair/typebox@0.27.8':
- resolution:
- {
- integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==,
- }
+ resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==}
'@sinclair/typebox@0.34.45':
- resolution:
- {
- integrity: sha512-qJcFVfCa5jxBFSuv7S5WYbA8XdeCPmhnaVVfX/2Y6L8WYg8sk3XY2+6W0zH+3mq1Cz+YC7Ki66HfqX6IHAwnkg==,
- }
+ resolution: {integrity: sha512-qJcFVfCa5jxBFSuv7S5WYbA8XdeCPmhnaVVfX/2Y6L8WYg8sk3XY2+6W0zH+3mq1Cz+YC7Ki66HfqX6IHAwnkg==}
'@sinonjs/commons@3.0.1':
- resolution:
- {
- integrity: sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==,
- }
+ resolution: {integrity: sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==}
'@sinonjs/fake-timers@10.3.0':
- resolution:
- {
- integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==,
- }
+ resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==}
'@sinonjs/fake-timers@13.0.5':
- resolution:
- {
- integrity: sha512-36/hTbH2uaWuGVERyC6da9YwGWnzUZXuPro/F2LfsdOsLnCojz/iSH8MxUt/FD2S5XBSVPhmArFUXcpCQ2Hkiw==,
- }
+ resolution: {integrity: sha512-36/hTbH2uaWuGVERyC6da9YwGWnzUZXuPro/F2LfsdOsLnCojz/iSH8MxUt/FD2S5XBSVPhmArFUXcpCQ2Hkiw==}
'@smithy/abort-controller@4.2.7':
- resolution:
- {
- integrity: sha512-rzMY6CaKx2qxrbYbqjXWS0plqEy7LOdKHS0bg4ixJ6aoGDPNUcLWk/FRNuCILh7GKLG9TFUXYYeQQldMBBwuyw==,
- }
- engines: { node: '>=18.0.0' }
+ resolution: {integrity: sha512-rzMY6CaKx2qxrbYbqjXWS0plqEy7LOdKHS0bg4ixJ6aoGDPNUcLWk/FRNuCILh7GKLG9TFUXYYeQQldMBBwuyw==}
+ engines: {node: '>=18.0.0'}
'@smithy/chunked-blob-reader-native@4.2.1':
- resolution:
- {
- integrity: sha512-lX9Ay+6LisTfpLid2zZtIhSEjHMZoAR5hHCR4H7tBz/Zkfr5ea8RcQ7Tk4mi0P76p4cN+Btz16Ffno7YHpKXnQ==,
- }
- engines: { node: '>=18.0.0' }
+ resolution: {integrity: sha512-lX9Ay+6LisTfpLid2zZtIhSEjHMZoAR5hHCR4H7tBz/Zkfr5ea8RcQ7Tk4mi0P76p4cN+Btz16Ffno7YHpKXnQ==}
+ engines: {node: '>=18.0.0'}
'@smithy/chunked-blob-reader@5.2.0':
- resolution:
- {
- integrity: sha512-WmU0TnhEAJLWvfSeMxBNe5xtbselEO8+4wG0NtZeL8oR21WgH1xiO37El+/Y+H/Ie4SCwBy3MxYWmOYaGgZueA==,
- }
- engines: { node: '>=18.0.0' }
+ resolution: {integrity: sha512-WmU0TnhEAJLWvfSeMxBNe5xtbselEO8+4wG0NtZeL8oR21WgH1xiO37El+/Y+H/Ie4SCwBy3MxYWmOYaGgZueA==}
+ engines: {node: '>=18.0.0'}
'@smithy/config-resolver@4.4.5':
- resolution:
- {
- integrity: sha512-HAGoUAFYsUkoSckuKbCPayECeMim8pOu+yLy1zOxt1sifzEbrsRpYa+mKcMdiHKMeiqOibyPG0sFJnmaV/OGEg==,
- }
- engines: { node: '>=18.0.0' }
+ resolution: {integrity: sha512-HAGoUAFYsUkoSckuKbCPayECeMim8pOu+yLy1zOxt1sifzEbrsRpYa+mKcMdiHKMeiqOibyPG0sFJnmaV/OGEg==}
+ engines: {node: '>=18.0.0'}
'@smithy/core@3.20.0':
- resolution:
- {
- integrity: sha512-WsSHCPq/neD5G/MkK4csLI5Y5Pkd9c1NMfpYEKeghSGaD4Ja1qLIohRQf2D5c1Uy5aXp76DeKHkzWZ9KAlHroQ==,
- }
- engines: { node: '>=18.0.0' }
+ resolution: {integrity: sha512-WsSHCPq/neD5G/MkK4csLI5Y5Pkd9c1NMfpYEKeghSGaD4Ja1qLIohRQf2D5c1Uy5aXp76DeKHkzWZ9KAlHroQ==}
+ engines: {node: '>=18.0.0'}
'@smithy/credential-provider-imds@4.2.7':
- resolution:
- {
- integrity: sha512-CmduWdCiILCRNbQWFR0OcZlUPVtyE49Sr8yYL0rZQ4D/wKxiNzBNS/YHemvnbkIWj623fplgkexUd/c9CAKdoA==,
- }
- engines: { node: '>=18.0.0' }
+ resolution: {integrity: sha512-CmduWdCiILCRNbQWFR0OcZlUPVtyE49Sr8yYL0rZQ4D/wKxiNzBNS/YHemvnbkIWj623fplgkexUd/c9CAKdoA==}
+ engines: {node: '>=18.0.0'}
'@smithy/eventstream-codec@4.2.7':
- resolution:
- {
- integrity: sha512-DrpkEoM3j9cBBWhufqBwnbbn+3nf1N9FP6xuVJ+e220jbactKuQgaZwjwP5CP1t+O94brm2JgVMD2atMGX3xIQ==,
- }
- engines: { node: '>=18.0.0' }
+ resolution: {integrity: sha512-DrpkEoM3j9cBBWhufqBwnbbn+3nf1N9FP6xuVJ+e220jbactKuQgaZwjwP5CP1t+O94brm2JgVMD2atMGX3xIQ==}
+ engines: {node: '>=18.0.0'}
'@smithy/eventstream-serde-browser@4.2.7':
- resolution:
- {
- integrity: sha512-ujzPk8seYoDBmABDE5YqlhQZAXLOrtxtJLrbhHMKjBoG5b4dK4i6/mEU+6/7yXIAkqOO8sJ6YxZl+h0QQ1IJ7g==,
- }
- engines: { node: '>=18.0.0' }
+ resolution: {integrity: sha512-ujzPk8seYoDBmABDE5YqlhQZAXLOrtxtJLrbhHMKjBoG5b4dK4i6/mEU+6/7yXIAkqOO8sJ6YxZl+h0QQ1IJ7g==}
+ engines: {node: '>=18.0.0'}
'@smithy/eventstream-serde-config-resolver@4.3.7':
- resolution:
- {
- integrity: sha512-x7BtAiIPSaNaWuzm24Q/mtSkv+BrISO/fmheiJ39PKRNH3RmH2Hph/bUKSOBOBC9unqfIYDhKTHwpyZycLGPVQ==,
- }
- engines: { node: '>=18.0.0' }
+ resolution: {integrity: sha512-x7BtAiIPSaNaWuzm24Q/mtSkv+BrISO/fmheiJ39PKRNH3RmH2Hph/bUKSOBOBC9unqfIYDhKTHwpyZycLGPVQ==}
+ engines: {node: '>=18.0.0'}
'@smithy/eventstream-serde-node@4.2.7':
- resolution:
- {
- integrity: sha512-roySCtHC5+pQq5lK4be1fZ/WR6s/AxnPaLfCODIPArtN2du8s5Ot4mKVK3pPtijL/L654ws592JHJ1PbZFF6+A==,
- }
- engines: { node: '>=18.0.0' }
+ resolution: {integrity: sha512-roySCtHC5+pQq5lK4be1fZ/WR6s/AxnPaLfCODIPArtN2du8s5Ot4mKVK3pPtijL/L654ws592JHJ1PbZFF6+A==}
+ engines: {node: '>=18.0.0'}
'@smithy/eventstream-serde-universal@4.2.7':
- resolution:
- {
- integrity: sha512-QVD+g3+icFkThoy4r8wVFZMsIP08taHVKjE6Jpmz8h5CgX/kk6pTODq5cht0OMtcapUx+xrPzUTQdA+TmO0m1g==,
- }
- engines: { node: '>=18.0.0' }
+ resolution: {integrity: sha512-QVD+g3+icFkThoy4r8wVFZMsIP08taHVKjE6Jpmz8h5CgX/kk6pTODq5cht0OMtcapUx+xrPzUTQdA+TmO0m1g==}
+ engines: {node: '>=18.0.0'}
'@smithy/fetch-http-handler@5.3.8':
- resolution:
- {
- integrity: sha512-h/Fi+o7mti4n8wx1SR6UHWLaakwHRx29sizvp8OOm7iqwKGFneT06GCSFhml6Bha5BT6ot5pj3CYZnCHhGC2Rg==,
- }
- engines: { node: '>=18.0.0' }
+ resolution: {integrity: sha512-h/Fi+o7mti4n8wx1SR6UHWLaakwHRx29sizvp8OOm7iqwKGFneT06GCSFhml6Bha5BT6ot5pj3CYZnCHhGC2Rg==}
+ engines: {node: '>=18.0.0'}
'@smithy/hash-blob-browser@4.2.8':
- resolution:
- {
- integrity: sha512-07InZontqsM1ggTCPSRgI7d8DirqRrnpL7nIACT4PW0AWrgDiHhjGZzbAE5UtRSiU0NISGUYe7/rri9ZeWyDpw==,
- }
- engines: { node: '>=18.0.0' }
+ resolution: {integrity: sha512-07InZontqsM1ggTCPSRgI7d8DirqRrnpL7nIACT4PW0AWrgDiHhjGZzbAE5UtRSiU0NISGUYe7/rri9ZeWyDpw==}
+ engines: {node: '>=18.0.0'}
'@smithy/hash-node@4.2.7':
- resolution:
- {
- integrity: sha512-PU/JWLTBCV1c8FtB8tEFnY4eV1tSfBc7bDBADHfn1K+uRbPgSJ9jnJp0hyjiFN2PMdPzxsf1Fdu0eo9fJ760Xw==,
- }
- engines: { node: '>=18.0.0' }
+ resolution: {integrity: sha512-PU/JWLTBCV1c8FtB8tEFnY4eV1tSfBc7bDBADHfn1K+uRbPgSJ9jnJp0hyjiFN2PMdPzxsf1Fdu0eo9fJ760Xw==}
+ engines: {node: '>=18.0.0'}
'@smithy/hash-stream-node@4.2.7':
- resolution:
- {
- integrity: sha512-ZQVoAwNYnFMIbd4DUc517HuwNelJUY6YOzwqrbcAgCnVn+79/OK7UjwA93SPpdTOpKDVkLIzavWm/Ck7SmnDPQ==,
- }
- engines: { node: '>=18.0.0' }
+ resolution: {integrity: sha512-ZQVoAwNYnFMIbd4DUc517HuwNelJUY6YOzwqrbcAgCnVn+79/OK7UjwA93SPpdTOpKDVkLIzavWm/Ck7SmnDPQ==}
+ engines: {node: '>=18.0.0'}
'@smithy/invalid-dependency@4.2.7':
- resolution:
- {
- integrity: sha512-ncvgCr9a15nPlkhIUx3CU4d7E7WEuVJOV7fS7nnK2hLtPK9tYRBkMHQbhXU1VvvKeBm/O0x26OEoBq+ngFpOEQ==,
- }
- engines: { node: '>=18.0.0' }
+ resolution: {integrity: sha512-ncvgCr9a15nPlkhIUx3CU4d7E7WEuVJOV7fS7nnK2hLtPK9tYRBkMHQbhXU1VvvKeBm/O0x26OEoBq+ngFpOEQ==}
+ engines: {node: '>=18.0.0'}
'@smithy/is-array-buffer@2.2.0':
- resolution:
- {
- integrity: sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==,
- }
- engines: { node: '>=14.0.0' }
+ resolution: {integrity: sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==}
+ engines: {node: '>=14.0.0'}
'@smithy/is-array-buffer@4.2.0':
- resolution:
- {
- integrity: sha512-DZZZBvC7sjcYh4MazJSGiWMI2L7E0oCiRHREDzIxi/M2LY79/21iXt6aPLHge82wi5LsuRF5A06Ds3+0mlh6CQ==,
- }
- engines: { node: '>=18.0.0' }
+ resolution: {integrity: sha512-DZZZBvC7sjcYh4MazJSGiWMI2L7E0oCiRHREDzIxi/M2LY79/21iXt6aPLHge82wi5LsuRF5A06Ds3+0mlh6CQ==}
+ engines: {node: '>=18.0.0'}
'@smithy/md5-js@4.2.7':
- resolution:
- {
- integrity: sha512-Wv6JcUxtOLTnxvNjDnAiATUsk8gvA6EeS8zzHig07dotpByYsLot+m0AaQEniUBjx97AC41MQR4hW0baraD1Xw==,
- }
- engines: { node: '>=18.0.0' }
+ resolution: {integrity: sha512-Wv6JcUxtOLTnxvNjDnAiATUsk8gvA6EeS8zzHig07dotpByYsLot+m0AaQEniUBjx97AC41MQR4hW0baraD1Xw==}
+ engines: {node: '>=18.0.0'}
'@smithy/middleware-content-length@4.2.7':
- resolution:
- {
- integrity: sha512-GszfBfCcvt7kIbJ41LuNa5f0wvQCHhnGx/aDaZJCCT05Ld6x6U2s0xsc/0mBFONBZjQJp2U/0uSJ178OXOwbhg==,
- }
- engines: { node: '>=18.0.0' }
+ resolution: {integrity: sha512-GszfBfCcvt7kIbJ41LuNa5f0wvQCHhnGx/aDaZJCCT05Ld6x6U2s0xsc/0mBFONBZjQJp2U/0uSJ178OXOwbhg==}
+ engines: {node: '>=18.0.0'}
'@smithy/middleware-endpoint@4.4.1':
- resolution:
- {
- integrity: sha512-gpLspUAoe6f1M6H0u4cVuFzxZBrsGZmjx2O9SigurTx4PbntYa4AJ+o0G0oGm1L2oSX6oBhcGHwrfJHup2JnJg==,
- }
- engines: { node: '>=18.0.0' }
+ resolution: {integrity: sha512-gpLspUAoe6f1M6H0u4cVuFzxZBrsGZmjx2O9SigurTx4PbntYa4AJ+o0G0oGm1L2oSX6oBhcGHwrfJHup2JnJg==}
+ engines: {node: '>=18.0.0'}
'@smithy/middleware-retry@4.4.17':
- resolution:
- {
- integrity: sha512-MqbXK6Y9uq17h+4r0ogu/sBT6V/rdV+5NvYL7ZV444BKfQygYe8wAhDrVXagVebN6w2RE0Fm245l69mOsPGZzg==,
- }
- engines: { node: '>=18.0.0' }
+ resolution: {integrity: sha512-MqbXK6Y9uq17h+4r0ogu/sBT6V/rdV+5NvYL7ZV444BKfQygYe8wAhDrVXagVebN6w2RE0Fm245l69mOsPGZzg==}
+ engines: {node: '>=18.0.0'}
'@smithy/middleware-serde@4.2.8':
- resolution:
- {
- integrity: sha512-8rDGYen5m5+NV9eHv9ry0sqm2gI6W7mc1VSFMtn6Igo25S507/HaOX9LTHAS2/J32VXD0xSzrY0H5FJtOMS4/w==,
- }
- engines: { node: '>=18.0.0' }
+ resolution: {integrity: sha512-8rDGYen5m5+NV9eHv9ry0sqm2gI6W7mc1VSFMtn6Igo25S507/HaOX9LTHAS2/J32VXD0xSzrY0H5FJtOMS4/w==}
+ engines: {node: '>=18.0.0'}
'@smithy/middleware-stack@4.2.7':
- resolution:
- {
- integrity: sha512-bsOT0rJ+HHlZd9crHoS37mt8qRRN/h9jRve1SXUhVbkRzu0QaNYZp1i1jha4n098tsvROjcwfLlfvcFuJSXEsw==,
- }
- engines: { node: '>=18.0.0' }
+ resolution: {integrity: sha512-bsOT0rJ+HHlZd9crHoS37mt8qRRN/h9jRve1SXUhVbkRzu0QaNYZp1i1jha4n098tsvROjcwfLlfvcFuJSXEsw==}
+ engines: {node: '>=18.0.0'}
'@smithy/node-config-provider@4.3.7':
- resolution:
- {
- integrity: sha512-7r58wq8sdOcrwWe+klL9y3bc4GW1gnlfnFOuL7CXa7UzfhzhxKuzNdtqgzmTV+53lEp9NXh5hY/S4UgjLOzPfw==,
- }
- engines: { node: '>=18.0.0' }
+ resolution: {integrity: sha512-7r58wq8sdOcrwWe+klL9y3bc4GW1gnlfnFOuL7CXa7UzfhzhxKuzNdtqgzmTV+53lEp9NXh5hY/S4UgjLOzPfw==}
+ engines: {node: '>=18.0.0'}
'@smithy/node-http-handler@4.4.7':
- resolution:
- {
- integrity: sha512-NELpdmBOO6EpZtWgQiHjoShs1kmweaiNuETUpuup+cmm/xJYjT4eUjfhrXRP4jCOaAsS3c3yPsP3B+K+/fyPCQ==,
- }
- engines: { node: '>=18.0.0' }
+ resolution: {integrity: sha512-NELpdmBOO6EpZtWgQiHjoShs1kmweaiNuETUpuup+cmm/xJYjT4eUjfhrXRP4jCOaAsS3c3yPsP3B+K+/fyPCQ==}
+ engines: {node: '>=18.0.0'}
'@smithy/property-provider@4.2.7':
- resolution:
- {
- integrity: sha512-jmNYKe9MGGPoSl/D7JDDs1C8b3dC8f/w78LbaVfoTtWy4xAd5dfjaFG9c9PWPihY4ggMQNQSMtzU77CNgAJwmA==,
- }
- engines: { node: '>=18.0.0' }
+ resolution: {integrity: sha512-jmNYKe9MGGPoSl/D7JDDs1C8b3dC8f/w78LbaVfoTtWy4xAd5dfjaFG9c9PWPihY4ggMQNQSMtzU77CNgAJwmA==}
+ engines: {node: '>=18.0.0'}
'@smithy/protocol-http@5.3.7':
- resolution:
- {
- integrity: sha512-1r07pb994I20dD/c2seaZhoCuNYm0rWrvBxhCQ70brNh11M5Ml2ew6qJVo0lclB3jMIXirD4s2XRXRe7QEi0xA==,
- }
- engines: { node: '>=18.0.0' }
+ resolution: {integrity: sha512-1r07pb994I20dD/c2seaZhoCuNYm0rWrvBxhCQ70brNh11M5Ml2ew6qJVo0lclB3jMIXirD4s2XRXRe7QEi0xA==}
+ engines: {node: '>=18.0.0'}
'@smithy/querystring-builder@4.2.7':
- resolution:
- {
- integrity: sha512-eKONSywHZxK4tBxe2lXEysh8wbBdvDWiA+RIuaxZSgCMmA0zMgoDpGLJhnyj+c0leOQprVnXOmcB4m+W9Rw7sg==,
- }
- engines: { node: '>=18.0.0' }
+ resolution: {integrity: sha512-eKONSywHZxK4tBxe2lXEysh8wbBdvDWiA+RIuaxZSgCMmA0zMgoDpGLJhnyj+c0leOQprVnXOmcB4m+W9Rw7sg==}
+ engines: {node: '>=18.0.0'}
'@smithy/querystring-parser@4.2.7':
- resolution:
- {
- integrity: sha512-3X5ZvzUHmlSTHAXFlswrS6EGt8fMSIxX/c3Rm1Pni3+wYWB6cjGocmRIoqcQF9nU5OgGmL0u7l9m44tSUpfj9w==,
- }
- engines: { node: '>=18.0.0' }
+ resolution: {integrity: sha512-3X5ZvzUHmlSTHAXFlswrS6EGt8fMSIxX/c3Rm1Pni3+wYWB6cjGocmRIoqcQF9nU5OgGmL0u7l9m44tSUpfj9w==}
+ engines: {node: '>=18.0.0'}
'@smithy/service-error-classification@4.2.7':
- resolution:
- {
- integrity: sha512-YB7oCbukqEb2Dlh3340/8g8vNGbs/QsNNRms+gv3N2AtZz9/1vSBx6/6tpwQpZMEJFs7Uq8h4mmOn48ZZ72MkA==,
- }
- engines: { node: '>=18.0.0' }
+ resolution: {integrity: sha512-YB7oCbukqEb2Dlh3340/8g8vNGbs/QsNNRms+gv3N2AtZz9/1vSBx6/6tpwQpZMEJFs7Uq8h4mmOn48ZZ72MkA==}
+ engines: {node: '>=18.0.0'}
'@smithy/shared-ini-file-loader@4.4.2':
- resolution:
- {
- integrity: sha512-M7iUUff/KwfNunmrgtqBfvZSzh3bmFgv/j/t1Y1dQ+8dNo34br1cqVEqy6v0mYEgi0DkGO7Xig0AnuOaEGVlcg==,
- }
- engines: { node: '>=18.0.0' }
+ resolution: {integrity: sha512-M7iUUff/KwfNunmrgtqBfvZSzh3bmFgv/j/t1Y1dQ+8dNo34br1cqVEqy6v0mYEgi0DkGO7Xig0AnuOaEGVlcg==}
+ engines: {node: '>=18.0.0'}
'@smithy/signature-v4@5.3.7':
- resolution:
- {
- integrity: sha512-9oNUlqBlFZFOSdxgImA6X5GFuzE7V2H7VG/7E70cdLhidFbdtvxxt81EHgykGK5vq5D3FafH//X+Oy31j3CKOg==,
- }
- engines: { node: '>=18.0.0' }
+ resolution: {integrity: sha512-9oNUlqBlFZFOSdxgImA6X5GFuzE7V2H7VG/7E70cdLhidFbdtvxxt81EHgykGK5vq5D3FafH//X+Oy31j3CKOg==}
+ engines: {node: '>=18.0.0'}
'@smithy/smithy-client@4.10.2':
- resolution:
- {
- integrity: sha512-D5z79xQWpgrGpAHb054Fn2CCTQZpog7JELbVQ6XAvXs5MNKWf28U9gzSBlJkOyMl9LA1TZEjRtwvGXfP0Sl90g==,
- }
- engines: { node: '>=18.0.0' }
+ resolution: {integrity: sha512-D5z79xQWpgrGpAHb054Fn2CCTQZpog7JELbVQ6XAvXs5MNKWf28U9gzSBlJkOyMl9LA1TZEjRtwvGXfP0Sl90g==}
+ engines: {node: '>=18.0.0'}
'@smithy/types@4.11.0':
- resolution:
- {
- integrity: sha512-mlrmL0DRDVe3mNrjTcVcZEgkFmufITfUAPBEA+AHYiIeYyJebso/He1qLbP3PssRe22KUzLRpQSdBPbXdgZ2VA==,
- }
- engines: { node: '>=18.0.0' }
+ resolution: {integrity: sha512-mlrmL0DRDVe3mNrjTcVcZEgkFmufITfUAPBEA+AHYiIeYyJebso/He1qLbP3PssRe22KUzLRpQSdBPbXdgZ2VA==}
+ engines: {node: '>=18.0.0'}
'@smithy/url-parser@4.2.7':
- resolution:
- {
- integrity: sha512-/RLtVsRV4uY3qPWhBDsjwahAtt3x2IsMGnP5W1b2VZIe+qgCqkLxI1UOHDZp1Q1QSOrdOR32MF3Ph2JfWT1VHg==,
- }
- engines: { node: '>=18.0.0' }
+ resolution: {integrity: sha512-/RLtVsRV4uY3qPWhBDsjwahAtt3x2IsMGnP5W1b2VZIe+qgCqkLxI1UOHDZp1Q1QSOrdOR32MF3Ph2JfWT1VHg==}
+ engines: {node: '>=18.0.0'}
'@smithy/util-base64@4.3.0':
- resolution:
- {
- integrity: sha512-GkXZ59JfyxsIwNTWFnjmFEI8kZpRNIBfxKjv09+nkAWPt/4aGaEWMM04m4sxgNVWkbt2MdSvE3KF/PfX4nFedQ==,
- }
- engines: { node: '>=18.0.0' }
+ resolution: {integrity: sha512-GkXZ59JfyxsIwNTWFnjmFEI8kZpRNIBfxKjv09+nkAWPt/4aGaEWMM04m4sxgNVWkbt2MdSvE3KF/PfX4nFedQ==}
+ engines: {node: '>=18.0.0'}
'@smithy/util-body-length-browser@4.2.0':
- resolution:
- {
- integrity: sha512-Fkoh/I76szMKJnBXWPdFkQJl2r9SjPt3cMzLdOB6eJ4Pnpas8hVoWPYemX/peO0yrrvldgCUVJqOAjUrOLjbxg==,
- }
- engines: { node: '>=18.0.0' }
+ resolution: {integrity: sha512-Fkoh/I76szMKJnBXWPdFkQJl2r9SjPt3cMzLdOB6eJ4Pnpas8hVoWPYemX/peO0yrrvldgCUVJqOAjUrOLjbxg==}
+ engines: {node: '>=18.0.0'}
'@smithy/util-body-length-node@4.2.1':
- resolution:
- {
- integrity: sha512-h53dz/pISVrVrfxV1iqXlx5pRg3V2YWFcSQyPyXZRrZoZj4R4DeWRDo1a7dd3CPTcFi3kE+98tuNyD2axyZReA==,
- }
- engines: { node: '>=18.0.0' }
+ resolution: {integrity: sha512-h53dz/pISVrVrfxV1iqXlx5pRg3V2YWFcSQyPyXZRrZoZj4R4DeWRDo1a7dd3CPTcFi3kE+98tuNyD2axyZReA==}
+ engines: {node: '>=18.0.0'}
'@smithy/util-buffer-from@2.2.0':
- resolution:
- {
- integrity: sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==,
- }
- engines: { node: '>=14.0.0' }
+ resolution: {integrity: sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==}
+ engines: {node: '>=14.0.0'}
'@smithy/util-buffer-from@4.2.0':
- resolution:
- {
- integrity: sha512-kAY9hTKulTNevM2nlRtxAG2FQ3B2OR6QIrPY3zE5LqJy1oxzmgBGsHLWTcNhWXKchgA0WHW+mZkQrng/pgcCew==,
- }
- engines: { node: '>=18.0.0' }
+ resolution: {integrity: sha512-kAY9hTKulTNevM2nlRtxAG2FQ3B2OR6QIrPY3zE5LqJy1oxzmgBGsHLWTcNhWXKchgA0WHW+mZkQrng/pgcCew==}
+ engines: {node: '>=18.0.0'}
'@smithy/util-config-provider@4.2.0':
- resolution:
- {
- integrity: sha512-YEjpl6XJ36FTKmD+kRJJWYvrHeUvm5ykaUS5xK+6oXffQPHeEM4/nXlZPe+Wu0lsgRUcNZiliYNh/y7q9c2y6Q==,
- }
- engines: { node: '>=18.0.0' }
+ resolution: {integrity: sha512-YEjpl6XJ36FTKmD+kRJJWYvrHeUvm5ykaUS5xK+6oXffQPHeEM4/nXlZPe+Wu0lsgRUcNZiliYNh/y7q9c2y6Q==}
+ engines: {node: '>=18.0.0'}
'@smithy/util-defaults-mode-browser@4.3.16':
- resolution:
- {
- integrity: sha512-/eiSP3mzY3TsvUOYMeL4EqUX6fgUOj2eUOU4rMMgVbq67TiRLyxT7Xsjxq0bW3OwuzK009qOwF0L2OgJqperAQ==,
- }
- engines: { node: '>=18.0.0' }
+ resolution: {integrity: sha512-/eiSP3mzY3TsvUOYMeL4EqUX6fgUOj2eUOU4rMMgVbq67TiRLyxT7Xsjxq0bW3OwuzK009qOwF0L2OgJqperAQ==}
+ engines: {node: '>=18.0.0'}
'@smithy/util-defaults-mode-node@4.2.19':
- resolution:
- {
- integrity: sha512-3a4+4mhf6VycEJyHIQLypRbiwG6aJvbQAeRAVXydMmfweEPnLLabRbdyo/Pjw8Rew9vjsh5WCdhmDaHkQnhhhA==,
- }
- engines: { node: '>=18.0.0' }
+ resolution: {integrity: sha512-3a4+4mhf6VycEJyHIQLypRbiwG6aJvbQAeRAVXydMmfweEPnLLabRbdyo/Pjw8Rew9vjsh5WCdhmDaHkQnhhhA==}
+ engines: {node: '>=18.0.0'}
'@smithy/util-endpoints@3.2.7':
- resolution:
- {
- integrity: sha512-s4ILhyAvVqhMDYREeTS68R43B1V5aenV5q/V1QpRQJkCXib5BPRo4s7uNdzGtIKxaPHCfU/8YkvPAEvTpxgspg==,
- }
- engines: { node: '>=18.0.0' }
+ resolution: {integrity: sha512-s4ILhyAvVqhMDYREeTS68R43B1V5aenV5q/V1QpRQJkCXib5BPRo4s7uNdzGtIKxaPHCfU/8YkvPAEvTpxgspg==}
+ engines: {node: '>=18.0.0'}
'@smithy/util-hex-encoding@4.2.0':
- resolution:
- {
- integrity: sha512-CCQBwJIvXMLKxVbO88IukazJD9a4kQ9ZN7/UMGBjBcJYvatpWk+9g870El4cB8/EJxfe+k+y0GmR9CAzkF+Nbw==,
- }
- engines: { node: '>=18.0.0' }
+ resolution: {integrity: sha512-CCQBwJIvXMLKxVbO88IukazJD9a4kQ9ZN7/UMGBjBcJYvatpWk+9g870El4cB8/EJxfe+k+y0GmR9CAzkF+Nbw==}
+ engines: {node: '>=18.0.0'}
'@smithy/util-middleware@4.2.7':
- resolution:
- {
- integrity: sha512-i1IkpbOae6NvIKsEeLLM9/2q4X+M90KV3oCFgWQI4q0Qz+yUZvsr+gZPdAEAtFhWQhAHpTsJO8DRJPuwVyln+w==,
- }
- engines: { node: '>=18.0.0' }
+ resolution: {integrity: sha512-i1IkpbOae6NvIKsEeLLM9/2q4X+M90KV3oCFgWQI4q0Qz+yUZvsr+gZPdAEAtFhWQhAHpTsJO8DRJPuwVyln+w==}
+ engines: {node: '>=18.0.0'}
'@smithy/util-retry@4.2.7':
- resolution:
- {
- integrity: sha512-SvDdsQyF5CIASa4EYVT02LukPHVzAgUA4kMAuZ97QJc2BpAqZfA4PINB8/KOoCXEw9tsuv/jQjMeaHFvxdLNGg==,
- }
- engines: { node: '>=18.0.0' }
+ resolution: {integrity: sha512-SvDdsQyF5CIASa4EYVT02LukPHVzAgUA4kMAuZ97QJc2BpAqZfA4PINB8/KOoCXEw9tsuv/jQjMeaHFvxdLNGg==}
+ engines: {node: '>=18.0.0'}
'@smithy/util-stream@4.5.8':
- resolution:
- {
- integrity: sha512-ZnnBhTapjM0YPGUSmOs0Mcg/Gg87k503qG4zU2v/+Js2Gu+daKOJMeqcQns8ajepY8tgzzfYxl6kQyZKml6O2w==,
- }
- engines: { node: '>=18.0.0' }
+ resolution: {integrity: sha512-ZnnBhTapjM0YPGUSmOs0Mcg/Gg87k503qG4zU2v/+Js2Gu+daKOJMeqcQns8ajepY8tgzzfYxl6kQyZKml6O2w==}
+ engines: {node: '>=18.0.0'}
'@smithy/util-uri-escape@4.2.0':
- resolution:
- {
- integrity: sha512-igZpCKV9+E/Mzrpq6YacdTQ0qTiLm85gD6N/IrmyDvQFA4UnU3d5g3m8tMT/6zG/vVkWSU+VxeUyGonL62DuxA==,
- }
- engines: { node: '>=18.0.0' }
+ resolution: {integrity: sha512-igZpCKV9+E/Mzrpq6YacdTQ0qTiLm85gD6N/IrmyDvQFA4UnU3d5g3m8tMT/6zG/vVkWSU+VxeUyGonL62DuxA==}
+ engines: {node: '>=18.0.0'}
'@smithy/util-utf8@2.3.0':
- resolution:
- {
- integrity: sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==,
- }
- engines: { node: '>=14.0.0' }
+ resolution: {integrity: sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==}
+ engines: {node: '>=14.0.0'}
'@smithy/util-utf8@4.2.0':
- resolution:
- {
- integrity: sha512-zBPfuzoI8xyBtR2P6WQj63Rz8i3AmfAaJLuNG8dWsfvPe8lO4aCPYLn879mEgHndZH1zQ2oXmG8O1GGzzaoZiw==,
- }
- engines: { node: '>=18.0.0' }
+ resolution: {integrity: sha512-zBPfuzoI8xyBtR2P6WQj63Rz8i3AmfAaJLuNG8dWsfvPe8lO4aCPYLn879mEgHndZH1zQ2oXmG8O1GGzzaoZiw==}
+ engines: {node: '>=18.0.0'}
'@smithy/util-waiter@4.2.7':
- resolution:
- {
- integrity: sha512-vHJFXi9b7kUEpHWUCY3Twl+9NPOZvQ0SAi+Ewtn48mbiJk4JY9MZmKQjGB4SCvVb9WPiSphZJYY6RIbs+grrzw==,
- }
- engines: { node: '>=18.0.0' }
+ resolution: {integrity: sha512-vHJFXi9b7kUEpHWUCY3Twl+9NPOZvQ0SAi+Ewtn48mbiJk4JY9MZmKQjGB4SCvVb9WPiSphZJYY6RIbs+grrzw==}
+ engines: {node: '>=18.0.0'}
'@smithy/uuid@1.1.0':
- resolution:
- {
- integrity: sha512-4aUIteuyxtBUhVdiQqcDhKFitwfd9hqoSDYY2KRXiWtgoWJ9Bmise+KfEPDiVHWeJepvF8xJO9/9+WDIciMFFw==,
- }
- engines: { node: '>=18.0.0' }
+ resolution: {integrity: sha512-4aUIteuyxtBUhVdiQqcDhKFitwfd9hqoSDYY2KRXiWtgoWJ9Bmise+KfEPDiVHWeJepvF8xJO9/9+WDIciMFFw==}
+ engines: {node: '>=18.0.0'}
'@styled-system/background@5.1.2':
- resolution:
- {
- integrity: sha512-jtwH2C/U6ssuGSvwTN3ri/IyjdHb8W9X/g8Y0JLcrH02G+BW3OS8kZdHphF1/YyRklnrKrBT2ngwGUK6aqqV3A==,
- }
+ resolution: {integrity: sha512-jtwH2C/U6ssuGSvwTN3ri/IyjdHb8W9X/g8Y0JLcrH02G+BW3OS8kZdHphF1/YyRklnrKrBT2ngwGUK6aqqV3A==}
'@styled-system/border@5.1.5':
- resolution:
- {
- integrity: sha512-JvddhNrnhGigtzWRCVuAHepniyVi6hBlimxWDVAdcTuk7aRn9BYJUwfHslURtwYFsF5FoEs8Zmr1oZq2M1AP0A==,
- }
+ resolution: {integrity: sha512-JvddhNrnhGigtzWRCVuAHepniyVi6hBlimxWDVAdcTuk7aRn9BYJUwfHslURtwYFsF5FoEs8Zmr1oZq2M1AP0A==}
'@styled-system/color@5.1.2':
- resolution:
- {
- integrity: sha512-1kCkeKDZkt4GYkuFNKc7vJQMcOmTl3bJY3YBUs7fCNM6mMYJeT1pViQ2LwBSBJytj3AB0o4IdLBoepgSgGl5MA==,
- }
+ resolution: {integrity: sha512-1kCkeKDZkt4GYkuFNKc7vJQMcOmTl3bJY3YBUs7fCNM6mMYJeT1pViQ2LwBSBJytj3AB0o4IdLBoepgSgGl5MA==}
'@styled-system/core@5.1.2':
- resolution:
- {
- integrity: sha512-XclBDdNIy7OPOsN4HBsawG2eiWfCcuFt6gxKn1x4QfMIgeO6TOlA2pZZ5GWZtIhCUqEPTgIBta6JXsGyCkLBYw==,
- }
+ resolution: {integrity: sha512-XclBDdNIy7OPOsN4HBsawG2eiWfCcuFt6gxKn1x4QfMIgeO6TOlA2pZZ5GWZtIhCUqEPTgIBta6JXsGyCkLBYw==}
'@styled-system/css@5.1.5':
- resolution:
- {
- integrity: sha512-XkORZdS5kypzcBotAMPBoeckDs9aSZVkvrAlq5K3xP8IMAUek+x2O4NtwoSgkYkWWzVBu6DGdFZLR790QWGG+A==,
- }
+ resolution: {integrity: sha512-XkORZdS5kypzcBotAMPBoeckDs9aSZVkvrAlq5K3xP8IMAUek+x2O4NtwoSgkYkWWzVBu6DGdFZLR790QWGG+A==}
'@styled-system/flexbox@5.1.2':
- resolution:
- {
- integrity: sha512-6hHV52+eUk654Y1J2v77B8iLeBNtc+SA3R4necsu2VVinSD7+XY5PCCEzBFaWs42dtOEDIa2lMrgL0YBC01mDQ==,
- }
+ resolution: {integrity: sha512-6hHV52+eUk654Y1J2v77B8iLeBNtc+SA3R4necsu2VVinSD7+XY5PCCEzBFaWs42dtOEDIa2lMrgL0YBC01mDQ==}
'@styled-system/grid@5.1.2':
- resolution:
- {
- integrity: sha512-K3YiV1KyHHzgdNuNlaw8oW2ktMuGga99o1e/NAfTEi5Zsa7JXxzwEnVSDSBdJC+z6R8WYTCYRQC6bkVFcvdTeg==,
- }
+ resolution: {integrity: sha512-K3YiV1KyHHzgdNuNlaw8oW2ktMuGga99o1e/NAfTEi5Zsa7JXxzwEnVSDSBdJC+z6R8WYTCYRQC6bkVFcvdTeg==}
'@styled-system/layout@5.1.2':
- resolution:
- {
- integrity: sha512-wUhkMBqSeacPFhoE9S6UF3fsMEKFv91gF4AdDWp0Aym1yeMPpqz9l9qS/6vjSsDPF7zOb5cOKC3tcKKOMuDCPw==,
- }
+ resolution: {integrity: sha512-wUhkMBqSeacPFhoE9S6UF3fsMEKFv91gF4AdDWp0Aym1yeMPpqz9l9qS/6vjSsDPF7zOb5cOKC3tcKKOMuDCPw==}
'@styled-system/position@5.1.2':
- resolution:
- {
- integrity: sha512-60IZfMXEOOZe3l1mCu6sj/2NAyUmES2kR9Kzp7s2D3P4qKsZWxD1Se1+wJvevb+1TP+ZMkGPEYYXRyU8M1aF5A==,
- }
+ resolution: {integrity: sha512-60IZfMXEOOZe3l1mCu6sj/2NAyUmES2kR9Kzp7s2D3P4qKsZWxD1Se1+wJvevb+1TP+ZMkGPEYYXRyU8M1aF5A==}
'@styled-system/shadow@5.1.2':
- resolution:
- {
- integrity: sha512-wqniqYb7XuZM7K7C0d1Euxc4eGtqEe/lvM0WjuAFsQVImiq6KGT7s7is+0bNI8O4Dwg27jyu4Lfqo/oIQXNzAg==,
- }
+ resolution: {integrity: sha512-wqniqYb7XuZM7K7C0d1Euxc4eGtqEe/lvM0WjuAFsQVImiq6KGT7s7is+0bNI8O4Dwg27jyu4Lfqo/oIQXNzAg==}
'@styled-system/space@5.1.2':
- resolution:
- {
- integrity: sha512-+zzYpR8uvfhcAbaPXhH8QgDAV//flxqxSjHiS9cDFQQUSznXMQmxJegbhcdEF7/eNnJgHeIXv1jmny78kipgBA==,
- }
+ resolution: {integrity: sha512-+zzYpR8uvfhcAbaPXhH8QgDAV//flxqxSjHiS9cDFQQUSznXMQmxJegbhcdEF7/eNnJgHeIXv1jmny78kipgBA==}
'@styled-system/typography@5.1.2':
- resolution:
- {
- integrity: sha512-BxbVUnN8N7hJ4aaPOd7wEsudeT7CxarR+2hns8XCX1zp0DFfbWw4xYa/olA0oQaqx7F1hzDg+eRaGzAJbF+jOg==,
- }
+ resolution: {integrity: sha512-BxbVUnN8N7hJ4aaPOd7wEsudeT7CxarR+2hns8XCX1zp0DFfbWw4xYa/olA0oQaqx7F1hzDg+eRaGzAJbF+jOg==}
'@styled-system/variant@5.1.5':
- resolution:
- {
- integrity: sha512-Yn8hXAFoWIro8+Q5J8YJd/mP85Teiut3fsGVR9CAxwgNfIAiqlYxsk5iHU7VHJks/0KjL4ATSjmbtCDC/4l1qw==,
- }
+ resolution: {integrity: sha512-Yn8hXAFoWIro8+Q5J8YJd/mP85Teiut3fsGVR9CAxwgNfIAiqlYxsk5iHU7VHJks/0KjL4ATSjmbtCDC/4l1qw==}
'@tanstack/query-core@5.90.16':
- resolution:
- {
- integrity: sha512-MvtWckSVufs/ja463/K4PyJeqT+HMlJWtw6PrCpywznd2NSgO3m4KwO9RqbFqGg6iDE8vVMFWMeQI4Io3eEYww==,
- }
+ resolution: {integrity: sha512-MvtWckSVufs/ja463/K4PyJeqT+HMlJWtw6PrCpywznd2NSgO3m4KwO9RqbFqGg6iDE8vVMFWMeQI4Io3eEYww==}
'@tanstack/react-query@5.90.16':
- resolution:
- {
- integrity: sha512-bpMGOmV4OPmif7TNMteU/Ehf/hoC0Kf98PDc0F4BZkFrEapRMEqI/V6YS0lyzwSV6PQpY1y4xxArUIfBW5LVxQ==,
- }
+ resolution: {integrity: sha512-bpMGOmV4OPmif7TNMteU/Ehf/hoC0Kf98PDc0F4BZkFrEapRMEqI/V6YS0lyzwSV6PQpY1y4xxArUIfBW5LVxQ==}
peerDependencies:
react: ^18 || ^19
'@testing-library/dom@7.31.2':
- resolution:
- {
- integrity: sha512-3UqjCpey6HiTZT92vODYLPxTBWlM8ZOOjr3LX5F37/VRipW2M1kX6I/Cm4VXzteZqfGfagg8yXywpcOgQBlNsQ==,
- }
- engines: { node: '>=10' }
+ resolution: {integrity: sha512-3UqjCpey6HiTZT92vODYLPxTBWlM8ZOOjr3LX5F37/VRipW2M1kX6I/Cm4VXzteZqfGfagg8yXywpcOgQBlNsQ==}
+ engines: {node: '>=10'}
'@testing-library/jest-dom@5.11.10':
- resolution:
- {
- integrity: sha512-FuKiq5xuk44Fqm0000Z9w0hjOdwZRNzgx7xGGxQYepWFZy+OYUMOT/wPI4nLYXCaVltNVpU1W/qmD88wLWDsqQ==,
- }
- engines: { node: '>=8', npm: '>=6', yarn: '>=1' }
+ resolution: {integrity: sha512-FuKiq5xuk44Fqm0000Z9w0hjOdwZRNzgx7xGGxQYepWFZy+OYUMOT/wPI4nLYXCaVltNVpU1W/qmD88wLWDsqQ==}
+ engines: {node: '>=8', npm: '>=6', yarn: '>=1'}
'@testing-library/react@11.2.5':
- resolution:
- {
- integrity: sha512-yEx7oIa/UWLe2F2dqK0FtMF9sJWNXD+2PPtp39BvE0Kh9MJ9Kl0HrZAgEuhUJR+Lx8Di6Xz+rKwSdEPY2UV8ZQ==,
- }
- engines: { node: '>=10' }
+ resolution: {integrity: sha512-yEx7oIa/UWLe2F2dqK0FtMF9sJWNXD+2PPtp39BvE0Kh9MJ9Kl0HrZAgEuhUJR+Lx8Di6Xz+rKwSdEPY2UV8ZQ==}
+ engines: {node: '>=10'}
peerDependencies:
react: '*'
react-dom: '*'
- '@ts-morph/common@0.28.1':
- resolution:
- {
- integrity: sha512-W74iWf7ILp1ZKNYXY5qbddNaml7e9Sedv5lvU1V8lftlitkc9Pq1A+jlH23ltDgWYeZFFEqGCD1Ies9hqu3O+g==,
- }
-
'@tsconfig/node10@1.0.12':
- resolution:
- {
- integrity: sha512-UCYBaeFvM11aU2y3YPZ//O5Rhj+xKyzy7mvcIoAjASbigy8mHMryP5cK7dgjlz2hWxh1g5pLw084E0a/wlUSFQ==,
- }
+ resolution: {integrity: sha512-UCYBaeFvM11aU2y3YPZ//O5Rhj+xKyzy7mvcIoAjASbigy8mHMryP5cK7dgjlz2hWxh1g5pLw084E0a/wlUSFQ==}
'@tsconfig/node12@1.0.11':
- resolution:
- {
- integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==,
- }
+ resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==}
'@tsconfig/node14@1.0.3':
- resolution:
- {
- integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==,
- }
+ resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==}
'@tsconfig/node16@1.0.4':
- resolution:
- {
- integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==,
- }
+ resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==}
'@tufjs/canonical-json@2.0.0':
- resolution:
- {
- integrity: sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA==,
- }
- engines: { node: ^16.14.0 || >=18.0.0 }
+ resolution: {integrity: sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA==}
+ engines: {node: ^16.14.0 || >=18.0.0}
'@tufjs/models@2.0.1':
- resolution:
- {
- integrity: sha512-92F7/SFyufn4DXsha9+QfKnN03JGqtMFMXgSHbZOo8JG59WkTni7UzAouNQDf7AuP9OAMxVOPQcqG3sB7w+kkg==,
- }
- engines: { node: ^16.14.0 || >=18.0.0 }
+ resolution: {integrity: sha512-92F7/SFyufn4DXsha9+QfKnN03JGqtMFMXgSHbZOo8JG59WkTni7UzAouNQDf7AuP9OAMxVOPQcqG3sB7w+kkg==}
+ engines: {node: ^16.14.0 || >=18.0.0}
'@tybys/wasm-util@0.10.1':
- resolution:
- {
- integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==,
- }
+ resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==}
'@tybys/wasm-util@0.9.0':
- resolution:
- {
- integrity: sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==,
- }
+ resolution: {integrity: sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==}
'@types/accept-language-parser@1.5.8':
- resolution:
- {
- integrity: sha512-6+dKdh9q/I8xDBnKQKddCBKaWBWLmJ97HTiSbAXVpL7LEgDfOkKF98UVCaZ5KJrtdN5Wa5ndXUiqD3XR9XGqWQ==,
- }
+ resolution: {integrity: sha512-6+dKdh9q/I8xDBnKQKddCBKaWBWLmJ97HTiSbAXVpL7LEgDfOkKF98UVCaZ5KJrtdN5Wa5ndXUiqD3XR9XGqWQ==}
'@types/accepts@1.3.7':
- resolution:
- {
- integrity: sha512-Pay9fq2lM2wXPWbteBsRAGiWH2hig4ZE2asK+mm7kUzlxRTfL961rj89I6zV/E3PcIkDqyuBEcMxFT7rccugeQ==,
- }
+ resolution: {integrity: sha512-Pay9fq2lM2wXPWbteBsRAGiWH2hig4ZE2asK+mm7kUzlxRTfL961rj89I6zV/E3PcIkDqyuBEcMxFT7rccugeQ==}
'@types/aria-query@4.2.2':
- resolution:
- {
- integrity: sha512-HnYpAE1Y6kRyKM/XkEuiRQhTHvkzMBurTHnpFLYLBGPIylZNPs9jJcuOOYWxPLJCSEtmZT0Y8rHDokKN7rRTig==,
- }
+ resolution: {integrity: sha512-HnYpAE1Y6kRyKM/XkEuiRQhTHvkzMBurTHnpFLYLBGPIylZNPs9jJcuOOYWxPLJCSEtmZT0Y8rHDokKN7rRTig==}
'@types/babel__core@7.20.5':
- resolution:
- {
- integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==,
- }
+ resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==}
'@types/babel__generator@7.27.0':
- resolution:
- {
- integrity: sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==,
- }
+ resolution: {integrity: sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==}
'@types/babel__template@7.4.4':
- resolution:
- {
- integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==,
- }
+ resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==}
'@types/babel__traverse@7.28.0':
- resolution:
- {
- integrity: sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==,
- }
+ resolution: {integrity: sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==}
'@types/body-parser@1.19.6':
- resolution:
- {
- integrity: sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==,
- }
+ resolution: {integrity: sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==}
'@types/connect@3.4.38':
- resolution:
- {
- integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==,
- }
+ resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==}
'@types/content-disposition@0.5.9':
- resolution:
- {
- integrity: sha512-8uYXI3Gw35MhiVYhG3s295oihrxRyytcRHjSjqnqZVDDy/xcGBRny7+Xj1Wgfhv5QzRtN2hB2dVRBUX9XW3UcQ==,
- }
+ resolution: {integrity: sha512-8uYXI3Gw35MhiVYhG3s295oihrxRyytcRHjSjqnqZVDDy/xcGBRny7+Xj1Wgfhv5QzRtN2hB2dVRBUX9XW3UcQ==}
'@types/cookies@0.9.2':
- resolution:
- {
- integrity: sha512-1AvkDdZM2dbyFybL4fxpuNCaWyv//0AwsuUk2DWeXyM1/5ZKm6W3z6mQi24RZ4l2ucY+bkSHzbDVpySqPGuV8A==,
- }
+ resolution: {integrity: sha512-1AvkDdZM2dbyFybL4fxpuNCaWyv//0AwsuUk2DWeXyM1/5ZKm6W3z6mQi24RZ4l2ucY+bkSHzbDVpySqPGuV8A==}
'@types/cors@2.8.19':
- resolution:
- {
- integrity: sha512-mFNylyeyqN93lfe/9CSxOGREz8cpzAhH+E93xJ4xWQf62V8sQ/24reV2nyzUWM6H6Xji+GGHpkbLe7pVoUEskg==,
- }
+ resolution: {integrity: sha512-mFNylyeyqN93lfe/9CSxOGREz8cpzAhH+E93xJ4xWQf62V8sQ/24reV2nyzUWM6H6Xji+GGHpkbLe7pVoUEskg==}
'@types/estree@1.0.8':
- resolution:
- {
- integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==,
- }
+ resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==}
'@types/express-serve-static-core@5.1.0':
- resolution:
- {
- integrity: sha512-jnHMsrd0Mwa9Cf4IdOzbz543y4XJepXrbia2T4b6+spXC2We3t1y6K44D3mR8XMFSXMCf3/l7rCgddfx7UNVBA==,
- }
+ resolution: {integrity: sha512-jnHMsrd0Mwa9Cf4IdOzbz543y4XJepXrbia2T4b6+spXC2We3t1y6K44D3mR8XMFSXMCf3/l7rCgddfx7UNVBA==}
'@types/express@5.0.6':
- resolution:
- {
- integrity: sha512-sKYVuV7Sv9fbPIt/442koC7+IIwK5olP1KWeD88e/idgoJqDm3JV/YUiPwkoKK92ylff2MGxSz1CSjsXelx0YA==,
- }
+ resolution: {integrity: sha512-sKYVuV7Sv9fbPIt/442koC7+IIwK5olP1KWeD88e/idgoJqDm3JV/YUiPwkoKK92ylff2MGxSz1CSjsXelx0YA==}
'@types/geojson@7946.0.16':
- resolution:
- {
- integrity: sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==,
- }
+ resolution: {integrity: sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==}
'@types/graceful-fs@4.1.9':
- resolution:
- {
- integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==,
- }
+ resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==}
'@types/graphql-upload@8.0.12':
- resolution:
- {
- integrity: sha512-M0ZPZqNUzKNB16q5woEzgG/Q8DjICV80K7JvDSRnDmDFfrRdfFX/n6PbmqAN7gCzECcHVnw1gk6N4Cg0FwxCqA==,
- }
+ resolution: {integrity: sha512-M0ZPZqNUzKNB16q5woEzgG/Q8DjICV80K7JvDSRnDmDFfrRdfFX/n6PbmqAN7gCzECcHVnw1gk6N4Cg0FwxCqA==}
'@types/http-assert@1.5.6':
- resolution:
- {
- integrity: sha512-TTEwmtjgVbYAzZYWyeHPrrtWnfVkm8tQkP8P21uQifPgMRgjrow3XDEYqucuC8SKZJT7pUnhU/JymvjggxO9vw==,
- }
+ resolution: {integrity: sha512-TTEwmtjgVbYAzZYWyeHPrrtWnfVkm8tQkP8P21uQifPgMRgjrow3XDEYqucuC8SKZJT7pUnhU/JymvjggxO9vw==}
'@types/http-errors@2.0.5':
- resolution:
- {
- integrity: sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==,
- }
+ resolution: {integrity: sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==}
'@types/istanbul-lib-coverage@2.0.6':
- resolution:
- {
- integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==,
- }
+ resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==}
'@types/istanbul-lib-report@3.0.3':
- resolution:
- {
- integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==,
- }
+ resolution: {integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==}
'@types/istanbul-reports@3.0.4':
- resolution:
- {
- integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==,
- }
+ resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==}
'@types/jest-in-case@1.0.9':
- resolution:
- {
- integrity: sha512-tapHpzWGjCC/hxYJyzbJ/5ZV6rA2153Sve5lGJUAIA1Jzrphfp27TznAWfGeXf+d8TLN7zMujaC0UwNQwSJaQg==,
- }
+ resolution: {integrity: sha512-tapHpzWGjCC/hxYJyzbJ/5ZV6rA2153Sve5lGJUAIA1Jzrphfp27TznAWfGeXf+d8TLN7zMujaC0UwNQwSJaQg==}
'@types/jest@29.5.14':
- resolution:
- {
- integrity: sha512-ZN+4sdnLUbo8EVvVc2ao0GFW6oVrQRPn4K2lglySj7APvSrgzxHiNNK99us4WDMi57xxA2yggblIAMNhXOotLQ==,
- }
+ resolution: {integrity: sha512-ZN+4sdnLUbo8EVvVc2ao0GFW6oVrQRPn4K2lglySj7APvSrgzxHiNNK99us4WDMi57xxA2yggblIAMNhXOotLQ==}
'@types/jest@30.0.0':
- resolution:
- {
- integrity: sha512-XTYugzhuwqWjws0CVz8QpM36+T+Dz5mTEBKhNs/esGLnCIlGdRy+Dq78NRjd7ls7r8BC8ZRMOrKlkO1hU0JOwA==,
- }
+ resolution: {integrity: sha512-XTYugzhuwqWjws0CVz8QpM36+T+Dz5mTEBKhNs/esGLnCIlGdRy+Dq78NRjd7ls7r8BC8ZRMOrKlkO1hU0JOwA==}
'@types/js-yaml@4.0.9':
- resolution:
- {
- integrity: sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg==,
- }
+ resolution: {integrity: sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg==}
'@types/json-schema@7.0.15':
- resolution:
- {
- integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==,
- }
+ resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
'@types/json5@0.0.30':
- resolution:
- {
- integrity: sha512-sqm9g7mHlPY/43fcSNrCYfOeX9zkTTK+euO5E6+CVijSMm5tTjkVdwdqRkY3ljjIAf8679vps5jKUoJBCLsMDA==,
- }
+ resolution: {integrity: sha512-sqm9g7mHlPY/43fcSNrCYfOeX9zkTTK+euO5E6+CVijSMm5tTjkVdwdqRkY3ljjIAf8679vps5jKUoJBCLsMDA==}
'@types/jsonwebtoken@9.0.10':
- resolution:
- {
- integrity: sha512-asx5hIG9Qmf/1oStypjanR7iKTv0gXQ1Ov/jfrX6kS/EO0OFni8orbmGCn0672NHR3kXHwpAwR+B368ZGN/2rA==,
- }
+ resolution: {integrity: sha512-asx5hIG9Qmf/1oStypjanR7iKTv0gXQ1Ov/jfrX6kS/EO0OFni8orbmGCn0672NHR3kXHwpAwR+B368ZGN/2rA==}
'@types/keygrip@1.0.6':
- resolution:
- {
- integrity: sha512-lZuNAY9xeJt7Bx4t4dx0rYCDqGPW8RXhQZK1td7d4H6E9zYbLoOtjBvfwdTKpsyxQI/2jv+armjX/RW+ZNpXOQ==,
- }
+ resolution: {integrity: sha512-lZuNAY9xeJt7Bx4t4dx0rYCDqGPW8RXhQZK1td7d4H6E9zYbLoOtjBvfwdTKpsyxQI/2jv+armjX/RW+ZNpXOQ==}
'@types/koa-compose@3.2.9':
- resolution:
- {
- integrity: sha512-BroAZ9FTvPiCy0Pi8tjD1OfJ7bgU1gQf0eR6e1Vm+JJATy9eKOG3hQMFtMciMawiSOVnLMdmUOC46s7HBhSTsA==,
- }
+ resolution: {integrity: sha512-BroAZ9FTvPiCy0Pi8tjD1OfJ7bgU1gQf0eR6e1Vm+JJATy9eKOG3hQMFtMciMawiSOVnLMdmUOC46s7HBhSTsA==}
'@types/koa@3.0.1':
- resolution:
- {
- integrity: sha512-VkB6WJUQSe0zBpR+Q7/YIUESGp5wPHcaXr0xueU5W0EOUWtlSbblsl+Kl31lyRQ63nIILh0e/7gXjQ09JXJIHw==,
- }
+ resolution: {integrity: sha512-VkB6WJUQSe0zBpR+Q7/YIUESGp5wPHcaXr0xueU5W0EOUWtlSbblsl+Kl31lyRQ63nIILh0e/7gXjQ09JXJIHw==}
'@types/minimatch@3.0.5':
- resolution:
- {
- integrity: sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==,
- }
+ resolution: {integrity: sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==}
'@types/minimist@1.2.5':
- resolution:
- {
- integrity: sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==,
- }
+ resolution: {integrity: sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==}
'@types/ms@2.1.0':
- resolution:
- {
- integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==,
- }
+ resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==}
'@types/node@18.19.130':
- resolution:
- {
- integrity: sha512-GRaXQx6jGfL8sKfaIDD6OupbIHBr9jv7Jnaml9tB7l4v068PAOXqfcujMMo5PhbIs6ggR1XODELqahT2R8v0fg==,
- }
+ resolution: {integrity: sha512-GRaXQx6jGfL8sKfaIDD6OupbIHBr9jv7Jnaml9tB7l4v068PAOXqfcujMMo5PhbIs6ggR1XODELqahT2R8v0fg==}
'@types/node@20.19.27':
- resolution:
- {
- integrity: sha512-N2clP5pJhB2YnZJ3PIHFk5RkygRX5WO/5f0WC08tp0wd+sv0rsJk3MqWn3CbNmT2J505a5336jaQj4ph1AdMug==,
- }
+ resolution: {integrity: sha512-N2clP5pJhB2YnZJ3PIHFk5RkygRX5WO/5f0WC08tp0wd+sv0rsJk3MqWn3CbNmT2J505a5336jaQj4ph1AdMug==}
'@types/normalize-package-data@2.4.4':
- resolution:
- {
- integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==,
- }
+ resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==}
'@types/pg-copy-streams@1.2.5':
- resolution:
- {
- integrity: sha512-7D6/GYW2uHIaVU6S/5omI+6RZnwlZBpLQDZAH83xX1rjxAOK0f6/deKyyUTewxqts145VIGn6XWYz1YGf50G5g==,
- }
+ resolution: {integrity: sha512-7D6/GYW2uHIaVU6S/5omI+6RZnwlZBpLQDZAH83xX1rjxAOK0f6/deKyyUTewxqts145VIGn6XWYz1YGf50G5g==}
'@types/pg@8.16.0':
- resolution:
- {
- integrity: sha512-RmhMd/wD+CF8Dfo+cVIy3RR5cl8CyfXQ0tGgW6XBL8L4LM/UTEbNXYRbLwU6w+CgrKBNbrQWt4FUtTfaU5jSYQ==,
- }
+ resolution: {integrity: sha512-RmhMd/wD+CF8Dfo+cVIy3RR5cl8CyfXQ0tGgW6XBL8L4LM/UTEbNXYRbLwU6w+CgrKBNbrQWt4FUtTfaU5jSYQ==}
'@types/qs@6.14.0':
- resolution:
- {
- integrity: sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==,
- }
+ resolution: {integrity: sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==}
'@types/range-parser@1.2.7':
- resolution:
- {
- integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==,
- }
+ resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==}
'@types/react@19.2.7':
- resolution:
- {
- integrity: sha512-MWtvHrGZLFttgeEj28VXHxpmwYbor/ATPYbBfSFZEIRK0ecCFLl2Qo55z52Hss+UV9CRN7trSeq1zbgx7YDWWg==,
- }
+ resolution: {integrity: sha512-MWtvHrGZLFttgeEj28VXHxpmwYbor/ATPYbBfSFZEIRK0ecCFLl2Qo55z52Hss+UV9CRN7trSeq1zbgx7YDWWg==}
'@types/request-ip@0.0.41':
- resolution:
- {
- integrity: sha512-Qzz0PM2nSZej4lsLzzNfADIORZhhxO7PED0fXpg4FjXiHuJ/lMyUg+YFF5q8x9HPZH3Gl6N+NOM8QZjItNgGKg==,
- }
+ resolution: {integrity: sha512-Qzz0PM2nSZej4lsLzzNfADIORZhhxO7PED0fXpg4FjXiHuJ/lMyUg+YFF5q8x9HPZH3Gl6N+NOM8QZjItNgGKg==}
'@types/semver@7.7.1':
- resolution:
- {
- integrity: sha512-FmgJfu+MOcQ370SD0ev7EI8TlCAfKYU+B4m5T3yXc1CiRN94g/SZPtsCkk506aUDtlMnFZvasDwHHUcZUEaYuA==,
- }
+ resolution: {integrity: sha512-FmgJfu+MOcQ370SD0ev7EI8TlCAfKYU+B4m5T3yXc1CiRN94g/SZPtsCkk506aUDtlMnFZvasDwHHUcZUEaYuA==}
'@types/send@1.2.1':
- resolution:
- {
- integrity: sha512-arsCikDvlU99zl1g69TcAB3mzZPpxgw0UQnaHeC1Nwb015xp8bknZv5rIfri9xTOcMuaVgvabfIRA7PSZVuZIQ==,
- }
+ resolution: {integrity: sha512-arsCikDvlU99zl1g69TcAB3mzZPpxgw0UQnaHeC1Nwb015xp8bknZv5rIfri9xTOcMuaVgvabfIRA7PSZVuZIQ==}
'@types/serve-static@2.2.0':
- resolution:
- {
- integrity: sha512-8mam4H1NHLtu7nmtalF7eyBH14QyOASmcxHhSfEoRyr0nP/YdoesEtU+uSRvMe96TW/HPTtkoKqQLl53N7UXMQ==,
- }
+ resolution: {integrity: sha512-8mam4H1NHLtu7nmtalF7eyBH14QyOASmcxHhSfEoRyr0nP/YdoesEtU+uSRvMe96TW/HPTtkoKqQLl53N7UXMQ==}
'@types/shelljs@0.8.17':
- resolution:
- {
- integrity: sha512-IDksKYmQA2W9MkQjiyptbMmcQx+8+Ol6b7h6dPU5S05JyiQDSb/nZKnrMrZqGwgV6VkVdl6/SPCKPDlMRvqECg==,
- }
+ resolution: {integrity: sha512-IDksKYmQA2W9MkQjiyptbMmcQx+8+Ol6b7h6dPU5S05JyiQDSb/nZKnrMrZqGwgV6VkVdl6/SPCKPDlMRvqECg==}
'@types/stack-utils@2.0.3':
- resolution:
- {
- integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==,
- }
+ resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==}
'@types/testing-library__jest-dom@5.14.9':
- resolution:
- {
- integrity: sha512-FSYhIjFlfOpGSRyVoMBMuS3ws5ehFQODymf3vlI7U1K8c7PHwWwFY7VREfmsuzHSOnoKs/9/Y983ayOs7eRzqw==,
- }
+ resolution: {integrity: sha512-FSYhIjFlfOpGSRyVoMBMuS3ws5ehFQODymf3vlI7U1K8c7PHwWwFY7VREfmsuzHSOnoKs/9/Y983ayOs7eRzqw==}
'@types/ws@7.4.7':
- resolution:
- {
- integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==,
- }
+ resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==}
'@types/yargs-parser@21.0.3':
- resolution:
- {
- integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==,
- }
+ resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==}
'@types/yargs@15.0.20':
- resolution:
- {
- integrity: sha512-KIkX+/GgfFitlASYCGoSF+T4XRXhOubJLhkLVtSfsRTe9jWMmuM2g28zQ41BtPTG7TRBb2xHW+LCNVE9QR/vsg==,
- }
+ resolution: {integrity: sha512-KIkX+/GgfFitlASYCGoSF+T4XRXhOubJLhkLVtSfsRTe9jWMmuM2g28zQ41BtPTG7TRBb2xHW+LCNVE9QR/vsg==}
'@types/yargs@17.0.35':
- resolution:
- {
- integrity: sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==,
- }
+ resolution: {integrity: sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==}
'@typescript-eslint/eslint-plugin@8.50.1':
- resolution:
- {
- integrity: sha512-PKhLGDq3JAg0Jk/aK890knnqduuI/Qj+udH7wCf0217IGi4gt+acgCyPVe79qoT+qKUvHMDQkwJeKW9fwl8Cyw==,
- }
- engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 }
+ resolution: {integrity: sha512-PKhLGDq3JAg0Jk/aK890knnqduuI/Qj+udH7wCf0217IGi4gt+acgCyPVe79qoT+qKUvHMDQkwJeKW9fwl8Cyw==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
'@typescript-eslint/parser': ^8.50.1
eslint: ^8.57.0 || ^9.0.0
typescript: '>=4.8.4 <6.0.0'
'@typescript-eslint/parser@8.50.1':
- resolution:
- {
- integrity: sha512-hM5faZwg7aVNa819m/5r7D0h0c9yC4DUlWAOvHAtISdFTc8xB86VmX5Xqabrama3wIPJ/q9RbGS1worb6JfnMg==,
- }
- engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 }
+ resolution: {integrity: sha512-hM5faZwg7aVNa819m/5r7D0h0c9yC4DUlWAOvHAtISdFTc8xB86VmX5Xqabrama3wIPJ/q9RbGS1worb6JfnMg==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
typescript: '>=4.8.4 <6.0.0'
'@typescript-eslint/project-service@8.50.1':
- resolution:
- {
- integrity: sha512-E1ur1MCVf+YiP89+o4Les/oBAVzmSbeRB0MQLfSlYtbWU17HPxZ6Bhs5iYmKZRALvEuBoXIZMOIRRc/P++Ortg==,
- }
- engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 }
+ resolution: {integrity: sha512-E1ur1MCVf+YiP89+o4Les/oBAVzmSbeRB0MQLfSlYtbWU17HPxZ6Bhs5iYmKZRALvEuBoXIZMOIRRc/P++Ortg==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
typescript: '>=4.8.4 <6.0.0'
'@typescript-eslint/scope-manager@8.50.1':
- resolution:
- {
- integrity: sha512-mfRx06Myt3T4vuoHaKi8ZWNTPdzKPNBhiblze5N50//TSHOAQQevl/aolqA/BcqqbJ88GUnLqjjcBc8EWdBcVw==,
- }
- engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 }
+ resolution: {integrity: sha512-mfRx06Myt3T4vuoHaKi8ZWNTPdzKPNBhiblze5N50//TSHOAQQevl/aolqA/BcqqbJ88GUnLqjjcBc8EWdBcVw==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@typescript-eslint/tsconfig-utils@8.50.1':
- resolution:
- {
- integrity: sha512-ooHmotT/lCWLXi55G4mvaUF60aJa012QzvLK0Y+Mp4WdSt17QhMhWOaBWeGTFVkb2gDgBe19Cxy1elPXylslDw==,
- }
- engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 }
+ resolution: {integrity: sha512-ooHmotT/lCWLXi55G4mvaUF60aJa012QzvLK0Y+Mp4WdSt17QhMhWOaBWeGTFVkb2gDgBe19Cxy1elPXylslDw==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
typescript: '>=4.8.4 <6.0.0'
'@typescript-eslint/type-utils@8.50.1':
- resolution:
- {
- integrity: sha512-7J3bf022QZE42tYMO6SL+6lTPKFk/WphhRPe9Tw/el+cEwzLz1Jjz2PX3GtGQVxooLDKeMVmMt7fWpYRdG5Etg==,
- }
- engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 }
+ resolution: {integrity: sha512-7J3bf022QZE42tYMO6SL+6lTPKFk/WphhRPe9Tw/el+cEwzLz1Jjz2PX3GtGQVxooLDKeMVmMt7fWpYRdG5Etg==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
typescript: '>=4.8.4 <6.0.0'
'@typescript-eslint/types@8.50.1':
- resolution:
- {
- integrity: sha512-v5lFIS2feTkNyMhd7AucE/9j/4V9v5iIbpVRncjk/K0sQ6Sb+Np9fgYS/63n6nwqahHQvbmujeBL7mp07Q9mlA==,
- }
- engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 }
+ resolution: {integrity: sha512-v5lFIS2feTkNyMhd7AucE/9j/4V9v5iIbpVRncjk/K0sQ6Sb+Np9fgYS/63n6nwqahHQvbmujeBL7mp07Q9mlA==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@typescript-eslint/typescript-estree@8.50.1':
- resolution:
- {
- integrity: sha512-woHPdW+0gj53aM+cxchymJCrh0cyS7BTIdcDxWUNsclr9VDkOSbqC13juHzxOmQ22dDkMZEpZB+3X1WpUvzgVQ==,
- }
- engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 }
+ resolution: {integrity: sha512-woHPdW+0gj53aM+cxchymJCrh0cyS7BTIdcDxWUNsclr9VDkOSbqC13juHzxOmQ22dDkMZEpZB+3X1WpUvzgVQ==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
typescript: '>=4.8.4 <6.0.0'
'@typescript-eslint/utils@8.50.1':
- resolution:
- {
- integrity: sha512-lCLp8H1T9T7gPbEuJSnHwnSuO9mDf8mfK/Nion5mZmiEaQD9sWf9W4dfeFqRyqRjF06/kBuTmAqcs9sewM2NbQ==,
- }
- engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 }
+ resolution: {integrity: sha512-lCLp8H1T9T7gPbEuJSnHwnSuO9mDf8mfK/Nion5mZmiEaQD9sWf9W4dfeFqRyqRjF06/kBuTmAqcs9sewM2NbQ==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
typescript: '>=4.8.4 <6.0.0'
'@typescript-eslint/visitor-keys@8.50.1':
- resolution:
- {
- integrity: sha512-IrDKrw7pCRUR94zeuCSUWQ+w8JEf5ZX5jl/e6AHGSLi1/zIr0lgutfn/7JpfCey+urpgQEdrZVYzCaVVKiTwhQ==,
- }
- engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 }
+ resolution: {integrity: sha512-IrDKrw7pCRUR94zeuCSUWQ+w8JEf5ZX5jl/e6AHGSLi1/zIr0lgutfn/7JpfCey+urpgQEdrZVYzCaVVKiTwhQ==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@ungap/structured-clone@1.3.0':
- resolution:
- {
- integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==,
- }
+ resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==}
'@unrs/resolver-binding-android-arm-eabi@1.11.1':
- resolution:
- {
- integrity: sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw==,
- }
+ resolution: {integrity: sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw==}
cpu: [arm]
os: [android]
'@unrs/resolver-binding-android-arm64@1.11.1':
- resolution:
- {
- integrity: sha512-lCxkVtb4wp1v+EoN+HjIG9cIIzPkX5OtM03pQYkG+U5O/wL53LC4QbIeazgiKqluGeVEeBlZahHalCaBvU1a2g==,
- }
+ resolution: {integrity: sha512-lCxkVtb4wp1v+EoN+HjIG9cIIzPkX5OtM03pQYkG+U5O/wL53LC4QbIeazgiKqluGeVEeBlZahHalCaBvU1a2g==}
cpu: [arm64]
os: [android]
'@unrs/resolver-binding-darwin-arm64@1.11.1':
- resolution:
- {
- integrity: sha512-gPVA1UjRu1Y/IsB/dQEsp2V1pm44Of6+LWvbLc9SDk1c2KhhDRDBUkQCYVWe6f26uJb3fOK8saWMgtX8IrMk3g==,
- }
+ resolution: {integrity: sha512-gPVA1UjRu1Y/IsB/dQEsp2V1pm44Of6+LWvbLc9SDk1c2KhhDRDBUkQCYVWe6f26uJb3fOK8saWMgtX8IrMk3g==}
cpu: [arm64]
os: [darwin]
'@unrs/resolver-binding-darwin-x64@1.11.1':
- resolution:
- {
- integrity: sha512-cFzP7rWKd3lZaCsDze07QX1SC24lO8mPty9vdP+YVa3MGdVgPmFc59317b2ioXtgCMKGiCLxJ4HQs62oz6GfRQ==,
- }
+ resolution: {integrity: sha512-cFzP7rWKd3lZaCsDze07QX1SC24lO8mPty9vdP+YVa3MGdVgPmFc59317b2ioXtgCMKGiCLxJ4HQs62oz6GfRQ==}
cpu: [x64]
os: [darwin]
'@unrs/resolver-binding-freebsd-x64@1.11.1':
- resolution:
- {
- integrity: sha512-fqtGgak3zX4DCB6PFpsH5+Kmt/8CIi4Bry4rb1ho6Av2QHTREM+47y282Uqiu3ZRF5IQioJQ5qWRV6jduA+iGw==,
- }
+ resolution: {integrity: sha512-fqtGgak3zX4DCB6PFpsH5+Kmt/8CIi4Bry4rb1ho6Av2QHTREM+47y282Uqiu3ZRF5IQioJQ5qWRV6jduA+iGw==}
cpu: [x64]
os: [freebsd]
'@unrs/resolver-binding-linux-arm-gnueabihf@1.11.1':
- resolution:
- {
- integrity: sha512-u92mvlcYtp9MRKmP+ZvMmtPN34+/3lMHlyMj7wXJDeXxuM0Vgzz0+PPJNsro1m3IZPYChIkn944wW8TYgGKFHw==,
- }
+ resolution: {integrity: sha512-u92mvlcYtp9MRKmP+ZvMmtPN34+/3lMHlyMj7wXJDeXxuM0Vgzz0+PPJNsro1m3IZPYChIkn944wW8TYgGKFHw==}
cpu: [arm]
os: [linux]
'@unrs/resolver-binding-linux-arm-musleabihf@1.11.1':
- resolution:
- {
- integrity: sha512-cINaoY2z7LVCrfHkIcmvj7osTOtm6VVT16b5oQdS4beibX2SYBwgYLmqhBjA1t51CarSaBuX5YNsWLjsqfW5Cw==,
- }
+ resolution: {integrity: sha512-cINaoY2z7LVCrfHkIcmvj7osTOtm6VVT16b5oQdS4beibX2SYBwgYLmqhBjA1t51CarSaBuX5YNsWLjsqfW5Cw==}
cpu: [arm]
os: [linux]
'@unrs/resolver-binding-linux-arm64-gnu@1.11.1':
- resolution:
- {
- integrity: sha512-34gw7PjDGB9JgePJEmhEqBhWvCiiWCuXsL9hYphDF7crW7UgI05gyBAi6MF58uGcMOiOqSJ2ybEeCvHcq0BCmQ==,
- }
+ resolution: {integrity: sha512-34gw7PjDGB9JgePJEmhEqBhWvCiiWCuXsL9hYphDF7crW7UgI05gyBAi6MF58uGcMOiOqSJ2ybEeCvHcq0BCmQ==}
cpu: [arm64]
os: [linux]
'@unrs/resolver-binding-linux-arm64-musl@1.11.1':
- resolution:
- {
- integrity: sha512-RyMIx6Uf53hhOtJDIamSbTskA99sPHS96wxVE/bJtePJJtpdKGXO1wY90oRdXuYOGOTuqjT8ACccMc4K6QmT3w==,
- }
+ resolution: {integrity: sha512-RyMIx6Uf53hhOtJDIamSbTskA99sPHS96wxVE/bJtePJJtpdKGXO1wY90oRdXuYOGOTuqjT8ACccMc4K6QmT3w==}
cpu: [arm64]
os: [linux]
'@unrs/resolver-binding-linux-ppc64-gnu@1.11.1':
- resolution:
- {
- integrity: sha512-D8Vae74A4/a+mZH0FbOkFJL9DSK2R6TFPC9M+jCWYia/q2einCubX10pecpDiTmkJVUH+y8K3BZClycD8nCShA==,
- }
+ resolution: {integrity: sha512-D8Vae74A4/a+mZH0FbOkFJL9DSK2R6TFPC9M+jCWYia/q2einCubX10pecpDiTmkJVUH+y8K3BZClycD8nCShA==}
cpu: [ppc64]
os: [linux]
'@unrs/resolver-binding-linux-riscv64-gnu@1.11.1':
- resolution:
- {
- integrity: sha512-frxL4OrzOWVVsOc96+V3aqTIQl1O2TjgExV4EKgRY09AJ9leZpEg8Ak9phadbuX0BA4k8U5qtvMSQQGGmaJqcQ==,
- }
+ resolution: {integrity: sha512-frxL4OrzOWVVsOc96+V3aqTIQl1O2TjgExV4EKgRY09AJ9leZpEg8Ak9phadbuX0BA4k8U5qtvMSQQGGmaJqcQ==}
cpu: [riscv64]
os: [linux]
'@unrs/resolver-binding-linux-riscv64-musl@1.11.1':
- resolution:
- {
- integrity: sha512-mJ5vuDaIZ+l/acv01sHoXfpnyrNKOk/3aDoEdLO/Xtn9HuZlDD6jKxHlkN8ZhWyLJsRBxfv9GYM2utQ1SChKew==,
- }
+ resolution: {integrity: sha512-mJ5vuDaIZ+l/acv01sHoXfpnyrNKOk/3aDoEdLO/Xtn9HuZlDD6jKxHlkN8ZhWyLJsRBxfv9GYM2utQ1SChKew==}
cpu: [riscv64]
os: [linux]
'@unrs/resolver-binding-linux-s390x-gnu@1.11.1':
- resolution:
- {
- integrity: sha512-kELo8ebBVtb9sA7rMe1Cph4QHreByhaZ2QEADd9NzIQsYNQpt9UkM9iqr2lhGr5afh885d/cB5QeTXSbZHTYPg==,
- }
+ resolution: {integrity: sha512-kELo8ebBVtb9sA7rMe1Cph4QHreByhaZ2QEADd9NzIQsYNQpt9UkM9iqr2lhGr5afh885d/cB5QeTXSbZHTYPg==}
cpu: [s390x]
os: [linux]
'@unrs/resolver-binding-linux-x64-gnu@1.11.1':
- resolution:
- {
- integrity: sha512-C3ZAHugKgovV5YvAMsxhq0gtXuwESUKc5MhEtjBpLoHPLYM+iuwSj3lflFwK3DPm68660rZ7G8BMcwSro7hD5w==,
- }
+ resolution: {integrity: sha512-C3ZAHugKgovV5YvAMsxhq0gtXuwESUKc5MhEtjBpLoHPLYM+iuwSj3lflFwK3DPm68660rZ7G8BMcwSro7hD5w==}
cpu: [x64]
os: [linux]
'@unrs/resolver-binding-linux-x64-musl@1.11.1':
- resolution:
- {
- integrity: sha512-rV0YSoyhK2nZ4vEswT/QwqzqQXw5I6CjoaYMOX0TqBlWhojUf8P94mvI7nuJTeaCkkds3QE4+zS8Ko+GdXuZtA==,
- }
+ resolution: {integrity: sha512-rV0YSoyhK2nZ4vEswT/QwqzqQXw5I6CjoaYMOX0TqBlWhojUf8P94mvI7nuJTeaCkkds3QE4+zS8Ko+GdXuZtA==}
cpu: [x64]
os: [linux]
'@unrs/resolver-binding-wasm32-wasi@1.11.1':
- resolution:
- {
- integrity: sha512-5u4RkfxJm+Ng7IWgkzi3qrFOvLvQYnPBmjmZQ8+szTK/b31fQCnleNl1GgEt7nIsZRIf5PLhPwT0WM+q45x/UQ==,
- }
- engines: { node: '>=14.0.0' }
+ resolution: {integrity: sha512-5u4RkfxJm+Ng7IWgkzi3qrFOvLvQYnPBmjmZQ8+szTK/b31fQCnleNl1GgEt7nIsZRIf5PLhPwT0WM+q45x/UQ==}
+ engines: {node: '>=14.0.0'}
cpu: [wasm32]
'@unrs/resolver-binding-win32-arm64-msvc@1.11.1':
- resolution:
- {
- integrity: sha512-nRcz5Il4ln0kMhfL8S3hLkxI85BXs3o8EYoattsJNdsX4YUU89iOkVn7g0VHSRxFuVMdM4Q1jEpIId1Ihim/Uw==,
- }
+ resolution: {integrity: sha512-nRcz5Il4ln0kMhfL8S3hLkxI85BXs3o8EYoattsJNdsX4YUU89iOkVn7g0VHSRxFuVMdM4Q1jEpIId1Ihim/Uw==}
cpu: [arm64]
os: [win32]
'@unrs/resolver-binding-win32-ia32-msvc@1.11.1':
- resolution:
- {
- integrity: sha512-DCEI6t5i1NmAZp6pFonpD5m7i6aFrpofcp4LA2i8IIq60Jyo28hamKBxNrZcyOwVOZkgsRp9O2sXWBWP8MnvIQ==,
- }
+ resolution: {integrity: sha512-DCEI6t5i1NmAZp6pFonpD5m7i6aFrpofcp4LA2i8IIq60Jyo28hamKBxNrZcyOwVOZkgsRp9O2sXWBWP8MnvIQ==}
cpu: [ia32]
os: [win32]
'@unrs/resolver-binding-win32-x64-msvc@1.11.1':
- resolution:
- {
- integrity: sha512-lrW200hZdbfRtztbygyaq/6jP6AKE8qQN2KvPcJ+x7wiD038YtnYtZ82IMNJ69GJibV7bwL3y9FgK+5w/pYt6g==,
- }
+ resolution: {integrity: sha512-lrW200hZdbfRtztbygyaq/6jP6AKE8qQN2KvPcJ+x7wiD038YtnYtZ82IMNJ69GJibV7bwL3y9FgK+5w/pYt6g==}
cpu: [x64]
os: [win32]
'@yarnpkg/lockfile@1.1.0':
- resolution:
- {
- integrity: sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==,
- }
+ resolution: {integrity: sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==}
'@yarnpkg/parsers@3.0.2':
- resolution:
- {
- integrity: sha512-/HcYgtUSiJiot/XWGLOlGxPYUG65+/31V8oqk17vZLW1xlCoR4PampyePljOxY2n8/3jz9+tIFzICsyGujJZoA==,
- }
- engines: { node: '>=18.12.0' }
+ resolution: {integrity: sha512-/HcYgtUSiJiot/XWGLOlGxPYUG65+/31V8oqk17vZLW1xlCoR4PampyePljOxY2n8/3jz9+tIFzICsyGujJZoA==}
+ engines: {node: '>=18.12.0'}
'@zkochan/js-yaml@0.0.7':
- resolution:
- {
- integrity: sha512-nrUSn7hzt7J6JWgWGz78ZYI8wj+gdIJdk0Ynjpp8l+trkn58Uqsf6RYrYkEK+3X18EX+TNdtJI0WxAtc+L84SQ==,
- }
+ resolution: {integrity: sha512-nrUSn7hzt7J6JWgWGz78ZYI8wj+gdIJdk0Ynjpp8l+trkn58Uqsf6RYrYkEK+3X18EX+TNdtJI0WxAtc+L84SQ==}
hasBin: true
JSONStream@1.3.5:
- resolution:
- {
- integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==,
- }
+ resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==}
hasBin: true
abbrev@2.0.0:
- resolution:
- {
- integrity: sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==,
- }
- engines: { node: ^14.17.0 || ^16.13.0 || >=18.0.0 }
+ resolution: {integrity: sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==}
+ engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
accept-language-parser@1.5.0:
- resolution:
- {
- integrity: sha512-QhyTbMLYo0BBGg1aWbeMG4ekWtds/31BrEU+DONOg/7ax23vxpL03Pb7/zBmha2v7vdD3AyzZVWBVGEZxKOXWw==,
- }
+ resolution: {integrity: sha512-QhyTbMLYo0BBGg1aWbeMG4ekWtds/31BrEU+DONOg/7ax23vxpL03Pb7/zBmha2v7vdD3AyzZVWBVGEZxKOXWw==}
accepts@2.0.0:
- resolution:
- {
- integrity: sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==,
- }
- engines: { node: '>= 0.6' }
+ resolution: {integrity: sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==}
+ engines: {node: '>= 0.6'}
acorn-jsx@5.3.2:
- resolution:
- {
- integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==,
- }
+ resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
peerDependencies:
acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
acorn-walk@8.3.4:
- resolution:
- {
- integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==,
- }
- engines: { node: '>=0.4.0' }
+ resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==}
+ engines: {node: '>=0.4.0'}
acorn@8.15.0:
- resolution:
- {
- integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==,
- }
- engines: { node: '>=0.4.0' }
+ resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==}
+ engines: {node: '>=0.4.0'}
hasBin: true
add-stream@1.0.0:
- resolution:
- {
- integrity: sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ==,
- }
+ resolution: {integrity: sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ==}
agent-base@4.2.1:
- resolution:
- {
- integrity: sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg==,
- }
- engines: { node: '>= 4.0.0' }
+ resolution: {integrity: sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg==}
+ engines: {node: '>= 4.0.0'}
agent-base@4.3.0:
- resolution:
- {
- integrity: sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==,
- }
- engines: { node: '>= 4.0.0' }
+ resolution: {integrity: sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==}
+ engines: {node: '>= 4.0.0'}
agent-base@7.1.4:
- resolution:
- {
- integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==,
- }
- engines: { node: '>= 14' }
+ resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==}
+ engines: {node: '>= 14'}
aggregate-error@3.1.0:
- resolution:
- {
- integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==,
- }
- engines: { node: '>=8' }
+ resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==}
+ engines: {node: '>=8'}
ajv@6.12.6:
- resolution:
- {
- integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==,
- }
+ resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
ajv@7.2.4:
- resolution:
- {
- integrity: sha512-nBeQgg/ZZA3u3SYxyaDvpvDtgZ/EZPF547ARgZBrG9Bhu1vKDwAIjtIf+sDtJUKa2zOcEbmRLBRSyMraS/Oy1A==,
- }
+ resolution: {integrity: sha512-nBeQgg/ZZA3u3SYxyaDvpvDtgZ/EZPF547ARgZBrG9Bhu1vKDwAIjtIf+sDtJUKa2zOcEbmRLBRSyMraS/Oy1A==}
ajv@8.17.1:
- resolution:
- {
- integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==,
- }
+ resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==}
ansi-colors@4.1.3:
- resolution:
- {
- integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==,
- }
- engines: { node: '>=6' }
+ 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' }
+ resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==}
+ engines: {node: '>=8'}
ansi-regex@5.0.1:
- resolution:
- {
- integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==,
- }
- engines: { node: '>=8' }
+ resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
+ engines: {node: '>=8'}
ansi-regex@6.2.2:
- resolution:
- {
- integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==,
- }
- engines: { node: '>=12' }
+ resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==}
+ engines: {node: '>=12'}
ansi-styles@3.2.1:
- resolution:
- {
- integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==,
- }
- engines: { node: '>=4' }
+ resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==}
+ engines: {node: '>=4'}
ansi-styles@4.3.0:
- resolution:
- {
- integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==,
- }
- engines: { node: '>=8' }
+ resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
+ engines: {node: '>=8'}
ansi-styles@5.2.0:
- resolution:
- {
- integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==,
- }
- engines: { node: '>=10' }
+ resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==}
+ engines: {node: '>=10'}
ansi-styles@6.2.3:
- resolution:
- {
- integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==,
- }
- engines: { node: '>=12' }
+ resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==}
+ engines: {node: '>=12'}
anymatch@3.1.3:
- resolution:
- {
- integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==,
- }
- engines: { node: '>= 8' }
+ resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
+ engines: {node: '>= 8'}
appstash@0.2.8:
- resolution:
- {
- integrity: sha512-SLeV3iy7ygE7TNiU6AgDMQVhS6xVfO4ps3NDMUK3UcvZKOddykHuEtSuJr6wKzTu9yRnEeK/yisgztSARt/YJA==,
- }
+ resolution: {integrity: sha512-SLeV3iy7ygE7TNiU6AgDMQVhS6xVfO4ps3NDMUK3UcvZKOddykHuEtSuJr6wKzTu9yRnEeK/yisgztSARt/YJA==}
aproba@2.0.0:
- resolution:
- {
- integrity: sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==,
- }
+ resolution: {integrity: sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==}
arg@4.1.3:
- resolution:
- {
- integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==,
- }
+ resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==}
argparse@1.0.10:
- resolution:
- {
- integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==,
- }
+ resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==}
argparse@2.0.1:
- resolution:
- {
- integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==,
- }
+ resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
aria-query@4.2.2:
- resolution:
- {
- integrity: sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==,
- }
- engines: { node: '>=6.0' }
+ resolution: {integrity: sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==}
+ engines: {node: '>=6.0'}
array-differ@3.0.0:
- resolution:
- {
- integrity: sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==,
- }
- engines: { node: '>=8' }
+ resolution: {integrity: sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==}
+ engines: {node: '>=8'}
array-ify@1.0.0:
- resolution:
- {
- integrity: sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==,
- }
+ resolution: {integrity: sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==}
array-union@2.1.0:
- resolution:
- {
- integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==,
- }
- engines: { node: '>=8' }
+ resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==}
+ engines: {node: '>=8'}
arrify@1.0.1:
- resolution:
- {
- integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==,
- }
- engines: { node: '>=0.10.0' }
+ resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==}
+ engines: {node: '>=0.10.0'}
arrify@2.0.1:
- resolution:
- {
- integrity: sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==,
- }
- engines: { node: '>=8' }
+ resolution: {integrity: sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==}
+ engines: {node: '>=8'}
asn1@0.2.6:
- resolution:
- {
- integrity: sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==,
- }
+ resolution: {integrity: sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==}
assert-plus@1.0.0:
- resolution:
- {
- integrity: sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==,
- }
- engines: { node: '>=0.8' }
+ resolution: {integrity: sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==}
+ engines: {node: '>=0.8'}
ast-types@0.14.2:
- resolution:
- {
- integrity: sha512-O0yuUDnZeQDL+ncNGlJ78BiO4jnYI3bvMsD5prT0/nsgijG/LpNBIr63gTjVTNsiGkgQhiyCShTgxt8oXOrklA==,
- }
- engines: { node: '>=4' }
+ resolution: {integrity: sha512-O0yuUDnZeQDL+ncNGlJ78BiO4jnYI3bvMsD5prT0/nsgijG/LpNBIr63gTjVTNsiGkgQhiyCShTgxt8oXOrklA==}
+ engines: {node: '>=4'}
async-retry@1.3.1:
- resolution:
- {
- integrity: sha512-aiieFW/7h3hY0Bq5d+ktDBejxuwR78vRu9hDUdR8rNhSaQ29VzPL4AoIRG7D/c7tdenwOcKvgPM6tIxB3cB6HA==,
- }
+ resolution: {integrity: sha512-aiieFW/7h3hY0Bq5d+ktDBejxuwR78vRu9hDUdR8rNhSaQ29VzPL4AoIRG7D/c7tdenwOcKvgPM6tIxB3cB6HA==}
async@2.6.4:
- resolution:
- {
- integrity: sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==,
- }
+ resolution: {integrity: sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==}
async@3.2.6:
- resolution:
- {
- integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==,
- }
+ resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==}
asynckit@0.4.0:
- resolution:
- {
- integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==,
- }
+ resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
atob@2.1.2:
- resolution:
- {
- integrity: sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==,
- }
- engines: { node: '>= 4.5.0' }
+ resolution: {integrity: sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==}
+ engines: {node: '>= 4.5.0'}
hasBin: true
aws-sign2@0.7.0:
- resolution:
- {
- integrity: sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==,
- }
+ resolution: {integrity: sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==}
aws4@1.13.2:
- resolution:
- {
- integrity: sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw==,
- }
+ resolution: {integrity: sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw==}
axios@1.13.2:
- resolution:
- {
- integrity: sha512-VPk9ebNqPcy5lRGuSlKx752IlDatOjT9paPlm8A7yOuW2Fbvp4X3JznJtT4f0GzGLLiWE9W8onz51SqLYwzGaA==,
- }
+ resolution: {integrity: sha512-VPk9ebNqPcy5lRGuSlKx752IlDatOjT9paPlm8A7yOuW2Fbvp4X3JznJtT4f0GzGLLiWE9W8onz51SqLYwzGaA==}
babel-jest@29.7.0:
- resolution:
- {
- integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==,
- }
- engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 }
+ resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
peerDependencies:
'@babel/core': ^7.8.0
babel-jest@30.2.0:
- resolution:
- {
- integrity: sha512-0YiBEOxWqKkSQWL9nNGGEgndoeL0ZpWrbLMNL5u/Kaxrli3Eaxlt3ZtIDktEvXt4L/R9r3ODr2zKwGM/2BjxVw==,
- }
- engines: { node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0 }
+ resolution: {integrity: sha512-0YiBEOxWqKkSQWL9nNGGEgndoeL0ZpWrbLMNL5u/Kaxrli3Eaxlt3ZtIDktEvXt4L/R9r3ODr2zKwGM/2BjxVw==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
peerDependencies:
'@babel/core': ^7.11.0 || ^8.0.0-0
babel-plugin-istanbul@6.1.1:
- resolution:
- {
- integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==,
- }
- engines: { node: '>=8' }
+ resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==}
+ engines: {node: '>=8'}
babel-plugin-istanbul@7.0.1:
- resolution:
- {
- integrity: sha512-D8Z6Qm8jCvVXtIRkBnqNHX0zJ37rQcFJ9u8WOS6tkYOsRdHBzypCstaxWiu5ZIlqQtviRYbgnRLSoCEvjqcqbA==,
- }
- engines: { node: '>=12' }
+ resolution: {integrity: sha512-D8Z6Qm8jCvVXtIRkBnqNHX0zJ37rQcFJ9u8WOS6tkYOsRdHBzypCstaxWiu5ZIlqQtviRYbgnRLSoCEvjqcqbA==}
+ engines: {node: '>=12'}
babel-plugin-jest-hoist@29.6.3:
- resolution:
- {
- integrity: sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==,
- }
- engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 }
+ resolution: {integrity: sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
babel-plugin-jest-hoist@30.2.0:
- resolution:
- {
- integrity: sha512-ftzhzSGMUnOzcCXd6WHdBGMyuwy15Wnn0iyyWGKgBDLxf9/s5ABuraCSpBX2uG0jUg4rqJnxsLc5+oYBqoxVaA==,
- }
- engines: { node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0 }
+ resolution: {integrity: sha512-ftzhzSGMUnOzcCXd6WHdBGMyuwy15Wnn0iyyWGKgBDLxf9/s5ABuraCSpBX2uG0jUg4rqJnxsLc5+oYBqoxVaA==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
babel-plugin-styled-components@2.1.4:
- resolution:
- {
- integrity: sha512-Xgp9g+A/cG47sUyRwwYxGM4bR/jDRg5N6it/8+HxCnbT5XNKSKDT9xm4oag/osgqjC2It/vH0yXsomOG6k558g==,
- }
+ resolution: {integrity: sha512-Xgp9g+A/cG47sUyRwwYxGM4bR/jDRg5N6it/8+HxCnbT5XNKSKDT9xm4oag/osgqjC2It/vH0yXsomOG6k558g==}
peerDependencies:
styled-components: '>= 2'
babel-preset-current-node-syntax@1.2.0:
- resolution:
- {
- integrity: sha512-E/VlAEzRrsLEb2+dv8yp3bo4scof3l9nR4lrld+Iy5NyVqgVYUJnDAmunkhPMisRI32Qc4iRiz425d8vM++2fg==,
- }
+ resolution: {integrity: sha512-E/VlAEzRrsLEb2+dv8yp3bo4scof3l9nR4lrld+Iy5NyVqgVYUJnDAmunkhPMisRI32Qc4iRiz425d8vM++2fg==}
peerDependencies:
'@babel/core': ^7.0.0 || ^8.0.0-0
babel-preset-jest@29.6.3:
- resolution:
- {
- integrity: sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==,
- }
- engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 }
+ resolution: {integrity: sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
peerDependencies:
'@babel/core': ^7.0.0
babel-preset-jest@30.2.0:
- resolution:
- {
- integrity: sha512-US4Z3NOieAQumwFnYdUWKvUKh8+YSnS/gB3t6YBiz0bskpu7Pine8pPCheNxlPEW4wnUkma2a94YuW2q3guvCQ==,
- }
- engines: { node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0 }
+ resolution: {integrity: sha512-US4Z3NOieAQumwFnYdUWKvUKh8+YSnS/gB3t6YBiz0bskpu7Pine8pPCheNxlPEW4wnUkma2a94YuW2q3guvCQ==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
peerDependencies:
'@babel/core': ^7.11.0 || ^8.0.0-beta.1
babel-runtime@6.25.0:
- resolution:
- {
- integrity: sha512-zeCYxDePWYAT/DfmQWIHsMSFW2vv45UIwIAMjGvQVsTd47RwsiRH0uK1yzyWZ7LDBKdhnGDPM6NYEO5CZyhPrg==,
- }
+ resolution: {integrity: sha512-zeCYxDePWYAT/DfmQWIHsMSFW2vv45UIwIAMjGvQVsTd47RwsiRH0uK1yzyWZ7LDBKdhnGDPM6NYEO5CZyhPrg==}
backo2@1.0.2:
- resolution:
- {
- integrity: sha512-zj6Z6M7Eq+PBZ7PQxl5NT665MvJdAkzp0f60nAJ+sLaSCBPMwVak5ZegFbgVCzFcCJTKFoMizvM5Ld7+JrRJHA==,
- }
+ resolution: {integrity: sha512-zj6Z6M7Eq+PBZ7PQxl5NT665MvJdAkzp0f60nAJ+sLaSCBPMwVak5ZegFbgVCzFcCJTKFoMizvM5Ld7+JrRJHA==}
balanced-match@1.0.2:
- resolution:
- {
- integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==,
- }
+ resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
base64-js@1.5.1:
- resolution:
- {
- integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==,
- }
+ resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
baseline-browser-mapping@2.9.11:
- resolution:
- {
- integrity: sha512-Sg0xJUNDU1sJNGdfGWhVHX0kkZ+HWcvmVymJbj6NSgZZmW/8S9Y2HQ5euytnIgakgxN6papOAWiwDo1ctFDcoQ==,
- }
+ resolution: {integrity: sha512-Sg0xJUNDU1sJNGdfGWhVHX0kkZ+HWcvmVymJbj6NSgZZmW/8S9Y2HQ5euytnIgakgxN6papOAWiwDo1ctFDcoQ==}
hasBin: true
bcrypt-pbkdf@1.0.2:
- resolution:
- {
- integrity: sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==,
- }
+ resolution: {integrity: sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==}
before-after-hook@2.2.3:
- resolution:
- {
- integrity: sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==,
- }
+ resolution: {integrity: sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==}
big-integer@1.6.52:
- resolution:
- {
- integrity: sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==,
- }
- engines: { node: '>=0.6' }
+ resolution: {integrity: sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==}
+ engines: {node: '>=0.6'}
bin-links@4.0.4:
- resolution:
- {
- integrity: sha512-cMtq4W5ZsEwcutJrVId+a/tjt8GSbS+h0oNkdl6+6rBuEv8Ot33Bevj5KPm40t309zuhVic8NjpuL42QCiJWWA==,
- }
- engines: { node: ^14.17.0 || ^16.13.0 || >=18.0.0 }
+ resolution: {integrity: sha512-cMtq4W5ZsEwcutJrVId+a/tjt8GSbS+h0oNkdl6+6rBuEv8Ot33Bevj5KPm40t309zuhVic8NjpuL42QCiJWWA==}
+ engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
binary-extensions@2.3.0:
- resolution:
- {
- integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==,
- }
- engines: { node: '>=8' }
+ resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
+ engines: {node: '>=8'}
bl@4.1.0:
- resolution:
- {
- integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==,
- }
+ resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==}
body-parser@1.19.0:
- resolution:
- {
- integrity: sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==,
- }
- engines: { node: '>= 0.8' }
+ resolution: {integrity: sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==}
+ engines: {node: '>= 0.8'}
body-parser@2.2.1:
- resolution:
- {
- integrity: sha512-nfDwkulwiZYQIGwxdy0RUmowMhKcFVcYXUU7m4QlKYim1rUtg83xm2yjZ40QjDuc291AJjjeSc9b++AWHSgSHw==,
- }
- engines: { node: '>=18' }
+ resolution: {integrity: sha512-nfDwkulwiZYQIGwxdy0RUmowMhKcFVcYXUU7m4QlKYim1rUtg83xm2yjZ40QjDuc291AJjjeSc9b++AWHSgSHw==}
+ engines: {node: '>=18'}
boolbase@1.0.0:
- resolution:
- {
- integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==,
- }
+ resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==}
bowser@2.13.1:
- resolution:
- {
- integrity: sha512-OHawaAbjwx6rqICCKgSG0SAnT05bzd7ppyKLVUITZpANBaaMFBAsaNkto3LoQ31tyFP5kNujE8Cdx85G9VzOkw==,
- }
+ resolution: {integrity: sha512-OHawaAbjwx6rqICCKgSG0SAnT05bzd7ppyKLVUITZpANBaaMFBAsaNkto3LoQ31tyFP5kNujE8Cdx85G9VzOkw==}
brace-expansion@1.1.12:
- resolution:
- {
- integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==,
- }
+ resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==}
brace-expansion@2.0.2:
- resolution:
- {
- integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==,
- }
+ resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==}
braces@3.0.3:
- resolution:
- {
- integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==,
- }
- engines: { node: '>=8' }
+ resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
+ engines: {node: '>=8'}
broadcast-channel@3.7.0:
- resolution:
- {
- integrity: sha512-cIAKJXAxGJceNZGTZSBzMxzyOn72cVgPnKx4dc6LRjQgbaJUQqhy5rzL3zbMxkMWsGKkv2hSFkPRMEXfoMZ2Mg==,
- }
+ resolution: {integrity: sha512-cIAKJXAxGJceNZGTZSBzMxzyOn72cVgPnKx4dc6LRjQgbaJUQqhy5rzL3zbMxkMWsGKkv2hSFkPRMEXfoMZ2Mg==}
browserslist@4.28.1:
- resolution:
- {
- integrity: sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==,
- }
- engines: { node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7 }
+ resolution: {integrity: sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==}
+ engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
hasBin: true
bs-logger@0.2.6:
- resolution:
- {
- integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==,
- }
- engines: { node: '>= 6' }
+ resolution: {integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==}
+ engines: {node: '>= 6'}
bser@2.1.1:
- resolution:
- {
- integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==,
- }
+ resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==}
buffer-equal-constant-time@1.0.1:
- resolution:
- {
- integrity: sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==,
- }
+ resolution: {integrity: sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==}
buffer-from@1.1.2:
- resolution:
- {
- integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==,
- }
+ resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
buffer@5.6.0:
- resolution:
- {
- integrity: sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==,
- }
+ resolution: {integrity: sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==}
buffer@5.7.1:
- resolution:
- {
- integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==,
- }
+ resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==}
busboy@0.3.1:
- resolution:
- {
- integrity: sha512-y7tTxhGKXcyBxRKAni+awqx8uqaJKrSFSNFSeRG5CsWNdmy2BIK+6VGWEW7TZnIO/533mtMEA4rOevQV815YJw==,
- }
- engines: { node: '>=4.5.0' }
+ resolution: {integrity: sha512-y7tTxhGKXcyBxRKAni+awqx8uqaJKrSFSNFSeRG5CsWNdmy2BIK+6VGWEW7TZnIO/533mtMEA4rOevQV815YJw==}
+ engines: {node: '>=4.5.0'}
byte-size@8.1.1:
- resolution:
- {
- integrity: sha512-tUkzZWK0M/qdoLEqikxBWe4kumyuwjl3HO6zHTr4yEI23EojPtLYXdG1+AQY7MN0cGyNDvEaJ8wiYQm6P2bPxg==,
- }
- engines: { node: '>=12.17' }
+ resolution: {integrity: sha512-tUkzZWK0M/qdoLEqikxBWe4kumyuwjl3HO6zHTr4yEI23EojPtLYXdG1+AQY7MN0cGyNDvEaJ8wiYQm6P2bPxg==}
+ engines: {node: '>=12.17'}
bytes@3.1.0:
- resolution:
- {
- integrity: sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==,
- }
- engines: { node: '>= 0.8' }
+ resolution: {integrity: sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==}
+ engines: {node: '>= 0.8'}
bytes@3.1.2:
- resolution:
- {
- integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==,
- }
- engines: { node: '>= 0.8' }
+ resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==}
+ engines: {node: '>= 0.8'}
cacache@18.0.4:
- resolution:
- {
- integrity: sha512-B+L5iIa9mgcjLbliir2th36yEwPftrzteHYujzsx3dFP/31GCHcIeS8f5MGd80odLOjaOvSpU3EEAmRQptkxLQ==,
- }
- engines: { node: ^16.14.0 || >=18.0.0 }
+ resolution: {integrity: sha512-B+L5iIa9mgcjLbliir2th36yEwPftrzteHYujzsx3dFP/31GCHcIeS8f5MGd80odLOjaOvSpU3EEAmRQptkxLQ==}
+ engines: {node: ^16.14.0 || >=18.0.0}
call-bind-apply-helpers@1.0.2:
- resolution:
- {
- integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==,
- }
- engines: { node: '>= 0.4' }
+ resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==}
+ engines: {node: '>= 0.4'}
call-bind@1.0.8:
- resolution:
- {
- integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==,
- }
- engines: { node: '>= 0.4' }
+ resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==}
+ engines: {node: '>= 0.4'}
call-bound@1.0.4:
- resolution:
- {
- integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==,
- }
- engines: { node: '>= 0.4' }
+ resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==}
+ engines: {node: '>= 0.4'}
callsites@3.1.0:
- resolution:
- {
- integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==,
- }
- engines: { node: '>=6' }
+ resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
+ engines: {node: '>=6'}
camel-case@3.0.0:
- resolution:
- {
- integrity: sha512-+MbKztAYHXPr1jNTSKQF52VpcFjwY5RkR7fxksV8Doo4KAYc5Fl4UJRgthBbTmEx8C54DqahhbLJkDwjI3PI/w==,
- }
+ resolution: {integrity: sha512-+MbKztAYHXPr1jNTSKQF52VpcFjwY5RkR7fxksV8Doo4KAYc5Fl4UJRgthBbTmEx8C54DqahhbLJkDwjI3PI/w==}
camelcase-keys@6.2.2:
- resolution:
- {
- integrity: sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==,
- }
- engines: { node: '>=8' }
+ resolution: {integrity: sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==}
+ engines: {node: '>=8'}
camelcase@5.3.1:
- resolution:
- {
- integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==,
- }
- engines: { node: '>=6' }
+ resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==}
+ engines: {node: '>=6'}
camelcase@6.3.0:
- resolution:
- {
- integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==,
- }
- engines: { node: '>=10' }
+ resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==}
+ engines: {node: '>=10'}
camelize@1.0.1:
- resolution:
- {
- integrity: sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==,
- }
+ resolution: {integrity: sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==}
caniuse-lite@1.0.30001761:
- resolution:
- {
- integrity: sha512-JF9ptu1vP2coz98+5051jZ4PwQgd2ni8A+gYSN7EA7dPKIMf0pDlSUxhdmVOaV3/fYK5uWBkgSXJaRLr4+3A6g==,
- }
+ resolution: {integrity: sha512-JF9ptu1vP2coz98+5051jZ4PwQgd2ni8A+gYSN7EA7dPKIMf0pDlSUxhdmVOaV3/fYK5uWBkgSXJaRLr4+3A6g==}
case@1.6.3:
- resolution:
- {
- integrity: sha512-mzDSXIPaFwVDvZAHqZ9VlbyF4yyXRuX6IvB06WvPYkqJVO24kX1PPhv9bfpKNFZyxYFmmgo03HUiD8iklmJYRQ==,
- }
- engines: { node: '>= 0.8.0' }
+ resolution: {integrity: sha512-mzDSXIPaFwVDvZAHqZ9VlbyF4yyXRuX6IvB06WvPYkqJVO24kX1PPhv9bfpKNFZyxYFmmgo03HUiD8iklmJYRQ==}
+ engines: {node: '>= 0.8.0'}
caseless@0.12.0:
- resolution:
- {
- integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==,
- }
+ resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==}
chalk@2.4.2:
- resolution:
- {
- integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==,
- }
- engines: { node: '>=4' }
+ resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==}
+ engines: {node: '>=4'}
chalk@3.0.0:
- resolution:
- {
- integrity: sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==,
- }
- engines: { node: '>=8' }
+ resolution: {integrity: sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==}
+ engines: {node: '>=8'}
chalk@4.1.0:
- resolution:
- {
- integrity: sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==,
- }
- engines: { node: '>=10' }
+ resolution: {integrity: sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==}
+ engines: {node: '>=10'}
chalk@4.1.2:
- resolution:
- {
- integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==,
- }
- engines: { node: '>=10' }
+ resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
+ engines: {node: '>=10'}
char-regex@1.0.2:
- resolution:
- {
- integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==,
- }
- engines: { node: '>=10' }
+ resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==}
+ engines: {node: '>=10'}
chardet@2.1.1:
- resolution:
- {
- integrity: sha512-PsezH1rqdV9VvyNhxxOW32/d75r01NY7TQCmOqomRo15ZSOKbpTFVsfjghxo6JloQUCGnH4k1LGu0R4yCLlWQQ==,
- }
+ resolution: {integrity: sha512-PsezH1rqdV9VvyNhxxOW32/d75r01NY7TQCmOqomRo15ZSOKbpTFVsfjghxo6JloQUCGnH4k1LGu0R4yCLlWQQ==}
cheerio-select@2.1.0:
- resolution:
- {
- integrity: sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==,
- }
+ resolution: {integrity: sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==}
cheerio@1.0.0-rc.3:
- resolution:
- {
- integrity: sha512-0td5ijfUPuubwLUu0OBoe98gZj8C/AA+RW3v67GPlGOrvxWjZmBXiBCRU+I8VEiNyJzjth40POfHiz2RB3gImA==,
- }
- engines: { node: '>= 0.6' }
+ resolution: {integrity: sha512-0td5ijfUPuubwLUu0OBoe98gZj8C/AA+RW3v67GPlGOrvxWjZmBXiBCRU+I8VEiNyJzjth40POfHiz2RB3gImA==}
+ engines: {node: '>= 0.6'}
cheerio@1.1.2:
- resolution:
- {
- integrity: sha512-IkxPpb5rS/d1IiLbHMgfPuS0FgiWTtFIm/Nj+2woXDLTZ7fOT2eqzgYbdMlLweqlHbsZjxEChoVK+7iph7jyQg==,
- }
- engines: { node: '>=20.18.1' }
+ resolution: {integrity: sha512-IkxPpb5rS/d1IiLbHMgfPuS0FgiWTtFIm/Nj+2woXDLTZ7fOT2eqzgYbdMlLweqlHbsZjxEChoVK+7iph7jyQg==}
+ engines: {node: '>=20.18.1'}
chokidar@3.6.0:
- resolution:
- {
- integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==,
- }
- engines: { node: '>= 8.10.0' }
+ resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==}
+ engines: {node: '>= 8.10.0'}
chownr@2.0.0:
- resolution:
- {
- integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==,
- }
- engines: { node: '>=10' }
+ resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==}
+ engines: {node: '>=10'}
ci-info@3.9.0:
- resolution:
- {
- integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==,
- }
- engines: { node: '>=8' }
+ resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==}
+ engines: {node: '>=8'}
ci-info@4.3.1:
- resolution:
- {
- integrity: sha512-Wdy2Igu8OcBpI2pZePZ5oWjPC38tmDVx5WKUXKwlLYkA0ozo85sLsLvkBbBn/sZaSCMFOGZJ14fvW9t5/d7kdA==,
- }
- engines: { node: '>=8' }
+ resolution: {integrity: sha512-Wdy2Igu8OcBpI2pZePZ5oWjPC38tmDVx5WKUXKwlLYkA0ozo85sLsLvkBbBn/sZaSCMFOGZJ14fvW9t5/d7kdA==}
+ engines: {node: '>=8'}
cjs-module-lexer@1.4.3:
- resolution:
- {
- integrity: sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==,
- }
+ resolution: {integrity: sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==}
cjs-module-lexer@2.1.1:
- resolution:
- {
- integrity: sha512-+CmxIZ/L2vNcEfvNtLdU0ZQ6mbq3FZnwAP2PPTiKP+1QOoKwlKlPgb8UKV0Dds7QVaMnHm+FwSft2VB0s/SLjQ==,
- }
+ resolution: {integrity: sha512-+CmxIZ/L2vNcEfvNtLdU0ZQ6mbq3FZnwAP2PPTiKP+1QOoKwlKlPgb8UKV0Dds7QVaMnHm+FwSft2VB0s/SLjQ==}
clean-ansi@0.1.8:
- resolution:
- {
- integrity: sha512-JrOtrYKUm/BLQdhKDRIBQEH8hLhQIHZCckNI+lc5fXlssfbOJFEFEsuBs0/UpQaY/Hf8eJ3CHto+C0JRo6Z79w==,
- }
+ resolution: {integrity: sha512-JrOtrYKUm/BLQdhKDRIBQEH8hLhQIHZCckNI+lc5fXlssfbOJFEFEsuBs0/UpQaY/Hf8eJ3CHto+C0JRo6Z79w==}
clean-css@4.2.4:
- resolution:
- {
- integrity: sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A==,
- }
- engines: { node: '>= 4.0' }
+ resolution: {integrity: sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A==}
+ engines: {node: '>= 4.0'}
clean-stack@2.2.0:
- resolution:
- {
- integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==,
- }
- engines: { node: '>=6' }
+ resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==}
+ engines: {node: '>=6'}
cli-cursor@3.1.0:
- resolution:
- {
- integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==,
- }
- engines: { node: '>=8' }
+ resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==}
+ engines: {node: '>=8'}
cli-spinners@2.6.1:
- resolution:
- {
- integrity: sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==,
- }
- engines: { node: '>=6' }
+ resolution: {integrity: sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==}
+ engines: {node: '>=6'}
cli-spinners@2.9.2:
- resolution:
- {
- integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==,
- }
- engines: { node: '>=6' }
+ resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==}
+ engines: {node: '>=6'}
cli-width@3.0.0:
- resolution:
- {
- integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==,
- }
- engines: { node: '>= 10' }
+ resolution: {integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==}
+ engines: {node: '>= 10'}
cliui@6.0.0:
- resolution:
- {
- integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==,
- }
+ resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==}
cliui@7.0.4:
- resolution:
- {
- integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==,
- }
+ resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==}
cliui@8.0.1:
- resolution:
- {
- integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==,
- }
- engines: { node: '>=12' }
+ resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==}
+ engines: {node: '>=12'}
clone-deep@4.0.1:
- resolution:
- {
- integrity: sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==,
- }
- engines: { node: '>=6' }
+ resolution: {integrity: sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==}
+ engines: {node: '>=6'}
clone@1.0.4:
- resolution:
- {
- integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==,
- }
- engines: { node: '>=0.8' }
+ resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==}
+ engines: {node: '>=0.8'}
cmd-shim@6.0.3:
- resolution:
- {
- integrity: sha512-FMabTRlc5t5zjdenF6mS0MBeFZm0XqHqeOkcskKFb/LYCcRQ5fVgLOHVc4Lq9CqABd9zhjwPjMBCJvMCziSVtA==,
- }
- engines: { node: ^14.17.0 || ^16.13.0 || >=18.0.0 }
+ resolution: {integrity: sha512-FMabTRlc5t5zjdenF6mS0MBeFZm0XqHqeOkcskKFb/LYCcRQ5fVgLOHVc4Lq9CqABd9zhjwPjMBCJvMCziSVtA==}
+ engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
co@4.6.0:
- resolution:
- {
- integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==,
- }
- engines: { iojs: '>= 1.0.0', node: '>= 0.12.0' }
-
- code-block-writer@13.0.3:
- resolution:
- {
- integrity: sha512-Oofo0pq3IKnsFtuHqSF7TqBfr71aeyZDVJ0HpmqB7FBM2qEigL0iPONSCZSO9pE9dZTAxANe5XHG9Uy0YMv8cg==,
- }
+ resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==}
+ engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'}
collect-v8-coverage@1.0.3:
- resolution:
- {
- integrity: sha512-1L5aqIkwPfiodaMgQunkF1zRhNqifHBmtbbbxcr6yVxxBnliw4TDOW6NxpO8DJLgJ16OT+Y4ztZqP6p/FtXnAw==,
- }
+ resolution: {integrity: sha512-1L5aqIkwPfiodaMgQunkF1zRhNqifHBmtbbbxcr6yVxxBnliw4TDOW6NxpO8DJLgJ16OT+Y4ztZqP6p/FtXnAw==}
color-convert@1.9.3:
- resolution:
- {
- integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==,
- }
+ resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==}
color-convert@2.0.1:
- resolution:
- {
- integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==,
- }
- engines: { node: '>=7.0.0' }
+ resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
+ engines: {node: '>=7.0.0'}
color-name@1.1.3:
- resolution:
- {
- integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==,
- }
+ resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==}
color-name@1.1.4:
- resolution:
- {
- integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==,
- }
+ resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
color-support@1.1.3:
- resolution:
- {
- integrity: sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==,
- }
+ resolution: {integrity: sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==}
hasBin: true
columnify@1.6.0:
- resolution:
- {
- integrity: sha512-lomjuFZKfM6MSAnV9aCZC9sc0qGbmZdfygNv+nCpqVkSKdCxCklLtd16O0EILGkImHw9ZpHkAnHaB+8Zxq5W6Q==,
- }
- engines: { node: '>=8.0.0' }
+ resolution: {integrity: sha512-lomjuFZKfM6MSAnV9aCZC9sc0qGbmZdfygNv+nCpqVkSKdCxCklLtd16O0EILGkImHw9ZpHkAnHaB+8Zxq5W6Q==}
+ engines: {node: '>=8.0.0'}
combined-stream@1.0.8:
- resolution:
- {
- integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==,
- }
- engines: { node: '>= 0.8' }
+ resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==}
+ engines: {node: '>= 0.8'}
commander@10.0.1:
- resolution:
- {
- integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==,
- }
- engines: { node: '>=14' }
+ resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==}
+ engines: {node: '>=14'}
commander@12.1.0:
- resolution:
- {
- integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==,
- }
- engines: { node: '>=18' }
+ resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==}
+ engines: {node: '>=18'}
commander@2.17.1:
- resolution:
- {
- integrity: sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==,
- }
+ resolution: {integrity: sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==}
commander@2.19.0:
- resolution:
- {
- integrity: sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==,
- }
+ resolution: {integrity: sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==}
commander@2.20.3:
- resolution:
- {
- integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==,
- }
+ resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
commander@5.1.0:
- resolution:
- {
- integrity: sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==,
- }
- engines: { node: '>= 6' }
+ resolution: {integrity: sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==}
+ engines: {node: '>= 6'}
common-ancestor-path@1.0.1:
- resolution:
- {
- integrity: sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==,
- }
+ resolution: {integrity: sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==}
compare-func@2.0.0:
- resolution:
- {
- integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==,
- }
+ resolution: {integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==}
concat-map@0.0.1:
- resolution:
- {
- integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==,
- }
+ resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
concat-stream@2.0.0:
- resolution:
- {
- integrity: sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==,
- }
- engines: { '0': node >= 6.0 }
+ resolution: {integrity: sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==}
+ engines: {'0': node >= 6.0}
config-chain@1.1.13:
- resolution:
- {
- integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==,
- }
+ resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==}
console-control-strings@1.1.0:
- resolution:
- {
- integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==,
- }
+ resolution: {integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==}
content-disposition@1.0.1:
- resolution:
- {
- integrity: sha512-oIXISMynqSqm241k6kcQ5UwttDILMK4BiurCfGEREw6+X9jkkpEe5T9FZaApyLGGOnFuyMWZpdolTXMtvEJ08Q==,
- }
- engines: { node: '>=18' }
+ resolution: {integrity: sha512-oIXISMynqSqm241k6kcQ5UwttDILMK4BiurCfGEREw6+X9jkkpEe5T9FZaApyLGGOnFuyMWZpdolTXMtvEJ08Q==}
+ engines: {node: '>=18'}
content-type@1.0.5:
- resolution:
- {
- integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==,
- }
- engines: { node: '>= 0.6' }
+ resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==}
+ engines: {node: '>= 0.6'}
conventional-changelog-angular@7.0.0:
- resolution:
- {
- integrity: sha512-ROjNchA9LgfNMTTFSIWPzebCwOGFdgkEq45EnvvrmSLvCtAw0HSmrCs7/ty+wAeYUZyNay0YMUNYFTRL72PkBQ==,
- }
- engines: { node: '>=16' }
+ resolution: {integrity: sha512-ROjNchA9LgfNMTTFSIWPzebCwOGFdgkEq45EnvvrmSLvCtAw0HSmrCs7/ty+wAeYUZyNay0YMUNYFTRL72PkBQ==}
+ engines: {node: '>=16'}
conventional-changelog-core@5.0.1:
- resolution:
- {
- integrity: sha512-Rvi5pH+LvgsqGwZPZ3Cq/tz4ty7mjijhr3qR4m9IBXNbxGGYgTVVO+duXzz9aArmHxFtwZ+LRkrNIMDQzgoY4A==,
- }
- engines: { node: '>=14' }
+ resolution: {integrity: sha512-Rvi5pH+LvgsqGwZPZ3Cq/tz4ty7mjijhr3qR4m9IBXNbxGGYgTVVO+duXzz9aArmHxFtwZ+LRkrNIMDQzgoY4A==}
+ engines: {node: '>=14'}
conventional-changelog-preset-loader@3.0.0:
- resolution:
- {
- integrity: sha512-qy9XbdSLmVnwnvzEisjxdDiLA4OmV3o8db+Zdg4WiFw14fP3B6XNz98X0swPPpkTd/pc1K7+adKgEDM1JCUMiA==,
- }
- engines: { node: '>=14' }
+ resolution: {integrity: sha512-qy9XbdSLmVnwnvzEisjxdDiLA4OmV3o8db+Zdg4WiFw14fP3B6XNz98X0swPPpkTd/pc1K7+adKgEDM1JCUMiA==}
+ engines: {node: '>=14'}
conventional-changelog-writer@6.0.1:
- resolution:
- {
- integrity: sha512-359t9aHorPw+U+nHzUXHS5ZnPBOizRxfQsWT5ZDHBfvfxQOAik+yfuhKXG66CN5LEWPpMNnIMHUTCKeYNprvHQ==,
- }
- engines: { node: '>=14' }
+ resolution: {integrity: sha512-359t9aHorPw+U+nHzUXHS5ZnPBOizRxfQsWT5ZDHBfvfxQOAik+yfuhKXG66CN5LEWPpMNnIMHUTCKeYNprvHQ==}
+ engines: {node: '>=14'}
hasBin: true
conventional-commits-filter@3.0.0:
- resolution:
- {
- integrity: sha512-1ymej8b5LouPx9Ox0Dw/qAO2dVdfpRFq28e5Y0jJEU8ZrLdy0vOSkkIInwmxErFGhg6SALro60ZrwYFVTUDo4Q==,
- }
- engines: { node: '>=14' }
+ resolution: {integrity: sha512-1ymej8b5LouPx9Ox0Dw/qAO2dVdfpRFq28e5Y0jJEU8ZrLdy0vOSkkIInwmxErFGhg6SALro60ZrwYFVTUDo4Q==}
+ engines: {node: '>=14'}
conventional-commits-parser@4.0.0:
- resolution:
- {
- integrity: sha512-WRv5j1FsVM5FISJkoYMR6tPk07fkKT0UodruX4je86V4owk451yjXAKzKAPOs9l7y59E2viHUS9eQ+dfUA9NSg==,
- }
- engines: { node: '>=14' }
+ resolution: {integrity: sha512-WRv5j1FsVM5FISJkoYMR6tPk07fkKT0UodruX4je86V4owk451yjXAKzKAPOs9l7y59E2viHUS9eQ+dfUA9NSg==}
+ engines: {node: '>=14'}
hasBin: true
conventional-recommended-bump@7.0.1:
- resolution:
- {
- integrity: sha512-Ft79FF4SlOFvX4PkwFDRnaNiIVX7YbmqGU0RwccUaiGvgp3S0a8ipR2/Qxk31vclDNM+GSdJOVs2KrsUCjblVA==,
- }
- engines: { node: '>=14' }
+ resolution: {integrity: sha512-Ft79FF4SlOFvX4PkwFDRnaNiIVX7YbmqGU0RwccUaiGvgp3S0a8ipR2/Qxk31vclDNM+GSdJOVs2KrsUCjblVA==}
+ engines: {node: '>=14'}
hasBin: true
convert-source-map@2.0.0:
- resolution:
- {
- integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==,
- }
+ resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
cookie-signature@1.2.2:
- resolution:
- {
- integrity: sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==,
- }
- engines: { node: '>=6.6.0' }
+ resolution: {integrity: sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==}
+ engines: {node: '>=6.6.0'}
cookie@0.7.2:
- resolution:
- {
- integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==,
- }
- engines: { node: '>= 0.6' }
+ resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==}
+ engines: {node: '>= 0.6'}
copyfiles@2.4.1:
- resolution:
- {
- integrity: sha512-fereAvAvxDrQDOXybk3Qu3dPbOoKoysFMWtkY3mv5BsL8//OSZVL5DCLYqgRfY5cWirgRzlC+WSrxp6Bo3eNZg==,
- }
+ resolution: {integrity: sha512-fereAvAvxDrQDOXybk3Qu3dPbOoKoysFMWtkY3mv5BsL8//OSZVL5DCLYqgRfY5cWirgRzlC+WSrxp6Bo3eNZg==}
hasBin: true
core-js-pure@3.47.0:
- resolution:
- {
- integrity: sha512-BcxeDbzUrRnXGYIVAGFtcGQVNpFcUhVjr6W7F8XktvQW2iJP9e66GP6xdKotCRFlrxBvNIBrhwKteRXqMV86Nw==,
- }
+ resolution: {integrity: sha512-BcxeDbzUrRnXGYIVAGFtcGQVNpFcUhVjr6W7F8XktvQW2iJP9e66GP6xdKotCRFlrxBvNIBrhwKteRXqMV86Nw==}
core-js@2.6.12:
- resolution:
- {
- integrity: sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==,
- }
+ resolution: {integrity: sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==}
deprecated: core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.
core-util-is@1.0.2:
- resolution:
- {
- integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==,
- }
+ resolution: {integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==}
core-util-is@1.0.3:
- resolution:
- {
- integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==,
- }
+ resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==}
cors@2.8.5:
- resolution:
- {
- integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==,
- }
- engines: { node: '>= 0.10' }
+ resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==}
+ engines: {node: '>= 0.10'}
cosmiconfig@9.0.0:
- resolution:
- {
- integrity: sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==,
- }
- engines: { node: '>=14' }
+ resolution: {integrity: sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==}
+ engines: {node: '>=14'}
peerDependencies:
typescript: '>=4.9.5'
peerDependenciesMeta:
@@ -6284,148 +4507,82 @@ packages:
optional: true
create-jest@29.7.0:
- resolution:
- {
- integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==,
- }
- engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 }
+ resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
hasBin: true
create-require@1.1.1:
- resolution:
- {
- integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==,
- }
+ resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==}
cron-parser@2.18.0:
- resolution:
- {
- integrity: sha512-s4odpheTyydAbTBQepsqd2rNWGa2iV3cyo8g7zbI2QQYGLVsfbhmwukayS1XHppe02Oy1fg7mg6xoaraVJeEcg==,
- }
- engines: { node: '>=0.8' }
+ resolution: {integrity: sha512-s4odpheTyydAbTBQepsqd2rNWGa2iV3cyo8g7zbI2QQYGLVsfbhmwukayS1XHppe02Oy1fg7mg6xoaraVJeEcg==}
+ engines: {node: '>=0.8'}
cross-spawn@7.0.6:
- resolution:
- {
- integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==,
- }
- engines: { node: '>= 8' }
+ resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==}
+ engines: {node: '>= 8'}
css-color-keywords@1.0.0:
- resolution:
- {
- integrity: sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==,
- }
- engines: { node: '>=4' }
+ resolution: {integrity: sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==}
+ engines: {node: '>=4'}
css-select@1.2.0:
- resolution:
- {
- integrity: sha512-dUQOBoqdR7QwV90WysXPLXG5LO7nhYBgiWVfxF80DKPF8zx1t/pUd2FYy73emg3zrjtM6dzmYgbHKfV2rxiHQA==,
- }
+ resolution: {integrity: sha512-dUQOBoqdR7QwV90WysXPLXG5LO7nhYBgiWVfxF80DKPF8zx1t/pUd2FYy73emg3zrjtM6dzmYgbHKfV2rxiHQA==}
css-select@5.2.2:
- resolution:
- {
- integrity: sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==,
- }
+ resolution: {integrity: sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==}
css-to-react-native@3.2.0:
- resolution:
- {
- integrity: sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ==,
- }
+ resolution: {integrity: sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ==}
css-what@2.1.3:
- resolution:
- {
- integrity: sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==,
- }
+ resolution: {integrity: sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==}
css-what@6.2.2:
- resolution:
- {
- integrity: sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==,
- }
- engines: { node: '>= 6' }
+ resolution: {integrity: sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==}
+ engines: {node: '>= 6'}
css.escape@1.5.1:
- resolution:
- {
- integrity: sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==,
- }
+ resolution: {integrity: sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==}
css@3.0.0:
- resolution:
- {
- integrity: sha512-DG9pFfwOrzc+hawpmqX/dHYHJG+Bsdb0klhyi1sDneOgGOXy9wQIC8hzyVp1e4NRYDBdxcylvywPkkXCHAzTyQ==,
- }
+ resolution: {integrity: sha512-DG9pFfwOrzc+hawpmqX/dHYHJG+Bsdb0klhyi1sDneOgGOXy9wQIC8hzyVp1e4NRYDBdxcylvywPkkXCHAzTyQ==}
cssesc@3.0.0:
- resolution:
- {
- integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==,
- }
- engines: { node: '>=4' }
+ resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==}
+ engines: {node: '>=4'}
hasBin: true
csstype@3.2.3:
- resolution:
- {
- integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==,
- }
+ resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==}
csv-parse@6.1.0:
- resolution:
- {
- integrity: sha512-CEE+jwpgLn+MmtCpVcPtiCZpVtB6Z2OKPTr34pycYYoL7sxdOkXDdQ4lRiw6ioC0q6BLqhc6cKweCVvral8yhw==,
- }
+ resolution: {integrity: sha512-CEE+jwpgLn+MmtCpVcPtiCZpVtB6Z2OKPTr34pycYYoL7sxdOkXDdQ4lRiw6ioC0q6BLqhc6cKweCVvral8yhw==}
csv-parser@2.3.5:
- resolution:
- {
- integrity: sha512-LCHolC4AlNwL+5EuD5LH2VVNKpD8QixZW2zzK1XmrVYUaslFY4c5BooERHOCIubG9iv/DAyFjs4x0HvWNZuyWg==,
- }
- engines: { node: '>= 8.16.0' }
+ resolution: {integrity: sha512-LCHolC4AlNwL+5EuD5LH2VVNKpD8QixZW2zzK1XmrVYUaslFY4c5BooERHOCIubG9iv/DAyFjs4x0HvWNZuyWg==}
+ engines: {node: '>= 8.16.0'}
hasBin: true
dargs@7.0.0:
- resolution:
- {
- integrity: sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==,
- }
- engines: { node: '>=8' }
+ resolution: {integrity: sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==}
+ engines: {node: '>=8'}
dashdash@1.14.1:
- resolution:
- {
- integrity: sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==,
- }
- engines: { node: '>=0.10' }
+ resolution: {integrity: sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==}
+ engines: {node: '>=0.10'}
data-uri-to-buffer@1.2.0:
- resolution:
- {
- integrity: sha512-vKQ9DTQPN1FLYiiEEOQ6IBGFqvjCa5rSK3cWMy/Nespm5d/x3dGFT9UBZnkLxCwua/IXBi2TYnwTEpsOvhC4UQ==,
- }
+ resolution: {integrity: sha512-vKQ9DTQPN1FLYiiEEOQ6IBGFqvjCa5rSK3cWMy/Nespm5d/x3dGFT9UBZnkLxCwua/IXBi2TYnwTEpsOvhC4UQ==}
dataloader@2.2.3:
- resolution:
- {
- integrity: sha512-y2krtASINtPFS1rSDjacrFgn1dcUuoREVabwlOGOe4SdxenREqwjwjElAdwvbGM7kgZz9a3KVicWR7vcz8rnzA==,
- }
+ resolution: {integrity: sha512-y2krtASINtPFS1rSDjacrFgn1dcUuoREVabwlOGOe4SdxenREqwjwjElAdwvbGM7kgZz9a3KVicWR7vcz8rnzA==}
dateformat@3.0.3:
- resolution:
- {
- integrity: sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==,
- }
+ resolution: {integrity: sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==}
debug@2.6.9:
- resolution:
- {
- integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==,
- }
+ resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==}
peerDependencies:
supports-color: '*'
peerDependenciesMeta:
@@ -6433,10 +4590,7 @@ packages:
optional: true
debug@3.1.0:
- resolution:
- {
- integrity: sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==,
- }
+ resolution: {integrity: sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==}
peerDependencies:
supports-color: '*'
peerDependenciesMeta:
@@ -6444,10 +4598,7 @@ packages:
optional: true
debug@3.2.7:
- resolution:
- {
- integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==,
- }
+ resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==}
peerDependencies:
supports-color: '*'
peerDependenciesMeta:
@@ -6455,11 +4606,8 @@ packages:
optional: true
debug@4.4.3:
- resolution:
- {
- integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==,
- }
- engines: { node: '>=6.0' }
+ resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==}
+ engines: {node: '>=6.0'}
peerDependencies:
supports-color: '*'
peerDependenciesMeta:
@@ -6467,31 +4615,19 @@ packages:
optional: true
decamelize-keys@1.1.1:
- resolution:
- {
- integrity: sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==,
- }
- engines: { node: '>=0.10.0' }
+ resolution: {integrity: sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==}
+ engines: {node: '>=0.10.0'}
decamelize@1.2.0:
- resolution:
- {
- integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==,
- }
- engines: { node: '>=0.10.0' }
+ resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==}
+ engines: {node: '>=0.10.0'}
decode-uri-component@0.2.2:
- resolution:
- {
- integrity: sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==,
- }
- engines: { node: '>=0.10' }
+ resolution: {integrity: sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==}
+ engines: {node: '>=0.10'}
dedent@1.5.3:
- resolution:
- {
- integrity: sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==,
- }
+ resolution: {integrity: sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==}
peerDependencies:
babel-plugin-macros: ^3.1.0
peerDependenciesMeta:
@@ -6499,10 +4635,7 @@ packages:
optional: true
dedent@1.7.1:
- resolution:
- {
- integrity: sha512-9JmrhGZpOlEgOLdQgSm0zxFaYoQon408V1v49aqTWuXENVlnCuY9JBZcXZiCsZQWDjTm5Qf/nIvAy77mXDAjEg==,
- }
+ resolution: {integrity: sha512-9JmrhGZpOlEgOLdQgSm0zxFaYoQon408V1v49aqTWuXENVlnCuY9JBZcXZiCsZQWDjTm5Qf/nIvAy77mXDAjEg==}
peerDependencies:
babel-plugin-macros: ^3.1.0
peerDependenciesMeta:
@@ -6510,245 +4643,134 @@ packages:
optional: true
deep-is@0.1.4:
- resolution:
- {
- integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==,
- }
+ resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
deepmerge@4.3.1:
- resolution:
- {
- integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==,
- }
- engines: { node: '>=0.10.0' }
+ resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==}
+ engines: {node: '>=0.10.0'}
defaults@1.0.4:
- resolution:
- {
- integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==,
- }
+ resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==}
define-data-property@1.1.4:
- resolution:
- {
- integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==,
- }
- engines: { node: '>= 0.4' }
+ resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==}
+ engines: {node: '>= 0.4'}
define-lazy-prop@2.0.0:
- resolution:
- {
- integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==,
- }
- engines: { node: '>=8' }
+ resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==}
+ engines: {node: '>=8'}
define-properties@1.2.1:
- resolution:
- {
- integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==,
- }
- engines: { node: '>= 0.4' }
+ resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==}
+ engines: {node: '>= 0.4'}
degenerator@1.0.4:
- resolution:
- {
- integrity: sha512-EMAC+riLSC64jKfOs1jp8J7M4ZXstUUwTdwFBEv6HOzL/Ae+eAzMKEK0nJnpof2fnw9IOjmE6u6qXFejVyk8AA==,
- }
+ resolution: {integrity: sha512-EMAC+riLSC64jKfOs1jp8J7M4ZXstUUwTdwFBEv6HOzL/Ae+eAzMKEK0nJnpof2fnw9IOjmE6u6qXFejVyk8AA==}
delayed-stream@1.0.0:
- resolution:
- {
- integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==,
- }
- engines: { node: '>=0.4.0' }
+ resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==}
+ engines: {node: '>=0.4.0'}
depd@1.1.2:
- resolution:
- {
- integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==,
- }
- engines: { node: '>= 0.6' }
+ resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==}
+ engines: {node: '>= 0.6'}
depd@2.0.0:
- resolution:
- {
- integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==,
- }
- engines: { node: '>= 0.8' }
+ resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==}
+ engines: {node: '>= 0.8'}
deprecation@2.3.1:
- resolution:
- {
- integrity: sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==,
- }
+ resolution: {integrity: sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==}
detect-indent@5.0.0:
- resolution:
- {
- integrity: sha512-rlpvsxUtM0PQvy9iZe640/IWwWYyBsTApREbA1pHOpmOUIl9MkP/U4z7vTtg4Oaojvqhxt7sdufnT0EzGaR31g==,
- }
- engines: { node: '>=4' }
+ resolution: {integrity: sha512-rlpvsxUtM0PQvy9iZe640/IWwWYyBsTApREbA1pHOpmOUIl9MkP/U4z7vTtg4Oaojvqhxt7sdufnT0EzGaR31g==}
+ engines: {node: '>=4'}
detect-newline@3.1.0:
- resolution:
- {
- integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==,
- }
- engines: { node: '>=8' }
+ resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==}
+ engines: {node: '>=8'}
detect-node@2.1.0:
- resolution:
- {
- integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==,
- }
+ resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==}
dicer@0.3.0:
- resolution:
- {
- integrity: sha512-MdceRRWqltEG2dZqO769g27N/3PXfcKl04VhYnBlo2YhH7zPi88VebsjTKclaOyiuMaGU72hTfw3VkUitGcVCA==,
- }
- engines: { node: '>=4.5.0' }
+ resolution: {integrity: sha512-MdceRRWqltEG2dZqO769g27N/3PXfcKl04VhYnBlo2YhH7zPi88VebsjTKclaOyiuMaGU72hTfw3VkUitGcVCA==}
+ engines: {node: '>=4.5.0'}
diff-sequences@29.6.3:
- resolution:
- {
- integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==,
- }
- engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 }
+ resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
diff@4.0.2:
- resolution:
- {
- integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==,
- }
- engines: { node: '>=0.3.1' }
+ resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==}
+ engines: {node: '>=0.3.1'}
dom-accessibility-api@0.5.16:
- resolution:
- {
- integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==,
- }
+ resolution: {integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==}
dom-serializer@0.1.1:
- resolution:
- {
- integrity: sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==,
- }
+ resolution: {integrity: sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==}
dom-serializer@0.2.2:
- resolution:
- {
- integrity: sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==,
- }
+ resolution: {integrity: sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==}
dom-serializer@1.4.1:
- resolution:
- {
- integrity: sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==,
- }
+ resolution: {integrity: sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==}
dom-serializer@2.0.0:
- resolution:
- {
- integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==,
- }
+ resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==}
domelementtype@1.3.1:
- resolution:
- {
- integrity: sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==,
- }
+ resolution: {integrity: sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==}
domelementtype@2.3.0:
- resolution:
- {
- integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==,
- }
+ resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==}
domhandler@2.4.2:
- resolution:
- {
- integrity: sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==,
- }
+ resolution: {integrity: sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==}
domhandler@3.3.0:
- resolution:
- {
- integrity: sha512-J1C5rIANUbuYK+FuFL98650rihynUOEzRLxW+90bKZRWB6A1X1Tf82GxR1qAWLyfNPRvjqfip3Q5tdYlmAa9lA==,
- }
- engines: { node: '>= 4' }
+ resolution: {integrity: sha512-J1C5rIANUbuYK+FuFL98650rihynUOEzRLxW+90bKZRWB6A1X1Tf82GxR1qAWLyfNPRvjqfip3Q5tdYlmAa9lA==}
+ engines: {node: '>= 4'}
domhandler@4.3.1:
- resolution:
- {
- integrity: sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==,
- }
- engines: { node: '>= 4' }
+ resolution: {integrity: sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==}
+ engines: {node: '>= 4'}
domhandler@5.0.3:
- resolution:
- {
- integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==,
- }
- engines: { node: '>= 4' }
+ resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==}
+ engines: {node: '>= 4'}
domutils@1.5.1:
- resolution:
- {
- integrity: sha512-gSu5Oi/I+3wDENBsOWBiRK1eoGxcywYSqg3rR960/+EfY0CF4EX1VPkgHOZ3WiS/Jg2DtliF6BhWcHlfpYUcGw==,
- }
+ resolution: {integrity: sha512-gSu5Oi/I+3wDENBsOWBiRK1eoGxcywYSqg3rR960/+EfY0CF4EX1VPkgHOZ3WiS/Jg2DtliF6BhWcHlfpYUcGw==}
domutils@1.7.0:
- resolution:
- {
- integrity: sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==,
- }
+ resolution: {integrity: sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==}
domutils@2.8.0:
- resolution:
- {
- integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==,
- }
+ resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==}
domutils@3.2.2:
- resolution:
- {
- integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==,
- }
+ resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==}
dot-prop@5.3.0:
- resolution:
- {
- integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==,
- }
- engines: { node: '>=8' }
+ resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==}
+ engines: {node: '>=8'}
dotenv-expand@11.0.7:
- resolution:
- {
- integrity: sha512-zIHwmZPRshsCdpMDyVsqGmgyP0yT8GAgXUnkdAoJisxvf33k7yO6OuoKmcTGuXPWSsm8Oh88nZicRLA9Y0rUeA==,
- }
- engines: { node: '>=12' }
+ resolution: {integrity: sha512-zIHwmZPRshsCdpMDyVsqGmgyP0yT8GAgXUnkdAoJisxvf33k7yO6OuoKmcTGuXPWSsm8Oh88nZicRLA9Y0rUeA==}
+ engines: {node: '>=12'}
dotenv@16.4.7:
- resolution:
- {
- integrity: sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==,
- }
- engines: { node: '>=12' }
+ resolution: {integrity: sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==}
+ engines: {node: '>=12'}
dotenv@8.6.0:
- resolution:
- {
- integrity: sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==,
- }
- engines: { node: '>=10' }
+ resolution: {integrity: sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==}
+ engines: {node: '>=10'}
drizzle-orm@0.45.1:
- resolution:
- {
- integrity: sha512-Te0FOdKIistGNPMq2jscdqngBRfBpC8uMFVwqjf6gtTVJHIQ/dosgV/CLBU2N4ZJBsXL5savCba9b0YJskKdcA==,
- }
+ resolution: {integrity: sha512-Te0FOdKIistGNPMq2jscdqngBRfBpC8uMFVwqjf6gtTVJHIQ/dosgV/CLBU2N4ZJBsXL5savCba9b0YJskKdcA==}
peerDependencies:
'@aws-sdk/client-rds-data': '>=3'
'@cloudflare/workers-types': '>=4'
@@ -6840,295 +4862,166 @@ packages:
optional: true
dunder-proto@1.0.1:
- resolution:
- {
- integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==,
- }
- engines: { node: '>= 0.4' }
+ resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==}
+ engines: {node: '>= 0.4'}
eastasianwidth@0.2.0:
- resolution:
- {
- integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==,
- }
+ resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
ecc-jsbn@0.1.2:
- resolution:
- {
- integrity: sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==,
- }
+ resolution: {integrity: sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==}
ecdsa-sig-formatter@1.0.11:
- resolution:
- {
- integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==,
- }
+ resolution: {integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==}
editorconfig@1.0.4:
- resolution:
- {
- integrity: sha512-L9Qe08KWTlqYMVvMcTIvMAdl1cDUubzRNYL+WfA4bLDMHe4nemKkpmYzkznE1FwLKu0EEmy6obgQKzMJrg4x9Q==,
- }
- engines: { node: '>=14' }
+ resolution: {integrity: sha512-L9Qe08KWTlqYMVvMcTIvMAdl1cDUubzRNYL+WfA4bLDMHe4nemKkpmYzkznE1FwLKu0EEmy6obgQKzMJrg4x9Q==}
+ engines: {node: '>=14'}
hasBin: true
ee-first@1.1.1:
- resolution:
- {
- integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==,
- }
+ resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==}
ejs@3.1.10:
- resolution:
- {
- integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==,
- }
- engines: { node: '>=0.10.0' }
+ resolution: {integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==}
+ engines: {node: '>=0.10.0'}
hasBin: true
electron-to-chromium@1.5.267:
- resolution:
- {
- integrity: sha512-0Drusm6MVRXSOJpGbaSVgcQsuB4hEkMpHXaVstcPmhu5LIedxs1xNK/nIxmQIU/RPC0+1/o0AVZfBTkTNJOdUw==,
- }
+ resolution: {integrity: sha512-0Drusm6MVRXSOJpGbaSVgcQsuB4hEkMpHXaVstcPmhu5LIedxs1xNK/nIxmQIU/RPC0+1/o0AVZfBTkTNJOdUw==}
emittery@0.13.1:
- resolution:
- {
- integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==,
- }
- engines: { node: '>=12' }
+ resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==}
+ engines: {node: '>=12'}
emoji-regex@8.0.0:
- resolution:
- {
- integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==,
- }
+ resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
emoji-regex@9.2.2:
- resolution:
- {
- integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==,
- }
+ resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
encodeurl@2.0.0:
- resolution:
- {
- integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==,
- }
- engines: { node: '>= 0.8' }
+ resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==}
+ engines: {node: '>= 0.8'}
encoding-sniffer@0.2.1:
- resolution:
- {
- integrity: sha512-5gvq20T6vfpekVtqrYQsSCFZ1wEg5+wW0/QaZMWkFr6BqD3NfKs0rLCx4rrVlSWJeZb5NBJgVLswK/w2MWU+Gw==,
- }
+ resolution: {integrity: sha512-5gvq20T6vfpekVtqrYQsSCFZ1wEg5+wW0/QaZMWkFr6BqD3NfKs0rLCx4rrVlSWJeZb5NBJgVLswK/w2MWU+Gw==}
encoding@0.1.13:
- resolution:
- {
- integrity: sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==,
- }
+ resolution: {integrity: sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==}
end-of-stream@1.4.5:
- resolution:
- {
- integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==,
- }
+ resolution: {integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==}
enquirer@2.3.6:
- resolution:
- {
- integrity: sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==,
- }
- engines: { node: '>=8.6' }
+ resolution: {integrity: sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==}
+ engines: {node: '>=8.6'}
entities@1.1.2:
- resolution:
- {
- integrity: sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==,
- }
+ resolution: {integrity: sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==}
entities@2.2.0:
- resolution:
- {
- integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==,
- }
+ resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==}
entities@4.5.0:
- resolution:
- {
- integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==,
- }
- engines: { node: '>=0.12' }
+ resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==}
+ engines: {node: '>=0.12'}
entities@6.0.1:
- resolution:
- {
- integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==,
- }
- engines: { node: '>=0.12' }
+ resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==}
+ engines: {node: '>=0.12'}
env-paths@2.2.1:
- resolution:
- {
- integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==,
- }
- engines: { node: '>=6' }
+ resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==}
+ engines: {node: '>=6'}
envalid@6.0.2:
- resolution:
- {
- integrity: sha512-ChJb9a5rjwZ/NkcXfBrzEl5cFZaGLg38N7MlWJkv5qsmSypX2WJe28LkoAWcklC60nKZXYKRlBbsjuJSjYw0Xg==,
- }
- engines: { node: '>=8.12' }
+ resolution: {integrity: sha512-ChJb9a5rjwZ/NkcXfBrzEl5cFZaGLg38N7MlWJkv5qsmSypX2WJe28LkoAWcklC60nKZXYKRlBbsjuJSjYw0Xg==}
+ engines: {node: '>=8.12'}
envalid@8.1.1:
- resolution:
- {
- integrity: sha512-vOUfHxAFFvkBjbVQbBfgnCO9d3GcNfMMTtVfgqSU2rQGMFEVqWy9GBuoSfHnwGu7EqR0/GeukQcL3KjFBaga9w==,
- }
- engines: { node: '>=18' }
+ resolution: {integrity: sha512-vOUfHxAFFvkBjbVQbBfgnCO9d3GcNfMMTtVfgqSU2rQGMFEVqWy9GBuoSfHnwGu7EqR0/GeukQcL3KjFBaga9w==}
+ engines: {node: '>=18'}
envinfo@7.13.0:
- resolution:
- {
- integrity: sha512-cvcaMr7KqXVh4nyzGTVqTum+gAiL265x5jUWQIDLq//zOGbW+gSW/C+OWLleY/rs9Qole6AZLMXPbtIFQbqu+Q==,
- }
- engines: { node: '>=4' }
+ resolution: {integrity: sha512-cvcaMr7KqXVh4nyzGTVqTum+gAiL265x5jUWQIDLq//zOGbW+gSW/C+OWLleY/rs9Qole6AZLMXPbtIFQbqu+Q==}
+ engines: {node: '>=4'}
hasBin: true
err-code@2.0.3:
- resolution:
- {
- integrity: sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==,
- }
+ resolution: {integrity: sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==}
error-ex@1.3.4:
- resolution:
- {
- integrity: sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==,
- }
+ resolution: {integrity: sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==}
es-define-property@1.0.1:
- resolution:
- {
- integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==,
- }
- engines: { node: '>= 0.4' }
+ resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==}
+ engines: {node: '>= 0.4'}
es-errors@1.3.0:
- resolution:
- {
- integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==,
- }
- engines: { node: '>= 0.4' }
+ resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==}
+ engines: {node: '>= 0.4'}
es-object-atoms@1.1.1:
- resolution:
- {
- integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==,
- }
- engines: { node: '>= 0.4' }
+ resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==}
+ engines: {node: '>= 0.4'}
es-set-tostringtag@2.1.0:
- resolution:
- {
- integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==,
- }
- engines: { node: '>= 0.4' }
+ resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==}
+ engines: {node: '>= 0.4'}
es6-promise@4.2.8:
- resolution:
- {
- integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==,
- }
+ resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==}
es6-promisify@5.0.0:
- resolution:
- {
- integrity: sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==,
- }
+ resolution: {integrity: sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==}
esbuild@0.27.2:
- resolution:
- {
- integrity: sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw==,
- }
- engines: { node: '>=18' }
+ resolution: {integrity: sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw==}
+ engines: {node: '>=18'}
hasBin: true
escalade@3.2.0:
- resolution:
- {
- integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==,
- }
- engines: { node: '>=6' }
+ resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
+ engines: {node: '>=6'}
escape-goat@3.0.0:
- resolution:
- {
- integrity: sha512-w3PwNZJwRxlp47QGzhuEBldEqVHHhh8/tIPcl6ecf2Bou99cdAt0knihBV0Ecc7CGxYduXVBDheH1K2oADRlvw==,
- }
- engines: { node: '>=10' }
+ resolution: {integrity: sha512-w3PwNZJwRxlp47QGzhuEBldEqVHHhh8/tIPcl6ecf2Bou99cdAt0knihBV0Ecc7CGxYduXVBDheH1K2oADRlvw==}
+ engines: {node: '>=10'}
escape-html@1.0.3:
- resolution:
- {
- integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==,
- }
+ resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==}
escape-string-regexp@1.0.5:
- resolution:
- {
- integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==,
- }
- engines: { node: '>=0.8.0' }
+ resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==}
+ engines: {node: '>=0.8.0'}
escape-string-regexp@2.0.0:
- resolution:
- {
- integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==,
- }
- engines: { node: '>=8' }
+ resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==}
+ engines: {node: '>=8'}
escape-string-regexp@4.0.0:
- resolution:
- {
- integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==,
- }
- engines: { node: '>=10' }
+ resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
+ engines: {node: '>=10'}
escodegen@1.14.3:
- resolution:
- {
- integrity: sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==,
- }
- engines: { node: '>=4.0' }
+ resolution: {integrity: sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==}
+ engines: {node: '>=4.0'}
hasBin: true
eslint-config-prettier@10.1.8:
- resolution:
- {
- integrity: sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==,
- }
+ resolution: {integrity: sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==}
hasBin: true
peerDependencies:
eslint: '>=7.0.0'
eslint-plugin-simple-import-sort@12.1.1:
- resolution:
- {
- integrity: sha512-6nuzu4xwQtE3332Uz0to+TxDQYRLTKRESSc2hefVT48Zc8JthmN23Gx9lnYhu0FtkRSL1oxny3kJ2aveVhmOVA==,
- }
+ resolution: {integrity: sha512-6nuzu4xwQtE3332Uz0to+TxDQYRLTKRESSc2hefVT48Zc8JthmN23Gx9lnYhu0FtkRSL1oxny3kJ2aveVhmOVA==}
peerDependencies:
eslint: '>=5.0.0'
eslint-plugin-unused-imports@4.3.0:
- resolution:
- {
- integrity: sha512-ZFBmXMGBYfHttdRtOG9nFFpmUvMtbHSjsKrS20vdWdbfiVYsO3yA2SGYy9i9XmZJDfMGBflZGBCm70SEnFQtOA==,
- }
+ resolution: {integrity: sha512-ZFBmXMGBYfHttdRtOG9nFFpmUvMtbHSjsKrS20vdWdbfiVYsO3yA2SGYy9i9XmZJDfMGBflZGBCm70SEnFQtOA==}
peerDependencies:
'@typescript-eslint/eslint-plugin': ^8.0.0-0 || ^7.0.0 || ^6.0.0 || ^5.0.0
eslint: ^9.0.0 || ^8.0.0
@@ -7137,32 +5030,20 @@ packages:
optional: true
eslint-scope@8.4.0:
- resolution:
- {
- integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==,
- }
- engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 }
+ resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
eslint-visitor-keys@3.4.3:
- resolution:
- {
- integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==,
- }
- engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 }
+ resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
eslint-visitor-keys@4.2.1:
- resolution:
- {
- integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==,
- }
- engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 }
+ resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
eslint@9.39.2:
- resolution:
- {
- integrity: sha512-LEyamqS7W5HB3ujJyvi0HQK/dtVINZvd5mAAp9eT5S/ujByGjiZLCzPcHVzuXbpJDJF/cxwHlfceVUDZ2lnSTw==,
- }
- engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 }
+ resolution: {integrity: sha512-LEyamqS7W5HB3ujJyvi0HQK/dtVINZvd5mAAp9eT5S/ujByGjiZLCzPcHVzuXbpJDJF/cxwHlfceVUDZ2lnSTw==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
hasBin: true
peerDependencies:
jiti: '*'
@@ -7171,213 +5052,120 @@ packages:
optional: true
espree@10.4.0:
- resolution:
- {
- integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==,
- }
- engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 }
+ resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
esprima@3.1.3:
- resolution:
- {
- integrity: sha512-AWwVMNxwhN8+NIPQzAQZCm7RkLC4RbM3B1OobMuyp3i+w73X57KCKaVIxaRZb+DYCojq7rspo+fmuQfAboyhFg==,
- }
- engines: { node: '>=4' }
+ resolution: {integrity: sha512-AWwVMNxwhN8+NIPQzAQZCm7RkLC4RbM3B1OobMuyp3i+w73X57KCKaVIxaRZb+DYCojq7rspo+fmuQfAboyhFg==}
+ engines: {node: '>=4'}
hasBin: true
esprima@4.0.1:
- resolution:
- {
- integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==,
- }
- engines: { node: '>=4' }
+ resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==}
+ engines: {node: '>=4'}
hasBin: true
esquery@1.6.0:
- resolution:
- {
- integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==,
- }
- engines: { node: '>=0.10' }
+ resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==}
+ engines: {node: '>=0.10'}
esrecurse@4.3.0:
- resolution:
- {
- integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==,
- }
- engines: { node: '>=4.0' }
+ resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==}
+ engines: {node: '>=4.0'}
estraverse@4.3.0:
- resolution:
- {
- integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==,
- }
- engines: { node: '>=4.0' }
+ resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==}
+ engines: {node: '>=4.0'}
estraverse@5.3.0:
- resolution:
- {
- integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==,
- }
- engines: { node: '>=4.0' }
+ resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
+ engines: {node: '>=4.0'}
esutils@2.0.3:
- resolution:
- {
- integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==,
- }
- engines: { node: '>=0.10.0' }
+ resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
+ engines: {node: '>=0.10.0'}
etag@1.8.1:
- resolution:
- {
- integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==,
- }
- engines: { node: '>= 0.6' }
+ resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==}
+ engines: {node: '>= 0.6'}
eventemitter3@3.1.2:
- resolution:
- {
- integrity: sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==,
- }
+ resolution: {integrity: sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==}
eventemitter3@4.0.7:
- resolution:
- {
- integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==,
- }
+ resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==}
events@3.3.0:
- resolution:
- {
- integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==,
- }
- engines: { node: '>=0.8.x' }
+ resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==}
+ engines: {node: '>=0.8.x'}
execa@5.0.0:
- resolution:
- {
- integrity: sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ==,
- }
- engines: { node: '>=10' }
+ resolution: {integrity: sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ==}
+ engines: {node: '>=10'}
execa@5.1.1:
- resolution:
- {
- integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==,
- }
- engines: { node: '>=10' }
+ resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==}
+ engines: {node: '>=10'}
exit-x@0.2.2:
- resolution:
- {
- integrity: sha512-+I6B/IkJc1o/2tiURyz/ivu/O0nKNEArIUB5O7zBrlDVJr22SCLH3xTeEry428LvFhRzIA1g8izguxJ/gbNcVQ==,
- }
- engines: { node: '>= 0.8.0' }
+ resolution: {integrity: sha512-+I6B/IkJc1o/2tiURyz/ivu/O0nKNEArIUB5O7zBrlDVJr22SCLH3xTeEry428LvFhRzIA1g8izguxJ/gbNcVQ==}
+ engines: {node: '>= 0.8.0'}
exit@0.1.2:
- resolution:
- {
- integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==,
- }
- engines: { node: '>= 0.8.0' }
+ resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==}
+ engines: {node: '>= 0.8.0'}
expect@29.7.0:
- resolution:
- {
- integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==,
- }
- engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 }
+ resolution: {integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
expect@30.2.0:
- resolution:
- {
- integrity: sha512-u/feCi0GPsI+988gU2FLcsHyAHTU0MX1Wg68NhAnN7z/+C5wqG+CY8J53N9ioe8RXgaoz0nBR/TYMf3AycUuPw==,
- }
- engines: { node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0 }
+ resolution: {integrity: sha512-u/feCi0GPsI+988gU2FLcsHyAHTU0MX1Wg68NhAnN7z/+C5wqG+CY8J53N9ioe8RXgaoz0nBR/TYMf3AycUuPw==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
exponential-backoff@3.1.3:
- resolution:
- {
- integrity: sha512-ZgEeZXj30q+I0EN+CbSSpIyPaJ5HVQD18Z1m+u1FXbAeT94mr1zw50q4q6jiiC447Nl/YTcIYSAftiGqetwXCA==,
- }
+ resolution: {integrity: sha512-ZgEeZXj30q+I0EN+CbSSpIyPaJ5HVQD18Z1m+u1FXbAeT94mr1zw50q4q6jiiC447Nl/YTcIYSAftiGqetwXCA==}
express@5.2.1:
- resolution:
- {
- integrity: sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==,
- }
- engines: { node: '>= 18' }
+ resolution: {integrity: sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==}
+ engines: {node: '>= 18'}
extend@3.0.2:
- resolution:
- {
- integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==,
- }
+ resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==}
extsprintf@1.3.0:
- resolution:
- {
- integrity: sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==,
- }
- engines: { '0': node >=0.6.0 }
+ resolution: {integrity: sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==}
+ engines: {'0': node >=0.6.0}
fast-deep-equal@3.1.3:
- resolution:
- {
- integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==,
- }
+ resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
fast-glob@3.3.3:
- resolution:
- {
- integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==,
- }
- engines: { node: '>=8.6.0' }
+ resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==}
+ engines: {node: '>=8.6.0'}
fast-json-stable-stringify@2.1.0:
- resolution:
- {
- integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==,
- }
+ resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
fast-levenshtein@2.0.6:
- resolution:
- {
- integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==,
- }
+ resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
fast-uri@3.1.0:
- resolution:
- {
- integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==,
- }
+ resolution: {integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==}
fast-xml-parser@5.2.5:
- resolution:
- {
- integrity: sha512-pfX9uG9Ki0yekDHx2SiuRIyFdyAr1kMIMitPvb0YBo8SUfKvia7w7FIyd/l6av85pFYRhZscS75MwMnbvY+hcQ==,
- }
+ resolution: {integrity: sha512-pfX9uG9Ki0yekDHx2SiuRIyFdyAr1kMIMitPvb0YBo8SUfKvia7w7FIyd/l6av85pFYRhZscS75MwMnbvY+hcQ==}
hasBin: true
fastq@1.20.1:
- resolution:
- {
- integrity: sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==,
- }
+ resolution: {integrity: sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==}
fb-watchman@2.0.2:
- resolution:
- {
- integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==,
- }
+ resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==}
fdir@6.5.0:
- resolution:
- {
- integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==,
- }
- engines: { node: '>=12.0.0' }
+ resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==}
+ engines: {node: '>=12.0.0'}
peerDependencies:
picomatch: ^3 || ^4
peerDependenciesMeta:
@@ -7385,105 +5173,60 @@ packages:
optional: true
figures@3.2.0:
- resolution:
- {
- integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==,
- }
- engines: { node: '>=8' }
+ resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==}
+ engines: {node: '>=8'}
file-entry-cache@8.0.0:
- resolution:
- {
- integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==,
- }
- engines: { node: '>=16.0.0' }
+ resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==}
+ engines: {node: '>=16.0.0'}
file-uri-to-path@1.0.0:
- resolution:
- {
- integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==,
- }
+ resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==}
filelist@1.0.4:
- resolution:
- {
- integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==,
- }
+ resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==}
fill-range@7.1.1:
- resolution:
- {
- integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==,
- }
- engines: { node: '>=8' }
+ resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
+ engines: {node: '>=8'}
finalhandler@1.3.2:
- resolution:
- {
- integrity: sha512-aA4RyPcd3badbdABGDuTXCMTtOneUCAYH/gxoYRTZlIJdF0YPWuGqiAsIrhNnnqdXGswYk6dGujem4w80UJFhg==,
- }
- engines: { node: '>= 0.8' }
+ resolution: {integrity: sha512-aA4RyPcd3badbdABGDuTXCMTtOneUCAYH/gxoYRTZlIJdF0YPWuGqiAsIrhNnnqdXGswYk6dGujem4w80UJFhg==}
+ engines: {node: '>= 0.8'}
finalhandler@2.1.1:
- resolution:
- {
- integrity: sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==,
- }
- engines: { node: '>= 18.0.0' }
+ resolution: {integrity: sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==}
+ engines: {node: '>= 18.0.0'}
find-and-require-package-json@0.8.6:
- resolution:
- {
- integrity: sha512-N+funttvcGC9h7JxCs089fAyNhEpKzFnP0nUYOS+V2RWvI40rtVhANPozc72pJl9lMzqoPFTimlfqZg6zZGPRQ==,
- }
+ resolution: {integrity: sha512-N+funttvcGC9h7JxCs089fAyNhEpKzFnP0nUYOS+V2RWvI40rtVhANPozc72pJl9lMzqoPFTimlfqZg6zZGPRQ==}
find-up@2.1.0:
- resolution:
- {
- integrity: sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==,
- }
- engines: { node: '>=4' }
+ resolution: {integrity: sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==}
+ engines: {node: '>=4'}
find-up@4.1.0:
- resolution:
- {
- integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==,
- }
- engines: { node: '>=8' }
+ resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==}
+ engines: {node: '>=8'}
find-up@5.0.0:
- resolution:
- {
- integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==,
- }
- engines: { node: '>=10' }
+ resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
+ engines: {node: '>=10'}
flat-cache@4.0.1:
- resolution:
- {
- integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==,
- }
- engines: { node: '>=16' }
+ resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==}
+ engines: {node: '>=16'}
flat@5.0.2:
- resolution:
- {
- integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==,
- }
+ resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==}
hasBin: true
flatted@3.3.3:
- resolution:
- {
- integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==,
- }
+ resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==}
follow-redirects@1.15.11:
- resolution:
- {
- integrity: sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==,
- }
- engines: { node: '>=4.0' }
+ resolution: {integrity: sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==}
+ engines: {node: '>=4.0'}
peerDependencies:
debug: '*'
peerDependenciesMeta:
@@ -7491,1139 +5234,647 @@ packages:
optional: true
foreground-child@3.3.1:
- resolution:
- {
- integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==,
- }
- engines: { node: '>=14' }
+ resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==}
+ engines: {node: '>=14'}
forever-agent@0.6.1:
- resolution:
- {
- integrity: sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==,
- }
+ resolution: {integrity: sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==}
form-data@2.3.3:
- resolution:
- {
- integrity: sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==,
- }
- engines: { node: '>= 0.12' }
+ resolution: {integrity: sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==}
+ engines: {node: '>= 0.12'}
form-data@2.5.5:
- resolution:
- {
- integrity: sha512-jqdObeR2rxZZbPSGL+3VckHMYtu+f9//KXBsVny6JSX/pa38Fy+bGjuG8eW/H6USNQWhLi8Num++cU2yOCNz4A==,
- }
- engines: { node: '>= 0.12' }
+ resolution: {integrity: sha512-jqdObeR2rxZZbPSGL+3VckHMYtu+f9//KXBsVny6JSX/pa38Fy+bGjuG8eW/H6USNQWhLi8Num++cU2yOCNz4A==}
+ engines: {node: '>= 0.12'}
form-data@4.0.5:
- resolution:
- {
- integrity: sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==,
- }
- engines: { node: '>= 6' }
+ resolution: {integrity: sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==}
+ engines: {node: '>= 6'}
forwarded@0.2.0:
- resolution:
- {
- integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==,
- }
- engines: { node: '>= 0.6' }
+ resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==}
+ engines: {node: '>= 0.6'}
fresh@2.0.0:
- resolution:
- {
- integrity: sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==,
- }
- engines: { node: '>= 0.8' }
+ resolution: {integrity: sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==}
+ engines: {node: '>= 0.8'}
front-matter@4.0.2:
- resolution:
- {
- integrity: sha512-I8ZuJ/qG92NWX8i5x1Y8qyj3vizhXS31OxjKDu3LKP+7/qBgfIKValiZIEwoVoJKUHlhWtYrktkxV1XsX+pPlg==,
- }
+ resolution: {integrity: sha512-I8ZuJ/qG92NWX8i5x1Y8qyj3vizhXS31OxjKDu3LKP+7/qBgfIKValiZIEwoVoJKUHlhWtYrktkxV1XsX+pPlg==}
fs-capacitor@6.2.0:
- resolution:
- {
- integrity: sha512-nKcE1UduoSKX27NSZlg879LdQc94OtbOsEmKMN2MBNudXREvijRKx2GEBsTMTfws+BrbkJoEuynbGSVRSpauvw==,
- }
- engines: { node: '>=10' }
+ resolution: {integrity: sha512-nKcE1UduoSKX27NSZlg879LdQc94OtbOsEmKMN2MBNudXREvijRKx2GEBsTMTfws+BrbkJoEuynbGSVRSpauvw==}
+ engines: {node: '>=10'}
fs-capacitor@8.0.0:
- resolution:
- {
- integrity: sha512-+Lk6iSKajdGw+7XYxUkwIzreJ2G1JFlYOdnKJv5PzwFLVsoJYBpCuS7WPIUSNT1IbQaEWT1nhYU63Ud03DyzLA==,
- }
- engines: { node: ^14.17.0 || >=16.0.0 }
+ resolution: {integrity: sha512-+Lk6iSKajdGw+7XYxUkwIzreJ2G1JFlYOdnKJv5PzwFLVsoJYBpCuS7WPIUSNT1IbQaEWT1nhYU63Ud03DyzLA==}
+ engines: {node: ^14.17.0 || >=16.0.0}
fs-constants@1.0.0:
- resolution:
- {
- integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==,
- }
+ resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==}
fs-extra@11.3.3:
- resolution:
- {
- integrity: sha512-VWSRii4t0AFm6ixFFmLLx1t7wS1gh+ckoa84aOeapGum0h+EZd1EhEumSB+ZdDLnEPuucsVB9oB7cxJHap6Afg==,
- }
- engines: { node: '>=14.14' }
+ resolution: {integrity: sha512-VWSRii4t0AFm6ixFFmLLx1t7wS1gh+ckoa84aOeapGum0h+EZd1EhEumSB+ZdDLnEPuucsVB9oB7cxJHap6Afg==}
+ engines: {node: '>=14.14'}
fs-minipass@2.1.0:
- resolution:
- {
- integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==,
- }
- engines: { node: '>= 8' }
+ resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==}
+ engines: {node: '>= 8'}
fs-minipass@3.0.3:
- resolution:
- {
- integrity: sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==,
- }
- engines: { node: ^14.17.0 || ^16.13.0 || >=18.0.0 }
+ resolution: {integrity: sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==}
+ engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
fs.realpath@1.0.0:
- resolution:
- {
- integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==,
- }
+ resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
fsevents@2.3.2:
- resolution:
- {
- integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==,
- }
- engines: { node: ^8.16.0 || ^10.6.0 || >=11.0.0 }
+ resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==}
+ engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
os: [darwin]
fsevents@2.3.3:
- resolution:
- {
- integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==,
- }
- engines: { node: ^8.16.0 || ^10.6.0 || >=11.0.0 }
+ resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
+ engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
os: [darwin]
ftp@0.3.10:
- resolution:
- {
- integrity: sha512-faFVML1aBx2UoDStmLwv2Wptt4vw5x03xxX172nhA5Y5HBshW5JweqQ2W4xL4dezQTG8inJsuYcpPHHU3X5OTQ==,
- }
- engines: { node: '>=0.8.0' }
+ resolution: {integrity: sha512-faFVML1aBx2UoDStmLwv2Wptt4vw5x03xxX172nhA5Y5HBshW5JweqQ2W4xL4dezQTG8inJsuYcpPHHU3X5OTQ==}
+ engines: {node: '>=0.8.0'}
function-bind@1.1.2:
- resolution:
- {
- integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==,
- }
+ resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
genomic@5.2.3:
- resolution:
- {
- integrity: sha512-h93BqFC0gZgnInrAhozkYFV1UT1Pf/ffU8kh6JgF8Cqm0ypY8Iol5AvINVsgGXcQtcA00xcBOlJ5xc4tOXXZBA==,
- }
+ resolution: {integrity: sha512-h93BqFC0gZgnInrAhozkYFV1UT1Pf/ffU8kh6JgF8Cqm0ypY8Iol5AvINVsgGXcQtcA00xcBOlJ5xc4tOXXZBA==}
gensync@1.0.0-beta.2:
- resolution:
- {
- integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==,
- }
- engines: { node: '>=6.9.0' }
+ resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==}
+ engines: {node: '>=6.9.0'}
get-caller-file@2.0.5:
- resolution:
- {
- integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==,
- }
- engines: { node: 6.* || 8.* || >= 10.* }
+ resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
+ engines: {node: 6.* || 8.* || >= 10.*}
get-intrinsic@1.3.0:
- resolution:
- {
- integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==,
- }
- engines: { node: '>= 0.4' }
+ resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==}
+ engines: {node: '>= 0.4'}
get-package-type@0.1.0:
- resolution:
- {
- integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==,
- }
- engines: { node: '>=8.0.0' }
+ resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==}
+ engines: {node: '>=8.0.0'}
get-pkg-repo@4.2.1:
- resolution:
- {
- integrity: sha512-2+QbHjFRfGB74v/pYWjd5OhU3TDIC2Gv/YKUTk/tCvAz0pkn/Mz6P3uByuBimLOcPvN2jYdScl3xGFSrx0jEcA==,
- }
- engines: { node: '>=6.9.0' }
+ resolution: {integrity: sha512-2+QbHjFRfGB74v/pYWjd5OhU3TDIC2Gv/YKUTk/tCvAz0pkn/Mz6P3uByuBimLOcPvN2jYdScl3xGFSrx0jEcA==}
+ engines: {node: '>=6.9.0'}
hasBin: true
get-port@5.1.1:
- resolution:
- {
- integrity: sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==,
- }
- engines: { node: '>=8' }
+ resolution: {integrity: sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==}
+ engines: {node: '>=8'}
get-proto@1.0.1:
- resolution:
- {
- integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==,
- }
- engines: { node: '>= 0.4' }
+ resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==}
+ engines: {node: '>= 0.4'}
get-stream@6.0.0:
- resolution:
- {
- integrity: sha512-A1B3Bh1UmL0bidM/YX2NsCOTnGJePL9rO/M+Mw3m9f2gUpfokS0hi5Eah0WSUEWZdZhIZtMjkIYS7mDfOqNHbg==,
- }
- engines: { node: '>=10' }
+ resolution: {integrity: sha512-A1B3Bh1UmL0bidM/YX2NsCOTnGJePL9rO/M+Mw3m9f2gUpfokS0hi5Eah0WSUEWZdZhIZtMjkIYS7mDfOqNHbg==}
+ engines: {node: '>=10'}
get-stream@6.0.1:
- resolution:
- {
- integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==,
- }
- engines: { node: '>=10' }
+ resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==}
+ engines: {node: '>=10'}
get-tsconfig@4.13.0:
- resolution:
- {
- integrity: sha512-1VKTZJCwBrvbd+Wn3AOgQP/2Av+TfTCOlE4AcRJE72W1ksZXbAx8PPBR9RzgTeSPzlPMHrbANMH3LbltH73wxQ==,
- }
+ resolution: {integrity: sha512-1VKTZJCwBrvbd+Wn3AOgQP/2Av+TfTCOlE4AcRJE72W1ksZXbAx8PPBR9RzgTeSPzlPMHrbANMH3LbltH73wxQ==}
get-uri@2.0.4:
- resolution:
- {
- integrity: sha512-v7LT/s8kVjs+Tx0ykk1I+H/rbpzkHvuIq87LmeXptcf5sNWm9uQiwjNAt94SJPA1zOlCntmnOlJvVWKmzsxG8Q==,
- }
+ resolution: {integrity: sha512-v7LT/s8kVjs+Tx0ykk1I+H/rbpzkHvuIq87LmeXptcf5sNWm9uQiwjNAt94SJPA1zOlCntmnOlJvVWKmzsxG8Q==}
getpass@0.1.7:
- resolution:
- {
- integrity: sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==,
- }
+ resolution: {integrity: sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==}
git-raw-commits@3.0.0:
- resolution:
- {
- integrity: sha512-b5OHmZ3vAgGrDn/X0kS+9qCfNKWe4K/jFnhwzVWWg0/k5eLa3060tZShrRg8Dja5kPc+YjS0Gc6y7cRr44Lpjw==,
- }
- engines: { node: '>=14' }
+ resolution: {integrity: sha512-b5OHmZ3vAgGrDn/X0kS+9qCfNKWe4K/jFnhwzVWWg0/k5eLa3060tZShrRg8Dja5kPc+YjS0Gc6y7cRr44Lpjw==}
+ engines: {node: '>=14'}
hasBin: true
git-remote-origin-url@2.0.0:
- resolution:
- {
- integrity: sha512-eU+GGrZgccNJcsDH5LkXR3PB9M958hxc7sbA8DFJjrv9j4L2P/eZfKhM+QD6wyzpiv+b1BpK0XrYCxkovtjSLw==,
- }
- engines: { node: '>=4' }
+ resolution: {integrity: sha512-eU+GGrZgccNJcsDH5LkXR3PB9M958hxc7sbA8DFJjrv9j4L2P/eZfKhM+QD6wyzpiv+b1BpK0XrYCxkovtjSLw==}
+ engines: {node: '>=4'}
git-semver-tags@5.0.1:
- resolution:
- {
- integrity: sha512-hIvOeZwRbQ+7YEUmCkHqo8FOLQZCEn18yevLHADlFPZY02KJGsu5FZt9YW/lybfK2uhWFI7Qg/07LekJiTv7iA==,
- }
- engines: { node: '>=14' }
+ resolution: {integrity: sha512-hIvOeZwRbQ+7YEUmCkHqo8FOLQZCEn18yevLHADlFPZY02KJGsu5FZt9YW/lybfK2uhWFI7Qg/07LekJiTv7iA==}
+ engines: {node: '>=14'}
hasBin: true
git-up@7.0.0:
- resolution:
- {
- integrity: sha512-ONdIrbBCFusq1Oy0sC71F5azx8bVkvtZtMJAsv+a6lz5YAmbNnLD6HAB4gptHZVLPR8S2/kVN6Gab7lryq5+lQ==,
- }
+ resolution: {integrity: sha512-ONdIrbBCFusq1Oy0sC71F5azx8bVkvtZtMJAsv+a6lz5YAmbNnLD6HAB4gptHZVLPR8S2/kVN6Gab7lryq5+lQ==}
git-url-parse@14.0.0:
- resolution:
- {
- integrity: sha512-NnLweV+2A4nCvn4U/m2AoYu0pPKlsmhK9cknG7IMwsjFY1S2jxM+mAhsDxyxfCIGfGaD+dozsyX4b6vkYc83yQ==,
- }
+ resolution: {integrity: sha512-NnLweV+2A4nCvn4U/m2AoYu0pPKlsmhK9cknG7IMwsjFY1S2jxM+mAhsDxyxfCIGfGaD+dozsyX4b6vkYc83yQ==}
gitconfiglocal@1.0.0:
- resolution:
- {
- integrity: sha512-spLUXeTAVHxDtKsJc8FkFVgFtMdEN9qPGpL23VfSHx4fP4+Ds097IXLvymbnDH8FnmxX5Nr9bPw3A+AQ6mWEaQ==,
- }
+ resolution: {integrity: sha512-spLUXeTAVHxDtKsJc8FkFVgFtMdEN9qPGpL23VfSHx4fP4+Ds097IXLvymbnDH8FnmxX5Nr9bPw3A+AQ6mWEaQ==}
glob-parent@5.1.2:
- resolution:
- {
- integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==,
- }
- engines: { node: '>= 6' }
+ resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
+ engines: {node: '>= 6'}
glob-parent@6.0.2:
- resolution:
- {
- integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==,
- }
- engines: { node: '>=10.13.0' }
+ resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
+ engines: {node: '>=10.13.0'}
glob@10.5.0:
- resolution:
- {
- integrity: sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==,
- }
+ resolution: {integrity: sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==}
hasBin: true
glob@11.1.0:
- resolution:
- {
- integrity: sha512-vuNwKSaKiqm7g0THUBu2x7ckSs3XJLXE+2ssL7/MfTGPLLcrJQ/4Uq1CjPTtO5cCIiRxqvN6Twy1qOwhL0Xjcw==,
- }
- engines: { node: 20 || >=22 }
+ resolution: {integrity: sha512-vuNwKSaKiqm7g0THUBu2x7ckSs3XJLXE+2ssL7/MfTGPLLcrJQ/4Uq1CjPTtO5cCIiRxqvN6Twy1qOwhL0Xjcw==}
+ engines: {node: 20 || >=22}
hasBin: true
glob@13.0.0:
- resolution:
- {
- integrity: sha512-tvZgpqk6fz4BaNZ66ZsRaZnbHvP/jG3uKJvAZOwEVUL4RTA5nJeeLYfyN9/VA8NX/V3IBG+hkeuGpKjvELkVhA==,
- }
- engines: { node: 20 || >=22 }
+ resolution: {integrity: sha512-tvZgpqk6fz4BaNZ66ZsRaZnbHvP/jG3uKJvAZOwEVUL4RTA5nJeeLYfyN9/VA8NX/V3IBG+hkeuGpKjvELkVhA==}
+ engines: {node: 20 || >=22}
glob@7.2.3:
- resolution:
- {
- integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==,
- }
+ resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
deprecated: Glob versions prior to v9 are no longer supported
glob@9.3.5:
- resolution:
- {
- integrity: sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==,
- }
- engines: { node: '>=16 || 14 >=14.17' }
+ resolution: {integrity: sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==}
+ engines: {node: '>=16 || 14 >=14.17'}
globals@14.0.0:
- resolution:
- {
- integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==,
- }
- engines: { node: '>=18' }
+ resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==}
+ engines: {node: '>=18'}
gopd@1.2.0:
- resolution:
- {
- integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==,
- }
- engines: { node: '>= 0.4' }
+ resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==}
+ engines: {node: '>= 0.4'}
graceful-fs@4.2.11:
- resolution:
- {
- integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==,
- }
+ resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
graphile-build-pg@4.14.1:
- resolution:
- {
- integrity: sha512-7DIVbcfMU5lXNkGnAeobqm29AvjFYw4/xOlKNQk3NE/mfFDcyPuXYboypmtxzglg1hGXkyONLYnas9vzL+SunQ==,
- }
- engines: { node: '>=8.6' }
+ resolution: {integrity: sha512-7DIVbcfMU5lXNkGnAeobqm29AvjFYw4/xOlKNQk3NE/mfFDcyPuXYboypmtxzglg1hGXkyONLYnas9vzL+SunQ==}
+ engines: {node: '>=8.6'}
peerDependencies:
pg: '>=6.1.0 <9'
graphile-build@4.14.1:
- resolution:
- {
- integrity: sha512-l/ylyMK0vl5LCOScpTsTedNZUqwBgafXS7RPDW1YiQofeioVtTDMdV9k3zRkXdMKtKqJsvOBvjXn64WGLaLInQ==,
- }
- engines: { node: '>=8.6' }
+ resolution: {integrity: sha512-l/ylyMK0vl5LCOScpTsTedNZUqwBgafXS7RPDW1YiQofeioVtTDMdV9k3zRkXdMKtKqJsvOBvjXn64WGLaLInQ==}
+ engines: {node: '>=8.6'}
peerDependencies:
graphql: '>=0.9 <0.14 || ^14.0.2 || ^15.4.0'
graphile-utils@4.14.1:
- resolution:
- {
- integrity: sha512-FgviZVKO3NS8va2inqUVQQFSnFLEG7FiH64BqSVRHSF8jwSXKcpx5NiRibErNvvIdnuzgVAXQ3W4jcXvMSx0Tg==,
- }
- engines: { node: '>=8.6' }
+ resolution: {integrity: sha512-FgviZVKO3NS8va2inqUVQQFSnFLEG7FiH64BqSVRHSF8jwSXKcpx5NiRibErNvvIdnuzgVAXQ3W4jcXvMSx0Tg==}
+ engines: {node: '>=8.6'}
peerDependencies:
graphile-build: ^4.5.0
graphile-build-pg: ^4.5.0
graphql-parse-resolve-info@4.14.1:
- resolution:
- {
- integrity: sha512-WKHukfEuZamP1ZONR84b8iT+4sJgEhtXMDArm1jpXEsU2vTb5EgkCZ4Obfl+v09oNTKXm0CJjPfBUZ5jcJ2Ykg==,
- }
- engines: { node: '>=8.6' }
+ resolution: {integrity: sha512-WKHukfEuZamP1ZONR84b8iT+4sJgEhtXMDArm1jpXEsU2vTb5EgkCZ4Obfl+v09oNTKXm0CJjPfBUZ5jcJ2Ykg==}
+ engines: {node: '>=8.6'}
peerDependencies:
graphql: '>=0.9 <0.14 || ^14.0.2 || ^15.4.0 || ^16.3.0'
graphql-request@7.4.0:
- resolution:
- {
- integrity: sha512-xfr+zFb/QYbs4l4ty0dltqiXIp07U6sl+tOKAb0t50/EnQek6CVVBLjETXi+FghElytvgaAWtIOt3EV7zLzIAQ==,
- }
+ resolution: {integrity: sha512-xfr+zFb/QYbs4l4ty0dltqiXIp07U6sl+tOKAb0t50/EnQek6CVVBLjETXi+FghElytvgaAWtIOt3EV7zLzIAQ==}
peerDependencies:
graphql: 14 - 16
graphql-tag@2.12.6:
- resolution:
- {
- integrity: sha512-FdSNcu2QQcWnM2VNvSCCDCVS5PpPqpzgFT8+GXzqJuoDd0CBncxCY278u4mhRO7tMgo2JjgJA5aZ+nWSQ/Z+xg==,
- }
- engines: { node: '>=10' }
+ resolution: {integrity: sha512-FdSNcu2QQcWnM2VNvSCCDCVS5PpPqpzgFT8+GXzqJuoDd0CBncxCY278u4mhRO7tMgo2JjgJA5aZ+nWSQ/Z+xg==}
+ engines: {node: '>=10'}
peerDependencies:
graphql: ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0
graphql-upload@13.0.0:
- resolution:
- {
- integrity: sha512-YKhx8m/uOtKu4Y1UzBFJhbBGJTlk7k4CydlUUiNrtxnwZv0WigbRHP+DVhRNKt7u7DXOtcKZeYJlGtnMXvreXA==,
- }
- engines: { node: ^12.22.0 || ^14.17.0 || >= 16.0.0 }
+ resolution: {integrity: sha512-YKhx8m/uOtKu4Y1UzBFJhbBGJTlk7k4CydlUUiNrtxnwZv0WigbRHP+DVhRNKt7u7DXOtcKZeYJlGtnMXvreXA==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >= 16.0.0}
peerDependencies:
graphql: 0.13.1 - 16
graphql-ws@5.16.2:
- resolution:
- {
- integrity: sha512-E1uccsZxt/96jH/OwmLPuXMACILs76pKF2i3W861LpKBCYtGIyPQGtWLuBLkND4ox1KHns70e83PS4te50nvPQ==,
- }
- engines: { node: '>=10' }
+ resolution: {integrity: sha512-E1uccsZxt/96jH/OwmLPuXMACILs76pKF2i3W861LpKBCYtGIyPQGtWLuBLkND4ox1KHns70e83PS4te50nvPQ==}
+ engines: {node: '>=10'}
peerDependencies:
graphql: '>=0.11 <=16'
graphql@15.10.1:
- resolution:
- {
- integrity: sha512-BL/Xd/T9baO6NFzoMpiMD7YUZ62R6viR5tp/MULVEnbYJXZA//kRNW7J0j1w/wXArgL0sCxhDfK5dczSKn3+cg==,
- }
- engines: { node: '>= 10.x' }
+ resolution: {integrity: sha512-BL/Xd/T9baO6NFzoMpiMD7YUZ62R6viR5tp/MULVEnbYJXZA//kRNW7J0j1w/wXArgL0sCxhDfK5dczSKn3+cg==}
+ engines: {node: '>= 10.x'}
handlebars@4.7.8:
- resolution:
- {
- integrity: sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==,
- }
- engines: { node: '>=0.4.7' }
+ resolution: {integrity: sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==}
+ engines: {node: '>=0.4.7'}
hasBin: true
har-schema@2.0.0:
- resolution:
- {
- integrity: sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==,
- }
- engines: { node: '>=4' }
+ resolution: {integrity: sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==}
+ engines: {node: '>=4'}
har-validator@5.1.5:
- resolution:
- {
- integrity: sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==,
- }
- engines: { node: '>=6' }
+ resolution: {integrity: sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==}
+ engines: {node: '>=6'}
deprecated: this library is no longer supported
hard-rejection@2.1.0:
- resolution:
- {
- integrity: sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==,
- }
- engines: { node: '>=6' }
+ resolution: {integrity: sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==}
+ engines: {node: '>=6'}
has-flag@3.0.0:
- resolution:
- {
- integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==,
- }
- engines: { node: '>=4' }
+ resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==}
+ engines: {node: '>=4'}
has-flag@4.0.0:
- resolution:
- {
- integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==,
- }
- engines: { node: '>=8' }
+ resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
+ engines: {node: '>=8'}
has-property-descriptors@1.0.2:
- resolution:
- {
- integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==,
- }
+ resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==}
has-symbols@1.1.0:
- resolution:
- {
- integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==,
- }
- engines: { node: '>= 0.4' }
+ resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==}
+ engines: {node: '>= 0.4'}
has-tostringtag@1.0.2:
- resolution:
- {
- integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==,
- }
- engines: { node: '>= 0.4' }
+ resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==}
+ engines: {node: '>= 0.4'}
has-unicode@2.0.1:
- resolution:
- {
- integrity: sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==,
- }
+ resolution: {integrity: sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==}
hasown@2.0.2:
- resolution:
- {
- integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==,
- }
- engines: { node: '>= 0.4' }
+ resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
+ engines: {node: '>= 0.4'}
he@1.2.0:
- resolution:
- {
- integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==,
- }
+ resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==}
hasBin: true
hoist-non-react-statics@3.3.2:
- resolution:
- {
- integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==,
- }
+ resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==}
hosted-git-info@2.8.9:
- resolution:
- {
- integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==,
- }
+ resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==}
hosted-git-info@4.1.0:
- resolution:
- {
- integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==,
- }
- engines: { node: '>=10' }
+ resolution: {integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==}
+ engines: {node: '>=10'}
hosted-git-info@7.0.2:
- resolution:
- {
- integrity: sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==,
- }
- engines: { node: ^16.14.0 || >=18.0.0 }
+ resolution: {integrity: sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==}
+ engines: {node: ^16.14.0 || >=18.0.0}
html-escaper@2.0.2:
- resolution:
- {
- integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==,
- }
+ resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==}
html-minifier@3.5.21:
- resolution:
- {
- integrity: sha512-LKUKwuJDhxNa3uf/LPR/KVjm/l3rBqtYeCOAekvG8F1vItxMUpueGd94i/asDDr8/1u7InxzFA5EeGjhhG5mMA==,
- }
- engines: { node: '>=4' }
+ resolution: {integrity: sha512-LKUKwuJDhxNa3uf/LPR/KVjm/l3rBqtYeCOAekvG8F1vItxMUpueGd94i/asDDr8/1u7InxzFA5EeGjhhG5mMA==}
+ engines: {node: '>=4'}
hasBin: true
htmlparser2@10.0.0:
- resolution:
- {
- integrity: sha512-TwAZM+zE5Tq3lrEHvOlvwgj1XLWQCtaaibSN11Q+gGBAS7Y1uZSWwXXRe4iF6OXnaq1riyQAPFOBtYc77Mxq0g==,
- }
+ resolution: {integrity: sha512-TwAZM+zE5Tq3lrEHvOlvwgj1XLWQCtaaibSN11Q+gGBAS7Y1uZSWwXXRe4iF6OXnaq1riyQAPFOBtYc77Mxq0g==}
htmlparser2@3.10.1:
- resolution:
- {
- integrity: sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==,
- }
+ resolution: {integrity: sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==}
htmlparser2@4.1.0:
- resolution:
- {
- integrity: sha512-4zDq1a1zhE4gQso/c5LP1OtrhYTncXNSpvJYtWJBtXAETPlMfi3IFNjGuQbYLuVY4ZR0QMqRVvo4Pdy9KLyP8Q==,
- }
+ resolution: {integrity: sha512-4zDq1a1zhE4gQso/c5LP1OtrhYTncXNSpvJYtWJBtXAETPlMfi3IFNjGuQbYLuVY4ZR0QMqRVvo4Pdy9KLyP8Q==}
http-cache-semantics@4.2.0:
- resolution:
- {
- integrity: sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==,
- }
+ resolution: {integrity: sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==}
http-errors@1.7.2:
- resolution:
- {
- integrity: sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==,
- }
- engines: { node: '>= 0.6' }
+ resolution: {integrity: sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==}
+ engines: {node: '>= 0.6'}
http-errors@1.8.1:
- resolution:
- {
- integrity: sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==,
- }
- engines: { node: '>= 0.6' }
+ resolution: {integrity: sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==}
+ engines: {node: '>= 0.6'}
http-errors@2.0.1:
- resolution:
- {
- integrity: sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==,
- }
- engines: { node: '>= 0.8' }
+ resolution: {integrity: sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==}
+ engines: {node: '>= 0.8'}
http-proxy-agent@2.1.0:
- resolution:
- {
- integrity: sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg==,
- }
- engines: { node: '>= 4.5.0' }
+ resolution: {integrity: sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg==}
+ engines: {node: '>= 4.5.0'}
http-proxy-agent@7.0.2:
- resolution:
- {
- integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==,
- }
- engines: { node: '>= 14' }
+ resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==}
+ engines: {node: '>= 14'}
http-signature@1.2.0:
- resolution:
- {
- integrity: sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==,
- }
- engines: { node: '>=0.8', npm: '>=1.3.7' }
+ resolution: {integrity: sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==}
+ engines: {node: '>=0.8', npm: '>=1.3.7'}
https-proxy-agent@3.0.1:
- resolution:
- {
- integrity: sha512-+ML2Rbh6DAuee7d07tYGEKOEi2voWPUGan+ExdPbPW6Z3svq+JCqr0v8WmKPOkz1vOVykPCBSuobe7G8GJUtVg==,
- }
- engines: { node: '>= 4.5.0' }
+ resolution: {integrity: sha512-+ML2Rbh6DAuee7d07tYGEKOEi2voWPUGan+ExdPbPW6Z3svq+JCqr0v8WmKPOkz1vOVykPCBSuobe7G8GJUtVg==}
+ engines: {node: '>= 4.5.0'}
https-proxy-agent@7.0.6:
- resolution:
- {
- integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==,
- }
- engines: { node: '>= 14' }
+ resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==}
+ engines: {node: '>= 14'}
human-signals@2.1.0:
- resolution:
- {
- integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==,
- }
- engines: { node: '>=10.17.0' }
+ resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==}
+ engines: {node: '>=10.17.0'}
iconv-lite@0.4.24:
- resolution:
- {
- integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==,
- }
- engines: { node: '>=0.10.0' }
+ resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==}
+ engines: {node: '>=0.10.0'}
iconv-lite@0.6.3:
- resolution:
- {
- integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==,
- }
- engines: { node: '>=0.10.0' }
+ resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==}
+ engines: {node: '>=0.10.0'}
iconv-lite@0.7.1:
- resolution:
- {
- integrity: sha512-2Tth85cXwGFHfvRgZWszZSvdo+0Xsqmw8k8ZwxScfcBneNUraK+dxRxRm24nszx80Y0TVio8kKLt5sLE7ZCLlw==,
- }
- engines: { node: '>=0.10.0' }
+ resolution: {integrity: sha512-2Tth85cXwGFHfvRgZWszZSvdo+0Xsqmw8k8ZwxScfcBneNUraK+dxRxRm24nszx80Y0TVio8kKLt5sLE7ZCLlw==}
+ engines: {node: '>=0.10.0'}
ieee754@1.2.1:
- resolution:
- {
- integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==,
- }
+ resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
ignore-by-default@1.0.1:
- resolution:
- {
- integrity: sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==,
- }
+ resolution: {integrity: sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==}
ignore-walk@6.0.5:
- resolution:
- {
- integrity: sha512-VuuG0wCnjhnylG1ABXT3dAuIpTNDs/G8jlpmwXY03fXoXy/8ZK8/T+hMzt8L4WnrLCJgdybqgPagnF/f97cg3A==,
- }
- engines: { node: ^14.17.0 || ^16.13.0 || >=18.0.0 }
+ resolution: {integrity: sha512-VuuG0wCnjhnylG1ABXT3dAuIpTNDs/G8jlpmwXY03fXoXy/8ZK8/T+hMzt8L4WnrLCJgdybqgPagnF/f97cg3A==}
+ engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
ignore@5.3.2:
- resolution:
- {
- integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==,
- }
- engines: { node: '>= 4' }
+ resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==}
+ engines: {node: '>= 4'}
ignore@7.0.5:
- resolution:
- {
- integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==,
- }
- engines: { node: '>= 4' }
+ resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==}
+ engines: {node: '>= 4'}
import-fresh@3.3.1:
- resolution:
- {
- integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==,
- }
- engines: { node: '>=6' }
+ resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==}
+ engines: {node: '>=6'}
import-local@3.1.0:
- resolution:
- {
- integrity: sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==,
- }
- engines: { node: '>=8' }
+ resolution: {integrity: sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==}
+ engines: {node: '>=8'}
hasBin: true
import-local@3.2.0:
- resolution:
- {
- integrity: sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==,
- }
- engines: { node: '>=8' }
+ resolution: {integrity: sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==}
+ engines: {node: '>=8'}
hasBin: true
imurmurhash@0.1.4:
- resolution:
- {
- integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==,
- }
- engines: { node: '>=0.8.19' }
+ resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
+ engines: {node: '>=0.8.19'}
indent-string@4.0.0:
- resolution:
- {
- integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==,
- }
- engines: { node: '>=8' }
+ resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==}
+ engines: {node: '>=8'}
inflection@1.12.0:
- resolution:
- {
- integrity: sha512-lRy4DxuIFWXlJU7ed8UiTJOSTqStqYdEb4CEbtXfNbkdj3nH1L+reUWiE10VWcJS2yR7tge8Z74pJjtBjNwj0w==,
- }
- engines: { '0': node >= 0.4.0 }
+ resolution: {integrity: sha512-lRy4DxuIFWXlJU7ed8UiTJOSTqStqYdEb4CEbtXfNbkdj3nH1L+reUWiE10VWcJS2yR7tge8Z74pJjtBjNwj0w==}
+ engines: {'0': node >= 0.4.0}
inflection@1.3.8:
- resolution:
- {
- integrity: sha512-xRvG6XhAkbneGO5BXP0uKyGkzmZ2bBbrFkx4ZVNx2TmsECbiq/pJapbbx/NECh+E85IfZwW5+IeVNJfkQgavag==,
- }
- engines: { '0': node >= 0.4.0 }
+ resolution: {integrity: sha512-xRvG6XhAkbneGO5BXP0uKyGkzmZ2bBbrFkx4ZVNx2TmsECbiq/pJapbbx/NECh+E85IfZwW5+IeVNJfkQgavag==}
+ engines: {'0': node >= 0.4.0}
inflection@3.0.2:
- resolution:
- {
- integrity: sha512-+Bg3+kg+J6JUWn8J6bzFmOWkTQ6L/NHfDRSYU+EVvuKHDxUDHAXgqixHfVlzuBQaPOTac8hn43aPhMNk6rMe3g==,
- }
- engines: { node: '>=18.0.0' }
+ resolution: {integrity: sha512-+Bg3+kg+J6JUWn8J6bzFmOWkTQ6L/NHfDRSYU+EVvuKHDxUDHAXgqixHfVlzuBQaPOTac8hn43aPhMNk6rMe3g==}
+ engines: {node: '>=18.0.0'}
inflekt@0.2.0:
- resolution:
- {
- integrity: sha512-eznjYm6FOl6sX2fgDGe48WiCPO0db+BQhirptPBS1BhIAwqnbCgWHHCgmuzk1ldwQTKx8ot/v1ecJrFjVAe3xg==,
- }
+ resolution: {integrity: sha512-eznjYm6FOl6sX2fgDGe48WiCPO0db+BQhirptPBS1BhIAwqnbCgWHHCgmuzk1ldwQTKx8ot/v1ecJrFjVAe3xg==}
inflight@1.0.6:
- resolution:
- {
- integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==,
- }
+ resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
inherits@2.0.3:
- resolution:
- {
- integrity: sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==,
- }
+ resolution: {integrity: sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==}
inherits@2.0.4:
- resolution:
- {
- integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==,
- }
+ resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
ini@1.3.8:
- resolution:
- {
- integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==,
- }
+ resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==}
ini@4.1.3:
- resolution:
- {
- integrity: sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg==,
- }
- engines: { node: ^14.17.0 || ^16.13.0 || >=18.0.0 }
+ resolution: {integrity: sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg==}
+ engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
init-package-json@6.0.3:
- resolution:
- {
- integrity: sha512-Zfeb5ol+H+eqJWHTaGca9BovufyGeIfr4zaaBorPmJBMrJ+KBnN+kQx2ZtXdsotUTgldHmHQV44xvUWOUA7E2w==,
- }
- engines: { node: ^16.14.0 || >=18.0.0 }
+ resolution: {integrity: sha512-Zfeb5ol+H+eqJWHTaGca9BovufyGeIfr4zaaBorPmJBMrJ+KBnN+kQx2ZtXdsotUTgldHmHQV44xvUWOUA7E2w==}
+ engines: {node: ^16.14.0 || >=18.0.0}
inquirer@8.2.7:
- resolution:
- {
- integrity: sha512-UjOaSel/iddGZJ5xP/Eixh6dY1XghiBw4XK13rCCIJcJfyhhoul/7KhLLUGtebEj6GDYM6Vnx/mVsjx2L/mFIA==,
- }
- engines: { node: '>=12.0.0' }
+ resolution: {integrity: sha512-UjOaSel/iddGZJ5xP/Eixh6dY1XghiBw4XK13rCCIJcJfyhhoul/7KhLLUGtebEj6GDYM6Vnx/mVsjx2L/mFIA==}
+ engines: {node: '>=12.0.0'}
inquirerer@4.3.1:
- resolution:
- {
- integrity: sha512-CKbqcGXT1zdFaJrkTLuTxdEe0yplUSmm1JbmJDDm2v6LuRaS34BE85rmnX0v8HQrli98Y4iFP99f6V0ny3RkDg==,
- }
+ resolution: {integrity: sha512-CKbqcGXT1zdFaJrkTLuTxdEe0yplUSmm1JbmJDDm2v6LuRaS34BE85rmnX0v8HQrli98Y4iFP99f6V0ny3RkDg==}
ip-address@10.1.0:
- resolution:
- {
- integrity: sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q==,
- }
- engines: { node: '>= 12' }
+ resolution: {integrity: sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q==}
+ engines: {node: '>= 12'}
ip@1.1.5:
- resolution:
- {
- integrity: sha512-rBtCAQAJm8A110nbwn6YdveUnuZH3WrC36IwkRXxDnq53JvXA2NVQvB7IHyKomxK1MJ4VDNw3UtFDdXQ+AvLYA==,
- }
+ resolution: {integrity: sha512-rBtCAQAJm8A110nbwn6YdveUnuZH3WrC36IwkRXxDnq53JvXA2NVQvB7IHyKomxK1MJ4VDNw3UtFDdXQ+AvLYA==}
ip@1.1.9:
- resolution:
- {
- integrity: sha512-cyRxvOEpNHNtchU3Ln9KC/auJgup87llfQpQ+t5ghoC/UhL16SWzbueiCsdTnWmqAWl7LadfuwhlqmtOaqMHdQ==,
- }
+ resolution: {integrity: sha512-cyRxvOEpNHNtchU3Ln9KC/auJgup87llfQpQ+t5ghoC/UhL16SWzbueiCsdTnWmqAWl7LadfuwhlqmtOaqMHdQ==}
ipaddr.js@1.9.1:
- resolution:
- {
- integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==,
- }
- engines: { node: '>= 0.10' }
+ resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==}
+ engines: {node: '>= 0.10'}
is-arrayish@0.2.1:
- resolution:
- {
- integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==,
- }
+ resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==}
is-binary-path@2.1.0:
- resolution:
- {
- integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==,
- }
- engines: { node: '>=8' }
+ resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
+ engines: {node: '>=8'}
is-ci@3.0.1:
- resolution:
- {
- integrity: sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==,
- }
+ resolution: {integrity: sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==}
hasBin: true
is-core-module@2.16.1:
- resolution:
- {
- integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==,
- }
- engines: { node: '>= 0.4' }
+ resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==}
+ engines: {node: '>= 0.4'}
is-docker@2.2.1:
- resolution:
- {
- integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==,
- }
- engines: { node: '>=8' }
+ resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==}
+ engines: {node: '>=8'}
hasBin: true
is-extglob@2.1.1:
- resolution:
- {
- integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==,
- }
- engines: { node: '>=0.10.0' }
+ resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
+ engines: {node: '>=0.10.0'}
is-fullwidth-code-point@3.0.0:
- resolution:
- {
- integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==,
- }
- engines: { node: '>=8' }
+ resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
+ engines: {node: '>=8'}
is-generator-fn@2.1.0:
- resolution:
- {
- integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==,
- }
- engines: { node: '>=6' }
+ resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==}
+ engines: {node: '>=6'}
is-glob@4.0.3:
- resolution:
- {
- integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==,
- }
- engines: { node: '>=0.10.0' }
+ resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
+ engines: {node: '>=0.10.0'}
is-interactive@1.0.0:
- resolution:
- {
- integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==,
- }
- engines: { node: '>=8' }
+ resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==}
+ engines: {node: '>=8'}
is-lambda@1.0.1:
- resolution:
- {
- integrity: sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==,
- }
+ resolution: {integrity: sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==}
is-nan@1.3.2:
- resolution:
- {
- integrity: sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==,
- }
- engines: { node: '>= 0.4' }
+ resolution: {integrity: sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==}
+ engines: {node: '>= 0.4'}
is-number@7.0.0:
- resolution:
- {
- integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==,
- }
- engines: { node: '>=0.12.0' }
+ resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
+ engines: {node: '>=0.12.0'}
is-obj@2.0.0:
- resolution:
- {
- integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==,
- }
- engines: { node: '>=8' }
+ resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==}
+ engines: {node: '>=8'}
is-plain-obj@1.1.0:
- resolution:
- {
- integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==,
- }
- engines: { node: '>=0.10.0' }
+ resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==}
+ engines: {node: '>=0.10.0'}
is-plain-object@2.0.4:
- resolution:
- {
- integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==,
- }
- engines: { node: '>=0.10.0' }
+ resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==}
+ engines: {node: '>=0.10.0'}
is-promise@4.0.0:
- resolution:
- {
- integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==,
- }
+ resolution: {integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==}
is-ssh@1.4.1:
- resolution:
- {
- integrity: sha512-JNeu1wQsHjyHgn9NcWTaXq6zWSR6hqE0++zhfZlkFBbScNkyvxCdeV8sRkSBaeLKxmbpR21brail63ACNxJ0Tg==,
- }
+ resolution: {integrity: sha512-JNeu1wQsHjyHgn9NcWTaXq6zWSR6hqE0++zhfZlkFBbScNkyvxCdeV8sRkSBaeLKxmbpR21brail63ACNxJ0Tg==}
is-stream@1.1.0:
- resolution:
- {
- integrity: sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==,
- }
- engines: { node: '>=0.10.0' }
+ resolution: {integrity: sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==}
+ engines: {node: '>=0.10.0'}
is-stream@2.0.0:
- resolution:
- {
- integrity: sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==,
- }
- engines: { node: '>=8' }
+ resolution: {integrity: sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==}
+ engines: {node: '>=8'}
is-stream@2.0.1:
- resolution:
- {
- integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==,
- }
- engines: { node: '>=8' }
+ resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==}
+ engines: {node: '>=8'}
is-text-path@1.0.1:
- resolution:
- {
- integrity: sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w==,
- }
- engines: { node: '>=0.10.0' }
+ resolution: {integrity: sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w==}
+ engines: {node: '>=0.10.0'}
is-typedarray@1.0.0:
- resolution:
- {
- integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==,
- }
+ resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==}
is-unicode-supported@0.1.0:
- resolution:
- {
- integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==,
- }
- engines: { node: '>=10' }
+ resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==}
+ engines: {node: '>=10'}
is-wsl@2.2.0:
- resolution:
- {
- integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==,
- }
- engines: { node: '>=8' }
+ resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==}
+ engines: {node: '>=8'}
isarray@0.0.1:
- resolution:
- {
- integrity: sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==,
- }
+ resolution: {integrity: sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==}
isarray@1.0.0:
- resolution:
- {
- integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==,
- }
+ resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==}
isexe@2.0.0:
- resolution:
- {
- integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==,
- }
+ resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
isexe@3.1.1:
- resolution:
- {
- integrity: sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==,
- }
- engines: { node: '>=16' }
+ resolution: {integrity: sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==}
+ engines: {node: '>=16'}
isobject@3.0.1:
- resolution:
- {
- integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==,
- }
- engines: { node: '>=0.10.0' }
+ resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==}
+ engines: {node: '>=0.10.0'}
isstream@0.1.2:
- resolution:
- {
- integrity: sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==,
- }
+ resolution: {integrity: sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==}
istanbul-lib-coverage@3.2.2:
- resolution:
- {
- integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==,
- }
- engines: { node: '>=8' }
+ resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==}
+ engines: {node: '>=8'}
istanbul-lib-instrument@5.2.1:
- resolution:
- {
- integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==,
- }
- engines: { node: '>=8' }
+ resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==}
+ engines: {node: '>=8'}
istanbul-lib-instrument@6.0.3:
- resolution:
- {
- integrity: sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==,
- }
- engines: { node: '>=10' }
+ resolution: {integrity: sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==}
+ engines: {node: '>=10'}
istanbul-lib-report@3.0.1:
- resolution:
- {
- integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==,
- }
- engines: { node: '>=10' }
+ resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==}
+ engines: {node: '>=10'}
istanbul-lib-source-maps@4.0.1:
- resolution:
- {
- integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==,
- }
- engines: { node: '>=10' }
+ resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==}
+ engines: {node: '>=10'}
istanbul-lib-source-maps@5.0.6:
- resolution:
- {
- integrity: sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==,
- }
- engines: { node: '>=10' }
+ resolution: {integrity: sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==}
+ engines: {node: '>=10'}
istanbul-reports@3.2.0:
- resolution:
- {
- integrity: sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==,
- }
- engines: { node: '>=8' }
+ resolution: {integrity: sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==}
+ engines: {node: '>=8'}
iterall@1.3.0:
- resolution:
- {
- integrity: sha512-QZ9qOMdF+QLHxy1QIpUHUU1D5pS2CG2P69LF6L6CPjPYA/XMOmKV3PZpawHoAjHNyB0swdVTRxdYT4tbBbxqwg==,
- }
+ resolution: {integrity: sha512-QZ9qOMdF+QLHxy1QIpUHUU1D5pS2CG2P69LF6L6CPjPYA/XMOmKV3PZpawHoAjHNyB0swdVTRxdYT4tbBbxqwg==}
jackspeak@3.4.3:
- resolution:
- {
- integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==,
- }
+ resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==}
jackspeak@4.1.1:
- resolution:
- {
- integrity: sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ==,
- }
- engines: { node: 20 || >=22 }
+ resolution: {integrity: sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ==}
+ engines: {node: 20 || >=22}
jake@10.9.4:
- resolution:
- {
- integrity: sha512-wpHYzhxiVQL+IV05BLE2Xn34zW1S223hvjtqk0+gsPrwd/8JNLXJgZZM/iPFsYc1xyphF+6M6EvdE5E9MBGkDA==,
- }
- engines: { node: '>=10' }
+ resolution: {integrity: sha512-wpHYzhxiVQL+IV05BLE2Xn34zW1S223hvjtqk0+gsPrwd/8JNLXJgZZM/iPFsYc1xyphF+6M6EvdE5E9MBGkDA==}
+ engines: {node: '>=10'}
hasBin: true
jest-changed-files@29.7.0:
- resolution:
- {
- integrity: sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==,
- }
- engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 }
+ resolution: {integrity: sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
jest-changed-files@30.2.0:
- resolution:
- {
- integrity: sha512-L8lR1ChrRnSdfeOvTrwZMlnWV8G/LLjQ0nG9MBclwWZidA2N5FviRki0Bvh20WRMOX31/JYvzdqTJrk5oBdydQ==,
- }
- engines: { node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0 }
+ resolution: {integrity: sha512-L8lR1ChrRnSdfeOvTrwZMlnWV8G/LLjQ0nG9MBclwWZidA2N5FviRki0Bvh20WRMOX31/JYvzdqTJrk5oBdydQ==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
jest-circus@29.7.0:
- resolution:
- {
- integrity: sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==,
- }
- engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 }
+ resolution: {integrity: sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
jest-circus@30.2.0:
- resolution:
- {
- integrity: sha512-Fh0096NC3ZkFx05EP2OXCxJAREVxj1BcW/i6EWqqymcgYKWjyyDpral3fMxVcHXg6oZM7iULer9wGRFvfpl+Tg==,
- }
- engines: { node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0 }
+ resolution: {integrity: sha512-Fh0096NC3ZkFx05EP2OXCxJAREVxj1BcW/i6EWqqymcgYKWjyyDpral3fMxVcHXg6oZM7iULer9wGRFvfpl+Tg==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
jest-cli@29.7.0:
- resolution:
- {
- integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==,
- }
- engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 }
+ resolution: {integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
hasBin: true
peerDependencies:
node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0
@@ -8632,11 +5883,8 @@ packages:
optional: true
jest-cli@30.2.0:
- resolution:
- {
- integrity: sha512-Os9ukIvADX/A9sLt6Zse3+nmHtHaE6hqOsjQtNiugFTbKRHYIYtZXNGNK9NChseXy7djFPjndX1tL0sCTlfpAA==,
- }
- engines: { node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0 }
+ resolution: {integrity: sha512-Os9ukIvADX/A9sLt6Zse3+nmHtHaE6hqOsjQtNiugFTbKRHYIYtZXNGNK9NChseXy7djFPjndX1tL0sCTlfpAA==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
hasBin: true
peerDependencies:
node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0
@@ -8645,11 +5893,8 @@ packages:
optional: true
jest-config@29.7.0:
- resolution:
- {
- integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==,
- }
- engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 }
+ resolution: {integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
peerDependencies:
'@types/node': '*'
ts-node: '>=9.0.0'
@@ -8660,11 +5905,8 @@ packages:
optional: true
jest-config@30.2.0:
- resolution:
- {
- integrity: sha512-g4WkyzFQVWHtu6uqGmQR4CQxz/CH3yDSlhzXMWzNjDx843gYjReZnMRanjRCq5XZFuQrGDxgUaiYWE8BRfVckA==,
- }
- engines: { node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0 }
+ resolution: {integrity: sha512-g4WkyzFQVWHtu6uqGmQR4CQxz/CH3yDSlhzXMWzNjDx843gYjReZnMRanjRCq5XZFuQrGDxgUaiYWE8BRfVckA==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
peerDependencies:
'@types/node': '*'
esbuild-register: '>=3.4.0'
@@ -8678,151 +5920,88 @@ packages:
optional: true
jest-diff@29.7.0:
- resolution:
- {
- integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==,
- }
- engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 }
+ resolution: {integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
jest-diff@30.2.0:
- resolution:
- {
- integrity: sha512-dQHFo3Pt4/NLlG5z4PxZ/3yZTZ1C7s9hveiOj+GCN+uT109NC2QgsoVZsVOAvbJ3RgKkvyLGXZV9+piDpWbm6A==,
- }
- engines: { node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0 }
+ resolution: {integrity: sha512-dQHFo3Pt4/NLlG5z4PxZ/3yZTZ1C7s9hveiOj+GCN+uT109NC2QgsoVZsVOAvbJ3RgKkvyLGXZV9+piDpWbm6A==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
jest-docblock@29.7.0:
- resolution:
- {
- integrity: sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==,
- }
- engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 }
+ resolution: {integrity: sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
jest-docblock@30.2.0:
- resolution:
- {
- integrity: sha512-tR/FFgZKS1CXluOQzZvNH3+0z9jXr3ldGSD8bhyuxvlVUwbeLOGynkunvlTMxchC5urrKndYiwCFC0DLVjpOCA==,
- }
- engines: { node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0 }
+ resolution: {integrity: sha512-tR/FFgZKS1CXluOQzZvNH3+0z9jXr3ldGSD8bhyuxvlVUwbeLOGynkunvlTMxchC5urrKndYiwCFC0DLVjpOCA==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
jest-each@29.7.0:
- resolution:
- {
- integrity: sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==,
- }
- engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 }
+ resolution: {integrity: sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
jest-each@30.2.0:
- resolution:
- {
- integrity: sha512-lpWlJlM7bCUf1mfmuqTA8+j2lNURW9eNafOy99knBM01i5CQeY5UH1vZjgT9071nDJac1M4XsbyI44oNOdhlDQ==,
- }
- engines: { node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0 }
+ resolution: {integrity: sha512-lpWlJlM7bCUf1mfmuqTA8+j2lNURW9eNafOy99knBM01i5CQeY5UH1vZjgT9071nDJac1M4XsbyI44oNOdhlDQ==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
jest-environment-node@29.7.0:
- resolution:
- {
- integrity: sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==,
- }
- engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 }
+ resolution: {integrity: sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
jest-environment-node@30.2.0:
- resolution:
- {
- integrity: sha512-ElU8v92QJ9UrYsKrxDIKCxu6PfNj4Hdcktcn0JX12zqNdqWHB0N+hwOnnBBXvjLd2vApZtuLUGs1QSY+MsXoNA==,
- }
- engines: { node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0 }
+ resolution: {integrity: sha512-ElU8v92QJ9UrYsKrxDIKCxu6PfNj4Hdcktcn0JX12zqNdqWHB0N+hwOnnBBXvjLd2vApZtuLUGs1QSY+MsXoNA==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
jest-get-type@29.6.3:
- resolution:
- {
- integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==,
- }
- engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 }
+ resolution: {integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
jest-haste-map@29.7.0:
- resolution:
- {
- integrity: sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==,
- }
- engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 }
+ resolution: {integrity: sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
jest-haste-map@30.2.0:
- resolution:
- {
- integrity: sha512-sQA/jCb9kNt+neM0anSj6eZhLZUIhQgwDt7cPGjumgLM4rXsfb9kpnlacmvZz3Q5tb80nS+oG/if+NBKrHC+Xw==,
- }
- engines: { node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0 }
+ resolution: {integrity: sha512-sQA/jCb9kNt+neM0anSj6eZhLZUIhQgwDt7cPGjumgLM4rXsfb9kpnlacmvZz3Q5tb80nS+oG/if+NBKrHC+Xw==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
jest-in-case@1.0.2:
- resolution:
- {
- integrity: sha512-2DE6Gdwnh5jkCYTePWoQinF+zne3lCADibXoYJEt8PS84JaRug0CyAOrEgzMxbzln3YcSY2PBeru7ct4tbflYA==,
- }
- engines: { node: '>=4' }
+ resolution: {integrity: sha512-2DE6Gdwnh5jkCYTePWoQinF+zne3lCADibXoYJEt8PS84JaRug0CyAOrEgzMxbzln3YcSY2PBeru7ct4tbflYA==}
+ engines: {node: '>=4'}
jest-leak-detector@29.7.0:
- resolution:
- {
- integrity: sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==,
- }
- engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 }
+ resolution: {integrity: sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
jest-leak-detector@30.2.0:
- resolution:
- {
- integrity: sha512-M6jKAjyzjHG0SrQgwhgZGy9hFazcudwCNovY/9HPIicmNSBuockPSedAP9vlPK6ONFJ1zfyH/M2/YYJxOz5cdQ==,
- }
- engines: { node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0 }
+ resolution: {integrity: sha512-M6jKAjyzjHG0SrQgwhgZGy9hFazcudwCNovY/9HPIicmNSBuockPSedAP9vlPK6ONFJ1zfyH/M2/YYJxOz5cdQ==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
jest-matcher-utils@29.7.0:
- resolution:
- {
- integrity: sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==,
- }
- engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 }
+ resolution: {integrity: sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
jest-matcher-utils@30.2.0:
- resolution:
- {
- integrity: sha512-dQ94Nq4dbzmUWkQ0ANAWS9tBRfqCrn0bV9AMYdOi/MHW726xn7eQmMeRTpX2ViC00bpNaWXq+7o4lIQ3AX13Hg==,
- }
- engines: { node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0 }
+ resolution: {integrity: sha512-dQ94Nq4dbzmUWkQ0ANAWS9tBRfqCrn0bV9AMYdOi/MHW726xn7eQmMeRTpX2ViC00bpNaWXq+7o4lIQ3AX13Hg==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
jest-message-util@29.7.0:
- resolution:
- {
- integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==,
- }
- engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 }
+ resolution: {integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
jest-message-util@30.2.0:
- resolution:
- {
- integrity: sha512-y4DKFLZ2y6DxTWD4cDe07RglV88ZiNEdlRfGtqahfbIjfsw1nMCPx49Uev4IA/hWn3sDKyAnSPwoYSsAEdcimw==,
- }
- engines: { node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0 }
+ resolution: {integrity: sha512-y4DKFLZ2y6DxTWD4cDe07RglV88ZiNEdlRfGtqahfbIjfsw1nMCPx49Uev4IA/hWn3sDKyAnSPwoYSsAEdcimw==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
jest-mock@29.7.0:
- resolution:
- {
- integrity: sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==,
- }
- engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 }
+ resolution: {integrity: sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
jest-mock@30.2.0:
- resolution:
- {
- integrity: sha512-JNNNl2rj4b5ICpmAcq+WbLH83XswjPbjH4T7yvGzfAGCPh1rw+xVNbtk+FnRslvt9lkCcdn9i1oAoKUuFsOxRw==,
- }
- engines: { node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0 }
+ resolution: {integrity: sha512-JNNNl2rj4b5ICpmAcq+WbLH83XswjPbjH4T7yvGzfAGCPh1rw+xVNbtk+FnRslvt9lkCcdn9i1oAoKUuFsOxRw==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
jest-pnp-resolver@1.2.3:
- resolution:
- {
- integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==,
- }
- engines: { node: '>=6' }
+ resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==}
+ engines: {node: '>=6'}
peerDependencies:
jest-resolve: '*'
peerDependenciesMeta:
@@ -8830,151 +6009,88 @@ packages:
optional: true
jest-regex-util@29.6.3:
- resolution:
- {
- integrity: sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==,
- }
- engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 }
+ resolution: {integrity: sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
jest-regex-util@30.0.1:
- resolution:
- {
- integrity: sha512-jHEQgBXAgc+Gh4g0p3bCevgRCVRkB4VB70zhoAE48gxeSr1hfUOsM/C2WoJgVL7Eyg//hudYENbm3Ne+/dRVVA==,
- }
- engines: { node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0 }
+ resolution: {integrity: sha512-jHEQgBXAgc+Gh4g0p3bCevgRCVRkB4VB70zhoAE48gxeSr1hfUOsM/C2WoJgVL7Eyg//hudYENbm3Ne+/dRVVA==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
jest-resolve-dependencies@29.7.0:
- resolution:
- {
- integrity: sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==,
- }
- engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 }
+ resolution: {integrity: sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
jest-resolve-dependencies@30.2.0:
- resolution:
- {
- integrity: sha512-xTOIGug/0RmIe3mmCqCT95yO0vj6JURrn1TKWlNbhiAefJRWINNPgwVkrVgt/YaerPzY3iItufd80v3lOrFJ2w==,
- }
- engines: { node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0 }
+ resolution: {integrity: sha512-xTOIGug/0RmIe3mmCqCT95yO0vj6JURrn1TKWlNbhiAefJRWINNPgwVkrVgt/YaerPzY3iItufd80v3lOrFJ2w==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
jest-resolve@29.7.0:
- resolution:
- {
- integrity: sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==,
- }
- engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 }
+ resolution: {integrity: sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
jest-resolve@30.2.0:
- resolution:
- {
- integrity: sha512-TCrHSxPlx3tBY3hWNtRQKbtgLhsXa1WmbJEqBlTBrGafd5fiQFByy2GNCEoGR+Tns8d15GaL9cxEzKOO3GEb2A==,
- }
- engines: { node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0 }
+ resolution: {integrity: sha512-TCrHSxPlx3tBY3hWNtRQKbtgLhsXa1WmbJEqBlTBrGafd5fiQFByy2GNCEoGR+Tns8d15GaL9cxEzKOO3GEb2A==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
jest-runner@29.7.0:
- resolution:
- {
- integrity: sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==,
- }
- engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 }
+ resolution: {integrity: sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
jest-runner@30.2.0:
- resolution:
- {
- integrity: sha512-PqvZ2B2XEyPEbclp+gV6KO/F1FIFSbIwewRgmROCMBo/aZ6J1w8Qypoj2pEOcg3G2HzLlaP6VUtvwCI8dM3oqQ==,
- }
- engines: { node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0 }
+ resolution: {integrity: sha512-PqvZ2B2XEyPEbclp+gV6KO/F1FIFSbIwewRgmROCMBo/aZ6J1w8Qypoj2pEOcg3G2HzLlaP6VUtvwCI8dM3oqQ==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
jest-runtime@29.7.0:
- resolution:
- {
- integrity: sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==,
- }
- engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 }
+ resolution: {integrity: sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
jest-runtime@30.2.0:
- resolution:
- {
- integrity: sha512-p1+GVX/PJqTucvsmERPMgCPvQJpFt4hFbM+VN3n8TMo47decMUcJbt+rgzwrEme0MQUA/R+1de2axftTHkKckg==,
- }
- engines: { node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0 }
+ resolution: {integrity: sha512-p1+GVX/PJqTucvsmERPMgCPvQJpFt4hFbM+VN3n8TMo47decMUcJbt+rgzwrEme0MQUA/R+1de2axftTHkKckg==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
jest-snapshot@29.7.0:
- resolution:
- {
- integrity: sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==,
- }
- engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 }
+ resolution: {integrity: sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
jest-snapshot@30.2.0:
- resolution:
- {
- integrity: sha512-5WEtTy2jXPFypadKNpbNkZ72puZCa6UjSr/7djeecHWOu7iYhSXSnHScT8wBz3Rn8Ena5d5RYRcsyKIeqG1IyA==,
- }
- engines: { node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0 }
+ resolution: {integrity: sha512-5WEtTy2jXPFypadKNpbNkZ72puZCa6UjSr/7djeecHWOu7iYhSXSnHScT8wBz3Rn8Ena5d5RYRcsyKIeqG1IyA==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
jest-util@29.7.0:
- resolution:
- {
- integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==,
- }
- engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 }
+ resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
jest-util@30.2.0:
- resolution:
- {
- integrity: sha512-QKNsM0o3Xe6ISQU869e+DhG+4CK/48aHYdJZGlFQVTjnbvgpcKyxpzk29fGiO7i/J8VENZ+d2iGnSsvmuHywlA==,
- }
- engines: { node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0 }
+ resolution: {integrity: sha512-QKNsM0o3Xe6ISQU869e+DhG+4CK/48aHYdJZGlFQVTjnbvgpcKyxpzk29fGiO7i/J8VENZ+d2iGnSsvmuHywlA==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
jest-validate@29.7.0:
- resolution:
- {
- integrity: sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==,
- }
- engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 }
+ resolution: {integrity: sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
jest-validate@30.2.0:
- resolution:
- {
- integrity: sha512-FBGWi7dP2hpdi8nBoWxSsLvBFewKAg0+uSQwBaof4Y4DPgBabXgpSYC5/lR7VmnIlSpASmCi/ntRWPbv7089Pw==,
- }
- engines: { node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0 }
+ resolution: {integrity: sha512-FBGWi7dP2hpdi8nBoWxSsLvBFewKAg0+uSQwBaof4Y4DPgBabXgpSYC5/lR7VmnIlSpASmCi/ntRWPbv7089Pw==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
jest-watcher@29.7.0:
- resolution:
- {
- integrity: sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==,
- }
- engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 }
+ resolution: {integrity: sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
jest-watcher@30.2.0:
- resolution:
- {
- integrity: sha512-PYxa28dxJ9g777pGm/7PrbnMeA0Jr7osHP9bS7eJy9DuAjMgdGtxgf0uKMyoIsTWAkIbUW5hSDdJ3urmgXBqxg==,
- }
- engines: { node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0 }
+ resolution: {integrity: sha512-PYxa28dxJ9g777pGm/7PrbnMeA0Jr7osHP9bS7eJy9DuAjMgdGtxgf0uKMyoIsTWAkIbUW5hSDdJ3urmgXBqxg==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
jest-worker@29.7.0:
- resolution:
- {
- integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==,
- }
- engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 }
+ resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
jest-worker@30.2.0:
- resolution:
- {
- integrity: sha512-0Q4Uk8WF7BUwqXHuAjc23vmopWJw5WH7w2tqBoUOZpOjW/ZnR44GXXd1r82RvnmI2GZge3ivrYXk/BE2+VtW2g==,
- }
- engines: { node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0 }
+ resolution: {integrity: sha512-0Q4Uk8WF7BUwqXHuAjc23vmopWJw5WH7w2tqBoUOZpOjW/ZnR44GXXd1r82RvnmI2GZge3ivrYXk/BE2+VtW2g==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
jest@29.7.0:
- resolution:
- {
- integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==,
- }
- engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 }
+ resolution: {integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
hasBin: true
peerDependencies:
node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0
@@ -8983,11 +6099,8 @@ packages:
optional: true
jest@30.2.0:
- resolution:
- {
- integrity: sha512-F26gjC0yWN8uAA5m5Ss8ZQf5nDHWGlN/xWZIh8S5SRbsEKBovwZhxGd6LJlbZYxBgCYOtreSUyb8hpXyGC5O4A==,
- }
- engines: { node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0 }
+ resolution: {integrity: sha512-F26gjC0yWN8uAA5m5Ss8ZQf5nDHWGlN/xWZIh8S5SRbsEKBovwZhxGd6LJlbZYxBgCYOtreSUyb8hpXyGC5O4A==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
hasBin: true
peerDependencies:
node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0
@@ -8996,1131 +6109,615 @@ packages:
optional: true
jiti@2.6.1:
- resolution:
- {
- integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==,
- }
+ resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==}
hasBin: true
js-beautify@1.15.4:
- resolution:
- {
- integrity: sha512-9/KXeZUKKJwqCXUdBxFJ3vPh467OCckSBmYDwSK/EtV090K+iMJ7zx2S3HLVDIWFQdqMIsZWbnaGiba18aWhaA==,
- }
- engines: { node: '>=14' }
+ resolution: {integrity: sha512-9/KXeZUKKJwqCXUdBxFJ3vPh467OCckSBmYDwSK/EtV090K+iMJ7zx2S3HLVDIWFQdqMIsZWbnaGiba18aWhaA==}
+ engines: {node: '>=14'}
hasBin: true
js-cookie@3.0.5:
- resolution:
- {
- integrity: sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==,
- }
- engines: { node: '>=14' }
+ resolution: {integrity: sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==}
+ engines: {node: '>=14'}
js-sha3@0.8.0:
- resolution:
- {
- integrity: sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==,
- }
+ resolution: {integrity: sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==}
js-tokens@4.0.0:
- resolution:
- {
- integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==,
- }
+ resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
js-yaml@3.14.2:
- resolution:
- {
- integrity: sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==,
- }
+ resolution: {integrity: sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==}
hasBin: true
js-yaml@4.1.0:
- resolution:
- {
- integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==,
- }
+ resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
hasBin: true
js-yaml@4.1.1:
- resolution:
- {
- integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==,
- }
+ resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==}
hasBin: true
jsbn@0.1.1:
- resolution:
- {
- integrity: sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==,
- }
+ resolution: {integrity: sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==}
jsesc@3.1.0:
- resolution:
- {
- integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==,
- }
- engines: { node: '>=6' }
+ resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==}
+ engines: {node: '>=6'}
hasBin: true
json-buffer@3.0.1:
- resolution:
- {
- integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==,
- }
+ resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==}
json-parse-better-errors@1.0.2:
- resolution:
- {
- integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==,
- }
+ resolution: {integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==}
json-parse-even-better-errors@2.3.1:
- resolution:
- {
- integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==,
- }
+ resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==}
json-parse-even-better-errors@3.0.2:
- resolution:
- {
- integrity: sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ==,
- }
- engines: { node: ^14.17.0 || ^16.13.0 || >=18.0.0 }
+ resolution: {integrity: sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ==}
+ engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
json-schema-traverse@0.4.1:
- resolution:
- {
- integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==,
- }
+ resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
json-schema-traverse@1.0.0:
- resolution:
- {
- integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==,
- }
+ resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==}
json-schema@0.4.0:
- resolution:
- {
- integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==,
- }
+ resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==}
json-stable-stringify-without-jsonify@1.0.1:
- resolution:
- {
- integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==,
- }
+ resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}
json-stringify-nice@1.1.4:
- resolution:
- {
- integrity: sha512-5Z5RFW63yxReJ7vANgW6eZFGWaQvnPE3WNmZoOJrSkGju2etKA2L5rrOa1sm877TVTFt57A80BH1bArcmlLfPw==,
- }
+ resolution: {integrity: sha512-5Z5RFW63yxReJ7vANgW6eZFGWaQvnPE3WNmZoOJrSkGju2etKA2L5rrOa1sm877TVTFt57A80BH1bArcmlLfPw==}
json-stringify-safe@5.0.1:
- resolution:
- {
- integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==,
- }
+ resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==}
json5@2.2.3:
- resolution:
- {
- integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==,
- }
- engines: { node: '>=6' }
+ resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==}
+ engines: {node: '>=6'}
hasBin: true
jsonc-parser@3.2.0:
- resolution:
- {
- integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==,
- }
+ resolution: {integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==}
jsonfile@6.2.0:
- resolution:
- {
- integrity: sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==,
- }
+ resolution: {integrity: sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==}
jsonparse@1.3.1:
- resolution:
- {
- integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==,
- }
- engines: { '0': node >= 0.2.0 }
+ resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==}
+ engines: {'0': node >= 0.2.0}
jsonwebtoken@9.0.3:
- resolution:
- {
- integrity: sha512-MT/xP0CrubFRNLNKvxJ2BYfy53Zkm++5bX9dtuPbqAeQpTVe0MQTFhao8+Cp//EmJp244xt6Drw/GVEGCUj40g==,
- }
- engines: { node: '>=12', npm: '>=6' }
+ resolution: {integrity: sha512-MT/xP0CrubFRNLNKvxJ2BYfy53Zkm++5bX9dtuPbqAeQpTVe0MQTFhao8+Cp//EmJp244xt6Drw/GVEGCUj40g==}
+ engines: {node: '>=12', npm: '>=6'}
jsprim@1.4.2:
- resolution:
- {
- integrity: sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==,
- }
- engines: { node: '>=0.6.0' }
+ resolution: {integrity: sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==}
+ engines: {node: '>=0.6.0'}
juice@7.0.0:
- resolution:
- {
- integrity: sha512-AjKQX31KKN+uJs+zaf+GW8mBO/f/0NqSh2moTMyvwBY+4/lXIYTU8D8I2h6BAV3Xnz6GGsbalUyFqbYMe+Vh+Q==,
- }
- engines: { node: '>=10.0.0' }
+ resolution: {integrity: sha512-AjKQX31KKN+uJs+zaf+GW8mBO/f/0NqSh2moTMyvwBY+4/lXIYTU8D8I2h6BAV3Xnz6GGsbalUyFqbYMe+Vh+Q==}
+ engines: {node: '>=10.0.0'}
hasBin: true
just-diff-apply@5.5.0:
- resolution:
- {
- integrity: sha512-OYTthRfSh55WOItVqwpefPtNt2VdKsq5AnAK6apdtR6yCH8pr0CmSr710J0Mf+WdQy7K/OzMy7K2MgAfdQURDw==,
- }
+ resolution: {integrity: sha512-OYTthRfSh55WOItVqwpefPtNt2VdKsq5AnAK6apdtR6yCH8pr0CmSr710J0Mf+WdQy7K/OzMy7K2MgAfdQURDw==}
just-diff@6.0.2:
- resolution:
- {
- integrity: sha512-S59eriX5u3/QhMNq3v/gm8Kd0w8OS6Tz2FS1NG4blv+z0MuQcBRJyFWjdovM0Rad4/P4aUPFtnkNjMjyMlMSYA==,
- }
+ resolution: {integrity: sha512-S59eriX5u3/QhMNq3v/gm8Kd0w8OS6Tz2FS1NG4blv+z0MuQcBRJyFWjdovM0Rad4/P4aUPFtnkNjMjyMlMSYA==}
jwa@2.0.1:
- resolution:
- {
- integrity: sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg==,
- }
+ resolution: {integrity: sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg==}
jws@4.0.1:
- resolution:
- {
- integrity: sha512-EKI/M/yqPncGUUh44xz0PxSidXFr/+r0pA70+gIYhjv+et7yxM+s29Y+VGDkovRofQem0fs7Uvf4+YmAdyRduA==,
- }
+ resolution: {integrity: sha512-EKI/M/yqPncGUUh44xz0PxSidXFr/+r0pA70+gIYhjv+et7yxM+s29Y+VGDkovRofQem0fs7Uvf4+YmAdyRduA==}
keyv@4.5.4:
- resolution:
- {
- integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==,
- }
+ resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==}
kind-of@6.0.3:
- resolution:
- {
- integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==,
- }
- engines: { node: '>=0.10.0' }
+ resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==}
+ engines: {node: '>=0.10.0'}
kleur@3.0.3:
- resolution:
- {
- integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==,
- }
- engines: { node: '>=6' }
+ resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==}
+ engines: {node: '>=6'}
komoji@0.7.14:
- resolution:
- {
- integrity: sha512-iJlRccr/DTKcSumEHiTbvyt3V6GYmA762FmjhBAFlIKhoO87BPo7V0eHxSUgsILH8eYHHguk9KCmZ8xMIDPbHw==,
- }
+ resolution: {integrity: sha512-iJlRccr/DTKcSumEHiTbvyt3V6GYmA762FmjhBAFlIKhoO87BPo7V0eHxSUgsILH8eYHHguk9KCmZ8xMIDPbHw==}
lerna@8.2.4:
- resolution:
- {
- integrity: sha512-0gaVWDIVT7fLfprfwpYcQajb7dBJv3EGavjG7zvJ+TmGx3/wovl5GklnSwM2/WeE0Z2wrIz7ndWhBcDUHVjOcQ==,
- }
- engines: { node: '>=18.0.0' }
+ resolution: {integrity: sha512-0gaVWDIVT7fLfprfwpYcQajb7dBJv3EGavjG7zvJ+TmGx3/wovl5GklnSwM2/WeE0Z2wrIz7ndWhBcDUHVjOcQ==}
+ engines: {node: '>=18.0.0'}
hasBin: true
leven@3.1.0:
- resolution:
- {
- integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==,
- }
- engines: { node: '>=6' }
+ resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==}
+ engines: {node: '>=6'}
levn@0.3.0:
- resolution:
- {
- integrity: sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==,
- }
- engines: { node: '>= 0.8.0' }
+ resolution: {integrity: sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==}
+ engines: {node: '>= 0.8.0'}
levn@0.4.1:
- resolution:
- {
- integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==,
- }
- engines: { node: '>= 0.8.0' }
+ resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
+ engines: {node: '>= 0.8.0'}
libnpmaccess@8.0.6:
- resolution:
- {
- integrity: sha512-uM8DHDEfYG6G5gVivVl+yQd4pH3uRclHC59lzIbSvy7b5FEwR+mU49Zq1jEyRtRFv7+M99mUW9S0wL/4laT4lw==,
- }
- engines: { node: ^16.14.0 || >=18.0.0 }
+ resolution: {integrity: sha512-uM8DHDEfYG6G5gVivVl+yQd4pH3uRclHC59lzIbSvy7b5FEwR+mU49Zq1jEyRtRFv7+M99mUW9S0wL/4laT4lw==}
+ engines: {node: ^16.14.0 || >=18.0.0}
libnpmpublish@9.0.9:
- resolution:
- {
- integrity: sha512-26zzwoBNAvX9AWOPiqqF6FG4HrSCPsHFkQm7nT+xU1ggAujL/eae81RnCv4CJ2In9q9fh10B88sYSzKCUh/Ghg==,
- }
- engines: { node: ^16.14.0 || >=18.0.0 }
+ resolution: {integrity: sha512-26zzwoBNAvX9AWOPiqqF6FG4HrSCPsHFkQm7nT+xU1ggAujL/eae81RnCv4CJ2In9q9fh10B88sYSzKCUh/Ghg==}
+ engines: {node: ^16.14.0 || >=18.0.0}
libpg-query@17.7.3:
- resolution:
- {
- integrity: sha512-lHKBvoWRsXt/9bJxpAeFxkLu0CA6tELusqy3o1z6/DwGXSETxhKJDaNlNdrNV8msvXDLBhpg/4RE/fKKs5rYFA==,
- }
+ resolution: {integrity: sha512-lHKBvoWRsXt/9bJxpAeFxkLu0CA6tELusqy3o1z6/DwGXSETxhKJDaNlNdrNV8msvXDLBhpg/4RE/fKKs5rYFA==}
lines-and-columns@1.2.4:
- resolution:
- {
- integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==,
- }
+ resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
lines-and-columns@2.0.3:
- resolution:
- {
- integrity: sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w==,
- }
- engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 }
+ resolution: {integrity: sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
load-json-file@4.0.0:
- resolution:
- {
- integrity: sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==,
- }
- engines: { node: '>=4' }
+ resolution: {integrity: sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==}
+ engines: {node: '>=4'}
load-json-file@6.2.0:
- resolution:
- {
- integrity: sha512-gUD/epcRms75Cw8RT1pUdHugZYM5ce64ucs2GEISABwkRsOQr0q2wm/MV2TKThycIe5e0ytRweW2RZxclogCdQ==,
- }
- engines: { node: '>=8' }
+ resolution: {integrity: sha512-gUD/epcRms75Cw8RT1pUdHugZYM5ce64ucs2GEISABwkRsOQr0q2wm/MV2TKThycIe5e0ytRweW2RZxclogCdQ==}
+ engines: {node: '>=8'}
locate-path@2.0.0:
- resolution:
- {
- integrity: sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==,
- }
- engines: { node: '>=4' }
+ resolution: {integrity: sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==}
+ engines: {node: '>=4'}
locate-path@5.0.0:
- resolution:
- {
- integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==,
- }
- engines: { node: '>=8' }
+ resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==}
+ engines: {node: '>=8'}
locate-path@6.0.0:
- resolution:
- {
- integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==,
- }
- engines: { node: '>=10' }
+ resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
+ engines: {node: '>=10'}
lodash.includes@4.3.0:
- resolution:
- {
- integrity: sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==,
- }
+ resolution: {integrity: sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==}
lodash.isboolean@3.0.3:
- resolution:
- {
- integrity: sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==,
- }
+ resolution: {integrity: sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==}
lodash.isinteger@4.0.4:
- resolution:
- {
- integrity: sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==,
- }
+ resolution: {integrity: sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==}
lodash.ismatch@4.4.0:
- resolution:
- {
- integrity: sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g==,
- }
+ resolution: {integrity: sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g==}
lodash.isnumber@3.0.3:
- resolution:
- {
- integrity: sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==,
- }
+ resolution: {integrity: sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==}
lodash.isplainobject@4.0.6:
- resolution:
- {
- integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==,
- }
+ resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==}
lodash.isstring@4.0.1:
- resolution:
- {
- integrity: sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==,
- }
+ resolution: {integrity: sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==}
lodash.memoize@4.1.2:
- resolution:
- {
- integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==,
- }
+ resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==}
lodash.merge@4.6.2:
- resolution:
- {
- integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==,
- }
+ resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
lodash.once@4.1.1:
- resolution:
- {
- integrity: sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==,
- }
+ resolution: {integrity: sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==}
lodash@4.17.21:
- resolution:
- {
- integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==,
- }
+ resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
log-symbols@4.1.0:
- resolution:
- {
- integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==,
- }
- engines: { node: '>=10' }
+ resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==}
+ engines: {node: '>=10'}
long-timeout@0.1.1:
- resolution:
- {
- integrity: sha512-BFRuQUqc7x2NWxfJBCyUrN8iYUYznzL9JROmRz1gZ6KlOIgmoD+njPVbb+VNn2nGMKggMsK79iUNErillsrx7w==,
- }
+ resolution: {integrity: sha512-BFRuQUqc7x2NWxfJBCyUrN8iYUYznzL9JROmRz1gZ6KlOIgmoD+njPVbb+VNn2nGMKggMsK79iUNErillsrx7w==}
long@5.3.2:
- resolution:
- {
- integrity: sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==,
- }
+ resolution: {integrity: sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==}
loose-envify@1.4.0:
- resolution:
- {
- integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==,
- }
+ resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
hasBin: true
lower-case@1.1.4:
- resolution:
- {
- integrity: sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==,
- }
+ resolution: {integrity: sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==}
lru-cache@10.4.3:
- resolution:
- {
- integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==,
- }
+ resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==}
lru-cache@11.2.4:
- resolution:
- {
- integrity: sha512-B5Y16Jr9LB9dHVkh6ZevG+vAbOsNOYCX+sXvFWFu7B3Iz5mijW3zdbMyhsh8ANd2mSWBYdJgnqi+mL7/LrOPYg==,
- }
- engines: { node: 20 || >=22 }
+ resolution: {integrity: sha512-B5Y16Jr9LB9dHVkh6ZevG+vAbOsNOYCX+sXvFWFu7B3Iz5mijW3zdbMyhsh8ANd2mSWBYdJgnqi+mL7/LrOPYg==}
+ engines: {node: 20 || >=22}
lru-cache@4.1.5:
- resolution:
- {
- integrity: sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==,
- }
+ resolution: {integrity: sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==}
lru-cache@5.1.1:
- resolution:
- {
- integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==,
- }
+ resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==}
lru-cache@6.0.0:
- resolution:
- {
- integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==,
- }
- engines: { node: '>=10' }
+ resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==}
+ engines: {node: '>=10'}
lz-string@1.5.0:
- resolution:
- {
- integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==,
- }
+ resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==}
hasBin: true
mailgun-js@0.22.0:
- resolution:
- {
- integrity: sha512-a2alg5nuTZA9Psa1pSEIEsbxr1Zrmqx4VkgGCQ30xVh0kIH7Bu57AYILo+0v8QLSdXtCyLaS+KVmdCrQo0uWFA==,
- }
- engines: { node: '>=6.0.0' }
+ resolution: {integrity: sha512-a2alg5nuTZA9Psa1pSEIEsbxr1Zrmqx4VkgGCQ30xVh0kIH7Bu57AYILo+0v8QLSdXtCyLaS+KVmdCrQo0uWFA==}
+ engines: {node: '>=6.0.0'}
deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.
makage@0.1.10:
- resolution:
- {
- integrity: sha512-IQKuRbHOrDgVNlydle+XRO5iMyaozBq4Bb9vhEzwxtvzyk08JkQo5qpfFRep0dSum53gECdX2gBoTmkWDHIfJA==,
- }
+ resolution: {integrity: sha512-IQKuRbHOrDgVNlydle+XRO5iMyaozBq4Bb9vhEzwxtvzyk08JkQo5qpfFRep0dSum53gECdX2gBoTmkWDHIfJA==}
hasBin: true
make-dir@2.1.0:
- resolution:
- {
- integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==,
- }
- engines: { node: '>=6' }
+ resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==}
+ engines: {node: '>=6'}
make-dir@4.0.0:
- resolution:
- {
- integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==,
- }
- engines: { node: '>=10' }
+ resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==}
+ engines: {node: '>=10'}
make-error@1.3.6:
- resolution:
- {
- integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==,
- }
+ resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==}
make-fetch-happen@13.0.1:
- resolution:
- {
- integrity: sha512-cKTUFc/rbKUd/9meOvgrpJ2WrNzymt6jfRDdwg5UCnVzv9dTpEj9JS5m3wtziXVCjluIXyL8pcaukYqezIzZQA==,
- }
- engines: { node: ^16.14.0 || >=18.0.0 }
+ resolution: {integrity: sha512-cKTUFc/rbKUd/9meOvgrpJ2WrNzymt6jfRDdwg5UCnVzv9dTpEj9JS5m3wtziXVCjluIXyL8pcaukYqezIzZQA==}
+ engines: {node: ^16.14.0 || >=18.0.0}
makeerror@1.0.12:
- resolution:
- {
- integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==,
- }
+ resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==}
map-obj@1.0.1:
- resolution:
- {
- integrity: sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==,
- }
- engines: { node: '>=0.10.0' }
+ resolution: {integrity: sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==}
+ engines: {node: '>=0.10.0'}
map-obj@4.3.0:
- resolution:
- {
- integrity: sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==,
- }
- engines: { node: '>=8' }
+ resolution: {integrity: sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==}
+ engines: {node: '>=8'}
match-sorter@6.3.4:
- resolution:
- {
- integrity: sha512-jfZW7cWS5y/1xswZo8VBOdudUiSd9nifYRWphc9M5D/ee4w4AoXLgBEdRbgVaxbMuagBPeUC5y2Hi8DO6o9aDg==,
- }
+ resolution: {integrity: sha512-jfZW7cWS5y/1xswZo8VBOdudUiSd9nifYRWphc9M5D/ee4w4AoXLgBEdRbgVaxbMuagBPeUC5y2Hi8DO6o9aDg==}
math-intrinsics@1.1.0:
- resolution:
- {
- integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==,
- }
- engines: { node: '>= 0.4' }
+ resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==}
+ engines: {node: '>= 0.4'}
meant@1.0.3:
- resolution:
- {
- integrity: sha512-88ZRGcNxAq4EH38cQ4D85PM57pikCwS8Z99EWHODxN7KBY+UuPiqzRTtZzS8KTXO/ywSWbdjjJST2Hly/EQxLw==,
- }
+ resolution: {integrity: sha512-88ZRGcNxAq4EH38cQ4D85PM57pikCwS8Z99EWHODxN7KBY+UuPiqzRTtZzS8KTXO/ywSWbdjjJST2Hly/EQxLw==}
media-typer@0.3.0:
- resolution:
- {
- integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==,
- }
- engines: { node: '>= 0.6' }
+ resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==}
+ engines: {node: '>= 0.6'}
media-typer@1.1.0:
- resolution:
- {
- integrity: sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==,
- }
- engines: { node: '>= 0.8' }
+ resolution: {integrity: sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==}
+ engines: {node: '>= 0.8'}
mensch@0.3.4:
- resolution:
- {
- integrity: sha512-IAeFvcOnV9V0Yk+bFhYR07O3yNina9ANIN5MoXBKYJ/RLYPurd2d0yw14MDhpr9/momp0WofT1bPUh3hkzdi/g==,
- }
+ resolution: {integrity: sha512-IAeFvcOnV9V0Yk+bFhYR07O3yNina9ANIN5MoXBKYJ/RLYPurd2d0yw14MDhpr9/momp0WofT1bPUh3hkzdi/g==}
meow@8.1.2:
- resolution:
- {
- integrity: sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==,
- }
- engines: { node: '>=10' }
+ resolution: {integrity: sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==}
+ engines: {node: '>=10'}
merge-descriptors@2.0.0:
- resolution:
- {
- integrity: sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==,
- }
- engines: { node: '>=18' }
+ resolution: {integrity: sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==}
+ engines: {node: '>=18'}
merge-stream@2.0.0:
- resolution:
- {
- integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==,
- }
+ resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==}
merge2@1.4.1:
- resolution:
- {
- integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==,
- }
- engines: { node: '>= 8' }
+ resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
+ engines: {node: '>= 8'}
micromatch@4.0.8:
- resolution:
- {
- integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==,
- }
- engines: { node: '>=8.6' }
+ resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==}
+ engines: {node: '>=8.6'}
microseconds@0.2.0:
- resolution:
- {
- integrity: sha512-n7DHHMjR1avBbSpsTBj6fmMGh2AGrifVV4e+WYc3Q9lO+xnSZ3NyhcBND3vzzatt05LFhoKFRxrIyklmLlUtyA==,
- }
+ resolution: {integrity: sha512-n7DHHMjR1avBbSpsTBj6fmMGh2AGrifVV4e+WYc3Q9lO+xnSZ3NyhcBND3vzzatt05LFhoKFRxrIyklmLlUtyA==}
mime-db@1.52.0:
- resolution:
- {
- integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==,
- }
- engines: { node: '>= 0.6' }
+ resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==}
+ engines: {node: '>= 0.6'}
mime-db@1.54.0:
- resolution:
- {
- integrity: sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==,
- }
- engines: { node: '>= 0.6' }
+ resolution: {integrity: sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==}
+ engines: {node: '>= 0.6'}
mime-types@2.1.35:
- resolution:
- {
- integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==,
- }
- engines: { node: '>= 0.6' }
+ resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==}
+ engines: {node: '>= 0.6'}
mime-types@3.0.2:
- resolution:
- {
- integrity: sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==,
- }
- engines: { node: '>=18' }
+ resolution: {integrity: sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==}
+ engines: {node: '>=18'}
mime@2.6.0:
- resolution:
- {
- integrity: sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==,
- }
- engines: { node: '>=4.0.0' }
+ resolution: {integrity: sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==}
+ engines: {node: '>=4.0.0'}
hasBin: true
mimic-fn@2.1.0:
- resolution:
- {
- integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==,
- }
- engines: { node: '>=6' }
+ resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==}
+ engines: {node: '>=6'}
min-indent@1.0.1:
- resolution:
- {
- integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==,
- }
- engines: { node: '>=4' }
+ resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==}
+ engines: {node: '>=4'}
minimatch@10.1.1:
- resolution:
- {
- integrity: sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==,
- }
- engines: { node: 20 || >=22 }
+ resolution: {integrity: sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==}
+ engines: {node: 20 || >=22}
minimatch@3.0.5:
- resolution:
- {
- integrity: sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==,
- }
+ resolution: {integrity: sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==}
minimatch@3.1.2:
- resolution:
- {
- integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==,
- }
+ resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
minimatch@5.1.6:
- resolution:
- {
- integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==,
- }
- engines: { node: '>=10' }
+ resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==}
+ engines: {node: '>=10'}
minimatch@8.0.4:
- resolution:
- {
- integrity: sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==,
- }
- engines: { node: '>=16 || 14 >=14.17' }
+ resolution: {integrity: sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==}
+ engines: {node: '>=16 || 14 >=14.17'}
minimatch@9.0.1:
- resolution:
- {
- integrity: sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==,
- }
- engines: { node: '>=16 || 14 >=14.17' }
+ resolution: {integrity: sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==}
+ engines: {node: '>=16 || 14 >=14.17'}
minimatch@9.0.3:
- resolution:
- {
- integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==,
- }
- engines: { node: '>=16 || 14 >=14.17' }
+ resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==}
+ engines: {node: '>=16 || 14 >=14.17'}
minimatch@9.0.5:
- resolution:
- {
- integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==,
- }
- engines: { node: '>=16 || 14 >=14.17' }
+ resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==}
+ engines: {node: '>=16 || 14 >=14.17'}
minimist-options@4.1.0:
- resolution:
- {
- integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==,
- }
- engines: { node: '>= 6' }
+ resolution: {integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==}
+ engines: {node: '>= 6'}
minimist@1.2.8:
- resolution:
- {
- integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==,
- }
+ resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
minipass-collect@2.0.1:
- resolution:
- {
- integrity: sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==,
- }
- engines: { node: '>=16 || 14 >=14.17' }
+ resolution: {integrity: sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==}
+ engines: {node: '>=16 || 14 >=14.17'}
minipass-fetch@3.0.5:
- resolution:
- {
- integrity: sha512-2N8elDQAtSnFV0Dk7gt15KHsS0Fyz6CbYZ360h0WTYV1Ty46li3rAXVOQj1THMNLdmrD9Vt5pBPtWtVkpwGBqg==,
- }
- engines: { node: ^14.17.0 || ^16.13.0 || >=18.0.0 }
+ resolution: {integrity: sha512-2N8elDQAtSnFV0Dk7gt15KHsS0Fyz6CbYZ360h0WTYV1Ty46li3rAXVOQj1THMNLdmrD9Vt5pBPtWtVkpwGBqg==}
+ engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
minipass-flush@1.0.5:
- resolution:
- {
- integrity: sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==,
- }
- engines: { node: '>= 8' }
+ resolution: {integrity: sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==}
+ engines: {node: '>= 8'}
minipass-pipeline@1.2.4:
- resolution:
- {
- integrity: sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==,
- }
- engines: { node: '>=8' }
+ resolution: {integrity: sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==}
+ engines: {node: '>=8'}
minipass-sized@1.0.3:
- resolution:
- {
- integrity: sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==,
- }
- engines: { node: '>=8' }
+ resolution: {integrity: sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==}
+ engines: {node: '>=8'}
minipass@3.3.6:
- resolution:
- {
- integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==,
- }
- engines: { node: '>=8' }
+ resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==}
+ engines: {node: '>=8'}
minipass@4.2.8:
- resolution:
- {
- integrity: sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==,
- }
- engines: { node: '>=8' }
+ resolution: {integrity: sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==}
+ engines: {node: '>=8'}
minipass@5.0.0:
- resolution:
- {
- integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==,
- }
- engines: { node: '>=8' }
+ resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==}
+ engines: {node: '>=8'}
minipass@7.1.2:
- resolution:
- {
- integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==,
- }
- engines: { node: '>=16 || 14 >=14.17' }
+ resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==}
+ engines: {node: '>=16 || 14 >=14.17'}
minizlib@2.1.2:
- resolution:
- {
- integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==,
- }
- engines: { node: '>= 8' }
+ resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==}
+ engines: {node: '>= 8'}
mjml-accordion@4.7.1:
- resolution:
- {
- integrity: sha512-oYwC/CLOUWJ6pRt2saDHj/HytGOHO5B5lKNqUAhKPye5HFNZykKEV5ChmZ2NfGsGU+9BhQ7H5DaCafp4fDmPAg==,
- }
+ resolution: {integrity: sha512-oYwC/CLOUWJ6pRt2saDHj/HytGOHO5B5lKNqUAhKPye5HFNZykKEV5ChmZ2NfGsGU+9BhQ7H5DaCafp4fDmPAg==}
mjml-body@4.7.1:
- resolution:
- {
- integrity: sha512-JCrkit+kjCfQyKuVyWSOonM2LGs/o3+63R9l2SleFeXf3+0CaKWaZr/Exzvaeo28c+1o3yRqXbJIpD22SEtJfQ==,
- }
+ resolution: {integrity: sha512-JCrkit+kjCfQyKuVyWSOonM2LGs/o3+63R9l2SleFeXf3+0CaKWaZr/Exzvaeo28c+1o3yRqXbJIpD22SEtJfQ==}
mjml-button@4.7.1:
- resolution:
- {
- integrity: sha512-N3WkTMPOvKw2y6sakt1YfYDbOB8apumm1OApPG6J18CHcrX03BwhHPrdfu1JwlRNGwx4kCDdb6zNCGPwuZxkCg==,
- }
+ resolution: {integrity: sha512-N3WkTMPOvKw2y6sakt1YfYDbOB8apumm1OApPG6J18CHcrX03BwhHPrdfu1JwlRNGwx4kCDdb6zNCGPwuZxkCg==}
mjml-carousel@4.7.1:
- resolution:
- {
- integrity: sha512-eH3rRyX23ES0BKOn+UUV39+yGNmZVApBVVV0A5znDaNWskCg6/g6ZhEHi4nkWpj+aP2lJKI0HX1nrMfJg0Mxhg==,
- }
+ resolution: {integrity: sha512-eH3rRyX23ES0BKOn+UUV39+yGNmZVApBVVV0A5znDaNWskCg6/g6ZhEHi4nkWpj+aP2lJKI0HX1nrMfJg0Mxhg==}
mjml-cli@4.7.1:
- resolution:
- {
- integrity: sha512-xzCtJVKYVhGorvTmnbcMUfZlmJdBnu1UBD9A1H8UUBGMNE/Hs9QpHs9PLCMp8JR/uhSu15IgVjhFN0oSVndMRQ==,
- }
+ resolution: {integrity: sha512-xzCtJVKYVhGorvTmnbcMUfZlmJdBnu1UBD9A1H8UUBGMNE/Hs9QpHs9PLCMp8JR/uhSu15IgVjhFN0oSVndMRQ==}
hasBin: true
mjml-column@4.7.1:
- resolution:
- {
- integrity: sha512-CGw81TnGiuPR1GblLOez8xeoeAz1SEFjMpqapazjgXUuF5xUxg3qH55Wt4frpXe3VypeZWVYeumr6CwoNaPbKg==,
- }
+ resolution: {integrity: sha512-CGw81TnGiuPR1GblLOez8xeoeAz1SEFjMpqapazjgXUuF5xUxg3qH55Wt4frpXe3VypeZWVYeumr6CwoNaPbKg==}
mjml-core@4.7.1:
- resolution:
- {
- integrity: sha512-AMACoq/h440m7SM86As8knW0bNQgjNIzsP/cMF6X9RO07GfszgbaWUq/XCaRNi+q8bWvBJSCXbngDJySVc5ALw==,
- }
+ resolution: {integrity: sha512-AMACoq/h440m7SM86As8knW0bNQgjNIzsP/cMF6X9RO07GfszgbaWUq/XCaRNi+q8bWvBJSCXbngDJySVc5ALw==}
mjml-divider@4.7.1:
- resolution:
- {
- integrity: sha512-7+uCUJdqEr6w8AzpF8lhRheelYEgOwiK0KJGlAQN3LF+h2S1rTPEzEB67qL2x5cU+80kPlxtxoQWImDBy0vXqg==,
- }
+ resolution: {integrity: sha512-7+uCUJdqEr6w8AzpF8lhRheelYEgOwiK0KJGlAQN3LF+h2S1rTPEzEB67qL2x5cU+80kPlxtxoQWImDBy0vXqg==}
mjml-group@4.7.1:
- resolution:
- {
- integrity: sha512-mAYdhocCzetdhPSws/9/sQ4hcz4kQPX2dNitQmbxNVwoMFYXjp/WcLEfGc5u13Ue7dPfcV6c9lB/Uu5o3NmRvw==,
- }
+ resolution: {integrity: sha512-mAYdhocCzetdhPSws/9/sQ4hcz4kQPX2dNitQmbxNVwoMFYXjp/WcLEfGc5u13Ue7dPfcV6c9lB/Uu5o3NmRvw==}
mjml-head-attributes@4.7.1:
- resolution:
- {
- integrity: sha512-nB/bQ3I98Dvy/IkI4nqxTCnLonULkIKc8KrieRTrtPkUV3wskBzngpCgnjKvFPbHWiGlwjHDzcFJc7G0uWeqog==,
- }
+ resolution: {integrity: sha512-nB/bQ3I98Dvy/IkI4nqxTCnLonULkIKc8KrieRTrtPkUV3wskBzngpCgnjKvFPbHWiGlwjHDzcFJc7G0uWeqog==}
mjml-head-breakpoint@4.7.1:
- resolution:
- {
- integrity: sha512-0KB5SweIWDvwHkn4VCUsEhCQgfY/0wkNUnSXNoftaRujv0NQFQfOOH4eINy0NZYfDfrE4WYe08z+olHprp+T2A==,
- }
+ resolution: {integrity: sha512-0KB5SweIWDvwHkn4VCUsEhCQgfY/0wkNUnSXNoftaRujv0NQFQfOOH4eINy0NZYfDfrE4WYe08z+olHprp+T2A==}
mjml-head-font@4.7.1:
- resolution:
- {
- integrity: sha512-9YGzBcQ2htZ6j266fiLLfzcxqDEDLTvfKtypTjaeRb1w3N8S5wL+/zJA5ZjRL6r39Ij5ZPQSlSDC32KPiwhGkA==,
- }
+ resolution: {integrity: sha512-9YGzBcQ2htZ6j266fiLLfzcxqDEDLTvfKtypTjaeRb1w3N8S5wL+/zJA5ZjRL6r39Ij5ZPQSlSDC32KPiwhGkA==}
mjml-head-html-attributes@4.7.1:
- resolution:
- {
- integrity: sha512-2TK2nGpq4rGaghbVx2UNm5TXeZ5BTGYEvtSPoYPNu02KRCj6tb+uedAgFXwJpX+ogRfIfPK50ih+9ZMoHwf2IQ==,
- }
+ resolution: {integrity: sha512-2TK2nGpq4rGaghbVx2UNm5TXeZ5BTGYEvtSPoYPNu02KRCj6tb+uedAgFXwJpX+ogRfIfPK50ih+9ZMoHwf2IQ==}
mjml-head-preview@4.7.1:
- resolution:
- {
- integrity: sha512-UHlvvgldiPDODq/5zKMsmXgRb/ZyKygKDUVQSM5bm3HvpKXeyYxJZazcIGmlGICEqv1ced1WGINhCg72dSfN+Q==,
- }
+ resolution: {integrity: sha512-UHlvvgldiPDODq/5zKMsmXgRb/ZyKygKDUVQSM5bm3HvpKXeyYxJZazcIGmlGICEqv1ced1WGINhCg72dSfN+Q==}
mjml-head-style@4.7.1:
- resolution:
- {
- integrity: sha512-8Gij99puN1SoOx5tGBjgkh4iCpI+zbwGBiB2Y8VwJrwXQxdJ1Qa902dQP5djoFFG39Bthii/48cS/d1bHigGPQ==,
- }
+ resolution: {integrity: sha512-8Gij99puN1SoOx5tGBjgkh4iCpI+zbwGBiB2Y8VwJrwXQxdJ1Qa902dQP5djoFFG39Bthii/48cS/d1bHigGPQ==}
mjml-head-title@4.7.1:
- resolution:
- {
- integrity: sha512-vK3r+DApTXw2EoK/fh8dQOsO438Z7Ksy6iBIb7h04x33d4Z41r6+jtgxGXoKFXnjgr8MyLX5HZyyie5obW+hZg==,
- }
+ resolution: {integrity: sha512-vK3r+DApTXw2EoK/fh8dQOsO438Z7Ksy6iBIb7h04x33d4Z41r6+jtgxGXoKFXnjgr8MyLX5HZyyie5obW+hZg==}
mjml-head@4.7.1:
- resolution:
- {
- integrity: sha512-jUcJ674CT1oT8NTQWTjQQBFZu4yklK0oppfGFJ1cq76ze3isMiyhSnGnOHw6FkjLnZtb3gXXaGKX7UZM+UMk/w==,
- }
+ resolution: {integrity: sha512-jUcJ674CT1oT8NTQWTjQQBFZu4yklK0oppfGFJ1cq76ze3isMiyhSnGnOHw6FkjLnZtb3gXXaGKX7UZM+UMk/w==}
mjml-hero@4.7.1:
- resolution:
- {
- integrity: sha512-x+29V8zJAs8EV/eTtGbR921pCpitMQOAkyvNANW/3JLDTL2Oio1OYvGPVC3z1wOT9LKuRTxVzNHVt/bBw02CSQ==,
- }
+ resolution: {integrity: sha512-x+29V8zJAs8EV/eTtGbR921pCpitMQOAkyvNANW/3JLDTL2Oio1OYvGPVC3z1wOT9LKuRTxVzNHVt/bBw02CSQ==}
mjml-image@4.7.1:
- resolution:
- {
- integrity: sha512-l3uRR2jaM0Bpz4ctdWuxQUFgg+ol6Nt+ODOrnHsGMwpmFOh4hTPTky6KaF0LCXxYmGbI0FoGBna+hVNnkBsQCA==,
- }
+ resolution: {integrity: sha512-l3uRR2jaM0Bpz4ctdWuxQUFgg+ol6Nt+ODOrnHsGMwpmFOh4hTPTky6KaF0LCXxYmGbI0FoGBna+hVNnkBsQCA==}
mjml-migrate@4.7.1:
- resolution:
- {
- integrity: sha512-RgrJ9fHg6iRHC2H4pjRDWilBQ1eTH2jRu1ayDplbnepGoql83vLZaYaWc5Q+J+NsaNI16x+bgNB3fQdBiK+mng==,
- }
+ resolution: {integrity: sha512-RgrJ9fHg6iRHC2H4pjRDWilBQ1eTH2jRu1ayDplbnepGoql83vLZaYaWc5Q+J+NsaNI16x+bgNB3fQdBiK+mng==}
hasBin: true
mjml-navbar@4.7.1:
- resolution:
- {
- integrity: sha512-awdu8zT7xhS+9aCVunqtocUs8KA2xb+UhJ8UGbxVBpYbTNj3rCL9aWUXqWVwMk1la+3ypCkFuDuTl6dIoWPWlA==,
- }
+ resolution: {integrity: sha512-awdu8zT7xhS+9aCVunqtocUs8KA2xb+UhJ8UGbxVBpYbTNj3rCL9aWUXqWVwMk1la+3ypCkFuDuTl6dIoWPWlA==}
mjml-parser-xml@4.7.1:
- resolution:
- {
- integrity: sha512-UWfuRpN45k3GUEv2yl8n5Uf98Tg6FyCsyRnqZGo83mgZzlJRDYTdKII9RjZM646/S8+Q8e9qxi3AsL00j6sZsQ==,
- }
+ resolution: {integrity: sha512-UWfuRpN45k3GUEv2yl8n5Uf98Tg6FyCsyRnqZGo83mgZzlJRDYTdKII9RjZM646/S8+Q8e9qxi3AsL00j6sZsQ==}
mjml-raw@4.7.1:
- resolution:
- {
- integrity: sha512-mCQFEXINTkC8i7ydP1Km99e0FaZTeu79AoYnTBAILd4QO+RuD3n/PimBGrcGrOUex0JIKa2jyVQOcSCBuG4WpA==,
- }
+ resolution: {integrity: sha512-mCQFEXINTkC8i7ydP1Km99e0FaZTeu79AoYnTBAILd4QO+RuD3n/PimBGrcGrOUex0JIKa2jyVQOcSCBuG4WpA==}
mjml-react@1.0.59:
- resolution:
- {
- integrity: sha512-W1ULnMlxJHE0kNpInu+u3CHr6+QcvhoLJ2ov93Pzt2A1wXAv4CJ9T/P5h/BhZn8vvCXgGizcwHv8sfANfQONVw==,
- }
+ resolution: {integrity: sha512-W1ULnMlxJHE0kNpInu+u3CHr6+QcvhoLJ2ov93Pzt2A1wXAv4CJ9T/P5h/BhZn8vvCXgGizcwHv8sfANfQONVw==}
peerDependencies:
mjml: ^4.1.2
react: ^16.4.0
react-dom: ^16.4.0
mjml-section@4.7.1:
- resolution:
- {
- integrity: sha512-PlhCMsl/bpFwwgQGUopi9OgOGWgRPpEJVKE8hk4He8GXzbfIuDj4DZ9QJSkwIoZ0fZtcgz11Wwb19i9BZcozVw==,
- }
+ resolution: {integrity: sha512-PlhCMsl/bpFwwgQGUopi9OgOGWgRPpEJVKE8hk4He8GXzbfIuDj4DZ9QJSkwIoZ0fZtcgz11Wwb19i9BZcozVw==}
mjml-social@4.7.1:
- resolution:
- {
- integrity: sha512-tN/6V3m59izO9rqWpUokHxhwkk2GHkltzIlhI936hAJHh8hFyEO6+ZwQBZm738G00qgfICmQvX5FNq4upkCYjw==,
- }
+ resolution: {integrity: sha512-tN/6V3m59izO9rqWpUokHxhwkk2GHkltzIlhI936hAJHh8hFyEO6+ZwQBZm738G00qgfICmQvX5FNq4upkCYjw==}
mjml-spacer@4.7.1:
- resolution:
- {
- integrity: sha512-gQu1+nA9YGnoolfNPvzfVe/RJ8WqS8ho0hthlhiLOC2RnEnmqH7HHSzCFXm4OeN0VgvDQsM7mfYQGl82O58Y+g==,
- }
+ resolution: {integrity: sha512-gQu1+nA9YGnoolfNPvzfVe/RJ8WqS8ho0hthlhiLOC2RnEnmqH7HHSzCFXm4OeN0VgvDQsM7mfYQGl82O58Y+g==}
mjml-table@4.7.1:
- resolution:
- {
- integrity: sha512-rPkOtufMiVreb7I7vXk6rDm9i1DXncODnM5JJNhA9Z1dAQwXiz6V5904gAi2cEYfe0M2m0XQ8P5ZCtvqxGkfGA==,
- }
+ resolution: {integrity: sha512-rPkOtufMiVreb7I7vXk6rDm9i1DXncODnM5JJNhA9Z1dAQwXiz6V5904gAi2cEYfe0M2m0XQ8P5ZCtvqxGkfGA==}
mjml-text@4.7.1:
- resolution:
- {
- integrity: sha512-hrjxbY59v6hu/Pn0NO+6TMlrdAlRa3M7GVALx/YWYV3hi59zjYfot8Au7Xq64XdcbcI4eiBVbP/AVr8w03HsOw==,
- }
+ resolution: {integrity: sha512-hrjxbY59v6hu/Pn0NO+6TMlrdAlRa3M7GVALx/YWYV3hi59zjYfot8Au7Xq64XdcbcI4eiBVbP/AVr8w03HsOw==}
mjml-validator@4.7.1:
- resolution:
- {
- integrity: sha512-Qxubbz5WE182iLSTd/XRuezMr6UE7/u73grDCw0bTIcQsaTAIkWQn2tBI3jj0chWOw+sxwK2C6zPm9B0Cv7BGA==,
- }
+ resolution: {integrity: sha512-Qxubbz5WE182iLSTd/XRuezMr6UE7/u73grDCw0bTIcQsaTAIkWQn2tBI3jj0chWOw+sxwK2C6zPm9B0Cv7BGA==}
mjml-wrapper@4.7.1:
- resolution:
- {
- integrity: sha512-6i+ZATUyqIO5YBnx+RFKZ3+6mg3iOCS/EdXGYZSonZ/EHqlt+RJa3fG2BB4dacXqAjghfl6Lk+bLoR47P3xYIQ==,
- }
+ resolution: {integrity: sha512-6i+ZATUyqIO5YBnx+RFKZ3+6mg3iOCS/EdXGYZSonZ/EHqlt+RJa3fG2BB4dacXqAjghfl6Lk+bLoR47P3xYIQ==}
mjml@4.7.1:
- resolution:
- {
- integrity: sha512-nwMrmhTI+Aeh9Gav9LHX/i8k8yDi/QpX5h535BlT5oP4NaAUmyxP/UeYUn9yxtPcIzDlM5ullFnRv/71jyHpkQ==,
- }
+ resolution: {integrity: sha512-nwMrmhTI+Aeh9Gav9LHX/i8k8yDi/QpX5h535BlT5oP4NaAUmyxP/UeYUn9yxtPcIzDlM5ullFnRv/71jyHpkQ==}
hasBin: true
mkdirp@1.0.4:
- resolution:
- {
- integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==,
- }
- engines: { node: '>=10' }
+ resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==}
+ engines: {node: '>=10'}
hasBin: true
mock-req@0.2.0:
- resolution:
- {
- integrity: sha512-IUuwS0W5GjoPyjhuXPQJXpaHfHW7UYFRia8Cchm/xRuyDDclpSQdEoakt3krOpSYvgVlQsbnf0ePDsTRDfp7Dg==,
- }
+ resolution: {integrity: sha512-IUuwS0W5GjoPyjhuXPQJXpaHfHW7UYFRia8Cchm/xRuyDDclpSQdEoakt3krOpSYvgVlQsbnf0ePDsTRDfp7Dg==}
modify-values@1.0.1:
- resolution:
- {
- integrity: sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==,
- }
- engines: { node: '>=0.10.0' }
+ resolution: {integrity: sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==}
+ engines: {node: '>=0.10.0'}
moment-timezone@0.5.48:
- resolution:
- {
- integrity: sha512-f22b8LV1gbTO2ms2j2z13MuPogNoh5UzxL3nzNAYKGraILnbGc9NEE6dyiiiLv46DGRb8A4kg8UKWLjPthxBHw==,
- }
+ resolution: {integrity: sha512-f22b8LV1gbTO2ms2j2z13MuPogNoh5UzxL3nzNAYKGraILnbGc9NEE6dyiiiLv46DGRb8A4kg8UKWLjPthxBHw==}
moment@2.30.1:
- resolution:
- {
- integrity: sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==,
- }
+ resolution: {integrity: sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==}
ms@2.0.0:
- resolution:
- {
- integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==,
- }
+ resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==}
ms@2.1.3:
- resolution:
- {
- integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==,
- }
+ resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
multimatch@5.0.0:
- resolution:
- {
- integrity: sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA==,
- }
- engines: { node: '>=10' }
+ resolution: {integrity: sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA==}
+ engines: {node: '>=10'}
mute-stream@0.0.8:
- resolution:
- {
- integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==,
- }
+ resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==}
mute-stream@1.0.0:
- resolution:
- {
- integrity: sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==,
- }
- engines: { node: ^14.17.0 || ^16.13.0 || >=18.0.0 }
+ resolution: {integrity: sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==}
+ engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
nano-time@1.0.0:
- resolution:
- {
- integrity: sha512-flnngywOoQ0lLQOTRNexn2gGSNuM9bKj9RZAWSzhQ+UJYaAFG9bac4DW9VHjUAzrOaIcajHybCTHe/bkvozQqA==,
- }
+ resolution: {integrity: sha512-flnngywOoQ0lLQOTRNexn2gGSNuM9bKj9RZAWSzhQ+UJYaAFG9bac4DW9VHjUAzrOaIcajHybCTHe/bkvozQqA==}
napi-postinstall@0.3.4:
- resolution:
- {
- integrity: sha512-PHI5f1O0EP5xJ9gQmFGMS6IZcrVvTjpXjz7Na41gTE7eE2hK11lg04CECCYEEjdc17EV4DO+fkGEtt7TpTaTiQ==,
- }
- engines: { node: ^12.20.0 || ^14.18.0 || >=16.0.0 }
+ resolution: {integrity: sha512-PHI5f1O0EP5xJ9gQmFGMS6IZcrVvTjpXjz7Na41gTE7eE2hK11lg04CECCYEEjdc17EV4DO+fkGEtt7TpTaTiQ==}
+ engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0}
hasBin: true
natural-compare@1.4.0:
- resolution:
- {
- integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==,
- }
+ resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
negotiator@0.6.4:
- resolution:
- {
- integrity: sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==,
- }
- engines: { node: '>= 0.6' }
+ resolution: {integrity: sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==}
+ engines: {node: '>= 0.6'}
negotiator@1.0.0:
- resolution:
- {
- integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==,
- }
- engines: { node: '>= 0.6' }
+ resolution: {integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==}
+ engines: {node: '>= 0.6'}
neo-async@2.6.2:
- resolution:
- {
- integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==,
- }
+ resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==}
nested-obj@0.1.10:
- resolution:
- {
- integrity: sha512-5V2kUPrBee/tmoS2p0IJ35BcaJuW1p1yXF5GP8JpXIkDoPbaYeYypAHizUeZkAUxcC7Rago7izWmEq7qa8+Mhw==,
- }
+ resolution: {integrity: sha512-5V2kUPrBee/tmoS2p0IJ35BcaJuW1p1yXF5GP8JpXIkDoPbaYeYypAHizUeZkAUxcC7Rago7izWmEq7qa8+Mhw==}
nested-obj@0.1.5:
- resolution:
- {
- integrity: sha512-04Y7qDMlI8RbYTn0cJAKaw/mLrO9UmLj3xbrjTZKDfOn9f3b/RXEQFIIpveJlwn8KfPwdVFWLZUaL5gNuQ7G0w==,
- }
+ resolution: {integrity: sha512-04Y7qDMlI8RbYTn0cJAKaw/mLrO9UmLj3xbrjTZKDfOn9f3b/RXEQFIIpveJlwn8KfPwdVFWLZUaL5gNuQ7G0w==}
netmask@1.0.6:
- resolution:
- {
- integrity: sha512-3DWDqAtIiPSkBXZyYEjwebfK56nrlQfRGt642fu8RPaL+ePu750+HCMHxjJCG3iEHq/0aeMvX6KIzlv7nuhfrA==,
- }
- engines: { node: '>= 0.4.0' }
+ resolution: {integrity: sha512-3DWDqAtIiPSkBXZyYEjwebfK56nrlQfRGt642fu8RPaL+ePu750+HCMHxjJCG3iEHq/0aeMvX6KIzlv7nuhfrA==}
+ engines: {node: '>= 0.4.0'}
no-case@2.3.2:
- resolution:
- {
- integrity: sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==,
- }
+ resolution: {integrity: sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==}
node-fetch@2.6.7:
- resolution:
- {
- integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==,
- }
- engines: { node: 4.x || >=6.0.0 }
+ resolution: {integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==}
+ engines: {node: 4.x || >=6.0.0}
peerDependencies:
encoding: ^0.1.0
peerDependenciesMeta:
@@ -10128,11 +6725,8 @@ packages:
optional: true
node-fetch@2.7.0:
- resolution:
- {
- integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==,
- }
- engines: { node: 4.x || >=6.0.0 }
+ resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==}
+ engines: {node: 4.x || >=6.0.0}
peerDependencies:
encoding: ^0.1.0
peerDependenciesMeta:
@@ -10140,159 +6734,90 @@ packages:
optional: true
node-gyp@10.3.1:
- resolution:
- {
- integrity: sha512-Pp3nFHBThHzVtNY7U6JfPjvT/DTE8+o/4xKsLQtBoU+j2HLsGlhcfzflAoUreaJbNmYnX+LlLi0qjV8kpyO6xQ==,
- }
- engines: { node: ^16.14.0 || >=18.0.0 }
+ resolution: {integrity: sha512-Pp3nFHBThHzVtNY7U6JfPjvT/DTE8+o/4xKsLQtBoU+j2HLsGlhcfzflAoUreaJbNmYnX+LlLi0qjV8kpyO6xQ==}
+ engines: {node: ^16.14.0 || >=18.0.0}
hasBin: true
node-int64@0.4.0:
- resolution:
- {
- integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==,
- }
+ resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==}
node-machine-id@1.1.12:
- resolution:
- {
- integrity: sha512-QNABxbrPa3qEIfrE6GOJ7BYIuignnJw7iQ2YPbc3Nla1HzRJjXzZOiikfF8m7eAMfichLt3M4VgLOetqgDmgGQ==,
- }
+ resolution: {integrity: sha512-QNABxbrPa3qEIfrE6GOJ7BYIuignnJw7iQ2YPbc3Nla1HzRJjXzZOiikfF8m7eAMfichLt3M4VgLOetqgDmgGQ==}
node-releases@2.0.27:
- resolution:
- {
- integrity: sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==,
- }
+ resolution: {integrity: sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==}
node-schedule@1.3.2:
- resolution:
- {
- integrity: sha512-GIND2pHMHiReSZSvS6dpZcDH7pGPGFfWBIEud6S00Q8zEIzAs9ommdyRK1ZbQt8y1LyZsJYZgPnyi7gpU2lcdw==,
- }
+ resolution: {integrity: sha512-GIND2pHMHiReSZSvS6dpZcDH7pGPGFfWBIEud6S00Q8zEIzAs9ommdyRK1ZbQt8y1LyZsJYZgPnyi7gpU2lcdw==}
nodemon@3.1.11:
- resolution:
- {
- integrity: sha512-is96t8F/1//UHAjNPHpbsNY46ELPpftGUoSVNXwUfMk/qdjSylYrWSu1XavVTBOn526kFiOR733ATgNBCQyH0g==,
- }
- engines: { node: '>=10' }
+ resolution: {integrity: sha512-is96t8F/1//UHAjNPHpbsNY46ELPpftGUoSVNXwUfMk/qdjSylYrWSu1XavVTBOn526kFiOR733ATgNBCQyH0g==}
+ engines: {node: '>=10'}
hasBin: true
noms@0.0.0:
- resolution:
- {
- integrity: sha512-lNDU9VJaOPxUmXcLb+HQFeUgQQPtMI24Gt6hgfuMHRJgMRHMF/qZ4HJD3GDru4sSw9IQl2jPjAYnQrdIeLbwow==,
- }
+ resolution: {integrity: sha512-lNDU9VJaOPxUmXcLb+HQFeUgQQPtMI24Gt6hgfuMHRJgMRHMF/qZ4HJD3GDru4sSw9IQl2jPjAYnQrdIeLbwow==}
nopt@7.2.1:
- resolution:
- {
- integrity: sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w==,
- }
- engines: { node: ^14.17.0 || ^16.13.0 || >=18.0.0 }
+ resolution: {integrity: sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w==}
+ engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
hasBin: true
normalize-package-data@2.5.0:
- resolution:
- {
- integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==,
- }
+ resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==}
normalize-package-data@3.0.3:
- resolution:
- {
- integrity: sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==,
- }
- engines: { node: '>=10' }
+ resolution: {integrity: sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==}
+ engines: {node: '>=10'}
normalize-package-data@6.0.2:
- resolution:
- {
- integrity: sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==,
- }
- engines: { node: ^16.14.0 || >=18.0.0 }
+ resolution: {integrity: sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==}
+ engines: {node: ^16.14.0 || >=18.0.0}
normalize-path@3.0.0:
- resolution:
- {
- integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==,
- }
- engines: { node: '>=0.10.0' }
+ resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
+ engines: {node: '>=0.10.0'}
npm-bundled@3.0.1:
- resolution:
- {
- integrity: sha512-+AvaheE/ww1JEwRHOrn4WHNzOxGtVp+adrg2AeZS/7KuxGUYFuBta98wYpfHBbJp6Tg6j1NKSEVHNcfZzJHQwQ==,
- }
- engines: { node: ^14.17.0 || ^16.13.0 || >=18.0.0 }
+ resolution: {integrity: sha512-+AvaheE/ww1JEwRHOrn4WHNzOxGtVp+adrg2AeZS/7KuxGUYFuBta98wYpfHBbJp6Tg6j1NKSEVHNcfZzJHQwQ==}
+ engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
npm-install-checks@6.3.0:
- resolution:
- {
- integrity: sha512-W29RiK/xtpCGqn6f3ixfRYGk+zRyr+Ew9F2E20BfXxT5/euLdA/Nm7fO7OeTGuAmTs30cpgInyJ0cYe708YTZw==,
- }
- engines: { node: ^14.17.0 || ^16.13.0 || >=18.0.0 }
+ resolution: {integrity: sha512-W29RiK/xtpCGqn6f3ixfRYGk+zRyr+Ew9F2E20BfXxT5/euLdA/Nm7fO7OeTGuAmTs30cpgInyJ0cYe708YTZw==}
+ engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
npm-normalize-package-bin@3.0.1:
- resolution:
- {
- integrity: sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==,
- }
- engines: { node: ^14.17.0 || ^16.13.0 || >=18.0.0 }
+ resolution: {integrity: sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==}
+ engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
npm-package-arg@11.0.2:
- resolution:
- {
- integrity: sha512-IGN0IAwmhDJwy13Wc8k+4PEbTPhpJnMtfR53ZbOyjkvmEcLS4nCwp6mvMWjS5sUjeiW3mpx6cHmuhKEu9XmcQw==,
- }
- engines: { node: ^16.14.0 || >=18.0.0 }
+ resolution: {integrity: sha512-IGN0IAwmhDJwy13Wc8k+4PEbTPhpJnMtfR53ZbOyjkvmEcLS4nCwp6mvMWjS5sUjeiW3mpx6cHmuhKEu9XmcQw==}
+ engines: {node: ^16.14.0 || >=18.0.0}
npm-packlist@8.0.2:
- resolution:
- {
- integrity: sha512-shYrPFIS/JLP4oQmAwDyk5HcyysKW8/JLTEA32S0Z5TzvpaeeX2yMFfoK1fjEBnCBvVyIB/Jj/GBFdm0wsgzbA==,
- }
- engines: { node: ^14.17.0 || ^16.13.0 || >=18.0.0 }
+ resolution: {integrity: sha512-shYrPFIS/JLP4oQmAwDyk5HcyysKW8/JLTEA32S0Z5TzvpaeeX2yMFfoK1fjEBnCBvVyIB/Jj/GBFdm0wsgzbA==}
+ engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
npm-pick-manifest@9.1.0:
- resolution:
- {
- integrity: sha512-nkc+3pIIhqHVQr085X9d2JzPzLyjzQS96zbruppqC9aZRm/x8xx6xhI98gHtsfELP2bE+loHq8ZaHFHhe+NauA==,
- }
- engines: { node: ^16.14.0 || >=18.0.0 }
+ resolution: {integrity: sha512-nkc+3pIIhqHVQr085X9d2JzPzLyjzQS96zbruppqC9aZRm/x8xx6xhI98gHtsfELP2bE+loHq8ZaHFHhe+NauA==}
+ engines: {node: ^16.14.0 || >=18.0.0}
npm-registry-fetch@17.1.0:
- resolution:
- {
- integrity: sha512-5+bKQRH0J1xG1uZ1zMNvxW0VEyoNWgJpY9UDuluPFLKDfJ9u2JmmjmTJV1srBGQOROfdBMiVvnH2Zvpbm+xkVA==,
- }
- engines: { node: ^16.14.0 || >=18.0.0 }
+ resolution: {integrity: sha512-5+bKQRH0J1xG1uZ1zMNvxW0VEyoNWgJpY9UDuluPFLKDfJ9u2JmmjmTJV1srBGQOROfdBMiVvnH2Zvpbm+xkVA==}
+ engines: {node: ^16.14.0 || >=18.0.0}
npm-run-path@4.0.1:
- resolution:
- {
- integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==,
- }
- engines: { node: '>=8' }
+ resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==}
+ engines: {node: '>=8'}
nth-check@1.0.2:
- resolution:
- {
- integrity: sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==,
- }
+ resolution: {integrity: sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==}
nth-check@2.1.1:
- resolution:
- {
- integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==,
- }
+ resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==}
nx@20.8.3:
- resolution:
- {
- integrity: sha512-8w815WSMWar3A/LFzwtmEY+E8cVW62lMiFuPDXje+C8O8hFndfvscP56QHNMn2Zdhz3q0+BZUe+se4Em1BKYdA==,
- }
+ resolution: {integrity: sha512-8w815WSMWar3A/LFzwtmEY+E8cVW62lMiFuPDXje+C8O8hFndfvscP56QHNMn2Zdhz3q0+BZUe+se4Em1BKYdA==}
hasBin: true
peerDependencies:
'@swc-node/register': ^1.8.0
@@ -10304,481 +6829,265 @@ packages:
optional: true
oauth-sign@0.9.0:
- resolution:
- {
- integrity: sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==,
- }
+ resolution: {integrity: sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==}
object-assign@4.1.1:
- resolution:
- {
- integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==,
- }
- engines: { node: '>=0.10.0' }
+ resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
+ engines: {node: '>=0.10.0'}
object-inspect@1.13.4:
- resolution:
- {
- integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==,
- }
- engines: { node: '>= 0.4' }
+ resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==}
+ engines: {node: '>= 0.4'}
object-keys@1.1.1:
- resolution:
- {
- integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==,
- }
- engines: { node: '>= 0.4' }
+ resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==}
+ engines: {node: '>= 0.4'}
object-path@0.11.8:
- resolution:
- {
- integrity: sha512-YJjNZrlXJFM42wTBn6zgOJVar9KFJvzx6sTWDte8sWZF//cnjl0BxHNpfZx+ZffXX63A9q0b1zsFiBX4g4X5KA==,
- }
- engines: { node: '>= 10.12.0' }
+ resolution: {integrity: sha512-YJjNZrlXJFM42wTBn6zgOJVar9KFJvzx6sTWDte8sWZF//cnjl0BxHNpfZx+ZffXX63A9q0b1zsFiBX4g4X5KA==}
+ engines: {node: '>= 10.12.0'}
oblivious-set@1.0.0:
- resolution:
- {
- integrity: sha512-z+pI07qxo4c2CulUHCDf9lcqDlMSo72N/4rLUpRXf6fu+q8vjt8y0xS+Tlf8NTJDdTXHbdeO1n3MlbctwEoXZw==,
- }
+ resolution: {integrity: sha512-z+pI07qxo4c2CulUHCDf9lcqDlMSo72N/4rLUpRXf6fu+q8vjt8y0xS+Tlf8NTJDdTXHbdeO1n3MlbctwEoXZw==}
on-finished@2.3.0:
- resolution:
- {
- integrity: sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==,
- }
- engines: { node: '>= 0.8' }
+ resolution: {integrity: sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==}
+ engines: {node: '>= 0.8'}
on-finished@2.4.1:
- resolution:
- {
- integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==,
- }
- engines: { node: '>= 0.8' }
+ resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==}
+ engines: {node: '>= 0.8'}
once@1.4.0:
- resolution:
- {
- integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==,
- }
+ resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
onetime@5.1.2:
- resolution:
- {
- integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==,
- }
- engines: { node: '>=6' }
+ resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==}
+ engines: {node: '>=6'}
open@8.4.2:
- resolution:
- {
- integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==,
- }
- engines: { node: '>=12' }
+ resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==}
+ engines: {node: '>=12'}
optionator@0.8.3:
- resolution:
- {
- integrity: sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==,
- }
- engines: { node: '>= 0.8.0' }
+ resolution: {integrity: sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==}
+ engines: {node: '>= 0.8.0'}
optionator@0.9.4:
- resolution:
- {
- integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==,
- }
- engines: { node: '>= 0.8.0' }
+ resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==}
+ engines: {node: '>= 0.8.0'}
ora@5.3.0:
- resolution:
- {
- integrity: sha512-zAKMgGXUim0Jyd6CXK9lraBnD3H5yPGBPPOkC23a2BG6hsm4Zu6OQSjQuEtV0BHDf4aKHcUFvJiGRrFuW3MG8g==,
- }
- engines: { node: '>=10' }
+ resolution: {integrity: sha512-zAKMgGXUim0Jyd6CXK9lraBnD3H5yPGBPPOkC23a2BG6hsm4Zu6OQSjQuEtV0BHDf4aKHcUFvJiGRrFuW3MG8g==}
+ engines: {node: '>=10'}
ora@5.4.1:
- resolution:
- {
- integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==,
- }
- engines: { node: '>=10' }
+ resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==}
+ engines: {node: '>=10'}
p-finally@1.0.0:
- resolution:
- {
- integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==,
- }
- engines: { node: '>=4' }
+ resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==}
+ engines: {node: '>=4'}
p-limit@1.3.0:
- resolution:
- {
- integrity: sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==,
- }
- engines: { node: '>=4' }
+ resolution: {integrity: sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==}
+ engines: {node: '>=4'}
p-limit@2.3.0:
- resolution:
- {
- integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==,
- }
- engines: { node: '>=6' }
+ resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==}
+ engines: {node: '>=6'}
p-limit@3.1.0:
- resolution:
- {
- integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==,
- }
- engines: { node: '>=10' }
+ resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
+ engines: {node: '>=10'}
p-locate@2.0.0:
- resolution:
- {
- integrity: sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==,
- }
- engines: { node: '>=4' }
+ resolution: {integrity: sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==}
+ engines: {node: '>=4'}
p-locate@4.1.0:
- resolution:
- {
- integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==,
- }
- engines: { node: '>=8' }
+ resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==}
+ engines: {node: '>=8'}
p-locate@5.0.0:
- resolution:
- {
- integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==,
- }
- engines: { node: '>=10' }
+ resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
+ engines: {node: '>=10'}
p-map-series@2.1.0:
- resolution:
- {
- integrity: sha512-RpYIIK1zXSNEOdwxcfe7FdvGcs7+y5n8rifMhMNWvaxRNMPINJHF5GDeuVxWqnfrcHPSCnp7Oo5yNXHId9Av2Q==,
- }
- engines: { node: '>=8' }
+ resolution: {integrity: sha512-RpYIIK1zXSNEOdwxcfe7FdvGcs7+y5n8rifMhMNWvaxRNMPINJHF5GDeuVxWqnfrcHPSCnp7Oo5yNXHId9Av2Q==}
+ engines: {node: '>=8'}
p-map@4.0.0:
- resolution:
- {
- integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==,
- }
- engines: { node: '>=10' }
+ resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==}
+ engines: {node: '>=10'}
p-pipe@3.1.0:
- resolution:
- {
- integrity: sha512-08pj8ATpzMR0Y80x50yJHn37NF6vjrqHutASaX5LiH5npS9XPvrUmscd9MF5R4fuYRHOxQR1FfMIlF7AzwoPqw==,
- }
- engines: { node: '>=8' }
+ resolution: {integrity: sha512-08pj8ATpzMR0Y80x50yJHn37NF6vjrqHutASaX5LiH5npS9XPvrUmscd9MF5R4fuYRHOxQR1FfMIlF7AzwoPqw==}
+ engines: {node: '>=8'}
p-queue@6.6.2:
- resolution:
- {
- integrity: sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==,
- }
- engines: { node: '>=8' }
+ resolution: {integrity: sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==}
+ engines: {node: '>=8'}
p-reduce@2.1.0:
- resolution:
- {
- integrity: sha512-2USApvnsutq8uoxZBGbbWM0JIYLiEMJ9RlaN7fAzVNb9OZN0SHjjTTfIcb667XynS5Y1VhwDJVDa72TnPzAYWw==,
- }
- engines: { node: '>=8' }
+ resolution: {integrity: sha512-2USApvnsutq8uoxZBGbbWM0JIYLiEMJ9RlaN7fAzVNb9OZN0SHjjTTfIcb667XynS5Y1VhwDJVDa72TnPzAYWw==}
+ engines: {node: '>=8'}
p-timeout@3.2.0:
- resolution:
- {
- integrity: sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==,
- }
- engines: { node: '>=8' }
+ resolution: {integrity: sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==}
+ engines: {node: '>=8'}
p-try@1.0.0:
- resolution:
- {
- integrity: sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==,
- }
- engines: { node: '>=4' }
+ resolution: {integrity: sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==}
+ engines: {node: '>=4'}
p-try@2.2.0:
- resolution:
- {
- integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==,
- }
- engines: { node: '>=6' }
+ resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==}
+ engines: {node: '>=6'}
p-waterfall@2.1.1:
- resolution:
- {
- integrity: sha512-RRTnDb2TBG/epPRI2yYXsimO0v3BXC8Yd3ogr1545IaqKK17VGhbWVeGGN+XfCm/08OK8635nH31c8bATkHuSw==,
- }
- engines: { node: '>=8' }
+ resolution: {integrity: sha512-RRTnDb2TBG/epPRI2yYXsimO0v3BXC8Yd3ogr1545IaqKK17VGhbWVeGGN+XfCm/08OK8635nH31c8bATkHuSw==}
+ engines: {node: '>=8'}
pac-proxy-agent@3.0.1:
- resolution:
- {
- integrity: sha512-44DUg21G/liUZ48dJpUSjZnFfZro/0K5JTyFYLBcmh9+T6Ooi4/i4efwUiEy0+4oQusCBqWdhv16XohIj1GqnQ==,
- }
+ resolution: {integrity: sha512-44DUg21G/liUZ48dJpUSjZnFfZro/0K5JTyFYLBcmh9+T6Ooi4/i4efwUiEy0+4oQusCBqWdhv16XohIj1GqnQ==}
pac-resolver@3.0.0:
- resolution:
- {
- integrity: sha512-tcc38bsjuE3XZ5+4vP96OfhOugrX+JcnpUbhfuc4LuXBLQhoTthOstZeoQJBDnQUDYzYmdImKsbz0xSl1/9qeA==,
- }
+ resolution: {integrity: sha512-tcc38bsjuE3XZ5+4vP96OfhOugrX+JcnpUbhfuc4LuXBLQhoTthOstZeoQJBDnQUDYzYmdImKsbz0xSl1/9qeA==}
package-json-from-dist@1.0.1:
- resolution:
- {
- integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==,
- }
+ resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==}
pacote@18.0.6:
- resolution:
- {
- integrity: sha512-+eK3G27SMwsB8kLIuj4h1FUhHtwiEUo21Tw8wNjmvdlpOEr613edv+8FUsTj/4F/VN5ywGE19X18N7CC2EJk6A==,
- }
- engines: { node: ^16.14.0 || >=18.0.0 }
+ resolution: {integrity: sha512-+eK3G27SMwsB8kLIuj4h1FUhHtwiEUo21Tw8wNjmvdlpOEr613edv+8FUsTj/4F/VN5ywGE19X18N7CC2EJk6A==}
+ engines: {node: ^16.14.0 || >=18.0.0}
hasBin: true
param-case@2.1.1:
- resolution:
- {
- integrity: sha512-eQE845L6ot89sk2N8liD8HAuH4ca6Vvr7VWAWwt7+kvvG5aBcPmmphQ68JsEG2qa9n1TykS2DLeMt363AAH8/w==,
- }
+ resolution: {integrity: sha512-eQE845L6ot89sk2N8liD8HAuH4ca6Vvr7VWAWwt7+kvvG5aBcPmmphQ68JsEG2qa9n1TykS2DLeMt363AAH8/w==}
parent-module@1.0.1:
- resolution:
- {
- integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==,
- }
- engines: { node: '>=6' }
+ resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
+ engines: {node: '>=6'}
parse-conflict-json@3.0.1:
- resolution:
- {
- integrity: sha512-01TvEktc68vwbJOtWZluyWeVGWjP+bZwXtPDMQVbBKzbJ/vZBif0L69KH1+cHv1SZ6e0FKLvjyHe8mqsIqYOmw==,
- }
- engines: { node: ^14.17.0 || ^16.13.0 || >=18.0.0 }
+ resolution: {integrity: sha512-01TvEktc68vwbJOtWZluyWeVGWjP+bZwXtPDMQVbBKzbJ/vZBif0L69KH1+cHv1SZ6e0FKLvjyHe8mqsIqYOmw==}
+ engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
parse-json@4.0.0:
- resolution:
- {
- integrity: sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==,
- }
- engines: { node: '>=4' }
+ resolution: {integrity: sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==}
+ engines: {node: '>=4'}
parse-json@5.2.0:
- resolution:
- {
- integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==,
- }
- engines: { node: '>=8' }
+ resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==}
+ engines: {node: '>=8'}
parse-package-name@1.0.0:
- resolution:
- {
- integrity: sha512-kBeTUtcj+SkyfaW4+KBe0HtsloBJ/mKTPoxpVdA57GZiPerREsUWJOhVj9anXweFiJkm5y8FG1sxFZkZ0SN6wg==,
- }
+ resolution: {integrity: sha512-kBeTUtcj+SkyfaW4+KBe0HtsloBJ/mKTPoxpVdA57GZiPerREsUWJOhVj9anXweFiJkm5y8FG1sxFZkZ0SN6wg==}
parse-path@7.1.0:
- resolution:
- {
- integrity: sha512-EuCycjZtfPcjWk7KTksnJ5xPMvWGA/6i4zrLYhRG0hGvC3GPU/jGUj3Cy+ZR0v30duV3e23R95T1lE2+lsndSw==,
- }
+ resolution: {integrity: sha512-EuCycjZtfPcjWk7KTksnJ5xPMvWGA/6i4zrLYhRG0hGvC3GPU/jGUj3Cy+ZR0v30duV3e23R95T1lE2+lsndSw==}
parse-url@8.1.0:
- resolution:
- {
- integrity: sha512-xDvOoLU5XRrcOZvnI6b8zA6n9O9ejNk/GExuz1yBuWUGn9KA97GI6HTs6u02wKara1CeVmZhH+0TZFdWScR89w==,
- }
+ resolution: {integrity: sha512-xDvOoLU5XRrcOZvnI6b8zA6n9O9ejNk/GExuz1yBuWUGn9KA97GI6HTs6u02wKara1CeVmZhH+0TZFdWScR89w==}
parse5-htmlparser2-tree-adapter@7.1.0:
- resolution:
- {
- integrity: sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==,
- }
+ resolution: {integrity: sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==}
parse5-parser-stream@7.1.2:
- resolution:
- {
- integrity: sha512-JyeQc9iwFLn5TbvvqACIF/VXG6abODeB3Fwmv/TGdLk2LfbWkaySGY72at4+Ty7EkPZj854u4CrICqNk2qIbow==,
- }
+ resolution: {integrity: sha512-JyeQc9iwFLn5TbvvqACIF/VXG6abODeB3Fwmv/TGdLk2LfbWkaySGY72at4+Ty7EkPZj854u4CrICqNk2qIbow==}
parse5@3.0.3:
- resolution:
- {
- integrity: sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==,
- }
+ resolution: {integrity: sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==}
parse5@7.3.0:
- resolution:
- {
- integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==,
- }
+ resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==}
parseurl@1.3.3:
- resolution:
- {
- integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==,
- }
- engines: { node: '>= 0.8' }
-
- path-browserify@1.0.1:
- resolution:
- {
- integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==,
- }
+ resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==}
+ engines: {node: '>= 0.8'}
path-exists@3.0.0:
- resolution:
- {
- integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==,
- }
- engines: { node: '>=4' }
+ resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==}
+ engines: {node: '>=4'}
path-exists@4.0.0:
- resolution:
- {
- integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==,
- }
- engines: { node: '>=8' }
+ resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
+ engines: {node: '>=8'}
path-is-absolute@1.0.1:
- resolution:
- {
- integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==,
- }
- engines: { node: '>=0.10.0' }
+ resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
+ engines: {node: '>=0.10.0'}
path-key@3.1.1:
- resolution:
- {
- integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==,
- }
- engines: { node: '>=8' }
+ resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
+ engines: {node: '>=8'}
path-parse@1.0.7:
- resolution:
- {
- integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==,
- }
+ resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
path-proxy@1.0.0:
- resolution:
- {
- integrity: sha512-p9IuY9FRY1nU59RDW+tnLL6qMxmBnY03WGYxzy1FcqE5OMO5ggz7ahmOBH0JBS+9f95Yc7V5TZ+kHpTeFWaLQA==,
- }
+ resolution: {integrity: sha512-p9IuY9FRY1nU59RDW+tnLL6qMxmBnY03WGYxzy1FcqE5OMO5ggz7ahmOBH0JBS+9f95Yc7V5TZ+kHpTeFWaLQA==}
path-scurry@1.11.1:
- resolution:
- {
- integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==,
- }
- engines: { node: '>=16 || 14 >=14.18' }
+ resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==}
+ engines: {node: '>=16 || 14 >=14.18'}
path-scurry@2.0.1:
- resolution:
- {
- integrity: sha512-oWyT4gICAu+kaA7QWk/jvCHWarMKNs6pXOGWKDTr7cw4IGcUbW+PeTfbaQiLGheFRpjo6O9J0PmyMfQPjH71oA==,
- }
- engines: { node: 20 || >=22 }
+ resolution: {integrity: sha512-oWyT4gICAu+kaA7QWk/jvCHWarMKNs6pXOGWKDTr7cw4IGcUbW+PeTfbaQiLGheFRpjo6O9J0PmyMfQPjH71oA==}
+ engines: {node: 20 || >=22}
path-to-regexp@8.3.0:
- resolution:
- {
- integrity: sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA==,
- }
+ resolution: {integrity: sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA==}
path-type@3.0.0:
- resolution:
- {
- integrity: sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==,
- }
- engines: { node: '>=4' }
+ resolution: {integrity: sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==}
+ engines: {node: '>=4'}
performance-now@2.1.0:
- resolution:
- {
- integrity: sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==,
- }
+ resolution: {integrity: sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==}
pg-cloudflare@1.2.7:
- resolution:
- {
- integrity: sha512-YgCtzMH0ptvZJslLM1ffsY4EuGaU0cx4XSdXLRFae8bPP4dS5xL1tNB3k2o/N64cHJpwU7dxKli/nZ2lUa5fLg==,
- }
+ resolution: {integrity: sha512-YgCtzMH0ptvZJslLM1ffsY4EuGaU0cx4XSdXLRFae8bPP4dS5xL1tNB3k2o/N64cHJpwU7dxKli/nZ2lUa5fLg==}
pg-connection-string@2.9.1:
- resolution:
- {
- integrity: sha512-nkc6NpDcvPVpZXxrreI/FOtX3XemeLl8E0qFr6F2Lrm/I8WOnaWNhIPK2Z7OHpw7gh5XJThi6j6ppgNoaT1w4w==,
- }
+ resolution: {integrity: sha512-nkc6NpDcvPVpZXxrreI/FOtX3XemeLl8E0qFr6F2Lrm/I8WOnaWNhIPK2Z7OHpw7gh5XJThi6j6ppgNoaT1w4w==}
pg-copy-streams@7.0.0:
- resolution:
- {
- integrity: sha512-zBvnY6wtaBRE2ae2xXWOOGMaNVPkXh1vhypAkNSKgMdciJeTyIQAHZaEeRAxUjs/p1El5jgzYmwG5u871Zj3dQ==,
- }
+ resolution: {integrity: sha512-zBvnY6wtaBRE2ae2xXWOOGMaNVPkXh1vhypAkNSKgMdciJeTyIQAHZaEeRAxUjs/p1El5jgzYmwG5u871Zj3dQ==}
pg-int8@1.0.1:
- resolution:
- {
- integrity: sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==,
- }
- engines: { node: '>=4.0.0' }
+ resolution: {integrity: sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==}
+ engines: {node: '>=4.0.0'}
pg-pool@3.10.1:
- resolution:
- {
- integrity: sha512-Tu8jMlcX+9d8+QVzKIvM/uJtp07PKr82IUOYEphaWcoBhIYkoHpLXN3qO59nAI11ripznDsEzEv8nUxBVWajGg==,
- }
+ resolution: {integrity: sha512-Tu8jMlcX+9d8+QVzKIvM/uJtp07PKr82IUOYEphaWcoBhIYkoHpLXN3qO59nAI11ripznDsEzEv8nUxBVWajGg==}
peerDependencies:
pg: '>=8.0'
pg-proto-parser@1.30.4:
- resolution:
- {
- integrity: sha512-+9/n8zfYQVNRc8KGhxxNXO8NA5OKni01IPtit6+C3sLMtcRVVFCj4W0XtrEGFivNjz2qwUtFmRhG8OGMTxs6hg==,
- }
+ resolution: {integrity: sha512-+9/n8zfYQVNRc8KGhxxNXO8NA5OKni01IPtit6+C3sLMtcRVVFCj4W0XtrEGFivNjz2qwUtFmRhG8OGMTxs6hg==}
pg-protocol@1.10.3:
- resolution:
- {
- integrity: sha512-6DIBgBQaTKDJyxnXaLiLR8wBpQQcGWuAESkRBX/t6OwA8YsqP+iVSiond2EDy6Y/dsGk8rh/jtax3js5NeV7JQ==,
- }
+ resolution: {integrity: sha512-6DIBgBQaTKDJyxnXaLiLR8wBpQQcGWuAESkRBX/t6OwA8YsqP+iVSiond2EDy6Y/dsGk8rh/jtax3js5NeV7JQ==}
pg-sql2@4.14.1:
- resolution:
- {
- integrity: sha512-DvL0K9Pqz47EFq+BaQlGpzsXJnArKoAbxBxtHLy2/p3ey1X7ZwUF79UwFoDSTxQQCIbR4Z5D8CBI0nPfpw9Tmw==,
- }
- engines: { node: '>=8.6' }
+ resolution: {integrity: sha512-DvL0K9Pqz47EFq+BaQlGpzsXJnArKoAbxBxtHLy2/p3ey1X7ZwUF79UwFoDSTxQQCIbR4Z5D8CBI0nPfpw9Tmw==}
+ engines: {node: '>=8.6'}
peerDependencies:
pg: '>=6.1.0 <9'
pg-tsquery@8.4.2:
- resolution:
- {
- integrity: sha512-waJSlBIKE+shDhuDpuQglTH6dG5zakDhnrnxu8XB8V5c7yoDSuy4pOxY6t2dyoxTjaKMcMmlByJN7n9jx9eqMA==,
- }
- engines: { node: '>=10' }
+ resolution: {integrity: sha512-waJSlBIKE+shDhuDpuQglTH6dG5zakDhnrnxu8XB8V5c7yoDSuy4pOxY6t2dyoxTjaKMcMmlByJN7n9jx9eqMA==}
+ engines: {node: '>=10'}
pg-types@2.2.0:
- resolution:
- {
- integrity: sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==,
- }
- engines: { node: '>=4' }
+ resolution: {integrity: sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==}
+ engines: {node: '>=4'}
pg@8.16.3:
- resolution:
- {
- integrity: sha512-enxc1h0jA/aq5oSDMvqyW3q89ra6XIIDZgCX9vkMrnz5DFTw/Ny3Li2lFQ+pt3L6MCgm/5o2o8HW9hiJji+xvw==,
- }
- engines: { node: '>= 16.0.0' }
+ resolution: {integrity: sha512-enxc1h0jA/aq5oSDMvqyW3q89ra6XIIDZgCX9vkMrnz5DFTw/Ny3Li2lFQ+pt3L6MCgm/5o2o8HW9hiJji+xvw==}
+ engines: {node: '>= 16.0.0'}
peerDependencies:
pg-native: '>=3.0.1'
peerDependenciesMeta:
@@ -10786,247 +7095,142 @@ packages:
optional: true
pgpass@1.0.5:
- resolution:
- {
- integrity: sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==,
- }
+ resolution: {integrity: sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==}
pgsql-deparser@17.17.2:
- resolution:
- {
- integrity: sha512-FCjqKY3Sdmce3VUd3CxCXF0kqaZ0s4a6yIMT5UJ9vETh0cF54A8Tpqjn0qBKaPUD8xqTKeLdS+SfiwjAC64wrA==,
- }
+ resolution: {integrity: sha512-FCjqKY3Sdmce3VUd3CxCXF0kqaZ0s4a6yIMT5UJ9vETh0cF54A8Tpqjn0qBKaPUD8xqTKeLdS+SfiwjAC64wrA==}
pgsql-parser@17.9.11:
- resolution:
- {
- integrity: sha512-Bqp9uLvJK0Qht9PXzI6eC/Fn+lFRL+2eMvXss4D4qt7lxPLIHS8FMKYOHUQNTI3m6ylExSOdNXhx/DL5UGm3xg==,
- }
+ resolution: {integrity: sha512-Bqp9uLvJK0Qht9PXzI6eC/Fn+lFRL+2eMvXss4D4qt7lxPLIHS8FMKYOHUQNTI3m6ylExSOdNXhx/DL5UGm3xg==}
picocolors@1.1.1:
- resolution:
- {
- integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==,
- }
+ resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
picomatch@2.3.1:
- resolution:
- {
- integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==,
- }
- engines: { node: '>=8.6' }
+ resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
+ engines: {node: '>=8.6'}
picomatch@4.0.3:
- resolution:
- {
- integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==,
- }
- engines: { node: '>=12' }
+ resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==}
+ engines: {node: '>=12'}
pify@2.3.0:
- resolution:
- {
- integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==,
- }
- engines: { node: '>=0.10.0' }
+ resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==}
+ engines: {node: '>=0.10.0'}
pify@3.0.0:
- resolution:
- {
- integrity: sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==,
- }
- engines: { node: '>=4' }
+ resolution: {integrity: sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==}
+ engines: {node: '>=4'}
pify@4.0.1:
- resolution:
- {
- integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==,
- }
- engines: { node: '>=6' }
+ resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==}
+ engines: {node: '>=6'}
pify@5.0.0:
- resolution:
- {
- integrity: sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==,
- }
- engines: { node: '>=10' }
+ resolution: {integrity: sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==}
+ engines: {node: '>=10'}
pirates@4.0.7:
- resolution:
- {
- integrity: sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==,
- }
- engines: { node: '>= 6' }
+ resolution: {integrity: sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==}
+ engines: {node: '>= 6'}
pkg-dir@4.2.0:
- resolution:
- {
- integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==,
- }
- engines: { node: '>=8' }
+ resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==}
+ engines: {node: '>=8'}
playwright-core@1.57.0:
- resolution:
- {
- integrity: sha512-agTcKlMw/mjBWOnD6kFZttAAGHgi/Nw0CZ2o6JqWSbMlI219lAFLZZCyqByTsvVAJq5XA5H8cA6PrvBRpBWEuQ==,
- }
- engines: { node: '>=18' }
+ resolution: {integrity: sha512-agTcKlMw/mjBWOnD6kFZttAAGHgi/Nw0CZ2o6JqWSbMlI219lAFLZZCyqByTsvVAJq5XA5H8cA6PrvBRpBWEuQ==}
+ engines: {node: '>=18'}
hasBin: true
playwright@1.57.0:
- resolution:
- {
- integrity: sha512-ilYQj1s8sr2ppEJ2YVadYBN0Mb3mdo9J0wQ+UuDhzYqURwSoW4n1Xs5vs7ORwgDGmyEh33tRMeS8KhdkMoLXQw==,
- }
- engines: { node: '>=18' }
+ resolution: {integrity: sha512-ilYQj1s8sr2ppEJ2YVadYBN0Mb3mdo9J0wQ+UuDhzYqURwSoW4n1Xs5vs7ORwgDGmyEh33tRMeS8KhdkMoLXQw==}
+ engines: {node: '>=18'}
hasBin: true
pluralize@7.0.0:
- resolution:
- {
- integrity: sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==,
- }
- engines: { node: '>=4' }
+ resolution: {integrity: sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==}
+ engines: {node: '>=4'}
postcss-selector-parser@6.1.2:
- resolution:
- {
- integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==,
- }
- engines: { node: '>=4' }
+ resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==}
+ engines: {node: '>=4'}
postcss-value-parser@4.2.0:
- resolution:
- {
- integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==,
- }
+ resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==}
postgraphile-core@4.14.1:
- resolution:
- {
- integrity: sha512-3U6DAoGUmOikl9dVQhSJcw4cLeG0vQQnvEFw7MR0rvn125c1xdv6UBvamvX0pOzSfz5oBrFRQkZ2LvclAXKyBQ==,
- }
- engines: { node: '>=8.6' }
+ resolution: {integrity: sha512-3U6DAoGUmOikl9dVQhSJcw4cLeG0vQQnvEFw7MR0rvn125c1xdv6UBvamvX0pOzSfz5oBrFRQkZ2LvclAXKyBQ==}
+ engines: {node: '>=8.6'}
peerDependencies:
graphql: '>=0.9 <0.14 || ^14.0.2 || ^15.4.0'
pg: '>=6.1.0 <9'
postgraphile@4.14.1:
- resolution:
- {
- integrity: sha512-4Rz//TtnjyZk6CbrcypWJNFRwXupHK+bHvaYaX2RrtxMJ2lTaoMDYOdEFESdo/POie3CAEbsC8ZBqb9eR/EyVw==,
- }
- engines: { node: '>=8.6' }
+ resolution: {integrity: sha512-4Rz//TtnjyZk6CbrcypWJNFRwXupHK+bHvaYaX2RrtxMJ2lTaoMDYOdEFESdo/POie3CAEbsC8ZBqb9eR/EyVw==}
+ engines: {node: '>=8.6'}
hasBin: true
postgres-array@2.0.0:
- resolution:
- {
- integrity: sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==,
- }
- engines: { node: '>=4' }
+ resolution: {integrity: sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==}
+ engines: {node: '>=4'}
postgres-bytea@1.0.1:
- resolution:
- {
- integrity: sha512-5+5HqXnsZPE65IJZSMkZtURARZelel2oXUEO8rH83VS/hxH5vv1uHquPg5wZs8yMAfdv971IU+kcPUczi7NVBQ==,
- }
- engines: { node: '>=0.10.0' }
+ resolution: {integrity: sha512-5+5HqXnsZPE65IJZSMkZtURARZelel2oXUEO8rH83VS/hxH5vv1uHquPg5wZs8yMAfdv971IU+kcPUczi7NVBQ==}
+ engines: {node: '>=0.10.0'}
postgres-date@1.0.7:
- resolution:
- {
- integrity: sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==,
- }
- engines: { node: '>=0.10.0' }
+ resolution: {integrity: sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==}
+ engines: {node: '>=0.10.0'}
postgres-interval@1.2.0:
- resolution:
- {
- integrity: sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==,
- }
- engines: { node: '>=0.10.0' }
+ resolution: {integrity: sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==}
+ engines: {node: '>=0.10.0'}
prelude-ls@1.1.2:
- resolution:
- {
- integrity: sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==,
- }
- engines: { node: '>= 0.8.0' }
+ resolution: {integrity: sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==}
+ engines: {node: '>= 0.8.0'}
prelude-ls@1.2.1:
- resolution:
- {
- integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==,
- }
- engines: { node: '>= 0.8.0' }
+ resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
+ engines: {node: '>= 0.8.0'}
prettier@3.7.4:
- resolution:
- {
- integrity: sha512-v6UNi1+3hSlVvv8fSaoUbggEM5VErKmmpGA7Pl3HF8V6uKY7rvClBOJlH6yNwQtfTueNkGVpOv/mtWL9L4bgRA==,
- }
- engines: { node: '>=14' }
+ resolution: {integrity: sha512-v6UNi1+3hSlVvv8fSaoUbggEM5VErKmmpGA7Pl3HF8V6uKY7rvClBOJlH6yNwQtfTueNkGVpOv/mtWL9L4bgRA==}
+ engines: {node: '>=14'}
hasBin: true
pretty-format@26.6.2:
- resolution:
- {
- integrity: sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==,
- }
- engines: { node: '>= 10' }
+ resolution: {integrity: sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==}
+ engines: {node: '>= 10'}
pretty-format@29.7.0:
- resolution:
- {
- integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==,
- }
- engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 }
+ resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
pretty-format@30.2.0:
- resolution:
- {
- integrity: sha512-9uBdv/B4EefsuAL+pWqueZyZS2Ba+LxfFeQ9DN14HU4bN8bhaxKdkpjpB6fs9+pSjIBu+FXQHImEg8j/Lw0+vA==,
- }
- engines: { node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0 }
+ resolution: {integrity: sha512-9uBdv/B4EefsuAL+pWqueZyZS2Ba+LxfFeQ9DN14HU4bN8bhaxKdkpjpB6fs9+pSjIBu+FXQHImEg8j/Lw0+vA==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
proc-log@4.2.0:
- resolution:
- {
- integrity: sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==,
- }
- engines: { node: ^14.17.0 || ^16.13.0 || >=18.0.0 }
+ resolution: {integrity: sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==}
+ engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
process-nextick-args@2.0.1:
- resolution:
- {
- integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==,
- }
+ resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==}
proggy@2.0.0:
- resolution:
- {
- integrity: sha512-69agxLtnI8xBs9gUGqEnK26UfiexpHy+KUpBQWabiytQjnn5wFY8rklAi7GRfABIuPNnQ/ik48+LGLkYYJcy4A==,
- }
- engines: { node: ^14.17.0 || ^16.13.0 || >=18.0.0 }
+ resolution: {integrity: sha512-69agxLtnI8xBs9gUGqEnK26UfiexpHy+KUpBQWabiytQjnn5wFY8rklAi7GRfABIuPNnQ/ik48+LGLkYYJcy4A==}
+ engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
promise-all-reject-late@1.0.1:
- resolution:
- {
- integrity: sha512-vuf0Lf0lOxyQREH7GDIOUMLS7kz+gs8i6B+Yi8dC68a2sychGrHTJYghMBD6k7eUcH0H5P73EckCA48xijWqXw==,
- }
+ resolution: {integrity: sha512-vuf0Lf0lOxyQREH7GDIOUMLS7kz+gs8i6B+Yi8dC68a2sychGrHTJYghMBD6k7eUcH0H5P73EckCA48xijWqXw==}
promise-call-limit@3.0.2:
- resolution:
- {
- integrity: sha512-mRPQO2T1QQVw11E7+UdCJu7S61eJVWknzml9sC1heAdj1jxl0fWMBypIt9ZOcLFf8FkG995ZD7RnVk7HH72fZw==,
- }
+ resolution: {integrity: sha512-mRPQO2T1QQVw11E7+UdCJu7S61eJVWknzml9sC1heAdj1jxl0fWMBypIt9ZOcLFf8FkG995ZD7RnVk7HH72fZw==}
promise-inflight@1.0.1:
- resolution:
- {
- integrity: sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==,
- }
+ resolution: {integrity: sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==}
peerDependencies:
bluebird: '*'
peerDependenciesMeta:
@@ -11034,195 +7238,108 @@ packages:
optional: true
promise-retry@2.0.1:
- resolution:
- {
- integrity: sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==,
- }
- engines: { node: '>=10' }
+ resolution: {integrity: sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==}
+ engines: {node: '>=10'}
promisify-call@2.0.4:
- resolution:
- {
- integrity: sha512-ZX68J1+1Pe0I8NC0P6Ji3fDDcJceVfpoygfDLgdb1fp5vW9IRlwSpDaxe1T5HgwchyHV2DsL/pWzWikUiWEbLQ==,
- }
- engines: { node: '>=4.0' }
+ resolution: {integrity: sha512-ZX68J1+1Pe0I8NC0P6Ji3fDDcJceVfpoygfDLgdb1fp5vW9IRlwSpDaxe1T5HgwchyHV2DsL/pWzWikUiWEbLQ==}
+ engines: {node: '>=4.0'}
prompts@2.4.2:
- resolution:
- {
- integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==,
- }
- engines: { node: '>= 6' }
+ resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==}
+ engines: {node: '>= 6'}
promzard@1.0.2:
- resolution:
- {
- integrity: sha512-2FPputGL+mP3jJ3UZg/Dl9YOkovB7DX0oOr+ck5QbZ5MtORtds8k/BZdn+02peDLI8/YWbmzx34k5fA+fHvCVQ==,
- }
- engines: { node: ^14.17.0 || ^16.13.0 || >=18.0.0 }
+ resolution: {integrity: sha512-2FPputGL+mP3jJ3UZg/Dl9YOkovB7DX0oOr+ck5QbZ5MtORtds8k/BZdn+02peDLI8/YWbmzx34k5fA+fHvCVQ==}
+ engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
proto-list@1.2.4:
- resolution:
- {
- integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==,
- }
+ resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==}
protocols@2.0.2:
- resolution:
- {
- integrity: sha512-hHVTzba3wboROl0/aWRRG9dMytgH6ow//STBZh43l/wQgmMhYhOFi0EHWAPtoCz9IAUymsyP0TSBHkhgMEGNnQ==,
- }
+ resolution: {integrity: sha512-hHVTzba3wboROl0/aWRRG9dMytgH6ow//STBZh43l/wQgmMhYhOFi0EHWAPtoCz9IAUymsyP0TSBHkhgMEGNnQ==}
proxy-addr@2.0.7:
- resolution:
- {
- integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==,
- }
- engines: { node: '>= 0.10' }
+ resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==}
+ engines: {node: '>= 0.10'}
proxy-agent@3.1.1:
- resolution:
- {
- integrity: sha512-WudaR0eTsDx33O3EJE16PjBRZWcX8GqCEeERw1W3hZJgH/F2a46g7jty6UGty6NeJ4CKQy8ds2CJPMiyeqaTvw==,
- }
- engines: { node: '>=6' }
+ resolution: {integrity: sha512-WudaR0eTsDx33O3EJE16PjBRZWcX8GqCEeERw1W3hZJgH/F2a46g7jty6UGty6NeJ4CKQy8ds2CJPMiyeqaTvw==}
+ engines: {node: '>=6'}
proxy-from-env@1.1.0:
- resolution:
- {
- integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==,
- }
+ resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==}
pseudomap@1.0.2:
- resolution:
- {
- integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==,
- }
+ resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==}
psl@1.15.0:
- resolution:
- {
- integrity: sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==,
- }
+ resolution: {integrity: sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==}
pstree.remy@1.1.8:
- resolution:
- {
- integrity: sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==,
- }
+ resolution: {integrity: sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==}
punycode@2.3.1:
- resolution:
- {
- integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==,
- }
- engines: { node: '>=6' }
+ resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
+ engines: {node: '>=6'}
pure-rand@6.1.0:
- resolution:
- {
- integrity: sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==,
- }
+ resolution: {integrity: sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==}
pure-rand@7.0.1:
- resolution:
- {
- integrity: sha512-oTUZM/NAZS8p7ANR3SHh30kXB+zK2r2BPcEn/awJIbOvq82WoMN4p62AWWp3Hhw50G0xMsw1mhIBLqHw64EcNQ==,
- }
+ resolution: {integrity: sha512-oTUZM/NAZS8p7ANR3SHh30kXB+zK2r2BPcEn/awJIbOvq82WoMN4p62AWWp3Hhw50G0xMsw1mhIBLqHw64EcNQ==}
qs@6.14.0:
- resolution:
- {
- integrity: sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==,
- }
- engines: { node: '>=0.6' }
+ resolution: {integrity: sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==}
+ engines: {node: '>=0.6'}
qs@6.5.3:
- resolution:
- {
- integrity: sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==,
- }
- engines: { node: '>=0.6' }
+ resolution: {integrity: sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==}
+ engines: {node: '>=0.6'}
qs@6.7.0:
- resolution:
- {
- integrity: sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==,
- }
- engines: { node: '>=0.6' }
+ resolution: {integrity: sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==}
+ engines: {node: '>=0.6'}
queue-microtask@1.2.3:
- resolution:
- {
- integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==,
- }
+ resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
quick-lru@4.0.1:
- resolution:
- {
- integrity: sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==,
- }
- engines: { node: '>=8' }
+ resolution: {integrity: sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==}
+ engines: {node: '>=8'}
range-parser@1.2.1:
- resolution:
- {
- integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==,
- }
- engines: { node: '>= 0.6' }
+ resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==}
+ engines: {node: '>= 0.6'}
raw-body@2.4.0:
- resolution:
- {
- integrity: sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==,
- }
- engines: { node: '>= 0.8' }
+ resolution: {integrity: sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==}
+ engines: {node: '>= 0.8'}
raw-body@2.5.3:
- resolution:
- {
- integrity: sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==,
- }
- engines: { node: '>= 0.8' }
+ resolution: {integrity: sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==}
+ engines: {node: '>= 0.8'}
raw-body@3.0.2:
- resolution:
- {
- integrity: sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==,
- }
- engines: { node: '>= 0.10' }
+ resolution: {integrity: sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==}
+ engines: {node: '>= 0.10'}
react-dom@19.2.3:
- resolution:
- {
- integrity: sha512-yELu4WmLPw5Mr/lmeEpox5rw3RETacE++JgHqQzd2dg+YbJuat3jH4ingc+WPZhxaoFzdv9y33G+F7Nl5O0GBg==,
- }
+ resolution: {integrity: sha512-yELu4WmLPw5Mr/lmeEpox5rw3RETacE++JgHqQzd2dg+YbJuat3jH4ingc+WPZhxaoFzdv9y33G+F7Nl5O0GBg==}
peerDependencies:
react: ^19.2.3
react-is@16.13.1:
- resolution:
- {
- integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==,
- }
+ resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==}
react-is@17.0.2:
- resolution:
- {
- integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==,
- }
+ resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==}
react-is@18.3.1:
- resolution:
- {
- integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==,
- }
+ resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==}
react-query@3.39.3:
- resolution:
- {
- integrity: sha512-nLfLz7GiohKTJDuT4us4X3h/8unOh+00MLb2yJoGTPjxKs2bc1iDhkNx2bd5MKklXnOD3NrVZ+J2UXujA5In4g==,
- }
+ resolution: {integrity: sha512-nLfLz7GiohKTJDuT4us4X3h/8unOh+00MLb2yJoGTPjxKs2bc1iDhkNx2bd5MKklXnOD3NrVZ+J2UXujA5In4g==}
peerDependencies:
react: ^16.8.0 || ^17.0.0 || ^18.0.0
react-dom: '*'
@@ -11234,941 +7351,527 @@ packages:
optional: true
react@19.2.3:
- resolution:
- {
- integrity: sha512-Ku/hhYbVjOQnXDZFv2+RibmLFGwFdeeKHFcOTlrt7xplBnya5OGn/hIRDsqDiSUcfORsDC7MPxwork8jBwsIWA==,
- }
- engines: { node: '>=0.10.0' }
+ resolution: {integrity: sha512-Ku/hhYbVjOQnXDZFv2+RibmLFGwFdeeKHFcOTlrt7xplBnya5OGn/hIRDsqDiSUcfORsDC7MPxwork8jBwsIWA==}
+ engines: {node: '>=0.10.0'}
read-cmd-shim@4.0.0:
- resolution:
- {
- integrity: sha512-yILWifhaSEEytfXI76kB9xEEiG1AiozaCJZ83A87ytjRiN+jVibXjedjCRNjoZviinhG+4UkalO3mWTd8u5O0Q==,
- }
- engines: { node: ^14.17.0 || ^16.13.0 || >=18.0.0 }
+ resolution: {integrity: sha512-yILWifhaSEEytfXI76kB9xEEiG1AiozaCJZ83A87ytjRiN+jVibXjedjCRNjoZviinhG+4UkalO3mWTd8u5O0Q==}
+ engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
read-package-json-fast@3.0.2:
- resolution:
- {
- integrity: sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw==,
- }
- engines: { node: ^14.17.0 || ^16.13.0 || >=18.0.0 }
+ resolution: {integrity: sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw==}
+ engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
read-pkg-up@3.0.0:
- resolution:
- {
- integrity: sha512-YFzFrVvpC6frF1sz8psoHDBGF7fLPc+llq/8NB43oagqWkx8ar5zYtsTORtOjw9W2RHLpWP+zTWwBvf1bCmcSw==,
- }
- engines: { node: '>=4' }
+ resolution: {integrity: sha512-YFzFrVvpC6frF1sz8psoHDBGF7fLPc+llq/8NB43oagqWkx8ar5zYtsTORtOjw9W2RHLpWP+zTWwBvf1bCmcSw==}
+ engines: {node: '>=4'}
read-pkg-up@7.0.1:
- resolution:
- {
- integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==,
- }
- engines: { node: '>=8' }
+ resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==}
+ engines: {node: '>=8'}
read-pkg@3.0.0:
- resolution:
- {
- integrity: sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==,
- }
- engines: { node: '>=4' }
+ resolution: {integrity: sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==}
+ engines: {node: '>=4'}
read-pkg@5.2.0:
- resolution:
- {
- integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==,
- }
- engines: { node: '>=8' }
+ resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==}
+ engines: {node: '>=8'}
read@3.0.1:
- resolution:
- {
- integrity: sha512-SLBrDU/Srs/9EoWhU5GdbAoxG1GzpQHo/6qiGItaoLJ1thmYpcNIM1qISEUvyHBzfGlWIyd6p2DNi1oV1VmAuw==,
- }
- engines: { node: ^14.17.0 || ^16.13.0 || >=18.0.0 }
+ resolution: {integrity: sha512-SLBrDU/Srs/9EoWhU5GdbAoxG1GzpQHo/6qiGItaoLJ1thmYpcNIM1qISEUvyHBzfGlWIyd6p2DNi1oV1VmAuw==}
+ engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
readable-stream@1.0.34:
- resolution:
- {
- integrity: sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==,
- }
+ resolution: {integrity: sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==}
readable-stream@1.1.14:
- resolution:
- {
- integrity: sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==,
- }
+ resolution: {integrity: sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==}
readable-stream@2.3.8:
- resolution:
- {
- integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==,
- }
+ resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==}
readable-stream@3.6.2:
- resolution:
- {
- integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==,
- }
- engines: { node: '>= 6' }
+ resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==}
+ engines: {node: '>= 6'}
readdirp@3.6.0:
- resolution:
- {
- integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==,
- }
- engines: { node: '>=8.10.0' }
+ resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
+ engines: {node: '>=8.10.0'}
redent@3.0.0:
- resolution:
- {
- integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==,
- }
- engines: { node: '>=8' }
+ resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==}
+ engines: {node: '>=8'}
regenerator-runtime@0.10.5:
- resolution:
- {
- integrity: sha512-02YopEIhAgiBHWeoTiA8aitHDt8z6w+rQqNuIftlM+ZtvSl/brTouaU7DW6GO/cHtvxJvS4Hwv2ibKdxIRi24w==,
- }
+ resolution: {integrity: sha512-02YopEIhAgiBHWeoTiA8aitHDt8z6w+rQqNuIftlM+ZtvSl/brTouaU7DW6GO/cHtvxJvS4Hwv2ibKdxIRi24w==}
relateurl@0.2.7:
- resolution:
- {
- integrity: sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==,
- }
- engines: { node: '>= 0.10' }
+ resolution: {integrity: sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==}
+ engines: {node: '>= 0.10'}
remove-accents@0.5.0:
- resolution:
- {
- integrity: sha512-8g3/Otx1eJaVD12e31UbJj1YzdtVvzH85HV7t+9MJYk/u3XmkOUJ5Ys9wQrf9PCPK8+xn4ymzqYCiZl6QWKn+A==,
- }
+ resolution: {integrity: sha512-8g3/Otx1eJaVD12e31UbJj1YzdtVvzH85HV7t+9MJYk/u3XmkOUJ5Ys9wQrf9PCPK8+xn4ymzqYCiZl6QWKn+A==}
request-ip@3.3.0:
- resolution:
- {
- integrity: sha512-cA6Xh6e0fDBBBwH77SLJaJPBmD3nWVAcF9/XAcsrIHdjhFzFiB5aNQFytdjCGPezU3ROwrR11IddKAM08vohxA==,
- }
+ resolution: {integrity: sha512-cA6Xh6e0fDBBBwH77SLJaJPBmD3nWVAcF9/XAcsrIHdjhFzFiB5aNQFytdjCGPezU3ROwrR11IddKAM08vohxA==}
request@2.88.2:
- resolution:
- {
- integrity: sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==,
- }
- engines: { node: '>= 6' }
+ resolution: {integrity: sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==}
+ engines: {node: '>= 6'}
deprecated: request has been deprecated, see https://github.com/request/request/issues/3142
require-directory@2.1.1:
- resolution:
- {
- integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==,
- }
- engines: { node: '>=0.10.0' }
+ resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
+ engines: {node: '>=0.10.0'}
require-from-string@2.0.2:
- resolution:
- {
- integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==,
- }
- engines: { node: '>=0.10.0' }
+ resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==}
+ engines: {node: '>=0.10.0'}
require-main-filename@2.0.0:
- resolution:
- {
- integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==,
- }
+ resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==}
resolve-cwd@3.0.0:
- resolution:
- {
- integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==,
- }
- engines: { node: '>=8' }
+ resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==}
+ engines: {node: '>=8'}
resolve-from@4.0.0:
- resolution:
- {
- integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==,
- }
- engines: { node: '>=4' }
+ resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
+ engines: {node: '>=4'}
resolve-from@5.0.0:
- resolution:
- {
- integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==,
- }
- engines: { node: '>=8' }
+ resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==}
+ engines: {node: '>=8'}
resolve-pkg-maps@1.0.0:
- resolution:
- {
- integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==,
- }
+ resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==}
resolve.exports@2.0.3:
- resolution:
- {
- integrity: sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==,
- }
- engines: { node: '>=10' }
+ resolution: {integrity: sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==}
+ engines: {node: '>=10'}
resolve@1.22.11:
- resolution:
- {
- integrity: sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==,
- }
- engines: { node: '>= 0.4' }
+ resolution: {integrity: sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==}
+ engines: {node: '>= 0.4'}
hasBin: true
restore-cursor@3.1.0:
- resolution:
- {
- integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==,
- }
- engines: { node: '>=8' }
+ resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==}
+ engines: {node: '>=8'}
retry@0.12.0:
- resolution:
- {
- integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==,
- }
- engines: { node: '>= 4' }
+ resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==}
+ engines: {node: '>= 4'}
reusify@1.1.0:
- resolution:
- {
- integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==,
- }
- engines: { iojs: '>=1.0.0', node: '>=0.10.0' }
+ resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==}
+ engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
rimraf@3.0.2:
- resolution:
- {
- integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==,
- }
+ resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==}
deprecated: Rimraf versions prior to v4 are no longer supported
hasBin: true
rimraf@4.4.1:
- resolution:
- {
- integrity: sha512-Gk8NlF062+T9CqNGn6h4tls3k6T1+/nXdOcSZVikNVtlRdYpA7wRJJMoXmuvOnLW844rPjdQ7JgXCYM6PPC/og==,
- }
- engines: { node: '>=14' }
+ resolution: {integrity: sha512-Gk8NlF062+T9CqNGn6h4tls3k6T1+/nXdOcSZVikNVtlRdYpA7wRJJMoXmuvOnLW844rPjdQ7JgXCYM6PPC/og==}
+ engines: {node: '>=14'}
hasBin: true
router@2.2.0:
- resolution:
- {
- integrity: sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==,
- }
- engines: { node: '>= 18' }
+ resolution: {integrity: sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==}
+ engines: {node: '>= 18'}
run-async@2.4.1:
- resolution:
- {
- integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==,
- }
- engines: { node: '>=0.12.0' }
+ resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==}
+ engines: {node: '>=0.12.0'}
run-parallel@1.2.0:
- resolution:
- {
- integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==,
- }
+ resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
rxjs@7.8.2:
- resolution:
- {
- integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==,
- }
+ resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==}
safe-buffer@5.1.2:
- resolution:
- {
- integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==,
- }
+ resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==}
safe-buffer@5.2.1:
- resolution:
- {
- integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==,
- }
+ resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
safer-buffer@2.1.2:
- resolution:
- {
- integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==,
- }
+ resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
scheduler@0.27.0:
- resolution:
- {
- integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==,
- }
+ resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==}
semver@5.7.2:
- resolution:
- {
- integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==,
- }
+ resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==}
hasBin: true
semver@6.3.1:
- resolution:
- {
- integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==,
- }
+ resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
hasBin: true
semver@7.7.3:
- resolution:
- {
- integrity: sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==,
- }
- engines: { node: '>=10' }
+ resolution: {integrity: sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==}
+ engines: {node: '>=10'}
hasBin: true
send@1.2.1:
- resolution:
- {
- integrity: sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==,
- }
- engines: { node: '>= 18' }
+ resolution: {integrity: sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==}
+ engines: {node: '>= 18'}
serve-static@2.2.1:
- resolution:
- {
- integrity: sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==,
- }
- engines: { node: '>= 18' }
+ resolution: {integrity: sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==}
+ engines: {node: '>= 18'}
set-blocking@2.0.0:
- resolution:
- {
- integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==,
- }
+ resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==}
set-function-length@1.2.2:
- resolution:
- {
- integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==,
- }
- engines: { node: '>= 0.4' }
+ resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==}
+ engines: {node: '>= 0.4'}
setprototypeof@1.1.1:
- resolution:
- {
- integrity: sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==,
- }
+ resolution: {integrity: sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==}
setprototypeof@1.2.0:
- resolution:
- {
- integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==,
- }
+ resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==}
shallow-clone@3.0.1:
- resolution:
- {
- integrity: sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==,
- }
- engines: { node: '>=8' }
+ resolution: {integrity: sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==}
+ engines: {node: '>=8'}
shallowequal@1.1.0:
- resolution:
- {
- integrity: sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==,
- }
+ resolution: {integrity: sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==}
shebang-command@2.0.0:
- resolution:
- {
- integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==,
- }
- engines: { node: '>=8' }
+ resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
+ engines: {node: '>=8'}
shebang-regex@3.0.0:
- resolution:
- {
- integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==,
- }
- engines: { node: '>=8' }
+ resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
+ engines: {node: '>=8'}
shelljs@0.10.0:
- resolution:
- {
- integrity: sha512-Jex+xw5Mg2qMZL3qnzXIfaxEtBaC4n7xifqaqtrZDdlheR70OGkydrPJWT0V1cA1k3nanC86x9FwAmQl6w3Klw==,
- }
- engines: { node: '>=18' }
+ resolution: {integrity: sha512-Jex+xw5Mg2qMZL3qnzXIfaxEtBaC4n7xifqaqtrZDdlheR70OGkydrPJWT0V1cA1k3nanC86x9FwAmQl6w3Klw==}
+ engines: {node: '>=18'}
side-channel-list@1.0.0:
- resolution:
- {
- integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==,
- }
- engines: { node: '>= 0.4' }
+ resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==}
+ engines: {node: '>= 0.4'}
side-channel-map@1.0.1:
- resolution:
- {
- integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==,
- }
- engines: { node: '>= 0.4' }
+ resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==}
+ engines: {node: '>= 0.4'}
side-channel-weakmap@1.0.2:
- resolution:
- {
- integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==,
- }
- engines: { node: '>= 0.4' }
+ resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==}
+ engines: {node: '>= 0.4'}
side-channel@1.1.0:
- resolution:
- {
- integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==,
- }
- engines: { node: '>= 0.4' }
+ resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==}
+ engines: {node: '>= 0.4'}
signal-exit@3.0.7:
- resolution:
- {
- integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==,
- }
+ resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==}
signal-exit@4.1.0:
- resolution:
- {
- integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==,
- }
- engines: { node: '>=14' }
+ resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==}
+ engines: {node: '>=14'}
sigstore@2.3.1:
- resolution:
- {
- integrity: sha512-8G+/XDU8wNsJOQS5ysDVO0Etg9/2uA5gR9l4ZwijjlwxBcrU6RPfwi2+jJmbP+Ap1Hlp/nVAaEO4Fj22/SL2gQ==,
- }
- engines: { node: ^16.14.0 || >=18.0.0 }
+ resolution: {integrity: sha512-8G+/XDU8wNsJOQS5ysDVO0Etg9/2uA5gR9l4ZwijjlwxBcrU6RPfwi2+jJmbP+Ap1Hlp/nVAaEO4Fj22/SL2gQ==}
+ engines: {node: ^16.14.0 || >=18.0.0}
simple-update-notifier@2.0.0:
- resolution:
- {
- integrity: sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==,
- }
- engines: { node: '>=10' }
+ resolution: {integrity: sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==}
+ engines: {node: '>=10'}
sisteransi@1.0.5:
- resolution:
- {
- integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==,
- }
+ resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==}
slash@3.0.0:
- resolution:
- {
- integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==,
- }
- engines: { node: '>=8' }
+ resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==}
+ engines: {node: '>=8'}
slick@1.12.2:
- resolution:
- {
- integrity: sha512-4qdtOGcBjral6YIBCWJ0ljFSKNLz9KkhbWtuGvUyRowl1kxfuE1x/Z/aJcaiilpb3do9bl5K7/1h9XC5wWpY/A==,
- }
+ resolution: {integrity: sha512-4qdtOGcBjral6YIBCWJ0ljFSKNLz9KkhbWtuGvUyRowl1kxfuE1x/Z/aJcaiilpb3do9bl5K7/1h9XC5wWpY/A==}
smart-buffer@4.2.0:
- resolution:
- {
- integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==,
- }
- engines: { node: '>= 6.0.0', npm: '>= 3.0.0' }
+ resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==}
+ engines: {node: '>= 6.0.0', npm: '>= 3.0.0'}
socks-proxy-agent@4.0.2:
- resolution:
- {
- integrity: sha512-NT6syHhI9LmuEMSK6Kd2V7gNv5KFZoLE7V5udWmn0de+3Mkj3UMA/AJPLyeNUVmElCurSHtUdM3ETpR3z770Wg==,
- }
- engines: { node: '>= 6' }
+ resolution: {integrity: sha512-NT6syHhI9LmuEMSK6Kd2V7gNv5KFZoLE7V5udWmn0de+3Mkj3UMA/AJPLyeNUVmElCurSHtUdM3ETpR3z770Wg==}
+ engines: {node: '>= 6'}
socks-proxy-agent@8.0.5:
- resolution:
- {
- integrity: sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==,
- }
- engines: { node: '>= 14' }
+ resolution: {integrity: sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==}
+ engines: {node: '>= 14'}
socks@2.3.3:
- resolution:
- {
- integrity: sha512-o5t52PCNtVdiOvzMry7wU4aOqYWL0PeCXRWBEiJow4/i/wr+wpsJQ9awEu1EonLIqsfGd5qSgDdxEOvCdmBEpA==,
- }
- engines: { node: '>= 6.0.0', npm: '>= 3.0.0' }
+ resolution: {integrity: sha512-o5t52PCNtVdiOvzMry7wU4aOqYWL0PeCXRWBEiJow4/i/wr+wpsJQ9awEu1EonLIqsfGd5qSgDdxEOvCdmBEpA==}
+ engines: {node: '>= 6.0.0', npm: '>= 3.0.0'}
socks@2.8.7:
- resolution:
- {
- integrity: sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A==,
- }
- engines: { node: '>= 10.0.0', npm: '>= 3.0.0' }
+ resolution: {integrity: sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A==}
+ engines: {node: '>= 10.0.0', npm: '>= 3.0.0'}
sort-keys@2.0.0:
- resolution:
- {
- integrity: sha512-/dPCrG1s3ePpWm6yBbxZq5Be1dXGLyLn9Z791chDC3NFrpkVbWGzkBwPN1knaciexFXgRJ7hzdnwZ4stHSDmjg==,
- }
- engines: { node: '>=4' }
+ resolution: {integrity: sha512-/dPCrG1s3ePpWm6yBbxZq5Be1dXGLyLn9Z791chDC3NFrpkVbWGzkBwPN1knaciexFXgRJ7hzdnwZ4stHSDmjg==}
+ engines: {node: '>=4'}
sorted-array-functions@1.3.0:
- resolution:
- {
- integrity: sha512-2sqgzeFlid6N4Z2fUQ1cvFmTOLRi/sEDzSQ0OKYchqgoPmQBVyM3959qYx3fpS6Esef80KjmpgPeEr028dP3OA==,
- }
+ resolution: {integrity: sha512-2sqgzeFlid6N4Z2fUQ1cvFmTOLRi/sEDzSQ0OKYchqgoPmQBVyM3959qYx3fpS6Esef80KjmpgPeEr028dP3OA==}
source-map-resolve@0.6.0:
- resolution:
- {
- integrity: sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w==,
- }
+ resolution: {integrity: sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w==}
deprecated: See https://github.com/lydell/source-map-resolve#deprecated
source-map-support@0.5.13:
- resolution:
- {
- integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==,
- }
+ resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==}
source-map@0.6.1:
- resolution:
- {
- integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==,
- }
- engines: { node: '>=0.10.0' }
+ resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
+ engines: {node: '>=0.10.0'}
spdx-correct@3.2.0:
- resolution:
- {
- integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==,
- }
+ resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==}
spdx-exceptions@2.5.0:
- resolution:
- {
- integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==,
- }
+ resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==}
spdx-expression-parse@3.0.1:
- resolution:
- {
- integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==,
- }
+ resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==}
spdx-license-ids@3.0.22:
- resolution:
- {
- integrity: sha512-4PRT4nh1EImPbt2jASOKHX7PB7I+e4IWNLvkKFDxNhJlfjbYlleYQh285Z/3mPTHSAK/AvdMmw5BNNuYH8ShgQ==,
- }
+ resolution: {integrity: sha512-4PRT4nh1EImPbt2jASOKHX7PB7I+e4IWNLvkKFDxNhJlfjbYlleYQh285Z/3mPTHSAK/AvdMmw5BNNuYH8ShgQ==}
split2@3.2.2:
- resolution:
- {
- integrity: sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==,
- }
+ resolution: {integrity: sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==}
split2@4.2.0:
- resolution:
- {
- integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==,
- }
- engines: { node: '>= 10.x' }
+ resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==}
+ engines: {node: '>= 10.x'}
split@1.0.1:
- resolution:
- {
- integrity: sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==,
- }
+ resolution: {integrity: sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==}
sprintf-js@1.0.3:
- resolution:
- {
- integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==,
- }
+ resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==}
sshpk@1.18.0:
- resolution:
- {
- integrity: sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==,
- }
- engines: { node: '>=0.10.0' }
+ resolution: {integrity: sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==}
+ engines: {node: '>=0.10.0'}
hasBin: true
ssri@10.0.6:
- resolution:
- {
- integrity: sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==,
- }
- engines: { node: ^14.17.0 || ^16.13.0 || >=18.0.0 }
+ resolution: {integrity: sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==}
+ engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
stack-utils@2.0.6:
- resolution:
- {
- integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==,
- }
- engines: { node: '>=10' }
+ resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==}
+ engines: {node: '>=10'}
statuses@1.5.0:
- resolution:
- {
- integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==,
- }
- engines: { node: '>= 0.6' }
+ resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==}
+ engines: {node: '>= 0.6'}
statuses@2.0.2:
- resolution:
- {
- integrity: sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==,
- }
- engines: { node: '>= 0.8' }
+ resolution: {integrity: sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==}
+ engines: {node: '>= 0.8'}
stream-browserify@3.0.0:
- resolution:
- {
- integrity: sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==,
- }
+ resolution: {integrity: sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==}
streamsearch@0.1.2:
- resolution:
- {
- integrity: sha512-jos8u++JKm0ARcSUTAZXOVC0mSox7Bhn6sBgty73P1f3JGf7yG2clTbBNHUdde/kdvP2FESam+vM6l8jBrNxHA==,
- }
- engines: { node: '>=0.8.0' }
+ resolution: {integrity: sha512-jos8u++JKm0ARcSUTAZXOVC0mSox7Bhn6sBgty73P1f3JGf7yG2clTbBNHUdde/kdvP2FESam+vM6l8jBrNxHA==}
+ engines: {node: '>=0.8.0'}
strfy-js@3.1.10:
- resolution:
- {
- integrity: sha512-KQXNrvhnWpn4ya25WSG6EvJC6oqdeXlwMoitGl3qEJ2wnELV/sQO6uBy6CsIWTsVOMAt0B7/xvM40ucu5c8AuA==,
- }
+ resolution: {integrity: sha512-KQXNrvhnWpn4ya25WSG6EvJC6oqdeXlwMoitGl3qEJ2wnELV/sQO6uBy6CsIWTsVOMAt0B7/xvM40ucu5c8AuA==}
string-length@4.0.2:
- resolution:
- {
- integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==,
- }
- engines: { node: '>=10' }
+ resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==}
+ engines: {node: '>=10'}
string-width@4.2.3:
- resolution:
- {
- integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==,
- }
- engines: { node: '>=8' }
+ 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' }
+ resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==}
+ engines: {node: '>=12'}
string_decoder@0.10.31:
- resolution:
- {
- integrity: sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==,
- }
+ resolution: {integrity: sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==}
string_decoder@1.1.1:
- resolution:
- {
- integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==,
- }
+ resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==}
string_decoder@1.3.0:
- resolution:
- {
- integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==,
- }
+ resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==}
strip-ansi@6.0.1:
- resolution:
- {
- integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==,
- }
- engines: { node: '>=8' }
+ resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
+ engines: {node: '>=8'}
strip-ansi@7.1.2:
- resolution:
- {
- integrity: sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==,
- }
- engines: { node: '>=12' }
+ resolution: {integrity: sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==}
+ engines: {node: '>=12'}
strip-bom@3.0.0:
- resolution:
- {
- integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==,
- }
- engines: { node: '>=4' }
+ resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
+ engines: {node: '>=4'}
strip-bom@4.0.0:
- resolution:
- {
- integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==,
- }
- engines: { node: '>=8' }
+ resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==}
+ engines: {node: '>=8'}
strip-final-newline@2.0.0:
- resolution:
- {
- integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==,
- }
- engines: { node: '>=6' }
+ resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==}
+ engines: {node: '>=6'}
strip-indent@3.0.0:
- resolution:
- {
- integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==,
- }
- engines: { node: '>=8' }
+ resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==}
+ engines: {node: '>=8'}
strip-json-comments@3.1.1:
- resolution:
- {
- integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==,
- }
- engines: { node: '>=8' }
+ resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
+ engines: {node: '>=8'}
strnum@2.1.2:
- resolution:
- {
- integrity: sha512-l63NF9y/cLROq/yqKXSLtcMeeyOfnSQlfMSlzFt/K73oIaD8DGaQWd7Z34X9GPiKqP5rbSh84Hl4bOlLcjiSrQ==,
- }
+ resolution: {integrity: sha512-l63NF9y/cLROq/yqKXSLtcMeeyOfnSQlfMSlzFt/K73oIaD8DGaQWd7Z34X9GPiKqP5rbSh84Hl4bOlLcjiSrQ==}
styled-components@5.3.11:
- resolution:
- {
- integrity: sha512-uuzIIfnVkagcVHv9nE0VPlHPSCmXIUGKfJ42LNjxCCTDTL5sgnJ8Z7GZBq0EnLYGln77tPpEpExt2+qa+cZqSw==,
- }
- engines: { node: '>=10' }
+ resolution: {integrity: sha512-uuzIIfnVkagcVHv9nE0VPlHPSCmXIUGKfJ42LNjxCCTDTL5sgnJ8Z7GZBq0EnLYGln77tPpEpExt2+qa+cZqSw==}
+ engines: {node: '>=10'}
peerDependencies:
react: '>= 16.8.0'
react-dom: '>= 16.8.0'
react-is: '>= 16.8.0'
styled-system@5.1.5:
- resolution:
- {
- integrity: sha512-7VoD0o2R3RKzOzPK0jYrVnS8iJdfkKsQJNiLRDjikOpQVqQHns/DXWaPZOH4tIKkhAT7I6wIsy9FWTWh2X3q+A==,
- }
+ resolution: {integrity: sha512-7VoD0o2R3RKzOzPK0jYrVnS8iJdfkKsQJNiLRDjikOpQVqQHns/DXWaPZOH4tIKkhAT7I6wIsy9FWTWh2X3q+A==}
subscriptions-transport-ws@0.9.19:
- resolution:
- {
- integrity: sha512-dxdemxFFB0ppCLg10FTtRqH/31FNRL1y1BQv8209MK5I4CwALb7iihQg+7p65lFcIl8MHatINWBLOqpgU4Kyyw==,
- }
+ resolution: {integrity: sha512-dxdemxFFB0ppCLg10FTtRqH/31FNRL1y1BQv8209MK5I4CwALb7iihQg+7p65lFcIl8MHatINWBLOqpgU4Kyyw==}
deprecated: The `subscriptions-transport-ws` package is no longer maintained. We recommend you use `graphql-ws` instead. For help migrating Apollo software to `graphql-ws`, see https://www.apollographql.com/docs/apollo-server/data/subscriptions/#switching-from-subscriptions-transport-ws For general help using `graphql-ws`, see https://github.com/enisdenjo/graphql-ws/blob/master/README.md
peerDependencies:
graphql: '>=0.10.0'
supports-color@5.5.0:
- resolution:
- {
- integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==,
- }
- engines: { node: '>=4' }
+ resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==}
+ engines: {node: '>=4'}
supports-color@7.2.0:
- resolution:
- {
- integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==,
- }
- engines: { node: '>=8' }
+ resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
+ engines: {node: '>=8'}
supports-color@8.1.1:
- resolution:
- {
- integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==,
- }
- engines: { node: '>=10' }
+ resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==}
+ engines: {node: '>=10'}
supports-preserve-symlinks-flag@1.0.0:
- resolution:
- {
- integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==,
- }
- engines: { node: '>= 0.4' }
+ resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
+ engines: {node: '>= 0.4'}
symbol-observable@1.2.0:
- resolution:
- {
- integrity: sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==,
- }
- engines: { node: '>=0.10.0' }
+ resolution: {integrity: sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==}
+ engines: {node: '>=0.10.0'}
synckit@0.11.11:
- resolution:
- {
- integrity: sha512-MeQTA1r0litLUf0Rp/iisCaL8761lKAZHaimlbGK4j0HysC4PLfqygQj9srcs0m2RdtDYnF8UuYyKpbjHYp7Jw==,
- }
- engines: { node: ^14.18.0 || >=16.0.0 }
+ resolution: {integrity: sha512-MeQTA1r0litLUf0Rp/iisCaL8761lKAZHaimlbGK4j0HysC4PLfqygQj9srcs0m2RdtDYnF8UuYyKpbjHYp7Jw==}
+ engines: {node: ^14.18.0 || >=16.0.0}
tar-stream@2.2.0:
- resolution:
- {
- integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==,
- }
- engines: { node: '>=6' }
+ resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==}
+ engines: {node: '>=6'}
tar@6.2.1:
- resolution:
- {
- integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==,
- }
- engines: { node: '>=10' }
+ resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==}
+ engines: {node: '>=10'}
temp-dir@1.0.0:
- resolution:
- {
- integrity: sha512-xZFXEGbG7SNC3itwBzI3RYjq/cEhBkx2hJuKGIUOcEULmkQExXiHat2z/qkISYsuR+IKumhEfKKbV5qXmhICFQ==,
- }
- engines: { node: '>=4' }
+ resolution: {integrity: sha512-xZFXEGbG7SNC3itwBzI3RYjq/cEhBkx2hJuKGIUOcEULmkQExXiHat2z/qkISYsuR+IKumhEfKKbV5qXmhICFQ==}
+ engines: {node: '>=4'}
test-exclude@6.0.0:
- resolution:
- {
- integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==,
- }
- engines: { node: '>=8' }
+ resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==}
+ engines: {node: '>=8'}
text-extensions@1.9.0:
- resolution:
- {
- integrity: sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==,
- }
- engines: { node: '>=0.10' }
+ resolution: {integrity: sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==}
+ engines: {node: '>=0.10'}
through2@2.0.5:
- resolution:
- {
- integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==,
- }
+ resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==}
through2@3.0.2:
- resolution:
- {
- integrity: sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ==,
- }
+ resolution: {integrity: sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ==}
through@2.3.8:
- resolution:
- {
- integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==,
- }
+ resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==}
thunkify@2.1.2:
- resolution:
- {
- integrity: sha512-w9foI80XcGImrhMQ19pxunaEC5Rp2uzxZZg4XBAFRfiLOplk3F0l7wo+bO16vC2/nlQfR/mXZxcduo0MF2GWLg==,
- }
+ resolution: {integrity: sha512-w9foI80XcGImrhMQ19pxunaEC5Rp2uzxZZg4XBAFRfiLOplk3F0l7wo+bO16vC2/nlQfR/mXZxcduo0MF2GWLg==}
tinyglobby@0.2.12:
- resolution:
- {
- integrity: sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww==,
- }
- engines: { node: '>=12.0.0' }
+ resolution: {integrity: sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww==}
+ engines: {node: '>=12.0.0'}
tinyglobby@0.2.15:
- resolution:
- {
- integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==,
- }
- engines: { node: '>=12.0.0' }
+ resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==}
+ engines: {node: '>=12.0.0'}
tmp@0.2.5:
- resolution:
- {
- integrity: sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==,
- }
- engines: { node: '>=14.14' }
+ resolution: {integrity: sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==}
+ engines: {node: '>=14.14'}
tmpl@1.0.5:
- resolution:
- {
- integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==,
- }
+ resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==}
to-regex-range@5.0.1:
- resolution:
- {
- integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==,
- }
- engines: { node: '>=8.0' }
+ resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
+ engines: {node: '>=8.0'}
toidentifier@1.0.0:
- resolution:
- {
- integrity: sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==,
- }
- engines: { node: '>=0.6' }
+ resolution: {integrity: sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==}
+ engines: {node: '>=0.6'}
toidentifier@1.0.1:
- resolution:
- {
- integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==,
- }
- engines: { node: '>=0.6' }
+ resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==}
+ engines: {node: '>=0.6'}
touch@3.1.1:
- resolution:
- {
- integrity: sha512-r0eojU4bI8MnHr8c5bNo7lJDdI2qXlWWJk6a9EAFG7vbhTjElYhBVS3/miuE0uOuoLdb8Mc/rVfsmm6eo5o9GA==,
- }
+ resolution: {integrity: sha512-r0eojU4bI8MnHr8c5bNo7lJDdI2qXlWWJk6a9EAFG7vbhTjElYhBVS3/miuE0uOuoLdb8Mc/rVfsmm6eo5o9GA==}
hasBin: true
tough-cookie@2.5.0:
- resolution:
- {
- integrity: sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==,
- }
- engines: { node: '>=0.8' }
+ resolution: {integrity: sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==}
+ engines: {node: '>=0.8'}
tr46@0.0.3:
- resolution:
- {
- integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==,
- }
+ resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
treeverse@3.0.0:
- resolution:
- {
- integrity: sha512-gcANaAnd2QDZFmHFEOF4k7uc1J/6a6z3DJMd/QwEyxLoKGiptJRwid582r7QIsFlFMIZ3SnxfS52S4hm2DHkuQ==,
- }
- engines: { node: ^14.17.0 || ^16.13.0 || >=18.0.0 }
+ resolution: {integrity: sha512-gcANaAnd2QDZFmHFEOF4k7uc1J/6a6z3DJMd/QwEyxLoKGiptJRwid582r7QIsFlFMIZ3SnxfS52S4hm2DHkuQ==}
+ engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
trim-newlines@3.0.1:
- resolution:
- {
- integrity: sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==,
- }
- engines: { node: '>=8' }
+ resolution: {integrity: sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==}
+ engines: {node: '>=8'}
ts-api-utils@2.1.0:
- resolution:
- {
- integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==,
- }
- engines: { node: '>=18.12' }
+ resolution: {integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==}
+ engines: {node: '>=18.12'}
peerDependencies:
typescript: '>=4.8.4'
ts-jest@29.4.6:
- resolution:
- {
- integrity: sha512-fSpWtOO/1AjSNQguk43hb/JCo16oJDnMJf3CdEGNkqsEX3t0KX96xvyX1D7PfLCpVoKu4MfVrqUkFyblYoY4lA==,
- }
- engines: { node: ^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0 }
+ resolution: {integrity: sha512-fSpWtOO/1AjSNQguk43hb/JCo16oJDnMJf3CdEGNkqsEX3t0KX96xvyX1D7PfLCpVoKu4MfVrqUkFyblYoY4lA==}
+ engines: {node: ^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0}
hasBin: true
peerDependencies:
'@babel/core': '>=7.0.0-beta.0 <8'
@@ -12193,17 +7896,8 @@ packages:
jest-util:
optional: true
- ts-morph@27.0.2:
- resolution:
- {
- integrity: sha512-fhUhgeljcrdZ+9DZND1De1029PrE+cMkIP7ooqkLRTrRLTqcki2AstsyJm0vRNbTbVCNJ0idGlbBrfqc7/nA8w==,
- }
-
ts-node@10.9.2:
- resolution:
- {
- integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==,
- }
+ resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==}
hasBin: true
peerDependencies:
'@swc/core': '>=1.2.50'
@@ -12217,513 +7911,288 @@ packages:
optional: true
tsconfig-paths@4.2.0:
- resolution:
- {
- integrity: sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==,
- }
- engines: { node: '>=6' }
+ resolution: {integrity: sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==}
+ engines: {node: '>=6'}
tslib@2.8.1:
- resolution:
- {
- integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==,
- }
+ resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
tsscmp@1.0.6:
- resolution:
- {
- integrity: sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==,
- }
- engines: { node: '>=0.6.x' }
+ resolution: {integrity: sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==}
+ engines: {node: '>=0.6.x'}
tsx@4.21.0:
- resolution:
- {
- integrity: sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==,
- }
- engines: { node: '>=18.0.0' }
+ resolution: {integrity: sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==}
+ engines: {node: '>=18.0.0'}
hasBin: true
tuf-js@2.2.1:
- resolution:
- {
- integrity: sha512-GwIJau9XaA8nLVbUXsN3IlFi7WmQ48gBUrl3FTkkL/XLu/POhBzfmX9hd33FNMX1qAsfl6ozO1iMmW9NC8YniA==,
- }
- engines: { node: ^16.14.0 || >=18.0.0 }
+ resolution: {integrity: sha512-GwIJau9XaA8nLVbUXsN3IlFi7WmQ48gBUrl3FTkkL/XLu/POhBzfmX9hd33FNMX1qAsfl6ozO1iMmW9NC8YniA==}
+ engines: {node: ^16.14.0 || >=18.0.0}
tunnel-agent@0.6.0:
- resolution:
- {
- integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==,
- }
+ resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==}
tweetnacl@0.14.5:
- resolution:
- {
- integrity: sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==,
- }
+ resolution: {integrity: sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==}
type-check@0.3.2:
- resolution:
- {
- integrity: sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==,
- }
- engines: { node: '>= 0.8.0' }
+ resolution: {integrity: sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==}
+ engines: {node: '>= 0.8.0'}
type-check@0.4.0:
- resolution:
- {
- integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==,
- }
- engines: { node: '>= 0.8.0' }
+ resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
+ engines: {node: '>= 0.8.0'}
type-detect@4.0.8:
- resolution:
- {
- integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==,
- }
- engines: { node: '>=4' }
+ resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==}
+ engines: {node: '>=4'}
type-fest@0.18.1:
- resolution:
- {
- integrity: sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==,
- }
- engines: { node: '>=10' }
+ resolution: {integrity: sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==}
+ engines: {node: '>=10'}
type-fest@0.21.3:
- resolution:
- {
- integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==,
- }
- engines: { node: '>=10' }
+ resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==}
+ engines: {node: '>=10'}
type-fest@0.4.1:
- resolution:
- {
- integrity: sha512-IwzA/LSfD2vC1/YDYMv/zHP4rDF1usCwllsDpbolT3D4fUepIO7f9K70jjmUewU/LmGUKJcwcVtDCpnKk4BPMw==,
- }
- engines: { node: '>=6' }
+ resolution: {integrity: sha512-IwzA/LSfD2vC1/YDYMv/zHP4rDF1usCwllsDpbolT3D4fUepIO7f9K70jjmUewU/LmGUKJcwcVtDCpnKk4BPMw==}
+ engines: {node: '>=6'}
type-fest@0.6.0:
- resolution:
- {
- integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==,
- }
- engines: { node: '>=8' }
+ resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==}
+ engines: {node: '>=8'}
type-fest@0.8.1:
- resolution:
- {
- integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==,
- }
- engines: { node: '>=8' }
+ resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==}
+ engines: {node: '>=8'}
type-fest@4.41.0:
- resolution:
- {
- integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==,
- }
- engines: { node: '>=16' }
+ resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==}
+ engines: {node: '>=16'}
type-is@1.6.18:
- resolution:
- {
- integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==,
- }
- engines: { node: '>= 0.6' }
+ resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==}
+ engines: {node: '>= 0.6'}
type-is@2.0.1:
- resolution:
- {
- integrity: sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==,
- }
- engines: { node: '>= 0.6' }
+ resolution: {integrity: sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==}
+ engines: {node: '>= 0.6'}
typedarray@0.0.6:
- resolution:
- {
- integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==,
- }
+ resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==}
typescript@5.9.3:
- resolution:
- {
- integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==,
- }
- engines: { node: '>=14.17' }
+ resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==}
+ engines: {node: '>=14.17'}
hasBin: true
uglify-js@3.19.3:
- resolution:
- {
- integrity: sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==,
- }
- engines: { node: '>=0.8.0' }
+ resolution: {integrity: sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==}
+ engines: {node: '>=0.8.0'}
hasBin: true
uglify-js@3.4.10:
- resolution:
- {
- integrity: sha512-Y2VsbPVs0FIshJztycsO2SfPk7/KAF/T72qzv9u5EpQ4kB2hQoHlhNQTsNyy6ul7lQtqJN/AoWeS23OzEiEFxw==,
- }
- engines: { node: '>=0.8.0' }
+ resolution: {integrity: sha512-Y2VsbPVs0FIshJztycsO2SfPk7/KAF/T72qzv9u5EpQ4kB2hQoHlhNQTsNyy6ul7lQtqJN/AoWeS23OzEiEFxw==}
+ engines: {node: '>=0.8.0'}
hasBin: true
undefsafe@2.0.5:
- resolution:
- {
- integrity: sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==,
- }
+ resolution: {integrity: sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==}
undici-types@5.26.5:
- resolution:
- {
- integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==,
- }
+ resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==}
undici-types@6.21.0:
- resolution:
- {
- integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==,
- }
+ resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==}
undici@7.16.0:
- resolution:
- {
- integrity: sha512-QEg3HPMll0o3t2ourKwOeUAZ159Kn9mx5pnzHRQO8+Wixmh88YdZRiIwat0iNzNNXn0yoEtXJqFpyW7eM8BV7g==,
- }
- engines: { node: '>=20.18.1' }
+ resolution: {integrity: sha512-QEg3HPMll0o3t2ourKwOeUAZ159Kn9mx5pnzHRQO8+Wixmh88YdZRiIwat0iNzNNXn0yoEtXJqFpyW7eM8BV7g==}
+ engines: {node: '>=20.18.1'}
unique-filename@3.0.0:
- resolution:
- {
- integrity: sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==,
- }
- engines: { node: ^14.17.0 || ^16.13.0 || >=18.0.0 }
+ resolution: {integrity: sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==}
+ engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
unique-slug@4.0.0:
- resolution:
- {
- integrity: sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==,
- }
- engines: { node: ^14.17.0 || ^16.13.0 || >=18.0.0 }
+ resolution: {integrity: sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==}
+ engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
universal-user-agent@6.0.1:
- resolution:
- {
- integrity: sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ==,
- }
+ resolution: {integrity: sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ==}
universalify@2.0.1:
- resolution:
- {
- integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==,
- }
- engines: { node: '>= 10.0.0' }
+ resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==}
+ engines: {node: '>= 10.0.0'}
unload@2.2.0:
- resolution:
- {
- integrity: sha512-B60uB5TNBLtN6/LsgAf3udH9saB5p7gqJwcFfbOEZ8BcBHnGwCf6G/TGiEqkRAxX7zAFIUtzdrXQSdL3Q/wqNA==,
- }
+ resolution: {integrity: sha512-B60uB5TNBLtN6/LsgAf3udH9saB5p7gqJwcFfbOEZ8BcBHnGwCf6G/TGiEqkRAxX7zAFIUtzdrXQSdL3Q/wqNA==}
unpipe@1.0.0:
- resolution:
- {
- integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==,
- }
- engines: { node: '>= 0.8' }
+ resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==}
+ engines: {node: '>= 0.8'}
unrs-resolver@1.11.1:
- resolution:
- {
- integrity: sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg==,
- }
+ resolution: {integrity: sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg==}
untildify@4.0.0:
- resolution:
- {
- integrity: sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==,
- }
- engines: { node: '>=8' }
+ resolution: {integrity: sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==}
+ engines: {node: '>=8'}
upath@2.0.1:
- resolution:
- {
- integrity: sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==,
- }
- engines: { node: '>=4' }
+ resolution: {integrity: sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==}
+ engines: {node: '>=4'}
update-browserslist-db@1.2.3:
- resolution:
- {
- integrity: sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==,
- }
+ resolution: {integrity: sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==}
hasBin: true
peerDependencies:
browserslist: '>= 4.21.0'
upper-case@1.1.3:
- resolution:
- {
- integrity: sha512-WRbjgmYzgXkCV7zNVpy5YgrHgbBv126rMALQQMrmzOVC4GM2waQ9x7xtm8VU+1yF2kWyPzI9zbZ48n4vSxwfSA==,
- }
+ resolution: {integrity: sha512-WRbjgmYzgXkCV7zNVpy5YgrHgbBv126rMALQQMrmzOVC4GM2waQ9x7xtm8VU+1yF2kWyPzI9zbZ48n4vSxwfSA==}
uri-js@4.4.1:
- resolution:
- {
- integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==,
- }
+ resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
util-deprecate@1.0.2:
- resolution:
- {
- integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==,
- }
+ resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
uuid@10.0.0:
- resolution:
- {
- integrity: sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==,
- }
+ resolution: {integrity: sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==}
hasBin: true
uuid@3.4.0:
- resolution:
- {
- integrity: sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==,
- }
+ resolution: {integrity: sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==}
deprecated: Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.
hasBin: true
v8-compile-cache-lib@3.0.1:
- resolution:
- {
- integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==,
- }
+ resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==}
v8-to-istanbul@9.3.0:
- resolution:
- {
- integrity: sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==,
- }
- engines: { node: '>=10.12.0' }
+ resolution: {integrity: sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==}
+ engines: {node: '>=10.12.0'}
valid-data-url@3.0.1:
- resolution:
- {
- integrity: sha512-jOWVmzVceKlVVdwjNSenT4PbGghU0SBIizAev8ofZVgivk/TVHXSbNL8LP6M3spZvkR9/QolkyJavGSX5Cs0UA==,
- }
- engines: { node: '>=10' }
+ resolution: {integrity: sha512-jOWVmzVceKlVVdwjNSenT4PbGghU0SBIizAev8ofZVgivk/TVHXSbNL8LP6M3spZvkR9/QolkyJavGSX5Cs0UA==}
+ engines: {node: '>=10'}
validate-npm-package-license@3.0.4:
- resolution:
- {
- integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==,
- }
+ resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==}
validate-npm-package-name@5.0.1:
- resolution:
- {
- integrity: sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==,
- }
- engines: { node: ^14.17.0 || ^16.13.0 || >=18.0.0 }
+ resolution: {integrity: sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==}
+ engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
validator@13.15.26:
- resolution:
- {
- integrity: sha512-spH26xU080ydGggxRyR1Yhcbgx+j3y5jbNXk/8L+iRvdIEQ4uTRH2Sgf2dokud6Q4oAtsbNvJ1Ft+9xmm6IZcA==,
- }
- engines: { node: '>= 0.10' }
+ resolution: {integrity: sha512-spH26xU080ydGggxRyR1Yhcbgx+j3y5jbNXk/8L+iRvdIEQ4uTRH2Sgf2dokud6Q4oAtsbNvJ1Ft+9xmm6IZcA==}
+ engines: {node: '>= 0.10'}
vary@1.1.2:
- resolution:
- {
- integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==,
- }
- engines: { node: '>= 0.8' }
+ resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==}
+ engines: {node: '>= 0.8'}
verror@1.10.0:
- resolution:
- {
- integrity: sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==,
- }
- engines: { '0': node >=0.6.0 }
+ resolution: {integrity: sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==}
+ engines: {'0': node >=0.6.0}
walk-up-path@3.0.1:
- resolution:
- {
- integrity: sha512-9YlCL/ynK3CTlrSRrDxZvUauLzAswPCrsaCgilqFevUYpeEW0/3ScEjaa3kbW/T0ghhkEr7mv+fpjqn1Y1YuTA==,
- }
+ resolution: {integrity: sha512-9YlCL/ynK3CTlrSRrDxZvUauLzAswPCrsaCgilqFevUYpeEW0/3ScEjaa3kbW/T0ghhkEr7mv+fpjqn1Y1YuTA==}
walker@1.0.8:
- resolution:
- {
- integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==,
- }
+ resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==}
warning@3.0.0:
- resolution:
- {
- integrity: sha512-jMBt6pUrKn5I+OGgtQ4YZLdhIeJmObddh6CsibPxyQ5yPZm1XExSyzC1LCNX7BzhxWgiHmizBWJTHJIjMjTQYQ==,
- }
+ resolution: {integrity: sha512-jMBt6pUrKn5I+OGgtQ4YZLdhIeJmObddh6CsibPxyQ5yPZm1XExSyzC1LCNX7BzhxWgiHmizBWJTHJIjMjTQYQ==}
wcwidth@1.0.1:
- resolution:
- {
- integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==,
- }
+ resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==}
web-resource-inliner@5.0.0:
- resolution:
- {
- integrity: sha512-AIihwH+ZmdHfkJm7BjSXiEClVt4zUFqX4YlFAzjL13wLtDuUneSaFvDBTbdYRecs35SiU7iNKbMnN+++wVfb6A==,
- }
- engines: { node: '>=10.0.0' }
+ resolution: {integrity: sha512-AIihwH+ZmdHfkJm7BjSXiEClVt4zUFqX4YlFAzjL13wLtDuUneSaFvDBTbdYRecs35SiU7iNKbMnN+++wVfb6A==}
+ engines: {node: '>=10.0.0'}
webidl-conversions@3.0.1:
- resolution:
- {
- integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==,
- }
+ resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
whatwg-encoding@3.1.1:
- resolution:
- {
- integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==,
- }
- engines: { node: '>=18' }
+ resolution: {integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==}
+ engines: {node: '>=18'}
deprecated: Use @exodus/bytes instead for a more spec-conformant and faster implementation
whatwg-mimetype@4.0.0:
- resolution:
- {
- integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==,
- }
- engines: { node: '>=18' }
+ resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==}
+ engines: {node: '>=18'}
whatwg-url@5.0.0:
- resolution:
- {
- integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==,
- }
+ resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
which-module@2.0.1:
- resolution:
- {
- integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==,
- }
+ resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==}
which@2.0.2:
- resolution:
- {
- integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==,
- }
- engines: { node: '>= 8' }
+ resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
+ engines: {node: '>= 8'}
hasBin: true
which@4.0.0:
- resolution:
- {
- integrity: sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==,
- }
- engines: { node: ^16.13.0 || >=18.0.0 }
+ resolution: {integrity: sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==}
+ engines: {node: ^16.13.0 || >=18.0.0}
hasBin: true
wide-align@1.1.5:
- resolution:
- {
- integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==,
- }
+ resolution: {integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==}
with-callback@1.0.2:
- resolution:
- {
- integrity: sha512-zaUhn7OWgikdqWlPYpZ4rTX/6IAV0czMVyd+C6QLVrif2tATF28CYUnHBmHs2a5EaZo7bB1+plBUPHto+HW8uA==,
- }
- engines: { node: '>=4' }
+ resolution: {integrity: sha512-zaUhn7OWgikdqWlPYpZ4rTX/6IAV0czMVyd+C6QLVrif2tATF28CYUnHBmHs2a5EaZo7bB1+plBUPHto+HW8uA==}
+ engines: {node: '>=4'}
word-wrap@1.2.5:
- resolution:
- {
- integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==,
- }
- engines: { node: '>=0.10.0' }
+ resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==}
+ engines: {node: '>=0.10.0'}
wordwrap@1.0.0:
- resolution:
- {
- integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==,
- }
+ resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==}
wrap-ansi@6.2.0:
- resolution:
- {
- integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==,
- }
- engines: { node: '>=8' }
+ resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==}
+ engines: {node: '>=8'}
wrap-ansi@7.0.0:
- resolution:
- {
- integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==,
- }
- engines: { node: '>=10' }
+ resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
+ engines: {node: '>=10'}
wrap-ansi@8.1.0:
- resolution:
- {
- integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==,
- }
- engines: { node: '>=12' }
+ resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==}
+ engines: {node: '>=12'}
wrappy@1.0.2:
- resolution:
- {
- integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==,
- }
+ resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
write-file-atomic@2.4.3:
- resolution:
- {
- integrity: sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==,
- }
+ resolution: {integrity: sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==}
write-file-atomic@4.0.2:
- resolution:
- {
- integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==,
- }
- engines: { node: ^12.13.0 || ^14.15.0 || >=16.0.0 }
+ resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==}
+ engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
write-file-atomic@5.0.1:
- resolution:
- {
- integrity: sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==,
- }
- engines: { node: ^14.17.0 || ^16.13.0 || >=18.0.0 }
+ resolution: {integrity: sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==}
+ engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
write-json-file@3.2.0:
- resolution:
- {
- integrity: sha512-3xZqT7Byc2uORAatYiP3DHUUAVEkNOswEWNs9H5KXiicRTvzYzYqKjYc4G7p+8pltvAw641lVByKVtMpf+4sYQ==,
- }
- engines: { node: '>=6' }
+ resolution: {integrity: sha512-3xZqT7Byc2uORAatYiP3DHUUAVEkNOswEWNs9H5KXiicRTvzYzYqKjYc4G7p+8pltvAw641lVByKVtMpf+4sYQ==}
+ engines: {node: '>=6'}
write-pkg@4.0.0:
- resolution:
- {
- integrity: sha512-v2UQ+50TNf2rNHJ8NyWttfm/EJUBWMJcx6ZTYZr6Qp52uuegWw/lBkCtCbnYZEmPRNL61m+u67dAmGxo+HTULA==,
- }
- engines: { node: '>=8' }
+ resolution: {integrity: sha512-v2UQ+50TNf2rNHJ8NyWttfm/EJUBWMJcx6ZTYZr6Qp52uuegWw/lBkCtCbnYZEmPRNL61m+u67dAmGxo+HTULA==}
+ engines: {node: '>=8'}
ws@7.5.10:
- resolution:
- {
- integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==,
- }
- engines: { node: '>=8.3.0' }
+ resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==}
+ engines: {node: '>=8.3.0'}
peerDependencies:
bufferutil: ^4.0.1
utf-8-validate: ^5.0.2
@@ -12734,120 +8203,70 @@ packages:
optional: true
xregexp@2.0.0:
- resolution:
- {
- integrity: sha512-xl/50/Cf32VsGq/1R8jJE5ajH1yMCQkpmoS10QbFZWl2Oor4H0Me64Pu2yxvsRWK3m6soJbmGfzSR7BYmDcWAA==,
- }
+ resolution: {integrity: sha512-xl/50/Cf32VsGq/1R8jJE5ajH1yMCQkpmoS10QbFZWl2Oor4H0Me64Pu2yxvsRWK3m6soJbmGfzSR7BYmDcWAA==}
xtend@4.0.2:
- resolution:
- {
- integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==,
- }
- engines: { node: '>=0.4' }
+ resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==}
+ engines: {node: '>=0.4'}
y18n@4.0.3:
- resolution:
- {
- integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==,
- }
+ resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==}
y18n@5.0.8:
- resolution:
- {
- integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==,
- }
- engines: { node: '>=10' }
+ resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
+ engines: {node: '>=10'}
yallist@2.1.2:
- resolution:
- {
- integrity: sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==,
- }
+ resolution: {integrity: sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==}
yallist@3.1.1:
- resolution:
- {
- integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==,
- }
+ resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
yallist@4.0.0:
- resolution:
- {
- integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==,
- }
+ resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
yaml@2.8.2:
- resolution:
- {
- integrity: sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==,
- }
- engines: { node: '>= 14.6' }
+ resolution: {integrity: sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==}
+ engines: {node: '>= 14.6'}
hasBin: true
yanse@0.1.11:
- resolution:
- {
- integrity: sha512-70QlVdqwpLdQH1ZqFk5HSAFk6puptS7Q6y79umsucED+uvmbSSVvKMJVDmc4Yt+89JMkf7n4gaR/Ftz6wUZKeA==,
- }
+ resolution: {integrity: sha512-70QlVdqwpLdQH1ZqFk5HSAFk6puptS7Q6y79umsucED+uvmbSSVvKMJVDmc4Yt+89JMkf7n4gaR/Ftz6wUZKeA==}
yargs-parser@18.1.3:
- resolution:
- {
- integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==,
- }
- engines: { node: '>=6' }
+ resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==}
+ engines: {node: '>=6'}
yargs-parser@20.2.9:
- resolution:
- {
- integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==,
- }
- engines: { node: '>=10' }
+ resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==}
+ engines: {node: '>=10'}
yargs-parser@21.1.1:
- resolution:
- {
- integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==,
- }
- engines: { node: '>=12' }
+ resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==}
+ engines: {node: '>=12'}
yargs@15.4.1:
- resolution:
- {
- integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==,
- }
- engines: { node: '>=8' }
+ resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==}
+ engines: {node: '>=8'}
yargs@16.2.0:
- resolution:
- {
- integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==,
- }
- engines: { node: '>=10' }
+ resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==}
+ engines: {node: '>=10'}
yargs@17.7.2:
- resolution:
- {
- integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==,
- }
- engines: { node: '>=12' }
+ resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==}
+ engines: {node: '>=12'}
yn@3.1.1:
- resolution:
- {
- integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==,
- }
- engines: { node: '>=6' }
+ resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==}
+ engines: {node: '>=6'}
yocto-queue@0.1.0:
- resolution:
- {
- integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==,
- }
- engines: { node: '>=10' }
+ resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
+ engines: {node: '>=10'}
snapshots:
+
12factor-env@0.1.0:
dependencies:
'@babel/runtime': 7.28.4
@@ -15052,12 +10471,6 @@ snapshots:
react: 19.2.3
react-dom: 19.2.3(react@19.2.3)
- '@ts-morph/common@0.28.1':
- dependencies:
- minimatch: 10.1.1
- path-browserify: 1.0.1
- tinyglobby: 0.2.15
-
'@tsconfig/node10@1.0.12': {}
'@tsconfig/node12@1.0.11': {}
@@ -16025,8 +11438,6 @@ snapshots:
co@4.6.0: {}
- code-block-writer@13.0.3: {}
-
collect-v8-coverage@1.0.3: {}
color-convert@1.9.3:
@@ -19481,8 +14892,6 @@ snapshots:
parseurl@1.3.3: {}
- path-browserify@1.0.1: {}
-
path-exists@3.0.0: {}
path-exists@4.0.0: {}
@@ -20459,11 +15868,6 @@ snapshots:
babel-jest: 30.2.0(@babel/core@7.28.5)
jest-util: 30.2.0
- ts-morph@27.0.2:
- dependencies:
- '@ts-morph/common': 0.28.1
- code-block-writer: 13.0.3
-
ts-node@10.9.2(@types/node@20.19.27)(typescript@5.9.3):
dependencies:
'@cspotcode/source-map-support': 0.8.1