diff --git a/.github/workflows/test-k8s-deployment.yaml b/.github/workflows/test-k8s-deployment.yaml index bb97baa..91f7e13 100644 --- a/.github/workflows/test-k8s-deployment.yaml +++ b/.github/workflows/test-k8s-deployment.yaml @@ -156,15 +156,17 @@ jobs: kubectl rollout restart deploy/knative-job-service -n constructive-functions kubectl rollout status deploy/knative-job-service -n constructive-functions --timeout=120s - - name: Port-forward postgres and run e2e tests + - name: Port-forward services and run e2e tests env: PGHOST: localhost PGPORT: "5432" PGUSER: postgres PGPASSWORD: ${{ env.PG_PASSWORD }} PGDATABASE: constructive + SERVER_PORT: "3002" run: | kubectl port-forward -n constructive-functions svc/postgres 5432:5432 & + kubectl port-forward -n constructive-functions svc/constructive-server 3002:3000 & sleep 3 pnpm jest tests/e2e/__tests__/job-queue.test.ts tests/e2e/__tests__/${{ matrix.name }}.e2e.test.ts diff --git a/functions/rag-embedding/__tests__/handler.test.ts b/functions/rag-embedding/__tests__/handler.test.ts new file mode 100644 index 0000000..4cce967 --- /dev/null +++ b/functions/rag-embedding/__tests__/handler.test.ts @@ -0,0 +1,172 @@ +const mockRequest = jest.fn(); + +jest.mock('graphql-request', () => ({ + gql: jest.fn((strings: TemplateStringsArray) => strings.join('')), +})); + +jest.mock('@agentic-kit/ollama', () => { + return jest.fn().mockImplementation(() => ({ + generateEmbedding: jest.fn().mockResolvedValue(Array(768).fill(0.1)), + })); +}); + +jest.mock('@constructive-io/graphql-query', () => ({ + SCHEMA_INTROSPECTION_QUERY: 'query { __schema { types { name } } }', + inferTablesFromIntrospection: jest.fn().mockReturnValue([ + { + name: 'article', + query: { all: 'articles', create: 'createArticle' }, + inflection: { allRows: 'articles', tableFieldName: 'article' }, + primaryKey: 'id', + relations: { belongsTo: [], hasMany: [] }, + }, + { + name: 'article_chunk', + query: { all: 'articleChunks', create: 'createArticleChunk' }, + inflection: { allRows: 'articleChunks', tableFieldName: 'articleChunk', createField: 'createArticleChunk' }, + primaryKey: 'id', + relations: { + belongsTo: [{ referencesTable: 'article', fieldName: 'article' }], + hasMany: [], + }, + }, + ]), + buildSelect: jest.fn().mockReturnValue({ toString: () => 'query { articles { nodes { id content } } }' }), + buildPostGraphileCreate: jest.fn().mockReturnValue({ toString: () => 'mutation { createArticleChunk { articleChunk { id } } }' }), + buildPostGraphileDelete: jest.fn().mockReturnValue({ toString: () => 'mutation { deleteArticleChunks { deletedCount } }' }), +})); + +const createMockContext = () => ({ + job: { + jobId: 'test-job-id', + workerId: 'test-worker', + databaseId: 'test-db', + }, + client: { + request: mockRequest, + }, + meta: { + request: jest.fn().mockResolvedValue({ + schemas: { nodes: [{ schemaName: 'test-db-app-public' }] }, + }), + }, + log: { + info: jest.fn(), + error: jest.fn(), + warn: jest.fn(), + }, + env: { + RAG_EMBEDDING_DRY_RUN: 'true', + GRAPHQL_URL: 'http://localhost:3000/graphql', + GRAPHQL_API_NAME: 'private', + }, +}); + +const loadHandler = () => { + const mod = require('../handler'); + return mod.default ?? mod; +}; + +describe('rag-embedding handler', () => { + beforeEach(() => { + jest.clearAllMocks(); + mockRequest.mockReset(); + }); + + it('should return early when content is empty', async () => { + const handler = loadHandler(); + const context = createMockContext(); + + mockRequest + .mockResolvedValueOnce({ __schema: { types: [] } }) // introspection + .mockResolvedValueOnce({ + articles: { nodes: [{ id: 'test-id', content: '' }] }, + }); + + const result = await handler( + { + table: 'article', + schema: 'test-db-app-public', + id: 'test-id', + chunks_table: 'article_chunk', + }, + context + ); + + expect(result.complete).toBe(true); + expect(result.chunks).toBe(0); + }); + + it('should chunk content and create embeddings', async () => { + const handler = loadHandler(); + const context = createMockContext(); + + mockRequest + .mockResolvedValueOnce({ __schema: { types: [] } }) // introspection + .mockResolvedValueOnce({ + articles: { nodes: [{ id: 'test-id', content: 'This is test content for chunking.' }] }, + }) + .mockResolvedValueOnce({ deleteArticleChunks: { deletedCount: 0 } }) + .mockResolvedValueOnce({ + createArticleChunk: { articleChunk: { id: 'chunk-1' } }, + }); + + const result = await handler( + { + table: 'article', + schema: 'test-db-app-public', + id: 'test-id', + chunks_table: 'article_chunk', + chunk_size: '1000', + }, + context + ); + + expect(result.complete).toBe(true); + expect(result.chunks).toBe(1); + expect(result.chunk_ids).toHaveLength(1); + }); + + it('should throw error when databaseId is missing', async () => { + const handler = loadHandler(); + const context = createMockContext(); + context.job.databaseId = undefined; + + await expect( + handler({ table: 'article', schema: 'test-db-app-public', id: 'test-id', chunks_table: 'article_chunk' }, context) + ).rejects.toThrow('Missing X-Database-Id'); + }); + + it('should throw error when required params are missing', async () => { + const handler = loadHandler(); + const context = createMockContext(); + + await expect( + handler({ table: '', schema: 'test-db-app-public', id: 'test-id', chunks_table: 'article_chunk' }, context) + ).rejects.toThrow('Missing required params'); + }); + + it('should return early when content is empty with trigger format', async () => { + const handler = loadHandler(); + const context = createMockContext(); + + mockRequest + .mockResolvedValueOnce({ __schema: { types: [] } }) // introspection + .mockResolvedValueOnce({ + articles: { nodes: [{ id: 'test-id', content: '' }] }, + }); + + const result = await handler( + { + table: 'article', + schema: 'test-db-app-public', + id: 'test-id', + chunks_table: 'article_chunk', + }, + context + ); + + expect(result.complete).toBe(true); + expect(result.chunks).toBe(0); + }); +}); diff --git a/functions/rag-embedding/handler.json b/functions/rag-embedding/handler.json new file mode 100644 index 0000000..bb2dd2e --- /dev/null +++ b/functions/rag-embedding/handler.json @@ -0,0 +1,14 @@ +{ + "name": "rag-embedding", + "version": "1.0.0", + "type": "node-graphql", + "port": 8085, + "description": "RAG embedding function - chunks text and generates embeddings using Ollama nomic-embed-text", + "dependencies": { + "@agentic-kit/ollama": "^1.0.3", + "@constructive-io/graphql-query": "^3.12.14", + "@pgpmjs/env": "^2.11.0", + "@pgpmjs/logger": "^2.1.0", + "graphql-request": "^7.1.2" + } +} diff --git a/functions/rag-embedding/handler.ts b/functions/rag-embedding/handler.ts new file mode 100644 index 0000000..89642a4 --- /dev/null +++ b/functions/rag-embedding/handler.ts @@ -0,0 +1,347 @@ +import type { FunctionHandler } from '@constructive-io/fn-runtime'; +import OllamaClient from '@agentic-kit/ollama'; +import { + SCHEMA_INTROSPECTION_QUERY, + inferTablesFromIntrospection, + buildSelect, + buildPostGraphileCreate, + buildPostGraphileDelete, + type IntrospectionQueryResponse, +} from '@constructive-io/graphql-query'; + +// Job payload from embedding_chunks trigger +type GenerateChunksParams = { + table: string; + schema: string; + id: string; + chunks_table: string; + chunk_size: string; + chunk_overlap: string; + chunk_strategy: 'fixed' | 'sentence' | 'paragraph' | 'semantic'; +}; + +// Chunking strategies +function chunkText( + text: string, + chunkSize: number, + chunkOverlap: number, + strategy: string +): string[] { + if (!text || text.trim().length === 0) { + return []; + } + + switch (strategy) { + case 'sentence': + return chunkBySentence(text, chunkSize, chunkOverlap); + case 'paragraph': + return chunkByParagraph(text, chunkSize, chunkOverlap); + case 'semantic': + // Fallback to fixed for now - semantic requires more sophisticated handling + return chunkByFixed(text, chunkSize, chunkOverlap); + case 'fixed': + default: + return chunkByFixed(text, chunkSize, chunkOverlap); + } +} + +function chunkByFixed(text: string, chunkSize: number, chunkOverlap: number): string[] { + const chunks: string[] = []; + let start = 0; + + while (start < text.length) { + const end = Math.min(start + chunkSize, text.length); + chunks.push(text.slice(start, end)); + start += chunkSize - chunkOverlap; + + // Prevent infinite loop + if (chunkSize <= chunkOverlap) { + break; + } + } + + return chunks; +} + +function chunkBySentence(text: string, chunkSize: number, chunkOverlap: number): string[] { + const sentences = text.match(/[^.!?]+[.!?]+/g) || [text]; + const chunks: string[] = []; + let currentChunk = ''; + let overlapBuffer: string[] = []; + + for (const sentence of sentences) { + const trimmedSentence = sentence.trim(); + + if ((currentChunk + ' ' + trimmedSentence).length > chunkSize && currentChunk.length > 0) { + chunks.push(currentChunk.trim()); + currentChunk = overlapBuffer.join(' ') + ' ' + trimmedSentence; + overlapBuffer = []; + } else { + currentChunk = currentChunk ? currentChunk + ' ' + trimmedSentence : trimmedSentence; + } + + overlapBuffer.push(trimmedSentence); + while (overlapBuffer.join(' ').length > chunkOverlap && overlapBuffer.length > 1) { + overlapBuffer.shift(); + } + } + + if (currentChunk.trim().length > 0) { + chunks.push(currentChunk.trim()); + } + + return chunks; +} + +function chunkByParagraph(text: string, chunkSize: number, chunkOverlap: number): string[] { + const paragraphs = text.split(/\n\n+/).filter(p => p.trim().length > 0); + const chunks: string[] = []; + let currentChunk = ''; + let overlapBuffer: string[] = []; + + for (const paragraph of paragraphs) { + const trimmedParagraph = paragraph.trim(); + + if ((currentChunk + '\n\n' + trimmedParagraph).length > chunkSize && currentChunk.length > 0) { + chunks.push(currentChunk.trim()); + currentChunk = overlapBuffer.join('\n\n') + '\n\n' + trimmedParagraph; + overlapBuffer = []; + } else { + currentChunk = currentChunk ? currentChunk + '\n\n' + trimmedParagraph : trimmedParagraph; + } + + overlapBuffer.push(trimmedParagraph); + while (overlapBuffer.join('\n\n').length > chunkOverlap && overlapBuffer.length > 1) { + overlapBuffer.shift(); + } + } + + if (currentChunk.trim().length > 0) { + chunks.push(currentChunk.trim()); + } + + return chunks.flatMap(chunk => + chunk.length > chunkSize * 1.5 + ? chunkByFixed(chunk, chunkSize, chunkOverlap) + : [chunk] + ); +} + +const handler: FunctionHandler = async (params, context) => { + const { job, log, env, client } = context; + + const databaseId = job.databaseId; + if (!databaseId) { + throw new Error('Missing X-Database-Id header or DEFAULT_DATABASE_ID'); + } + + const { + table, + schema, + id, + chunks_table, + chunk_size, + chunk_overlap, + chunk_strategy + } = params; + + // Validate required params + // Note: `schema` should be the actual PostgreSQL schema name (e.g., "test-rag-beacb720-app-public") + if (!table || !schema || !id || !chunks_table) { + throw new Error(`Missing required params: table=${table}, schema=${schema}, id=${id}, chunks_table=${chunks_table}`); + } + + log.info('[rag-embedding] Using schema from job payload', { databaseId, schema }); + + // Custom headers for this schema + const schemaHeaders = { 'X-Schemata': schema }; + + const chunkSize = parseInt(chunk_size, 10) || 1000; + const chunkOverlap = parseInt(chunk_overlap, 10) || 200; + const strategy = chunk_strategy || 'fixed'; + + log.info('[generate-chunks] Processing', { + table, + schema, + id, + chunks_table, + chunkSize, + chunkOverlap, + strategy + }); + + // Initialize Ollama client + const isDryRun = env.RAG_EMBEDDING_DRY_RUN === 'true'; + const ollamaUrl = env.OLLAMA_URL || 'http://localhost:11434'; + const embeddingModel = env.EMBEDDING_MODEL || 'nomic-embed-text:latest'; + const ollama = isDryRun ? null : new OllamaClient(ollamaUrl); + + // Fetch schema introspection to get table metadata + log.info('[rag-embedding] Fetching schema introspection'); + const introspectionResult = await client.request(SCHEMA_INTROSPECTION_QUERY, undefined, schemaHeaders); + const tables = inferTablesFromIntrospection(introspectionResult); + + // Find tables by query field name, table name, or inflection + const parentQueryName = table.replace(/_/g, '').toLowerCase(); + const chunksQueryName = chunks_table.replace(/_/g, '').toLowerCase(); + + const parentTable = tables.find(t => + t.query?.all?.toLowerCase() === parentQueryName || + t.inflection?.allRows?.toLowerCase() === parentQueryName || + t.name?.toLowerCase() === parentQueryName || + t.name?.toLowerCase() === table.toLowerCase() + ); + const chunksTable = tables.find(t => + t.query?.all?.toLowerCase() === chunksQueryName || + t.inflection?.allRows?.toLowerCase() === chunksQueryName || + t.name?.toLowerCase() === chunksQueryName || + t.name?.toLowerCase() === chunks_table.toLowerCase() + ); + + if (!parentTable) { + const availableTables = tables.map(t => `${t.name} (query: ${t.query?.all})`).join(', '); + throw new Error(`Parent table not found for query name: ${parentQueryName}. Available: ${availableTables}`); + } + if (!chunksTable) { + const availableTables = tables.map(t => `${t.name} (query: ${t.query?.all})`).join(', '); + throw new Error(`Chunks table not found for query name: ${chunksQueryName}. Available: ${availableTables}`); + } + + // Get field names from table metadata + const parentFieldNamePlural = parentTable.query?.all || parentTable.inflection?.allRows; + const chunksFieldNamePlural = chunksTable.query?.all || chunksTable.inflection?.allRows; + // For CREATE mutations, use tableFieldName (e.g., "articlesChunk"), not patchFieldName + const chunkFieldName = chunksTable.inflection?.tableFieldName || chunksTable.query?.patchFieldName; + const createMutationName = chunksTable.query?.create || chunksTable.inflection?.createField; + + // FK field - find the belongsTo relation that references the parent table + const parentRelation = chunksTable.relations.belongsTo.find(r => r.referencesTable === parentTable.name); + const parentFkFieldName = parentRelation?.fieldName ? parentRelation.fieldName + 'Id' : `${parentTable.inflection?.tableFieldName || parentTable.name.charAt(0).toLowerCase() + parentTable.name.slice(1)}Id`; + + // 1. Fetch content from parent table using buildSelect + const getContentQuery = buildSelect(parentTable, tables, { + where: {}, + fieldSelection: { select: ['id', 'content'] } + }); + + const contentResult = await client.request<{ + [key: string]: { nodes: Array<{ id: string; content: string }> } | null + }>(getContentQuery.toString(), { where: { id: { equalTo: id } } }, schemaHeaders); + + const nodes = contentResult[parentFieldNamePlural!]?.nodes; + const record = nodes && nodes.length > 0 ? nodes[0] : null; + if (!record) { + throw new Error(`Record not found: ${schema}.${table} id=${id}`); + } + + const content = record.content; + if (!content || content.trim().length === 0) { + log.info('[generate-chunks] No content to chunk', { id }); + return { complete: true, chunks: 0 }; + } + + // 2. Delete existing chunks (for re-chunking) + try { + // Query existing chunks using buildSelect + const getChunksQuery = buildSelect(chunksTable, tables, { + where: {}, + fieldSelection: { select: ['id'] } + }); + const chunksResult = await client.request<{ + [key: string]: { nodes: Array<{ id: string }> } | null + }>(getChunksQuery.toString(), { where: { [parentFkFieldName]: { equalTo: id } } }, schemaHeaders); + + const existingChunks = chunksResult[chunksFieldNamePlural!]?.nodes || []; + + // Delete each chunk by ID using buildPostGraphileDelete + const deleteMutation = buildPostGraphileDelete(chunksTable, tables); + for (const chunk of existingChunks) { + await client.request(deleteMutation.toString(), { input: { id: chunk.id } }, schemaHeaders); + } + + if (existingChunks.length > 0) { + log.info('[generate-chunks] Deleted existing chunks', { count: existingChunks.length, parentId: id }); + } + } catch (err) { + // Ignore if no chunks exist or delete mutation doesn't exist + log.info('[generate-chunks] No existing chunks to delete or delete not available', { error: String(err) }); + } + + // 3. Chunk the content + const textChunks = chunkText(content, chunkSize, chunkOverlap, strategy); + log.info('[generate-chunks] Created chunks', { count: textChunks.length }); + + if (textChunks.length === 0) { + return { complete: true, chunks: 0 }; + } + + // 4. Generate embeddings and insert chunks + const insertedChunks: string[] = []; + const insertMutation = buildPostGraphileCreate(chunksTable, tables); + + for (let i = 0; i < textChunks.length; i++) { + const chunkContent = textChunks[i]; + + // Generate embedding + let embedding: number[]; + if (isDryRun) { + embedding = Array(768).fill(0); + log.info('[generate-chunks] DRY_RUN: mock embedding', { chunk_index: i }); + } else { + try { + embedding = await ollama!.generateEmbedding(chunkContent, embeddingModel); + } catch (err) { + log.error('[generate-chunks] Embedding failed', { chunk_index: i, error: String(err) }); + throw new Error(`Failed to generate embedding for chunk ${i}: ${err}`); + } + } + + try { + const result = await client.request<{ + [key: string]: { [key: string]: { id: string } } + }>(insertMutation.toString(), { + input: { + [chunkFieldName!]: { + [parentFkFieldName]: id, + content: chunkContent, + chunkIndex: i, + embedding, + metadata: { + chunk_strategy: strategy, + chunk_size: chunkSize, + chunk_overlap: chunkOverlap, + original_length: content.length + } + } + } + }, schemaHeaders); + + const insertedId = result[createMutationName!]?.[chunkFieldName!]?.id; + if (insertedId) { + insertedChunks.push(insertedId); + } + } catch (err) { + log.error('[generate-chunks] Insert failed', { chunk_index: i, error: String(err) }); + throw new Error(`Failed to insert chunk ${i}: ${err}`); + } + + log.info('[generate-chunks] Inserted chunk', { + chunk_index: i, + embedding_dims: embedding.length + }); + } + + log.info('[generate-chunks] Complete', { + id, + chunks: insertedChunks.length, + embedding_model: embeddingModel + }); + + return { + complete: true, + chunks: insertedChunks.length, + chunk_ids: insertedChunks + }; +}; + +export default handler; diff --git a/k8s/overlays/local-simple/config.yaml b/k8s/overlays/local-simple/config.yaml index 9030d82..5a3c4b4 100644 --- a/k8s/overlays/local-simple/config.yaml +++ b/k8s/overlays/local-simple/config.yaml @@ -25,6 +25,7 @@ data: SEND_EMAIL_DRY_RUN: "true" SEND_VERIFICATION_LINK_DRY_RUN: "true" TEXT_EMBEDDING_DRY_RUN: "true" + RAG_EMBEDDING_DRY_RUN: "true" # AI/Embedding settings OLLAMA_URL: "http://ollama.constructive-functions.svc.cluster.local:11434" diff --git a/package.json b/package.json index 2ee865c..11e28fe 100644 --- a/package.json +++ b/package.json @@ -33,17 +33,18 @@ "@types/node": "^22.10.4", "@types/pg": "^8.11.0", "eslint": "^9.39.2", - "pg": "^8.20.0", "eslint-config-prettier": "^10.1.8", "eslint-plugin-simple-import-sort": "^12.1.0", "eslint-plugin-unused-imports": "^4.0.0", "globals": "^16.5.0", + "graphql": "^16.14.0", + "graphql-request": "^7.4.0", "jest": "^30.2.0", + "pg": "^8.20.0", "prettier": "^3.7.4", "ts-jest": "^29.4.0", "tsx": "^4.19.0", "typescript": "^5.1.6", "typescript-eslint": "^8.33.0" - }, - "dependencies": {} + } } diff --git a/packages/text-chunker/package.json b/packages/text-chunker/package.json new file mode 100644 index 0000000..61b9789 --- /dev/null +++ b/packages/text-chunker/package.json @@ -0,0 +1,17 @@ +{ + "name": "@constructive-io/text-chunker", + "version": "1.0.0", + "description": "Text chunking utilities for RAG applications", + "author": "Constructive ", + "private": true, + "main": "dist/index.js", + "types": "dist/index.d.ts", + "scripts": { + "build": "tsc -p tsconfig.json", + "clean": "rimraf dist" + }, + "devDependencies": { + "@types/node": "^22.10.4", + "typescript": "^5.1.6" + } +} diff --git a/packages/text-chunker/src/index.ts b/packages/text-chunker/src/index.ts new file mode 100644 index 0000000..15044b5 --- /dev/null +++ b/packages/text-chunker/src/index.ts @@ -0,0 +1,118 @@ +export type ChunkStrategy = 'fixed' | 'sentence' | 'paragraph'; + +export interface ChunkOptions { + chunkSize?: number; + chunkOverlap?: number; + strategy?: ChunkStrategy; +} + +const DEFAULT_CHUNK_SIZE = 1000; +const DEFAULT_CHUNK_OVERLAP = 200; + +export function chunkText( + text: string, + options: ChunkOptions = {} +): string[] { + const { + chunkSize = DEFAULT_CHUNK_SIZE, + chunkOverlap = DEFAULT_CHUNK_OVERLAP, + strategy = 'fixed' + } = options; + + if (!text || text.trim().length === 0) { + return []; + } + + switch (strategy) { + case 'sentence': + return chunkBySentence(text, chunkSize, chunkOverlap); + case 'paragraph': + return chunkByParagraph(text, chunkSize, chunkOverlap); + case 'fixed': + default: + return chunkByFixed(text, chunkSize, chunkOverlap); + } +} + +export function chunkByFixed( + text: string, + chunkSize: number, + chunkOverlap: number +): string[] { + const chunks: string[] = []; + let start = 0; + + while (start < text.length) { + const end = Math.min(start + chunkSize, text.length); + chunks.push(text.slice(start, end)); + start += chunkSize - chunkOverlap; + if (chunkSize <= chunkOverlap) break; + } + + return chunks; +} + +export function chunkBySentence( + text: string, + chunkSize: number, + chunkOverlap: number +): string[] { + const sentenceMatches = text.match(/[^.!?]+[.!?]+/g) || []; + const lastMatch = sentenceMatches.length > 0 + ? sentenceMatches[sentenceMatches.length - 1] + : ''; + const lastIndex = lastMatch ? text.lastIndexOf(lastMatch) + lastMatch.length : 0; + const trailing = text.slice(lastIndex).trim(); + const sentences = trailing ? [...sentenceMatches, trailing] : (sentenceMatches.length > 0 ? sentenceMatches : [text]); + const chunks: string[] = []; + let currentChunk = ''; + let overlapBuffer: string[] = []; + + for (const sentence of sentences) { + const trimmed = sentence.trim(); + if ((currentChunk + ' ' + trimmed).length > chunkSize && currentChunk.length > 0) { + chunks.push(currentChunk.trim()); + currentChunk = overlapBuffer.join(' ') + ' ' + trimmed; + overlapBuffer = []; + } else { + currentChunk = currentChunk ? currentChunk + ' ' + trimmed : trimmed; + } + overlapBuffer.push(trimmed); + while (overlapBuffer.join(' ').length > chunkOverlap && overlapBuffer.length > 1) { + overlapBuffer.shift(); + } + } + + if (currentChunk.trim().length > 0) { + chunks.push(currentChunk.trim()); + } + return chunks; +} + +export function chunkByParagraph( + text: string, + chunkSize: number, + chunkOverlap: number +): string[] { + const paragraphs = text.split(/\n\n+/).filter(p => p.trim().length > 0); + const chunks: string[] = []; + let currentChunk = ''; + + for (const paragraph of paragraphs) { + const trimmed = paragraph.trim(); + if ((currentChunk + '\n\n' + trimmed).length > chunkSize && currentChunk.length > 0) { + chunks.push(currentChunk.trim()); + currentChunk = trimmed; + } else { + currentChunk = currentChunk ? currentChunk + '\n\n' + trimmed : trimmed; + } + } + + if (currentChunk.trim().length > 0) { + chunks.push(currentChunk.trim()); + } + + return chunks.flatMap(chunk => + chunk.length > chunkSize * 1.5 ? chunkByFixed(chunk, chunkSize, chunkOverlap) : [chunk] + ); +} diff --git a/packages/text-chunker/tsconfig.json b/packages/text-chunker/tsconfig.json new file mode 100644 index 0000000..a086b14 --- /dev/null +++ b/packages/text-chunker/tsconfig.json @@ -0,0 +1,8 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "outDir": "dist", + "rootDir": "src" + }, + "include": ["src"] +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 671a4ba..f8ac3f2 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -35,6 +35,12 @@ importers: globals: specifier: ^16.5.0 version: 16.5.0 + graphql: + specifier: ^16.14.0 + version: 16.14.0 + graphql-request: + specifier: ^7.4.0 + version: 7.4.0(graphql@16.14.0) jest: specifier: ^30.2.0 version: 30.2.0(@types/node@22.19.3) @@ -73,6 +79,37 @@ importers: specifier: ^5.1.6 version: 5.9.3 + generated/rag-embedding: + dependencies: + '@agentic-kit/ollama': + specifier: ^1.0.3 + version: 1.2.0 + '@constructive-io/fn-runtime': + specifier: workspace:^ + version: link:../../packages/fn-runtime + '@constructive-io/graphql-query': + specifier: ^3.12.14 + version: 3.25.2(@dataplan/json@1.0.0(grafast@1.0.0(graphql@16.13.0)))(@dataplan/pg@1.0.0(@dataplan/json@1.0.0(grafast@1.0.0(graphql@16.13.0)))(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0)(pg-sql2@5.0.0)(pg@8.20.0))(@types/node@22.19.3)(grafserv@1.0.0(@types/node@22.19.3)(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(use-sync-external-store@1.6.0(react@16.14.0))(ws@8.20.1))(graphile-build@5.0.0(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0))(pg-sql2@5.0.0)(pg@8.20.0)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(tamedevil@0.1.0)(use-sync-external-store@1.6.0(react@16.14.0))(ws@8.20.1) + '@pgpmjs/env': + specifier: ^2.11.0 + version: 2.17.0 + '@pgpmjs/logger': + specifier: ^2.1.0 + version: 2.5.2 + graphql-request: + specifier: ^7.1.2 + version: 7.4.0(graphql@16.13.0) + devDependencies: + '@types/node': + specifier: ^22.10.4 + version: 22.19.3 + makage: + specifier: ^0.1.10 + version: 0.1.12 + typescript: + specifier: ^5.1.6 + version: 5.9.3 + generated/send-email: dependencies: '@constructive-io/fn-runtime': @@ -123,10 +160,10 @@ importers: version: 2.5.2 graphql-request: specifier: ^7.1.2 - version: 7.4.0(graphql@16.12.0) + version: 7.4.0(graphql@16.14.0) graphql-tag: specifier: ^2.12.6 - version: 2.12.6(graphql@16.12.0) + version: 2.12.6(graphql@16.14.0) simple-smtp-server: specifier: ^0.7.3 version: 0.7.3 @@ -154,10 +191,10 @@ importers: version: 2.5.2 graphql-request: specifier: ^7.1.2 - version: 7.4.0(graphql@16.12.0) + version: 7.4.0(graphql@16.14.0) graphql-tag: specifier: ^2.12.6 - version: 2.12.6(graphql@16.12.0) + version: 2.12.6(graphql@16.14.0) twilio: specifier: ^5.5.0 version: 5.13.1 @@ -194,10 +231,10 @@ importers: version: 2.5.2 graphql-request: specifier: ^7.1.2 - version: 7.4.0(graphql@16.12.0) + version: 7.4.0(graphql@16.14.0) graphql-tag: specifier: ^2.12.6 - version: 2.12.6(graphql@16.12.0) + version: 2.12.6(graphql@16.14.0) simple-smtp-server: specifier: ^0.7.3 version: 0.7.3 @@ -240,6 +277,31 @@ importers: specifier: ^5.1.6 version: 5.9.3 + generated/sql-example: + dependencies: + '@constructive-io/knative-job-fn': + specifier: workspace:^ + version: link:../../packages/fn-app + '@pgpmjs/logger': + specifier: ^1.0.0 + version: 1.5.0 + pg: + specifier: ^8.11.0 + version: 8.20.0 + devDependencies: + '@types/node': + specifier: ^22.10.4 + version: 22.19.3 + '@types/pg': + specifier: ^8.11.0 + version: 8.16.0 + makage: + specifier: ^0.1.10 + version: 0.1.12 + typescript: + specifier: ^5.1.6 + version: 5.9.3 + generated/text-embedding: dependencies: '@agentic-kit/ollama': @@ -501,7 +563,7 @@ importers: version: 2.5.2 graphql-request: specifier: ^7.1.2 - version: 7.4.0(graphql@16.12.0) + version: 7.4.0(graphql@16.14.0) devDependencies: '@types/node': specifier: ^22.10.4 @@ -514,7 +576,7 @@ importers: dependencies: graphql-request: specifier: ^7.1.2 - version: 7.4.0(graphql@16.12.0) + version: 7.4.0(graphql@16.14.0) devDependencies: '@types/node': specifier: ^22.10.4 @@ -526,14 +588,160 @@ importers: specifier: ^5.1.6 version: 5.9.3 + packages/text-chunker: + devDependencies: + '@types/node': + specifier: ^22.10.4 + version: 22.19.3 + typescript: + specifier: ^5.1.6 + version: 5.9.3 + packages: 12factor-env@1.6.2: resolution: {integrity: sha512-U4EO6sy9Cc6h1ST3hhLD2rc2s4LERxProove3XZ52rMq2rTo5uTKWNKwD2OYDUwqNij+p5SgjmpPO6L/Gqtizw==} + '@0no-co/graphql.web@1.2.0': + resolution: {integrity: sha512-/1iHy9TTr63gE1YcR5idjx8UREz1s0kFhydf3bBLCXyqjhkIc6igAzTOx3zPifCwFR87tsh/4Pa9cNts6d2otw==} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 + peerDependenciesMeta: + graphql: + optional: true + '@agentic-kit/ollama@1.2.0': resolution: {integrity: sha512-MWVawKqphgs6Dq2FdWGvILw/72Eqg1EEUQAaACxX+CvQJTF4ArtNdTbQCLfPM8kk0l3JESI2DBHSccckj6pmag==} + '@aws-crypto/crc32@5.2.0': + resolution: {integrity: sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg==} + engines: {node: '>=16.0.0'} + + '@aws-crypto/crc32c@5.2.0': + resolution: {integrity: sha512-+iWb8qaHLYKrNvGRbiYRHSdKRWhto5XlZUEBwDjYNf+ly5SVYG6zEoYIdxvf5R3zyeP16w4PLBn3rH1xc74Rag==} + + '@aws-crypto/sha1-browser@5.2.0': + resolution: {integrity: sha512-OH6lveCFfcDjX4dbAvCFSYUjJZjDr/3XJ3xHtjn3Oj5b9RjojQo8npoLeA/bNwkOkrSQ0wgrHzXk4tDRxGKJeg==} + + '@aws-crypto/sha256-browser@5.2.0': + 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'} + + '@aws-crypto/supports-web-crypto@5.2.0': + resolution: {integrity: sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==} + + '@aws-crypto/util@5.2.0': + resolution: {integrity: sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==} + + '@aws-sdk/client-s3@3.1048.0': + resolution: {integrity: sha512-SrJn5FteqqtcDBgQIvqLKk3Qn/2vSsi5XR03I53EDDR4CbCdLysVSNgUnjVncEECMua9Pz+nxO0/lEx3TP+6mA==} + engines: {node: '>=20.0.0'} + + '@aws-sdk/core@3.974.11': + resolution: {integrity: sha512-QpnINq5FZH6EOaDEkmHdT7eUunbvD27pDNQypaWjFyYz7Zl1q3UCMQErBZxpmfGfI7MvI2TlK8KTkgNpv8b1ug==} + engines: {node: '>=20.0.0'} + + '@aws-sdk/crc64-nvme@3.972.8': + resolution: {integrity: sha512-fVfUCL/Xh2zINYMPZvj+iBn6XWouQf0DAnjaWCI9MkmqXzL2Iy5FoQB8O7syFe6gN6AH1ecDDU58T51Ou0kFkA==} + engines: {node: '>=20.0.0'} + + '@aws-sdk/credential-provider-env@3.972.37': + resolution: {integrity: sha512-/jpPvEh6f7ntmIzf7dNxoNX6Q8vt8UpesCjbW6mFfk4V1NW6bIy9qxcQ6WbA8As5yQhsZOe+xeNd4xHX8kdY2Q==} + engines: {node: '>=20.0.0'} + + '@aws-sdk/credential-provider-http@3.972.39': + resolution: {integrity: sha512-pIgTpisWyWg7X1bUbzSjuUYosYTD0Ghz2M0hkSTmb3a6i3qV3uU+NYJPI/E2XSC0HcsZh5rsLPzeXrkb2DS0Cg==} + engines: {node: '>=20.0.0'} + + '@aws-sdk/credential-provider-ini@3.972.41': + resolution: {integrity: sha512-u2tyjaxJJzW8UtW4SM1ZcPMDwO6y+kV+llvou+Adts0FAKyzes5jG4izQN+KX3yE8ZROpS5y1LJ//xL2iSf76w==} + engines: {node: '>=20.0.0'} + + '@aws-sdk/credential-provider-login@3.972.41': + resolution: {integrity: sha512-0LBitxXiAiaE5nlFPfpNIww/8FRY/I7WIndWsc9GmNFOM7cE1wNpVNQEGEk9Outg5l8xl+3vybxFyUy4l9q/LQ==} + engines: {node: '>=20.0.0'} + + '@aws-sdk/credential-provider-node@3.972.42': + resolution: {integrity: sha512-D4oon2zbqqsWOJUM99Gm3/ZyJ0IJvTXVN3PyloGb3kQEyI36fjCZheZj422lAgTWWd6TSHgiImLt3RIaLdv3dQ==} + engines: {node: '>=20.0.0'} + + '@aws-sdk/credential-provider-process@3.972.37': + resolution: {integrity: sha512-7nVaHBUaWIddASYfVaA9O4D5ZVjewU3sCol9WqZPGfW0nR+0WqE0xHZnD/U2L33PlOB8KNXGKZ6wOES/QijKzg==} + engines: {node: '>=20.0.0'} + + '@aws-sdk/credential-provider-sso@3.972.41': + resolution: {integrity: sha512-IOWAWEHe5LkjSKkkUUX9ciV6Y1scHTsnfEkdt5yyC4Slrc7AGbkLPrpntjqh18ksJAMOaVhoBsO8p2WyTcY2wQ==} + engines: {node: '>=20.0.0'} + + '@aws-sdk/credential-provider-web-identity@3.972.41': + resolution: {integrity: sha512-mbACk9Yypa8nm4iGZLs0PofOXEcTDOUw6wDnsPXNDNSd2WNXs1tSo+6nc/fh0jLYdfVZThhBL98PHW4aXFsG5A==} + engines: {node: '>=20.0.0'} + + '@aws-sdk/lib-storage@3.1048.0': + resolution: {integrity: sha512-3u+Ycwo84crWoyPU4DrZgv6GO92cUE4CX5/h32vmSMeG8e93XgB40Jz2PqPim/r73IYRuQUrZY8E1P1MHvXZqw==} + engines: {node: '>=20.0.0'} + peerDependencies: + '@aws-sdk/client-s3': ^3.1048.0 + + '@aws-sdk/middleware-bucket-endpoint@3.972.13': + resolution: {integrity: sha512-JDaukix+kt5KwF7FzNSkfZHpqiPJajVkKJLJexF6z5B44+CN70BXGiQaCEAiCtKtRZNvC16eF3SY9L0bDJPlbA==} + engines: {node: '>=20.0.0'} + + '@aws-sdk/middleware-expect-continue@3.972.12': + resolution: {integrity: sha512-dA5pKTom/Ls9mgeyeaRBNQrRIVOLVjv4AmKOB0/e4yaiXEUy0gSz2d3liP8JHtYoCAEWySU1jWnyzwLOREN+4g==} + engines: {node: '>=20.0.0'} + + '@aws-sdk/middleware-flexible-checksums@3.974.19': + resolution: {integrity: sha512-GLciZVIvWM3C+ffuqnUqlAZwRjQdLt+KXiqr9+aRwZyKVyF2J5lrJAzzSqwweNl9hUWBN00BhilWXdMI5DjNcw==} + engines: {node: '>=20.0.0'} + + '@aws-sdk/middleware-location-constraint@3.972.10': + resolution: {integrity: sha512-rI3NZvJcEvjoD0+0PI0iUAwlPw2IlSlhyvgBK/3WkKJQE/YiKFedd9dMN2lVacdNxPNhxL/jzQaKQdrGtQagjQ==} + engines: {node: '>=20.0.0'} + + '@aws-sdk/middleware-sdk-s3@3.972.40': + resolution: {integrity: sha512-vyFY4EsAGySqqd87Z7n4qcCYXJO3QArB8VIJzuupY5XuLHIp579HTZldIUGGABvAOzLptfPb9+lJBJcB+3/cvA==} + engines: {node: '>=20.0.0'} + + '@aws-sdk/middleware-ssec@3.972.10': + resolution: {integrity: sha512-Gli9A0u8EVVb+5bFDGS/QbSVg28w/wpEidg1ggVcSj65BDTdGR6punsOcVjqdiu1i42WHWo51MCvARPIIz9juw==} + engines: {node: '>=20.0.0'} + + '@aws-sdk/nested-clients@3.997.9': + resolution: {integrity: sha512-jPR3rnmRI4hWYyzfmTGBr7NblMp8QYYeflHXba1H6+7CGrWVqWKQzaXFQ4qbExqPRsXN3T3L3JxFhr6aouXUGQ==} + engines: {node: '>=20.0.0'} + + '@aws-sdk/s3-request-presigner@3.1048.0': + resolution: {integrity: sha512-7/yZh562OhKvwBFS/nVL+7qMecUGO91XfaPfqisWiswtlgoQ4gt4zHn9MuUwoPcIYgdkOO0RucOzcD13u7uJEg==} + engines: {node: '>=20.0.0'} + + '@aws-sdk/signature-v4-multi-region@3.996.27': + resolution: {integrity: sha512-0Phbz4t6HI3D3skxvG2uI+VWU034/nSIw1T8d+FPzzQG9EQTrw94o9mOKO2Gv3n3Oc8P7JD7RAUxkoneLWv5Eg==} + engines: {node: '>=20.0.0'} + + '@aws-sdk/token-providers@3.1048.0': + resolution: {integrity: sha512-k0y/GcuesuSfWyUM0WamrGyeZmltRYaPbHO82UDA6mZ/doB+FOHKutikPAtSXMn/hDz970cF+iRuuiYO9VEbAA==} + engines: {node: '>=20.0.0'} + + '@aws-sdk/types@3.973.8': + resolution: {integrity: sha512-gjlAdtHMbtR9X5iIhVUvbVcy55KnznpC6bkDUWW9z915bi0ckdUr5cjf16Kp6xq0bP5HBD2xzgbL9F9Quv5vUw==} + engines: {node: '>=20.0.0'} + + '@aws-sdk/util-locate-window@3.965.5': + resolution: {integrity: sha512-WhlJNNINQB+9qtLtZJcpQdgZw3SCDCpXdUJP7cToGwHbCWCnRckGlc6Bx/OhWwIYFNAn+FIydY8SZ0QmVu3xTQ==} + engines: {node: '>=20.0.0'} + + '@aws-sdk/xml-builder@3.972.24': + resolution: {integrity: sha512-V8z5YcDPfsvzrBlj0xR1vhRtocblhYbqdreCJB/voGd4Sr5zjNAeWxexbnqVtskTJe0vFb5KMqbSL++ePl+zRw==} + engines: {node: '>=20.0.0'} + + '@aws/lambda-invoke-store@0.2.4': + resolution: {integrity: sha512-iY8yvjE0y651BixKNPgmv1WrQc+GZ142sb0z4gYnChDDY2YqI4P/jsSopBWrKfAt7LOJAkOXt7rC/hms+WclQQ==} + engines: {node: '>=18.0.0'} + '@babel/code-frame@7.27.1': resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} engines: {node: '>=6.9.0'} @@ -711,6 +919,24 @@ packages: '@bcoe/v8-coverage@0.2.3': resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} + '@constructive-io/bucket-provisioner@0.11.0': + resolution: {integrity: sha512-ibtHGh9p97PqAH1ZPG1Jq5n5kT1SLnU+BuB6nZ/FLT/eSfL1C0LTJewWbQ8Yt8/eVxkw6h8PhQFyYYSY9z/k8g==} + + '@constructive-io/content-type-stream@2.17.0': + resolution: {integrity: sha512-aSESj1qxK7YJCKfOSmcn7UYkW5PWG2pjLIw9Dy/W0P2wVj/k/K6sdHX3ypF040A7JzAQ3jwefbqCTDt7ivkVNQ==} + + '@constructive-io/fetch@1.0.0': + resolution: {integrity: sha512-4W2lnDOzFiYRBLNit4wzSHFZu8eO68W6RIxBApwFIhChGfgdMwI9H68Ant3B9CXnIhxq4peY3mSCC2krS67ojw==} + + '@constructive-io/graphql-env@3.11.0': + resolution: {integrity: sha512-ZJYtz+DrYmM2UJVZ/ofAjubkFmAesfQsOMJrDqjQV+BiMWP/WYkftgvznm1Z75xIj4zYHvSezbzglDrIaFmtBg==} + + '@constructive-io/graphql-query@3.25.2': + resolution: {integrity: sha512-i3kN0LgG5CZRrZkDqVgrvOEpae1PQmjXEF/E9b19XAYIRsp5a4M7rT5/s/XiOSFe/jsp/dVNKe3diDche5z5fw==} + + '@constructive-io/graphql-types@3.10.0': + resolution: {integrity: sha512-AIexkXBxM7xFtrsSWhp9fl/2et06ERA6uu6Rh6m1zvHiqBGVOk8irfD5rJzj8yLun8qsYPAIhXo9Tk5sGz+FVA==} + '@constructive-io/job-pg@2.5.4': resolution: {integrity: sha512-cjJxL/P1g4s07PiXiw31jb7c56aQmdPur+WyQXC0lAig1DIFSeJqbQjY6PXaFQepxgivwIBf9P9v+EalQaOtPQ==} @@ -723,6 +949,35 @@ packages: '@constructive-io/postmaster@1.6.2': resolution: {integrity: sha512-trZQHFxPRdgaHUCKMIVhMFi59XTTQxuZ31AE1/BaE1onJsm24rmh1ewzNfe45IeAKWRjSSu7JvzCX6gVlR+8bA==} + '@constructive-io/s3-streamer@2.24.0': + resolution: {integrity: sha512-0/rPY0FccYu8WUxORJHiD73EDED34ukSbii2wXxl5DJKnpJPlWTCjvIrN8vozjAVA/vqctusBPWzKW0KDSMRCg==} + + '@constructive-io/s3-utils@2.17.0': + resolution: {integrity: sha512-qK4F81W/+AOSWoL9eIdxrGVkLgAtRm5YJlqW8Pk9KvtDFsx/6rmULqm4LyWrm39fL0M3qAQ8FBlvGJtHK60U/w==} + + '@constructive-io/upload-names@2.16.0': + resolution: {integrity: sha512-fAtIKwGzxzxZAk+eKPX7RxBrIaA6lEXNWVmYi1mjE5YMdBA6i6aGjRInXcPrW/MRo7jMPispQhEqLPkL8rBEsA==} + + '@dataplan/json@1.0.0': + resolution: {integrity: sha512-mSBzlhKTZWeXYq/j8U+8/9sVToeVQW4TYfTaEwZvE6fFHJTIzBK38dgOPTN+Vp/Wk7iiRT+GYd8RWE6aMFpNDg==} + engines: {node: '>=22'} + peerDependencies: + grafast: ^1.0.0-rc.8 + + '@dataplan/pg@1.0.0': + resolution: {integrity: sha512-Nl4cdQWgdl86u78K1FjQtvH+AyH5ToDb9hYxN99Hu8T+ip6a6B3i3Ho0nRlBccUWYHx+p92Kh70sDXCJ3Fpmnw==} + engines: {node: '>=22'} + peerDependencies: + '@dataplan/json': ^1.0.0 + grafast: ^1.0.0 + graphile-config: ^1.0.0-rc.5 + graphql: ^16.9.0 + pg: ^8.7.1 + pg-sql2: ^5.0.0 + peerDependenciesMeta: + pg: + optional: true + '@emnapi/core@1.8.1': resolution: {integrity: sha512-AvT9QFpxK0Zd8J0jopedNm+w/2fIzvtPKPjqyw9jwvBaReTTqPBk9Hixaz7KbjimP+QNz605/XnjFcDAL2pqBg==} @@ -938,11 +1193,87 @@ packages: resolution: {integrity: sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@floating-ui/core@1.7.5': + resolution: {integrity: sha512-1Ih4WTWyw0+lKyFMcBHGbb5U5FtuHJuujoyyr5zTaWS5EYMeT6Jb2AuDeftsCsEuchO+mM2ij5+q9crhydzLhQ==} + + '@floating-ui/dom@1.7.6': + resolution: {integrity: sha512-9gZSAI5XM36880PPMm//9dfiEngYoC6Am2izES1FF406YFsjvyBMmeJ2g4SAju3xWwtuynNRFL2s9hgxpLI5SQ==} + + '@floating-ui/react-dom@2.1.8': + resolution: {integrity: sha512-cC52bHwM/n/CxS87FH0yWdngEZrjdtLW/qVruo68qg+prK7ZQ4YGdut2GyDVpoGeAYe/h899rVeOVm6Oi40k2A==} + peerDependencies: + react: '>=16.8.0' + react-dom: '>=16.8.0' + + '@floating-ui/react@0.26.28': + resolution: {integrity: sha512-yORQuuAtVpiRjpMhdc0wJj06b9JFjrYF4qp96j++v2NBpbi6SEGF7donUJ3TMieerQ6qVkAv1tgr7L4r5roTqw==} + peerDependencies: + react: '>=16.8.0' + react-dom: '>=16.8.0' + + '@floating-ui/utils@0.2.11': + resolution: {integrity: sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg==} + + '@graphile-contrib/pg-many-to-many@2.0.0-rc.2': + resolution: {integrity: sha512-aPu/oPWIsljTmlj58UNy95+JzXwHrClQA51bvfZUgj3l7kaUiwCCBYCFql2nSrMwdlFgexphs3faJbHiqsEDrw==} + engines: {node: '>=10'} + + '@graphile/lru@5.0.0': + resolution: {integrity: sha512-NeRBDdUd/l4H284HrYL2/wNHv/FmW5stAMPFAiBZanLHwq9J3suZTtyN5CwTxUFA/vgqzu0B1/9XtIEaJYEKig==} + engines: {node: '>=22'} + + '@graphiql/plugin-doc-explorer@0.4.2': + resolution: {integrity: sha512-jqRUSaP9pq2JdoovKaiNQoV4ZVcDP5nn+QEa++vEYh0nCn76836SAde2/LkYMc9NnN8/PHMKqeUBnClZ+AUtVQ==} + peerDependencies: + '@graphiql/react': ^0.37.0 + graphql: ^15.5.0 || ^16.0.0 || ^17.0.0 + react: ^18 || ^19 + react-dom: ^18 || ^19 + + '@graphiql/plugin-history@0.4.2': + resolution: {integrity: sha512-kwQYc1gmmkLbJPRHI/df3wtYNKNBGHxVkbkd+tbnRuCkrpdMm6NygCQeproJFKHTRbd3lYBAolaBcfgWNd196A==} + peerDependencies: + '@graphiql/react': ^0.37.0 + react: ^18 || ^19 + react-dom: ^18 || ^19 + + '@graphiql/react@0.37.5': + resolution: {integrity: sha512-9LiAtBlJGna19J/zLLq5JDOlVSJpblMWaL23+FSplC9mQIUNtjBBSrl+GZ9azCllt9LAd0MK5whz6PXIZ58RPw==} + peerDependencies: + graphql: ^15.5.0 || ^16.0.0 || ^17.0.0 + react: ^18 || ^19 + react-dom: ^18 || ^19 + + '@graphiql/toolkit@0.11.3': + resolution: {integrity: sha512-Glf0fK1cdHLNq52UWPzfSrYIJuNxy8h4451Pw1ZVpJ7dtU+tm7GVVC64UjEDQ/v2j3fnG4cX8jvR75IvfL6nzQ==} + peerDependencies: + graphql: ^15.5.0 || ^16.0.0 || ^17.0.0 + graphql-ws: '>= 4.5.0' + peerDependenciesMeta: + graphql-ws: + optional: true + + '@graphiql/toolkit@0.12.0': + resolution: {integrity: sha512-pT7EMTKmdOM1mTSmQE0XuEs1UJJgZGnQojQ44nEad7p8/7v1m4P5ResL1vsCVxJYpbHX/cXjpRkrG3A2gpRtRQ==} + peerDependencies: + graphql: ^15.5.0 || ^16.0.0 || ^17.0.0 + graphql-ws: '>= 4.5.0' + peerDependenciesMeta: + graphql-ws: + optional: true + '@graphql-typed-document-node/core@3.2.0': 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 + '@headlessui/react@2.2.10': + resolution: {integrity: sha512-5pVLNK9wlpxTUTy9GpgbX/SdcRh+HBnPktjM2wbiLTH4p+2EPHBO1aoSryUCuKUIItdDWO9ITlhUL8UnUN/oIA==} + engines: {node: '>=10'} + peerDependencies: + react: ^18 || ^19 || ^19.0.0-rc + react-dom: ^18 || ^19 || ^19.0.0-rc + '@humanfs/core@0.19.1': resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} engines: {node: '>=18.18.0'} @@ -959,6 +1290,15 @@ packages: resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} engines: {node: '>=18.18'} + '@internationalized/date@3.12.1': + resolution: {integrity: sha512-6IedsVWXyq4P9Tj+TxuU8WGWM70hYLl12nbYU8jkikVpa6WXapFazPUcHUMDMoWftIDE2ILDkFFte6W2nFCkRQ==} + + '@internationalized/number@3.6.6': + resolution: {integrity: sha512-iFgmQaXHE0vytNfpLZWOC2mEJCBRzcUxt53Xf/yCXG93lRvqas237i3r7X4RKMwO3txiyZD4mQjKAByFv6UGSQ==} + + '@internationalized/string@3.2.8': + resolution: {integrity: sha512-NdbMQUSfXLYIQol5VyMtinm9pZDciiMfN7RtmSuSB78io1hqwJ0naYfxyW6vgxWBkzWymQa/3uLDlbfmshtCaA==} + '@isaacs/balanced-match@4.0.1': resolution: {integrity: sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==} engines: {node: 20 || >=22} @@ -1159,21 +1499,46 @@ packages: react: '>=16' react-dom: '>=16' + '@n1ru4l/push-pull-async-iterable-iterator@3.2.0': + resolution: {integrity: sha512-3fkKj25kEjsfObL6IlKPAlHYPq/oYwUkkQ03zsTTiDjD7vg/RxjdiLeCydqtxHZP0JgsXL3D/X5oAkMGzuUp/Q==} + engines: {node: '>=12'} + '@napi-rs/wasm-runtime@0.2.12': resolution: {integrity: sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==} + '@nodable/entities@2.1.0': + resolution: {integrity: sha512-nyT7T3nbMyBI/lvr6L5TyWbFJAI9FTgVRakNoBqCD+PmID8DzFrrNdLLtHMwMszOtqZa8PAOV24ZqDnQrhQINA==} + '@one-ini/wasm@0.1.1': resolution: {integrity: sha512-XuySG1E38YScSJoMlqovLru4KTUNSjgVTIjyh7qMX6aNN5HY5Ct5LhRJdxO79JtTzKfzV/bnWpz+zquYrISsvw==} '@pgpmjs/env@2.17.0': resolution: {integrity: sha512-3WPwJ4prFWGGIRzyR52/JG84hM+Qe6lVtQ+bcCpGnGuhukFowALpaegRZxi3LT/pO6D8wW1Y3nW9LugfJLO6KQ==} + '@pgpmjs/env@2.23.0': + resolution: {integrity: sha512-IYdA9gsfc9ajBquDErsrSuDXCCnJk8JPR3t5phhyY9VgskSHog8wkYy3DN0ndd1zJwYeWg7+m3iY44oLHHFpjw==} + + '@pgpmjs/logger@1.5.0': + resolution: {integrity: sha512-R27o5MiOsezI5rAWdJyuOkWUK6zxr8Mg61hPs7uCu//sECoprR4/7CVeFIHwn7+gyrjUk0wBz0dQcJhjYzVDpw==} + + '@pgpmjs/logger@2.11.0': + resolution: {integrity: sha512-OFZwb9d3/GqPvwJqtRhk+D6XrVOAi9WC6J7N13MxRVWCeCz8Sl1V19ff0FwGu7A2QQtQfnxpu48r9qeTv3EmYw==} + '@pgpmjs/logger@2.5.2': resolution: {integrity: sha512-e9Z2Woju+fcsC0nm9KwEgOXZqm8UcrrxVEPbunXo6kpROpIQkBRg3RVU9xCxSHQ6xiko4r9YFXs370EW6kIUsQ==} '@pgpmjs/types@2.21.0': resolution: {integrity: sha512-aeMRRzBr2jsxodU7R6ltvWmsHViftVLt/D+5Z+nuyM4KPECCvM5l+Jp6niB0LMjpDW8/GG+C/45co00zAHAZGQ==} + '@pgpmjs/types@2.27.0': + resolution: {integrity: sha512-6SVp35GuKy/oBZogeO1YGmHYqaylQ7KIzMs0wqSz7KhYcCvCrhIZXxId+tXg5b7ycEd14JXSzbSu8B4lLnnjlQ==} + + '@pgsql/quotes@17.1.0': + resolution: {integrity: sha512-J/H+LcrENBpYgL45WW6aTjb5Yk4tX4+AmB2/k8KZa+Zh3wiCtqmNIag+HZz5HmWaF6EZK9ZGC95NBD1fs+rUvg==} + + '@pgsql/types@17.6.2': + resolution: {integrity: sha512-1UtbELdbqNdyOShhrVfSz3a1gDi0s9XXiQemx+6QqtsrXe62a6zOGU+vjb2GRfG5jeEokI1zBBcfD42enRv0Rw==} + '@pkgjs/parseargs@0.11.0': resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} @@ -1182,6 +1547,363 @@ packages: resolution: {integrity: sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==} engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + '@radix-ui/primitive@1.1.3': + resolution: {integrity: sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg==} + + '@radix-ui/react-arrow@1.1.7': + resolution: {integrity: sha512-F+M1tLhO+mlQaOWspE8Wstg+z6PwxwRd8oQ8IXceWz92kfAmalTRf0EjrouQeo7QssEPfCn05B4Ihs1K9WQ/7w==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-collection@1.1.7': + resolution: {integrity: sha512-Fh9rGN0MoI4ZFUNyfFVNU4y9LUz93u9/0K+yLgA2bwRojxM8JU1DyvvMBabnZPBgMWREAJvU2jjVzq+LrFUglw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-compose-refs@1.1.2': + resolution: {integrity: sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-context@1.1.2': + resolution: {integrity: sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-dialog@1.1.15': + resolution: {integrity: sha512-TCglVRtzlffRNxRMEyR36DGBLJpeusFcgMVD9PZEzAKnUs1lKCgX5u9BmC2Yg+LL9MgZDugFFs1Vl+Jp4t/PGw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-direction@1.1.1': + resolution: {integrity: sha512-1UEWRX6jnOA2y4H5WczZ44gOOjTEmlqv1uNW4GAJEO5+bauCBhv8snY65Iw5/VOS/ghKN9gr2KjnLKxrsvoMVw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-dismissable-layer@1.1.11': + resolution: {integrity: sha512-Nqcp+t5cTB8BinFkZgXiMJniQH0PsUt2k51FUhbdfeKvc4ACcG2uQniY/8+h1Yv6Kza4Q7lD7PQV0z0oicE0Mg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-dropdown-menu@2.1.16': + resolution: {integrity: sha512-1PLGQEynI/3OX/ftV54COn+3Sud/Mn8vALg2rWnBLnRaGtJDduNW/22XjlGgPdpcIbiQxjKtb7BkcjP00nqfJw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-focus-guards@1.1.3': + resolution: {integrity: sha512-0rFg/Rj2Q62NCm62jZw0QX7a3sz6QCQU0LpZdNrJX8byRGaGVTqbrW9jAoIAHyMQqsNpeZ81YgSizOt5WXq0Pw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-focus-scope@1.1.7': + resolution: {integrity: sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-id@1.1.1': + resolution: {integrity: sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-menu@2.1.16': + resolution: {integrity: sha512-72F2T+PLlphrqLcAotYPp0uJMr5SjP5SL01wfEspJbru5Zs5vQaSHb4VB3ZMJPimgHHCHG7gMOeOB9H3Hdmtxg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-popper@1.2.8': + resolution: {integrity: sha512-0NJQ4LFFUuWkE7Oxf0htBKS6zLkkjBH+hM1uk7Ng705ReR8m/uelduy1DBo0PyBXPKVnBA6YBlU94MBGXrSBCw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-portal@1.1.9': + resolution: {integrity: sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-presence@1.1.5': + resolution: {integrity: sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-primitive@2.1.3': + resolution: {integrity: sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-primitive@2.1.4': + resolution: {integrity: sha512-9hQc4+GNVtJAIEPEqlYqW5RiYdrr8ea5XQ0ZOnD6fgru+83kqT15mq2OCcbe8KnjRZl5vF3ks69AKz3kh1jrhg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-roving-focus@1.1.11': + resolution: {integrity: sha512-7A6S9jSgm/S+7MdtNDSb+IU859vQqJ/QAtcYQcfFC6W8RS4IxIZDldLR0xqCFZ6DCyrQLjLPsxtTNch5jVA4lA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-slot@1.2.3': + resolution: {integrity: sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-slot@1.2.4': + resolution: {integrity: sha512-Jl+bCv8HxKnlTLVrcDE8zTMJ09R9/ukw4qBs/oZClOfoQk/cOTbDn+NceXfV7j09YPVQUryJPHurafcSg6EVKA==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-tooltip@1.2.8': + resolution: {integrity: sha512-tY7sVt1yL9ozIxvmbtN5qtmH2krXcBCfjEiCgKGLqunJHvgvZG2Pcl2oQ3kbcZARb1BGEHdkLzcYGO8ynVlieg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-use-callback-ref@1.1.1': + resolution: {integrity: sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-controllable-state@1.2.2': + resolution: {integrity: sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-effect-event@0.0.2': + resolution: {integrity: sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-escape-keydown@1.1.1': + resolution: {integrity: sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-layout-effect@1.1.1': + resolution: {integrity: sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-rect@1.1.1': + resolution: {integrity: sha512-QTYuDesS0VtuHNNvMh+CjlKJ4LJickCMUAqjlE3+j8w+RlRpwyX3apEQKGFzbZGdo7XNG1tXa+bQqIE7HIXT2w==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-size@1.1.1': + resolution: {integrity: sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-visually-hidden@1.2.3': + resolution: {integrity: sha512-pzJq12tEaaIhqjbzpCuv/OypJY/BPavOofm+dbab+MHLajy277+1lLm6JFcGgF5eskJ6mquGirhXY2GD/8u8Ug==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-visually-hidden@1.2.4': + resolution: {integrity: sha512-kaeiyGCe844dkb9AVF+rb4yTyb1LiLN/e3es3nLiRyN4dC8AduBYPMnnNlDjX2VDOcvDEiPnRNMJeWCfsX0txg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/rect@1.1.1': + resolution: {integrity: sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==} + + '@react-aria/focus@3.22.0': + resolution: {integrity: sha512-ZfDOVuVhqDsM9mkNji3QUZ/d40JhlVgXrDkrfXylM1035QCrcTHN7m2DpbE95sU2A8EQb4wikvt5jM6K/73BPg==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + + '@react-aria/interactions@3.28.0': + resolution: {integrity: sha512-OXwdU1EWFdMxmr/K1CXNGJzmNlCClByb+PuCaqUyzBymHPCGVhawirLIon/CrIN5psh3AiWpHSh4H0WeJdVpng==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + + '@react-types/shared@3.34.0': + resolution: {integrity: sha512-gp6xo/s2lX54AlTjOiqwDnxA7UW79BNvI9dB9pr3LZTzRKCd1ZA+ZbgKw/ReIiWuvvVw/8QFJpnqeeFyLocMcQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + '@sinclair/typebox@0.27.10': resolution: {integrity: sha512-MTBk/3jGLNB2tVxv6uLlFh1iu64iYOQ2PbdOSK3NW8JZsmlaOh2q6sdtKowBhfw8QFLmYNzTW4/oK4uATIi6ZA==} @@ -1197,6 +1919,42 @@ packages: '@sinonjs/fake-timers@13.0.5': resolution: {integrity: sha512-36/hTbH2uaWuGVERyC6da9YwGWnzUZXuPro/F2LfsdOsLnCojz/iSH8MxUt/FD2S5XBSVPhmArFUXcpCQ2Hkiw==} + '@smithy/core@3.24.3': + resolution: {integrity: sha512-Ep/7tPamGY8mgESE3LyLKtxJyy6U52WWAqr/3wial47Sj4u3PiIF73AOGI27UyLy9duTkhZbgzodOfLV4TduZg==} + engines: {node: '>=18.0.0'} + + '@smithy/credential-provider-imds@4.3.3': + resolution: {integrity: sha512-I2Bti0DKFo2IJyN28ijCsx51BAumEYR4/1yZ1FXyBygy9MqbnMqCev4JPth/MbpRfBSRAX35hITSnAdJRo1u5w==} + engines: {node: '>=18.0.0'} + + '@smithy/fetch-http-handler@5.4.3': + resolution: {integrity: sha512-F+DRf8IJazRJgYog2A/yJK7eYVc0rqTlRzO+5ZxjJd4WkZoKz0IJRncf7G6t1pdVT3kryJcwuTFhN1c5m6N47A==} + engines: {node: '>=18.0.0'} + + '@smithy/is-array-buffer@2.2.0': + resolution: {integrity: sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==} + engines: {node: '>=14.0.0'} + + '@smithy/node-http-handler@4.7.3': + resolution: {integrity: sha512-/jPhevcTFPMVl6KNjbaI47iOg1zxC7IsnX4PQDGVZKMFceOXtB8IEYaB7a9VvkP/3oC60WzTeKocvSI7vLT0vA==} + engines: {node: '>=18.0.0'} + + '@smithy/signature-v4@5.4.3': + resolution: {integrity: sha512-53+75QuPl6DL+ct6vVEB51FDO5oulXr20TPV46VvJZg76lIlXNWfxi8j+G2V/t0I2qxCBOa3vX/8bmjrpFVo9g==} + engines: {node: '>=18.0.0'} + + '@smithy/types@4.14.2': + resolution: {integrity: sha512-P+otAxbV4CqBybp7EkcJCrig63yE2E7PuNVOmilVMRcx/O+QDzGULTrKsq4DV13gSfak9ObPrWaHl/9bL5YcWw==} + 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'} + + '@smithy/util-utf8@2.3.0': + resolution: {integrity: sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==} + engines: {node: '>=14.0.0'} + '@styled-system/background@5.1.2': resolution: {integrity: sha512-jtwH2C/U6ssuGSvwTN3ri/IyjdHb8W9X/g8Y0JLcrH02G+BW3OS8kZdHphF1/YyRklnrKrBT2ngwGUK6aqqV3A==} @@ -1236,6 +1994,18 @@ packages: '@styled-system/variant@5.1.5': resolution: {integrity: sha512-Yn8hXAFoWIro8+Q5J8YJd/mP85Teiut3fsGVR9CAxwgNfIAiqlYxsk5iHU7VHJks/0KjL4ATSjmbtCDC/4l1qw==} + '@swc/helpers@0.5.21': + resolution: {integrity: sha512-jI/VAmtdjB/RnI8GTnokyX7Ug8c+g+ffD6QRLa6XQewtnGyukKkKSk3wLTM3b5cjt1jNh9x0jfVlagdN2gDKQg==} + + '@tanstack/react-virtual@3.13.24': + resolution: {integrity: sha512-aIJvz5OSkhNIhZIpYivrxrPTKYsjW9Uzy+sP/mx0S3sev2HyvPb7xmjbYvokzEpfgYHy/HjzJ2zFAETuUfgCpg==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + + '@tanstack/virtual-core@3.14.0': + resolution: {integrity: sha512-JLANqGy/D6k4Ujmh8Tr25lGimuOXNiaVyXaCAZS0W+1390sADdGnyUdSWNIfd49gebtIxGMij4IktRVzrdr12Q==} + '@tybys/wasm-util@0.10.1': resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==} @@ -1275,6 +2045,9 @@ packages: '@types/http-errors@2.0.5': resolution: {integrity: sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==} + '@types/interpret@1.1.4': + resolution: {integrity: sha512-r+tPKWHYqaxJOYA3Eik0mMi+SEREqOXLmsooRFmc6GHv7nWUDixFtKN+cegvsPlDcEZd9wxsdp041v2imQuvag==} + '@types/istanbul-lib-coverage@2.0.6': resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} @@ -1302,6 +2075,9 @@ packages: '@types/pg@8.16.0': resolution: {integrity: sha512-RmhMd/wD+CF8Dfo+cVIy3RR5cl8CyfXQ0tGgW6XBL8L4LM/UTEbNXYRbLwU6w+CgrKBNbrQWt4FUtTfaU5jSYQ==} + '@types/pluralize@0.0.33': + resolution: {integrity: sha512-JOqsl+ZoCpP4e8TDke9W79FDcSgPAR0l6pixx2JHkhnRjvShyYiAYw2LVsnA7K08Y6DeOnaU6ujmENO4os/cYg==} + '@types/qs@6.14.0': resolution: {integrity: sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==} @@ -1311,6 +2087,9 @@ packages: '@types/retry@0.12.5': resolution: {integrity: sha512-3xSjTp3v03X/lSQLkczaN9UIEwJMoMCA1+Nb5HfbJEQWogdeQIyVtTvxPXDQjZ5zws8rFQfVfRdz03ARihPJgw==} + '@types/semver@7.7.1': + resolution: {integrity: sha512-FmgJfu+MOcQ370SD0ev7EI8TlCAfKYU+B4m5T3yXc1CiRN94g/SZPtsCkk506aUDtlMnFZvasDwHHUcZUEaYuA==} + '@types/send@1.2.1': resolution: {integrity: sha512-arsCikDvlU99zl1g69TcAB3mzZPpxgw0UQnaHeC1Nwb015xp8bknZv5rIfri9xTOcMuaVgvabfIRA7PSZVuZIQ==} @@ -1509,6 +2288,9 @@ packages: ajv@6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + ajv@8.20.0: + resolution: {integrity: sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==} + ansi-colors@4.1.3: resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} engines: {node: '>=6'} @@ -1550,6 +2332,10 @@ packages: argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + aria-hidden@1.2.6: + resolution: {integrity: sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==} + engines: {node: '>=10'} + async-retry@1.3.3: resolution: {integrity: sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==} @@ -1618,6 +2404,9 @@ packages: base-64@1.0.0: resolution: {integrity: sha512-kwDPIFCGx0NZHog36dj+tHiwP4QMzsZ3AgMViUBKI0+V5n4U0ufTCUMhnQ04diaRI8EX/QcPfql7zlhZ7j4zgg==} + base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + baseline-browser-mapping@2.9.11: resolution: {integrity: sha512-Sg0xJUNDU1sJNGdfGWhVHX0kkZ+HWcvmVymJbj6NSgZZmW/8S9Y2HQ5euytnIgakgxN6papOAWiwDo1ctFDcoQ==} hasBin: true @@ -1633,6 +2422,9 @@ packages: boolbase@1.0.0: resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} + bowser@2.14.1: + resolution: {integrity: sha512-tzPjzCxygAKWFOJP011oxFHs57HzIhOEracIgAePE4pqB3LikALKnSzUyU4MGs9/iCEUuHlAJTjTc5M+u7YEGg==} + brace-expansion@1.1.12: resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==} @@ -1661,6 +2453,9 @@ packages: buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + buffer@5.6.0: + resolution: {integrity: sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==} + bytes@3.1.2: resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} engines: {node: '>= 0.8'} @@ -1742,6 +2537,14 @@ packages: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} engines: {node: '>=12'} + clsx@1.2.1: + resolution: {integrity: sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==} + engines: {node: '>=6'} + + clsx@2.1.1: + resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} + engines: {node: '>=6'} + co@4.6.0: resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} @@ -1803,6 +2606,10 @@ packages: 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. + cors@2.8.6: + resolution: {integrity: sha512-tJtZBBHA6vjIAaF6EnIaq6laBBP9aq/Y3ouVJjEfoHbRBcHBAHYcMh/w8LDrk2PvIMMq8gmopa5D4V8RmbrxGw==} + engines: {node: '>= 0.10'} + create-jest@29.7.0: resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -1839,6 +2646,9 @@ packages: dayjs@1.11.20: resolution: {integrity: sha512-YbwwqR/uYpeoP4pu043q+LTDLFBLApUP6VxRihdfNTqu4ubqMlGDLd6ErXhEgsyvY0K6nCs7nggYumAN+9uEuQ==} + debounce-promise@3.1.2: + resolution: {integrity: sha512-rZHcgBkbYavBeD9ej6sP56XfG53d51CD4dnaw989YX/nZ/ZJfgRx/9ePKmTNiUiyQvh4mtrMoS3OAWW+yoYtpg==} + debug@4.4.3: resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} engines: {node: '>=6.0'} @@ -1879,6 +2689,9 @@ packages: resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} engines: {node: '>=8'} + detect-node-es@1.1.0: + resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==} + diff-sequences@29.6.3: resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -2094,10 +2907,23 @@ packages: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} + etag-hash@2.17.0: + resolution: {integrity: sha512-m2n5Dn6A2/jYb/o6Uy7H/ELzqVQW5m38OSZSi4IoGAOL7T/FN5rPxJZqIsDdukKhcoqJMZZQdg7jf4fUxrbzpw==} + etag@1.8.1: resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} engines: {node: '>= 0.6'} + eventemitter3@4.0.7: + resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} + + eventemitter3@5.0.4: + resolution: {integrity: sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==} + + events@3.3.0: + resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} + engines: {node: '>=0.8.x'} + execa@5.1.1: resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} engines: {node: '>=10'} @@ -2131,6 +2957,16 @@ packages: fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + fast-uri@3.1.2: + resolution: {integrity: sha512-rVjf7ArG3LTk+FS6Yw81V1DLuZl1bRbNrev6Tmd/9RaroeeRRJhAt7jg/6YFxbvAQXUCavSoZhPPj6oOx+5KjQ==} + + fast-xml-builder@1.2.0: + resolution: {integrity: sha512-00aAWieqff+ZJhsXA4g1g7M8k+7AYoMUUHF+/zFb5U6Uv/P0Vl4QZo84/IcufzYalLuEj9928bXN9PbbFzMF0Q==} + + fast-xml-parser@5.7.3: + resolution: {integrity: sha512-C0AaNuC+mscy6vrAQKAc/rMq+zAPHodfHGZu4sGVehvAQt/JLG1O5zEcYcXSY5zSqr4YVgxsB+pHXTq0i7eDlg==} + hasBin: true + fb-watchman@2.0.2: resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} @@ -2194,6 +3030,20 @@ packages: resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} engines: {node: '>= 0.6'} + framer-motion@12.38.0: + resolution: {integrity: sha512-rFYkY/pigbcswl1XQSb7q424kSTQ8q6eAC+YUsSKooHQYuLdzdHjrt6uxUC+PRAO++q5IS7+TamgIw1AphxR+g==} + peerDependencies: + '@emotion/is-prop-valid': '*' + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@emotion/is-prop-valid': + optional: true + react: + optional: true + react-dom: + optional: true + fresh@2.0.0: resolution: {integrity: sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==} engines: {node: '>= 0.8'} @@ -2224,6 +3074,10 @@ packages: resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} engines: {node: '>= 0.4'} + get-nonce@1.0.1: + resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==} + engines: {node: '>=6'} + get-package-type@0.1.0: resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} engines: {node: '>=8.0.0'} @@ -2239,6 +3093,10 @@ packages: get-tsconfig@4.13.7: resolution: {integrity: sha512-7tN6rFgBlMgpBML5j8typ92BKFi2sFQvIdpAqLA2beia5avZDrMs0FLZiM5etShWq5irVyGcGMEA1jcDaK7A/Q==} + get-value@3.0.1: + resolution: {integrity: sha512-mKZj9JLQrwMBtj5wxi6MH8Z5eSKaERpAwjg43dPtlGI1ZVEgH/qC7T8/6R2OBSUA+zzHBZgICsVJaEIV2tKTDA==} + engines: {node: '>=6.0'} + glob-parent@5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} @@ -2274,9 +3132,250 @@ packages: resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} engines: {node: '>= 0.4'} + gql-ast@3.10.0: + resolution: {integrity: sha512-aaJHPCc8jPq1eGbQ/LvrB78u90ruML8kgwBEb0J5ZlD3ihGGgkRCU16H96GgWiO7IJ14jjQoHWZ0ugMNkg1dXA==} + graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + grafast@1.0.0: + resolution: {integrity: sha512-V4AhdcQhgDDqKZS708WWu8iC6Jd80gVca6zC1M8YUb8gZOOS4r0f/V89KbGFWh0nuLaZQeFj+LZ9Ps9B8F2LEA==} + engines: {node: '>=22'} + peerDependencies: + '@envelop/core': ^5.0.0 + graphql: ^16.9.0 + peerDependenciesMeta: + '@envelop/core': + optional: true + + grafserv@1.0.0: + resolution: {integrity: sha512-9w0zwYSHS10DfHOAQhaCVvJnOFuk+YY+nZZqG0ZOqFbner3Zf4GvqfWlNETdmUQdB6dnISfGZCkIaSZt5R7wCQ==} + engines: {node: '>=22'} + peerDependencies: + '@envelop/core': ^5.0.0 + '@whatwg-node/server': ^0.9.64 + grafast: ^1.0.0-rc.8 + graphile-config: ^1.0.0 + graphql: ^16.9.0 + h3: ^1.13.0 + hono: ^4.6.15 + ws: ^8.12.1 + peerDependenciesMeta: + '@envelop/core': + optional: true + '@whatwg-node/server': + optional: true + h3: + optional: true + hono: + optional: true + ws: + optional: true + + graphile-bucket-provisioner-plugin@0.11.0: + resolution: {integrity: sha512-MEdwvvVL3QTyF2YqU3bAS3mfbvgIdkEv8bfIQ/F+srJ0LxI5cRbq2ksuG/pmCTRcuVFsXftRrRoPAbjDQviQCw==} + peerDependencies: + grafast: 1.0.0 + graphile-build: 5.0.0 + graphile-build-pg: 5.0.0 + graphile-config: 1.0.0 + graphile-utils: 5.0.0 + graphql: 16.13.0 + postgraphile: 5.0.0 + + graphile-build-pg@5.0.0: + resolution: {integrity: sha512-a0FAR5n8UIYMAI1URIuWAAb+dZUDNrP09rYdg7veBUhJQyBtfkUHGNwZ+gDEhRBOvr/eRrw5Jkqc+Moi+XwW8A==} + engines: {node: '>=22'} + peerDependencies: + '@dataplan/pg': ^1.0.0-rc.7 + grafast: ^1.0.0-rc.8 + graphile-build: ^5.0.0-rc.5 + graphile-config: ^1.0.0-rc.5 + graphql: ^16.9.0 + pg: ^8.7.1 + pg-sql2: ^5.0.0-rc.4 + tamedevil: ^0.1.0-rc.5 + peerDependenciesMeta: + pg: + optional: true + + graphile-build@5.0.0: + resolution: {integrity: sha512-hGieff6/UaikT7ywWv2XTFa1mGJ1Zdytqbfw0bmVlXWMOeJGpvCdx9+k5Kpw7aIZ92twPa5yb2HUo0Q8j2Kwzw==} + engines: {node: '>=22'} + peerDependencies: + grafast: ^1.0.0-rc.8 + graphile-config: ^1.0.0-rc.5 + graphql: ^16.9.0 + + graphile-bulk-mutations@0.3.0: + resolution: {integrity: sha512-wSXTVpWLVjvw2UlK1MZoEPuRPr6NClCt9TXbebCYX+x2LEfqP2SqHC/ktSPxykilbwh2fY7A4cWnbpqdMUCSSQ==} + peerDependencies: + '@dataplan/pg': 1.0.0 + grafast: 1.0.0 + graphile-build: 5.0.0 + graphile-build-pg: 5.0.0 + graphile-config: 1.0.0 + graphql: 16.13.0 + pg-sql2: 5.0.0 + postgraphile: 5.0.0 + + graphile-config@1.0.0: + resolution: {integrity: sha512-nPKrrpmYT/cMibqHnNL+zLIRrC/SQhop7yV4tZiyrC/C0mckdlghRWR9oPV7UppkeFIdgTt5/7UQCrwhX82faQ==} + engines: {node: '>=22'} + + graphile-connection-filter@1.10.0: + resolution: {integrity: sha512-ua6PWjXNzQE//0S4CJwYWmiWiAjtYjG0Qk4y9V9MJQhdv6cC6tw02IgzEq44F46e7ofFG9dh5UZ7J1jcQqThLw==} + peerDependencies: + '@dataplan/pg': 1.0.0 + graphile-build: 5.0.0 + graphile-build-pg: 5.0.0 + graphile-config: 1.0.0 + graphql: 16.13.0 + pg-sql2: 5.0.0 + postgraphile: 5.0.0 + + graphile-ltree@1.7.0: + resolution: {integrity: sha512-40kn98MCwcbHUJldhDmOCvYM3hx2lPXeJOzqaod8gJok3L7N3mBsR9hPJ0S9DGDFFXNoyM+qYDaR3WJMUx0MEA==} + peerDependencies: + '@dataplan/pg': 1.0.0 + grafast: 1.0.0 + graphile-build: 5.0.0 + graphile-build-pg: 5.0.0 + graphile-config: 1.0.0 + graphile-connection-filter: ^1.10.0 + graphql: 16.13.0 + pg-sql2: 5.0.0 + postgraphile: 5.0.0 + peerDependenciesMeta: + graphile-connection-filter: + optional: true + + graphile-pg-aggregates@1.3.0: + resolution: {integrity: sha512-CXfNGMsLQl9eeHfIo91EQ+63NK9eRsu+6RnwZ4qwqpd6290GE6Xq9xdW+Dbq2kZBVtbK7DGRoTjbC+hmzk7WVA==} + peerDependencies: + '@dataplan/pg': 1.0.0 + grafast: 1.0.0 + graphile-build: 5.0.0 + graphile-build-pg: 5.0.0 + graphile-config: 1.0.0 + graphile-connection-filter: ^1.10.0 + graphql: 16.13.0 + pg-sql2: 5.0.0 + postgraphile: 5.0.0 + + graphile-postgis@2.16.0: + resolution: {integrity: sha512-DzdowWCCBTBzC1+YbfpFKju2XFWa7yWnDeGwjOZWzM/mzzw0j3c76EqpvG5ow9fYSI8UZuaBZ7LTzzboF8QgXw==} + peerDependencies: + '@dataplan/pg': 1.0.0 + grafast: 1.0.0 + graphile-build: 5.0.0 + graphile-build-pg: 5.0.0 + graphile-config: 1.0.0 + graphile-connection-filter: ^1.10.0 + graphql: 16.13.0 + pg-sql2: 5.0.0 + postgraphile: 5.0.0 + peerDependenciesMeta: + graphile-connection-filter: + optional: true + + graphile-presigned-url-plugin@0.19.0: + resolution: {integrity: sha512-rsTyTfO6XvMTKwaioUuz/CtjBBlEVrzTbbkM851EzoF0tqdKGwjMLdTvCkhqr+yjv85fQMXLvOfCeAarj0C5fw==} + peerDependencies: + grafast: 1.0.0 + graphile-build: 5.0.0 + graphile-build-pg: 5.0.0 + graphile-config: 1.0.0 + graphile-utils: 5.0.0 + graphql: 16.13.0 + postgraphile: 5.0.0 + + graphile-realtime-subscriptions@0.7.0: + resolution: {integrity: sha512-P5TpvXoE0lWU9VkyU7Kz1oeS5s8s9TbhrnG7J2qL1Fl0w7zR9kr6B2sD3gp279CTlS4kNioEoKJ8b5YTWfeFxQ==} + peerDependencies: + grafast: 1.0.0 + graphile-build: 5.0.0 + graphile-build-pg: 5.0.0 + graphile-config: 1.0.0 + graphile-utils: 5.0.0 + graphql: 16.13.0 + postgraphile: 5.0.0 + + graphile-search@1.12.0: + resolution: {integrity: sha512-LXYuJOWClY9EecUSnOk1y7eBbnAm858vvY7jtrPqn9q6RT2wesujRk9WsCoF6I7rMWD/rVK7Q0Y4+kncAUFAdA==} + peerDependencies: + '@dataplan/pg': 1.0.0 + graphile-build: 5.0.0 + graphile-build-pg: 5.0.0 + graphile-config: 1.0.0 + graphql: 16.13.0 + pg-sql2: 5.0.0 + postgraphile: 5.0.0 + + graphile-settings@5.2.0: + resolution: {integrity: sha512-2hrAOzHpZv/53qEAytZjjL3dksIYjVVkHsE9NITpiYgxxyILEiCwbMsf1/W8UQjZU1OWpmZnZeEx8yvugHxf9g==} + + graphile-sql-expression-validator@2.13.0: + resolution: {integrity: sha512-IivpELn9ba5Qg2uycuaY9lMDgQF7uBbGZyf78hvdWFteqI7ddcQ5Cooh9l1D8DZP/mC10JQ5tysi35B07TsqGA==} + peerDependencies: + grafast: 1.0.0 + graphile-build: 5.0.0 + graphile-build-pg: 5.0.0 + graphile-config: 1.0.0 + graphql: 16.13.0 + + graphile-upload-plugin@2.11.0: + resolution: {integrity: sha512-vwp85+dNtOi+m0nqxQJ0cOAVYSowYvc5MfNfuCGbQWUHHpv47rHL/AD43R9q56SKvwK832MrJlpi/A3Ol2d8Ng==} + peerDependencies: + graphile-build: 5.0.0 + graphile-build-pg: 5.0.0 + graphile-config: 1.0.0 + graphql: 16.13.0 + postgraphile: 5.0.0 + + graphile-utils@5.0.0: + resolution: {integrity: sha512-W/qzi7o6w4cakNqapeGNSGmYq0QowsiT0okPdmdUmZe117XiGPACzL+H0vqG0ZqkLUjZ5vNTIOGYQVqJ4Tg6KA==} + engines: {node: '>=22'} + peerDependencies: + '@dataplan/pg': ^1.0.0-rc.7 + grafast: ^1.0.0-rc.8 + graphile-build: ^5.0.0-rc.5 + graphile-build-pg: ^5.0.0-rc.7 + graphile-config: ^1.0.0-rc.5 + graphql: ^16.9.0 + tamedevil: ^0.1.0-rc.5 + peerDependenciesMeta: + graphile-build-pg: + optional: true + + graphile-utils@5.0.1: + resolution: {integrity: sha512-FtJgxL2BDv1B417sOCsNdu1e3yZkZY7jPMlMHTvzcJLc/7o9rDh+ucJGDmLiKe5Z4lS8KXxVRLZWbxC56/RHcw==} + engines: {node: '>=22'} + peerDependencies: + '@dataplan/pg': ^1.0.0-rc.7 + grafast: ^1.0.0-rc.8 + graphile-build: ^5.0.0-rc.5 + graphile-build-pg: ^5.0.0-rc.7 + graphile-config: ^1.0.0-rc.5 + graphql: ^16.9.0 + tamedevil: ^0.1.0-rc.5 + peerDependenciesMeta: + graphile-build-pg: + optional: true + + graphiql@5.2.3: + resolution: {integrity: sha512-N0bsZVWCKoZ2STYM3w5hgynmD+hFk8AbzMdUU+mDTa7hlx0W1PtRWhr6oqq8h4MIZwQVpqaC8dniXzGie8ThjA==} + peerDependencies: + graphql: ^15.5.0 || ^16.0.0 || ^17.0.0 + react: ^18 || ^19 + react-dom: ^18 || ^19 + + graphql-language-service@5.5.1: + resolution: {integrity: sha512-6/sPlE9TFUN8aCFohwo3MWYWn0AgVE+Ze3y+NptK7+ph3QkEryvZq9EruMSeJg6o51x6+ciJC/bm2liJC5dJ2A==} + hasBin: true + peerDependencies: + graphql: ^15.5.0 || ^16.0.0 || ^17.0.0 + graphql-request@7.4.0: resolution: {integrity: sha512-xfr+zFb/QYbs4l4ty0dltqiXIp07U6sl+tOKAb0t50/EnQek6CVVBLjETXi+FghElytvgaAWtIOt3EV7zLzIAQ==} peerDependencies: @@ -2288,8 +3387,28 @@ packages: 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@16.12.0: - resolution: {integrity: sha512-DKKrynuQRne0PNpEbzuEdHlYOMksHSUI8Zc9Unei5gTsMNA2/vMpoMz/yKba50pejK56qj98qM0SjYxAKi13gQ==} + graphql-ws@6.0.8: + resolution: {integrity: sha512-m3EOaNsUBXwAnkBWbzPfe0Nq8pXUfxsWnolC54sru3FzHvhTZL0Ouf/BoQsaGAXqM+YPerXOJ47BUnmgmoupCw==} + engines: {node: '>=20'} + peerDependencies: + '@fastify/websocket': ^10 || ^11 + crossws: ~0.3 + graphql: ^15.10.1 || ^16 + ws: ^8 + peerDependenciesMeta: + '@fastify/websocket': + optional: true + crossws: + optional: true + ws: + optional: true + + graphql@16.13.0: + resolution: {integrity: sha512-uSisMYERbaB9bkA9M4/4dnqyktaEkf1kMHNKq/7DHyxVeWqHQ2mBmVqm5u6/FVHwF3iCNalKcg82Zfl+tffWoA==} + engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} + + graphql@16.14.0: + resolution: {integrity: sha512-BBvQ/406p+4CZbTpCbVPSxfzrZrbnuWSP1ELYgyS6B+hNeKzgrdB4JczCa5VZUBQrDa9hUngm0KnexY6pJRN5Q==} engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} handlebars@4.7.8: @@ -2345,6 +3464,10 @@ packages: resolution: {integrity: sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==} engines: {node: '>= 0.8'} + http-proxy@1.18.1: + resolution: {integrity: sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==} + engines: {node: '>=8.0.0'} + https-proxy-agent@5.0.1: resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} engines: {node: '>= 6'} @@ -2361,6 +3484,9 @@ packages: resolution: {integrity: sha512-2Tth85cXwGFHfvRgZWszZSvdo+0Xsqmw8k8ZwxScfcBneNUraK+dxRxRm24nszx80Y0TVio8kKLt5sLE7ZCLlw==} engines: {node: '>=0.10.0'} + ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + ignore@5.3.2: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} @@ -2382,6 +3508,13 @@ packages: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} + inflection@3.0.2: + resolution: {integrity: sha512-+Bg3+kg+J6JUWn8J6bzFmOWkTQ6L/NHfDRSYU+EVvuKHDxUDHAXgqixHfVlzuBQaPOTac8hn43aPhMNk6rMe3g==} + engines: {node: '>=18.0.0'} + + inflekt@0.7.1: + resolution: {integrity: sha512-iNsb7kpQeo7HUHayGI8Wbe9PC1TIJu15VfJU/Q6MADuhZh6skVifGrDsJp8t45xXg84ywvqnZwh4B6lN34nVTw==} + inflight@1.0.6: 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. @@ -2395,6 +3528,10 @@ packages: inquirerer@4.8.1: resolution: {integrity: sha512-X8cPy91JMH6EmUPUqgnxc+oYssHdQlitWR23youH2208F2enxElCKc6Mt/5H8KAupYDgOuRuyBO+SRaRXStj8A==} + interpret@3.1.1: + resolution: {integrity: sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==} + engines: {node: '>=10.13.0'} + ipaddr.js@1.9.1: resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} engines: {node: '>= 0.10'} @@ -2430,6 +3567,14 @@ packages: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} + is-plain-object@2.0.4: + resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==} + engines: {node: '>=0.10.0'} + + is-primitive@3.0.1: + resolution: {integrity: sha512-GljRxhWvlCNRfZyORiH77FwdFwGcMO620o37EOYC0ORWdq+WYNVqW0w2Juzew4M+L81l6/QS3t5gkkihyRqv9w==} + engines: {node: '>=0.10.0'} + is-promise@4.0.0: resolution: {integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==} @@ -2440,6 +3585,10 @@ packages: isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + isobject@3.0.1: + resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} + engines: {node: '>=0.10.0'} + istanbul-lib-coverage@3.2.2: resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} engines: {node: '>=8'} @@ -2468,6 +3617,9 @@ packages: resolution: {integrity: sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==} engines: {node: '>=8'} + iterall@1.3.0: + resolution: {integrity: sha512-QZ9qOMdF+QLHxy1QIpUHUU1D5pS2CG2P69LF6L6CPjPYA/XMOmKV3PZpawHoAjHNyB0swdVTRxdYT4tbBbxqwg==} + jackspeak@3.4.3: resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} @@ -2757,6 +3909,9 @@ packages: json-schema-traverse@0.4.1: resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + json-schema-traverse@1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + json-stable-stringify-without-jsonify@1.0.1: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} @@ -2765,6 +3920,9 @@ packages: engines: {node: '>=6'} hasBin: true + jsonc-parser@3.3.1: + resolution: {integrity: sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==} + jsonwebtoken@9.0.3: resolution: {integrity: sha512-MT/xP0CrubFRNLNKvxJ2BYfy53Zkm++5bX9dtuPbqAeQpTVe0MQTFhao8+Cp//EmJp244xt6Drw/GVEGCUj40g==} engines: {node: '>=12', npm: '>=6'} @@ -2787,6 +3945,9 @@ packages: resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} engines: {node: '>=6'} + komoji@0.9.0: + resolution: {integrity: sha512-mbAwXYrQgSE9r618CzW7BHvQfKmDyvPoJFPzaWimEVfcaTyE9aqCvf5RbOwzP16ranN/4rmAuAme1GMrWRZ/sQ==} + leven@3.1.0: resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} engines: {node: '>=6'} @@ -2795,9 +3956,15 @@ packages: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} + libpg-query@17.7.3: + resolution: {integrity: sha512-lHKBvoWRsXt/9bJxpAeFxkLu0CA6tELusqy3o1z6/DwGXSETxhKJDaNlNdrNV8msvXDLBhpg/4RE/fKKs5rYFA==} + lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + linkify-it@5.0.0: + resolution: {integrity: sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==} + locate-path@5.0.0: resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} engines: {node: '>=8'} @@ -2836,6 +4003,9 @@ packages: lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + lodash@4.18.1: + resolution: {integrity: sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==} + long-timeout@0.1.1: resolution: {integrity: sha512-BFRuQUqc7x2NWxfJBCyUrN8iYUYznzL9JROmRz1gZ6KlOIgmoD+njPVbb+VNn2nGMKggMsK79iUNErillsrx7w==} @@ -2878,10 +4048,17 @@ packages: makeerror@1.0.12: resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} + markdown-it@14.1.1: + resolution: {integrity: sha512-BuU2qnTti9YKgK5N+IeMubp14ZUKUUw7yeJbkjtosvHiP0AZ5c8IAgEMk79D0eC8F23r4Ac/q8cAIFdm2FtyoA==} + hasBin: true + math-intrinsics@1.1.0: resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} engines: {node: '>= 0.4'} + mdurl@2.0.0: + resolution: {integrity: sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==} + media-typer@1.1.0: resolution: {integrity: sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==} engines: {node: '>= 0.8'} @@ -2896,10 +4073,22 @@ packages: merge-stream@2.0.0: resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + meros@1.3.2: + resolution: {integrity: sha512-Q3mobPbvEx7XbwhnC1J1r60+5H6EZyNccdzSz0eGexJRwouUtTZxPVRGdqKtxlpD84ScK4+tIGldkqDtCKdI0A==} + engines: {node: '>=13'} + peerDependencies: + '@types/node': '>=13' + peerDependenciesMeta: + '@types/node': + optional: true + micromatch@4.0.8: resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} engines: {node: '>=8.6'} + mime-bytes@0.17.0: + resolution: {integrity: sha512-oKr234K3oiRbOLOQUtFYMnNV0czyZSHor8OQkwP1UJx+pTgWMiOc2qUcAE9v/iql857gwWLbYsYg0FAff6AzfQ==} + mime-db@1.52.0: resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} engines: {node: '>= 0.6'} @@ -3050,6 +4239,22 @@ packages: resolution: {integrity: sha512-nwMrmhTI+Aeh9Gav9LHX/i8k8yDi/QpX5h535BlT5oP4NaAUmyxP/UeYUn9yxtPcIzDlM5ullFnRv/71jyHpkQ==} hasBin: true + monaco-editor@0.52.2: + resolution: {integrity: sha512-GEQWEZmfkOGLdd3XK8ryrfWz3AIP8YymVXiPHEdewrUq7mh0qrKrfHLNCXcbB6sTnMLnOZ3ztSiKcciFUkIJwQ==} + + monaco-graphql@1.8.0: + resolution: {integrity: sha512-rWvWUpJdtpTu6YF2qgeaR2HnGPFthUJKSposB38f5wtBKwHlISYZHZLD/LukoMWDEyegNLOF/1bPMRs0SZrNzA==} + peerDependencies: + graphql: ^15.5.0 || ^16.0.0 || ^17.0.0 + monaco-editor: '>= 0.20.0 < 0.53' + prettier: ^2.8.0 || ^3.0.0 + + motion-dom@12.38.0: + resolution: {integrity: sha512-pdkHLD8QYRp8VfiNLb8xIBJis1byQ9gPT3Jnh2jqfFtAsWUA3dEepDlsWe/xMpO8McV+VdpKVcp+E+TGJEtOoA==} + + motion-utils@12.36.0: + resolution: {integrity: sha512-eHWisygbiwVvf6PZ1vhaHCLamvkSbPIeAYxWUuL3a2PD/TROgE7FvfHWTIH4vMl798QLfMw15nRqIaRDXTlYRg==} + ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} @@ -3113,6 +4318,9 @@ packages: nth-check@2.1.1: resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} + nullthrows@1.1.1: + resolution: {integrity: sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==} + object-assign@4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} @@ -3190,6 +4398,10 @@ packages: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} + path-expression-matcher@1.5.0: + resolution: {integrity: sha512-cbrerZV+6rvdQrrD+iGMcZFEiiSrbv9Tfdkvnusy6y0x0GKBXREFg/Y65GhIfm0tnLntThhzCnfKwp1WRjeCyQ==} + engines: {node: '>=14.0.0'} + path-is-absolute@1.0.1: resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} engines: {node: '>=0.10.0'} @@ -3221,6 +4433,9 @@ packages: pg-connection-string@2.12.0: resolution: {integrity: sha512-U7qg+bpswf3Cs5xLzRqbXbQl85ng0mfSV/J0nnA31MCLgvEaAo7CIhmeyrmJpOr7o+zm0rXK+hNnT5l9RHkCkQ==} + pg-env@1.14.0: + resolution: {integrity: sha512-kBot+CijShzXge62LxY24ZUddevNlQTamerqmZfRvXuJmK1d3v43b8fzc1mR23hs+CqlviHW17fw9EFRqgTcCQ==} + pg-env@1.8.2: resolution: {integrity: sha512-YzxNQKZmFRRJKX5t149Ys2JoAsc6OCHcaoYH/82si7gwVC9ODaFTFtQn7gv3VpoGsNkH90t6iEPWvmLIgv2rDg==} @@ -3228,17 +4443,25 @@ packages: resolution: {integrity: sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==} engines: {node: '>=4.0.0'} + pg-introspection@1.0.1: + resolution: {integrity: sha512-HwxpCEWygpRPfvFf7IVtEPchtjl1Fw0TxzCYXJIQdTEFio/AcGnp2XI5x+LpowbyEa3XgB9L5gvw2D0Jqji4eA==} + engines: {node: '>=22'} + pg-pool@3.13.0: resolution: {integrity: sha512-gB+R+Xud1gLFuRD/QgOIgGOBE2KCQPaPwkzBBGC9oG69pHTkhQeIuejVIk3/cnDyX39av2AxomQiyPT13WKHQA==} peerDependencies: pg: '>=8.0' - pg-protocol@1.11.0: - resolution: {integrity: sha512-pfsxk2M9M3BuGgDOfuy37VNRRX3jmKgMjcvAcWqNDpZSf4cUmv8HSOl5ViRQFsfARFn0KuUQTgLxVMbNq5NW3g==} - pg-protocol@1.13.0: resolution: {integrity: sha512-zzdvXfS6v89r6v7OcFCHfHlyG/wvry1ALxZo4LqgUoy7W9xhBDMaqOuMiF3qEV45VqsN6rdlcehHrfDtlCPc8w==} + pg-query-context@2.15.0: + resolution: {integrity: sha512-SqnrXiGa4R153I3ZKVIUFbQyxcrgBisqEZWDAMPlnG7kFYscuRWmWxlc9SMg3vTAgSylRloWyPFAoK2JqiQf/A==} + + pg-sql2@5.0.0: + resolution: {integrity: sha512-gvmfl0XeOeFjd+1aH5uIp1eZxUM6LmaMP8yy1EWE16XaPeUP8dhKdHtdHc0MsX0ZgCy+1g67yS1HCYWns2TdmQ==} + engines: {node: '>=22'} + pg-types@2.2.0: resolution: {integrity: sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==} engines: {node: '>=4'} @@ -3255,9 +4478,19 @@ packages: pgpass@1.0.5: resolution: {integrity: sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==} + pgsql-deparser@17.18.3: + resolution: {integrity: sha512-lD8kPWgw9KAbUbKbQKgzDGzVdtEmp25N+7qZl62I7v8Uu9Wqy7+M0EOeU96++OgPD9S1pyp9MKNGzZzPJF2C4Q==} + + pgsql-parser@17.9.15: + resolution: {integrity: sha512-6+k0EtTn0CEQTR5v2APARu9En4vm46TpmpdMSfKDHkZwWZuEc08B7SeVg32VxNQ2HD5xk+dQ9TD0k9m+S+vFgg==} + picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + picomatch-browser@2.2.6: + resolution: {integrity: sha512-0ypsOQt9D4e3hziV8O4elD9uN0z/jtUEfxVRtNaAAtXIyUx9m/SzlO020i8YNL2aL/E6blOvvHQcin6HZlFy/w==} + engines: {node: '>=8.6'} + picomatch@2.3.1: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} @@ -3274,13 +4507,42 @@ packages: resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} engines: {node: '>=8'} + pluralize@7.0.0: + resolution: {integrity: sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==} + engines: {node: '>=4'} + postcss-value-parser@4.2.0: resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} + postgraphile@5.0.0: + resolution: {integrity: sha512-BEv+qrOQBgMtzq3xWhHzwD9+cTdFz8XG/x7e4qWd/4+oqIDrKzOX+OXhFW8vx7jeRnvCMQ3Y8DYe/4tS4DJjqA==} + engines: {node: '>=22'} + hasBin: true + peerDependencies: + '@dataplan/json': ^1.0.0 + '@dataplan/pg': ^1.0.0 + '@envelop/core': ^5.0.0 + grafast: ^1.0.0 + grafserv: ^1.0.0 + graphile-build: ^5.0.0 + graphile-build-pg: ^5.0.0 + graphile-config: ^1.0.0 + graphql: ^16.9.0 + pg: ^8.7.1 + pg-sql2: ^5.0.0 + tamedevil: ^0.1.0 + peerDependenciesMeta: + '@envelop/core': + optional: true + postgres-array@2.0.0: resolution: {integrity: sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==} engines: {node: '>=4'} + postgres-array@3.0.4: + resolution: {integrity: sha512-nAUSGfSDGOaOAEGwqsRY27GPOea7CNipJPOA7lPbdEpx5Kg3qzdP0AaWC5MlhTWV9s4hFX39nomVZ+C4tnGOJQ==} + engines: {node: '>=12'} + postgres-bytea@1.0.1: resolution: {integrity: sha512-5+5HqXnsZPE65IJZSMkZtURARZelel2oXUEO8rH83VS/hxH5vv1uHquPg5wZs8yMAfdv971IU+kcPUczi7NVBQ==} engines: {node: '>=0.10.0'} @@ -3293,6 +4555,9 @@ packages: resolution: {integrity: sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==} engines: {node: '>=0.10.0'} + postgres-range@1.1.4: + resolution: {integrity: sha512-i/hbxIE9803Alj/6ytL7UHQxRvZkI9O4Sy+J3HGc4F4oo/2eQAjTSNJ0bfxyse3bH0nuVesCk+3IRLaMtG3H6w==} + prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} @@ -3327,6 +4592,10 @@ packages: proxy-from-env@1.1.0: resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + punycode.js@2.3.1: + resolution: {integrity: sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==} + engines: {node: '>=6'} + punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} @@ -3349,6 +4618,17 @@ packages: resolution: {integrity: sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==} engines: {node: '>= 0.10'} + react-aria@3.48.0: + resolution: {integrity: sha512-jQjd4rBEIMqecBaAKYJbVGK6EqIHLa5znVQ7jwFyK5vCyljoj6KhgtiahmcIPsG5vG5vEDLw+ba+bEWn6A2P4w==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + + react-compiler-runtime@19.1.0-rc.1: + resolution: {integrity: sha512-wCt6g+cRh8g32QT18/9blfQHywGjYu+4FlEc3CW1mx3pPxYzZZl1y+VtqxRgnKKBCFLIGUYxog4j4rs5YS86hw==} + peerDependencies: + react: ^17.0.0 || ^18.0.0 || ^19.0.0 || ^0.0.0-experimental + react-dom@16.14.0: resolution: {integrity: sha512-1gCeQXDLoIqMgqD3IO2Ah9bnf0w9kzhwN5q4FGnHZ67hBm9yePzB5JJAIQCc8x3pFnNlwFq4RidZggNAAkzWWw==} peerDependencies: @@ -3360,6 +4640,41 @@ packages: react-is@18.3.1: resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} + react-remove-scroll-bar@2.3.8: + resolution: {integrity: sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + + react-remove-scroll@2.7.2: + resolution: {integrity: sha512-Iqb9NjCCTt6Hf+vOdNIZGdTiH1QSqr27H/Ek9sv/a97gfueI/5h1s3yRi1nngzMUaOOToin5dI1dXKdXiF+u0Q==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + react-stately@3.46.0: + resolution: {integrity: sha512-OdxhWvHgs2L4OJGIs7hnuTr5WjjMM6enhNEAMRqiekhF8+ITvA2LRwNftOZwcogaoCslGYq5S2VQTQwnm0GbCA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + + react-style-singleton@2.2.3: + resolution: {integrity: sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + react@16.14.0: resolution: {integrity: sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g==} engines: {node: '>=0.10.0'} @@ -3379,13 +4694,23 @@ packages: resolution: {integrity: sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==} engines: {node: '>= 0.10'} + request-ip@3.3.0: + resolution: {integrity: sha512-cA6Xh6e0fDBBBwH77SLJaJPBmD3nWVAcF9/XAcsrIHdjhFzFiB5aNQFytdjCGPezU3ROwrR11IddKAM08vohxA==} + require-directory@2.1.1: 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'} + require-main-filename@2.0.0: resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} + requires-port@1.0.0: + resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} + resolve-cwd@3.0.0: resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} engines: {node: '>=8'} @@ -3422,6 +4747,34 @@ packages: resolution: {integrity: sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==} engines: {node: '>= 18'} + ruru-types@2.0.0: + resolution: {integrity: sha512-7dBZHeU8Pnj0V+tLiPzr8RhpdsNuAwu5yhZqcolu6pzpItLG/LKKzN+gKAiCp17z6Lfpdu7bXs+9JS39PO+VxA==} + engines: {node: '>=22'} + peerDependencies: + graphql: ^16.9.0 + react: ^18 || ^19 + react-dom: ^18 || ^19 + peerDependenciesMeta: + react: + optional: true + react-dom: + optional: true + + ruru@2.0.0: + resolution: {integrity: sha512-I8N4Jw0jsgFqgUnsLMR9BHnWyVX0xj7GfDYIjsvjt538zIVs/PiggdepsYjH6K2ul9bjHoS15p7XL2SnywSdCw==} + engines: {node: '>=22'} + hasBin: true + peerDependencies: + graphile-config: ^1.0.0-rc.5 + graphql: ^16.9.0 + react: ^18 || ^19 + react-dom: ^18 || ^19 + peerDependenciesMeta: + react: + optional: true + react-dom: + optional: true + safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} @@ -3455,6 +4808,10 @@ packages: set-blocking@2.0.0: resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} + set-value@4.1.0: + resolution: {integrity: sha512-zTEg4HL0RwVrqcWs3ztF+x1vkxfm0lP+MQQFPiMJTKVceBwEV0A569Ou8l9IYQG8jOZdMVI1hGsc0tmeD2o/Lw==} + engines: {node: '>=11.0'} + setprototypeof@1.2.0: resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} @@ -3530,6 +4887,9 @@ packages: resolution: {integrity: sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==} engines: {node: '>= 0.8'} + stream-browserify@3.0.0: + resolution: {integrity: sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==} + string-length@4.0.2: resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} engines: {node: '>=10'} @@ -3565,6 +4925,9 @@ packages: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} + strnum@2.3.0: + resolution: {integrity: sha512-ums3KNd42PGyx5xaoVTO1mjU1bH3NpY4vsrVlnv9PNGqQj8wd7rJ6nEypLrJ7z5vxK5RP0yMLo6J/Gsm62DI5Q==} + styled-components@5.3.11: resolution: {integrity: sha512-uuzIIfnVkagcVHv9nE0VPlHPSCmXIUGKfJ42LNjxCCTDTL5sgnJ8Z7GZBq0EnLYGln77tPpEpExt2+qa+cZqSw==} engines: {node: '>=10'} @@ -3596,6 +4959,13 @@ packages: resolution: {integrity: sha512-Bh7QjT8/SuKUIfObSXNHNSK6WHo6J1tHCqJsuaFDP7gP0fkzSfTxI8y85JrppZ0h8l0maIgc2tfuZQ6/t3GtnQ==} engines: {node: ^14.18.0 || >=16.0.0} + tabbable@6.4.0: + resolution: {integrity: sha512-05PUHKSNE8ou2dwIxTngl4EzcnsCDZGJ/iCLtDflR/SHB/ny14rXc+qU5P4mG9JkusiV7EivzY9Mhm55AzAvCg==} + + tamedevil@0.1.0: + resolution: {integrity: sha512-Ry2HVNPnFW6yzNALT+LuABIg2YiTf9orzSl2tCh2mfxLIl0LrnAyadmFDfANdQFzPbPW3Y1DY03QwDoCqJuc/A==} + engines: {node: '>=22'} + test-exclude@6.0.0: resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} engines: {node: '>=8'} @@ -3618,6 +4988,11 @@ packages: tr46@0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + transliteration@2.6.1: + resolution: {integrity: sha512-hJ9BhrQAOnNTbpOr1MxsNjZISkn7ppvF5TKUeFmTE1mG4ZPD/XVxF0L0LUoIUCWmQyxH0gJpVtfYLAWf298U9w==} + engines: {node: '>=20.0.0'} + hasBin: true + ts-api-utils@2.4.0: resolution: {integrity: sha512-3TaVTaAv2gTiMB35i3FiGJaRfwb3Pyn/j3m/bfAvGe8FB7CF6u+LMYqYlDh7reQf7UNvoTvdfAqHGmPGOSsPmA==} engines: {node: '>=18.12'} @@ -3695,6 +5070,9 @@ packages: engines: {node: '>=14.17'} hasBin: true + uc.micro@2.1.0: + resolution: {integrity: sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==} + uglify-js@3.4.10: resolution: {integrity: sha512-Y2VsbPVs0FIshJztycsO2SfPk7/KAF/T72qzv9u5EpQ4kB2hQoHlhNQTsNyy6ul7lQtqJN/AoWeS23OzEiEFxw==} engines: {node: '>=0.8.0'} @@ -3729,9 +5107,37 @@ packages: url-join@4.0.1: resolution: {integrity: sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==} + use-callback-ref@1.3.3: + resolution: {integrity: sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + use-sidecar@1.1.3: + resolution: {integrity: sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + use-sync-external-store@1.6.0: + resolution: {integrity: sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + uuid-hash@2.16.0: + resolution: {integrity: sha512-I/ijW8LtE3AnMszkR5GZbnTW5QpzYMIH92WPpOMZPtZHowKU7GrMUJ8zjbUfxTiUxdDfUW5/PDyGminfUoNSMA==} + v8-to-istanbul@9.3.0: resolution: {integrity: sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==} engines: {node: '>=10.12.0'} @@ -3744,6 +5150,9 @@ packages: resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} engines: {node: '>= 0.8'} + vscode-languageserver-types@3.17.5: + resolution: {integrity: sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==} + walker@1.0.8: resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} @@ -3807,6 +5216,22 @@ packages: resolution: {integrity: sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + ws@8.20.1: + resolution: {integrity: sha512-It4dO0K5v//JtTXuPkfEOaI3uUN87iYPnqo/ZzqCoG3g8uhA66QUMs/SrM0YK7/NAu+r4LMh/9dq2A7k+rHs+w==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + xml-naming@0.1.0: + resolution: {integrity: sha512-k8KO9hrMyNk6tUWqUfkTEZbezRRpONVOzUTnc97VnCvyj6Tf9lyUR9EDAIeiVLv56jsMcoXEwjW8Kv5yPY52lw==} + engines: {node: '>=16.0.0'} + xmlbuilder@13.0.2: resolution: {integrity: sha512-Eux0i2QdDYKbdbA6AM6xE4m6ZTZr4G4xF9kahI2ukSEMCzwce2eX9WlTI5J3s+NU7hpasFsr8hWIONae7LluAQ==} engines: {node: '>=6.0'} @@ -3853,14 +5278,320 @@ packages: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} + zustand@5.0.13: + resolution: {integrity: sha512-efI2tVaVQPqtOh114loML/Z80Y4NP3yc+Ff0fYiZJPauNeWZeIp/bRFD7I9bfmCOYBh/PHxlglQ9+wvlwnPikQ==} + engines: {node: '>=12.20.0'} + peerDependencies: + '@types/react': '>=18.0.0' + immer: '>=9.0.6' + react: '>=18.0.0' + use-sync-external-store: '>=1.2.0' + peerDependenciesMeta: + '@types/react': + optional: true + immer: + optional: true + react: + optional: true + use-sync-external-store: + optional: true + snapshots: 12factor-env@1.6.2: dependencies: envalid: 8.1.1 + '@0no-co/graphql.web@1.2.0(graphql@16.13.0)': + optionalDependencies: + graphql: 16.13.0 + '@agentic-kit/ollama@1.2.0': {} + '@aws-crypto/crc32@5.2.0': + dependencies: + '@aws-crypto/util': 5.2.0 + '@aws-sdk/types': 3.973.8 + tslib: 2.8.1 + + '@aws-crypto/crc32c@5.2.0': + dependencies: + '@aws-crypto/util': 5.2.0 + '@aws-sdk/types': 3.973.8 + tslib: 2.8.1 + + '@aws-crypto/sha1-browser@5.2.0': + dependencies: + '@aws-crypto/supports-web-crypto': 5.2.0 + '@aws-crypto/util': 5.2.0 + '@aws-sdk/types': 3.973.8 + '@aws-sdk/util-locate-window': 3.965.5 + '@smithy/util-utf8': 2.3.0 + tslib: 2.8.1 + + '@aws-crypto/sha256-browser@5.2.0': + dependencies: + '@aws-crypto/sha256-js': 5.2.0 + '@aws-crypto/supports-web-crypto': 5.2.0 + '@aws-crypto/util': 5.2.0 + '@aws-sdk/types': 3.973.8 + '@aws-sdk/util-locate-window': 3.965.5 + '@smithy/util-utf8': 2.3.0 + tslib: 2.8.1 + + '@aws-crypto/sha256-js@5.2.0': + dependencies: + '@aws-crypto/util': 5.2.0 + '@aws-sdk/types': 3.973.8 + tslib: 2.8.1 + + '@aws-crypto/supports-web-crypto@5.2.0': + dependencies: + tslib: 2.8.1 + + '@aws-crypto/util@5.2.0': + dependencies: + '@aws-sdk/types': 3.973.8 + '@smithy/util-utf8': 2.3.0 + tslib: 2.8.1 + + '@aws-sdk/client-s3@3.1048.0': + dependencies: + '@aws-crypto/sha1-browser': 5.2.0 + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/core': 3.974.11 + '@aws-sdk/credential-provider-node': 3.972.42 + '@aws-sdk/middleware-bucket-endpoint': 3.972.13 + '@aws-sdk/middleware-expect-continue': 3.972.12 + '@aws-sdk/middleware-flexible-checksums': 3.974.19 + '@aws-sdk/middleware-location-constraint': 3.972.10 + '@aws-sdk/middleware-sdk-s3': 3.972.40 + '@aws-sdk/middleware-ssec': 3.972.10 + '@aws-sdk/signature-v4-multi-region': 3.996.27 + '@aws-sdk/types': 3.973.8 + '@smithy/core': 3.24.3 + '@smithy/fetch-http-handler': 5.4.3 + '@smithy/node-http-handler': 4.7.3 + '@smithy/types': 4.14.2 + tslib: 2.8.1 + + '@aws-sdk/core@3.974.11': + dependencies: + '@aws-sdk/types': 3.973.8 + '@aws-sdk/xml-builder': 3.972.24 + '@aws/lambda-invoke-store': 0.2.4 + '@smithy/core': 3.24.3 + '@smithy/signature-v4': 5.4.3 + '@smithy/types': 4.14.2 + bowser: 2.14.1 + tslib: 2.8.1 + + '@aws-sdk/crc64-nvme@3.972.8': + dependencies: + '@smithy/types': 4.14.2 + tslib: 2.8.1 + + '@aws-sdk/credential-provider-env@3.972.37': + dependencies: + '@aws-sdk/core': 3.974.11 + '@aws-sdk/types': 3.973.8 + '@smithy/core': 3.24.3 + '@smithy/types': 4.14.2 + tslib: 2.8.1 + + '@aws-sdk/credential-provider-http@3.972.39': + dependencies: + '@aws-sdk/core': 3.974.11 + '@aws-sdk/types': 3.973.8 + '@smithy/core': 3.24.3 + '@smithy/fetch-http-handler': 5.4.3 + '@smithy/node-http-handler': 4.7.3 + '@smithy/types': 4.14.2 + tslib: 2.8.1 + + '@aws-sdk/credential-provider-ini@3.972.41': + dependencies: + '@aws-sdk/core': 3.974.11 + '@aws-sdk/credential-provider-env': 3.972.37 + '@aws-sdk/credential-provider-http': 3.972.39 + '@aws-sdk/credential-provider-login': 3.972.41 + '@aws-sdk/credential-provider-process': 3.972.37 + '@aws-sdk/credential-provider-sso': 3.972.41 + '@aws-sdk/credential-provider-web-identity': 3.972.41 + '@aws-sdk/nested-clients': 3.997.9 + '@aws-sdk/types': 3.973.8 + '@smithy/core': 3.24.3 + '@smithy/credential-provider-imds': 4.3.3 + '@smithy/types': 4.14.2 + tslib: 2.8.1 + + '@aws-sdk/credential-provider-login@3.972.41': + dependencies: + '@aws-sdk/core': 3.974.11 + '@aws-sdk/nested-clients': 3.997.9 + '@aws-sdk/types': 3.973.8 + '@smithy/core': 3.24.3 + '@smithy/types': 4.14.2 + tslib: 2.8.1 + + '@aws-sdk/credential-provider-node@3.972.42': + dependencies: + '@aws-sdk/credential-provider-env': 3.972.37 + '@aws-sdk/credential-provider-http': 3.972.39 + '@aws-sdk/credential-provider-ini': 3.972.41 + '@aws-sdk/credential-provider-process': 3.972.37 + '@aws-sdk/credential-provider-sso': 3.972.41 + '@aws-sdk/credential-provider-web-identity': 3.972.41 + '@aws-sdk/types': 3.973.8 + '@smithy/core': 3.24.3 + '@smithy/credential-provider-imds': 4.3.3 + '@smithy/types': 4.14.2 + tslib: 2.8.1 + + '@aws-sdk/credential-provider-process@3.972.37': + dependencies: + '@aws-sdk/core': 3.974.11 + '@aws-sdk/types': 3.973.8 + '@smithy/core': 3.24.3 + '@smithy/types': 4.14.2 + tslib: 2.8.1 + + '@aws-sdk/credential-provider-sso@3.972.41': + dependencies: + '@aws-sdk/core': 3.974.11 + '@aws-sdk/nested-clients': 3.997.9 + '@aws-sdk/token-providers': 3.1048.0 + '@aws-sdk/types': 3.973.8 + '@smithy/core': 3.24.3 + '@smithy/types': 4.14.2 + tslib: 2.8.1 + + '@aws-sdk/credential-provider-web-identity@3.972.41': + dependencies: + '@aws-sdk/core': 3.974.11 + '@aws-sdk/nested-clients': 3.997.9 + '@aws-sdk/types': 3.973.8 + '@smithy/core': 3.24.3 + '@smithy/types': 4.14.2 + tslib: 2.8.1 + + '@aws-sdk/lib-storage@3.1048.0(@aws-sdk/client-s3@3.1048.0)': + dependencies: + '@aws-sdk/client-s3': 3.1048.0 + '@smithy/core': 3.24.3 + '@smithy/types': 4.14.2 + buffer: 5.6.0 + events: 3.3.0 + stream-browserify: 3.0.0 + tslib: 2.8.1 + + '@aws-sdk/middleware-bucket-endpoint@3.972.13': + dependencies: + '@aws-sdk/core': 3.974.11 + '@aws-sdk/types': 3.973.8 + '@smithy/core': 3.24.3 + '@smithy/types': 4.14.2 + tslib: 2.8.1 + + '@aws-sdk/middleware-expect-continue@3.972.12': + dependencies: + '@aws-sdk/types': 3.973.8 + '@smithy/core': 3.24.3 + '@smithy/types': 4.14.2 + tslib: 2.8.1 + + '@aws-sdk/middleware-flexible-checksums@3.974.19': + dependencies: + '@aws-crypto/crc32': 5.2.0 + '@aws-crypto/crc32c': 5.2.0 + '@aws-crypto/util': 5.2.0 + '@aws-sdk/core': 3.974.11 + '@aws-sdk/crc64-nvme': 3.972.8 + '@aws-sdk/types': 3.973.8 + '@smithy/core': 3.24.3 + '@smithy/types': 4.14.2 + tslib: 2.8.1 + + '@aws-sdk/middleware-location-constraint@3.972.10': + dependencies: + '@aws-sdk/types': 3.973.8 + '@smithy/types': 4.14.2 + tslib: 2.8.1 + + '@aws-sdk/middleware-sdk-s3@3.972.40': + dependencies: + '@aws-sdk/core': 3.974.11 + '@aws-sdk/signature-v4-multi-region': 3.996.27 + '@aws-sdk/types': 3.973.8 + '@smithy/core': 3.24.3 + '@smithy/signature-v4': 5.4.3 + '@smithy/types': 4.14.2 + tslib: 2.8.1 + + '@aws-sdk/middleware-ssec@3.972.10': + dependencies: + '@aws-sdk/types': 3.973.8 + '@smithy/types': 4.14.2 + tslib: 2.8.1 + + '@aws-sdk/nested-clients@3.997.9': + dependencies: + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/core': 3.974.11 + '@aws-sdk/signature-v4-multi-region': 3.996.27 + '@aws-sdk/types': 3.973.8 + '@smithy/core': 3.24.3 + '@smithy/fetch-http-handler': 5.4.3 + '@smithy/node-http-handler': 4.7.3 + '@smithy/types': 4.14.2 + tslib: 2.8.1 + + '@aws-sdk/s3-request-presigner@3.1048.0': + dependencies: + '@aws-sdk/core': 3.974.11 + '@aws-sdk/signature-v4-multi-region': 3.996.27 + '@aws-sdk/types': 3.973.8 + '@smithy/core': 3.24.3 + '@smithy/types': 4.14.2 + tslib: 2.8.1 + + '@aws-sdk/signature-v4-multi-region@3.996.27': + dependencies: + '@aws-sdk/types': 3.973.8 + '@smithy/core': 3.24.3 + '@smithy/signature-v4': 5.4.3 + '@smithy/types': 4.14.2 + tslib: 2.8.1 + + '@aws-sdk/token-providers@3.1048.0': + dependencies: + '@aws-sdk/core': 3.974.11 + '@aws-sdk/nested-clients': 3.997.9 + '@aws-sdk/types': 3.973.8 + '@smithy/core': 3.24.3 + '@smithy/types': 4.14.2 + tslib: 2.8.1 + + '@aws-sdk/types@3.973.8': + dependencies: + '@smithy/types': 4.14.2 + tslib: 2.8.1 + + '@aws-sdk/util-locate-window@3.965.5': + dependencies: + tslib: 2.8.1 + + '@aws-sdk/xml-builder@3.972.24': + dependencies: + '@nodable/entities': 2.1.0 + '@smithy/types': 4.14.2 + fast-xml-parser: 5.7.3 + tslib: 2.8.1 + + '@aws/lambda-invoke-store@0.2.4': {} + '@babel/code-frame@7.27.1': dependencies: '@babel/helper-validator-identifier': 7.28.5 @@ -4058,6 +5789,79 @@ snapshots: '@bcoe/v8-coverage@0.2.3': {} + '@constructive-io/bucket-provisioner@0.11.0': + dependencies: + '@aws-sdk/client-s3': 3.1048.0 + '@constructive-io/s3-utils': 2.17.0 + + '@constructive-io/content-type-stream@2.17.0': + dependencies: + etag-hash: 2.17.0 + mime-bytes: 0.17.0 + uuid-hash: 2.16.0 + + '@constructive-io/fetch@1.0.0': {} + + '@constructive-io/graphql-env@3.11.0': + dependencies: + '@constructive-io/graphql-types': 3.10.0 + '@pgpmjs/env': 2.23.0 + deepmerge: 4.3.1 + transitivePeerDependencies: + - supports-color + + '@constructive-io/graphql-query@3.25.2(@dataplan/json@1.0.0(grafast@1.0.0(graphql@16.13.0)))(@dataplan/pg@1.0.0(@dataplan/json@1.0.0(grafast@1.0.0(graphql@16.13.0)))(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0)(pg-sql2@5.0.0)(pg@8.20.0))(@types/node@22.19.3)(grafserv@1.0.0(@types/node@22.19.3)(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(use-sync-external-store@1.6.0(react@16.14.0))(ws@8.20.1))(graphile-build@5.0.0(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0))(pg-sql2@5.0.0)(pg@8.20.0)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(tamedevil@0.1.0)(use-sync-external-store@1.6.0(react@16.14.0))(ws@8.20.1)': + dependencies: + '@0no-co/graphql.web': 1.2.0(graphql@16.13.0) + '@constructive-io/fetch': 1.0.0 + '@constructive-io/graphql-types': 3.10.0 + ajv: 8.20.0 + gql-ast: 3.10.0 + grafast: 1.0.0(graphql@16.13.0) + graphile-build-pg: 5.0.0(@dataplan/pg@1.0.0(@dataplan/json@1.0.0(grafast@1.0.0(graphql@16.13.0)))(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0)(pg-sql2@5.0.0)(pg@8.20.0))(grafast@1.0.0(graphql@16.13.0))(graphile-build@5.0.0(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0)(pg-sql2@5.0.0)(pg@8.20.0)(tamedevil@0.1.0) + graphile-config: 1.0.0 + graphile-settings: 5.2.0(@types/node@22.19.3)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(use-sync-external-store@1.6.0(react@16.14.0))(ws@8.20.1) + graphql: 16.13.0 + inflection: 3.0.2 + inflekt: 0.7.1 + lru-cache: 11.3.0 + postgraphile: 5.0.0(5e9db3c46a7f7a3a3fa3294d7fa3cdc0) + transitivePeerDependencies: + - '@dataplan/json' + - '@dataplan/pg' + - '@envelop/core' + - '@fastify/websocket' + - '@types/node' + - '@types/react' + - '@types/react-dom' + - '@whatwg-node/server' + - bufferutil + - crossws + - grafserv + - graphile-build + - h3 + - hono + - immer + - pg + - pg-native + - pg-sql2 + - react + - react-dom + - supports-color + - tamedevil + - use-sync-external-store + - utf-8-validate + - ws + + '@constructive-io/graphql-types@3.10.0': + dependencies: + '@pgpmjs/types': 2.27.0 + deepmerge: 4.3.1 + graphile-config: 1.0.0 + pg-env: 1.14.0 + transitivePeerDependencies: + - supports-color + '@constructive-io/job-pg@2.5.4': dependencies: '@constructive-io/job-utils': 2.5.4 @@ -4091,7 +5895,49 @@ snapshots: form-data: 4.0.5 mailgun.js: 10.4.0 transitivePeerDependencies: - - debug + - debug + + '@constructive-io/s3-streamer@2.24.0': + dependencies: + '@aws-sdk/client-s3': 3.1048.0 + '@aws-sdk/lib-storage': 3.1048.0(@aws-sdk/client-s3@3.1048.0) + '@constructive-io/content-type-stream': 2.17.0 + '@constructive-io/s3-utils': 2.17.0 + '@pgpmjs/types': 2.27.0 + + '@constructive-io/s3-utils@2.17.0': + dependencies: + '@aws-sdk/client-s3': 3.1048.0 + '@aws-sdk/lib-storage': 3.1048.0(@aws-sdk/client-s3@3.1048.0) + '@aws-sdk/s3-request-presigner': 3.1048.0 + + '@constructive-io/upload-names@2.16.0': {} + + '@dataplan/json@1.0.0(grafast@1.0.0(graphql@16.13.0))': + dependencies: + chalk: 4.1.2 + grafast: 1.0.0(graphql@16.13.0) + tslib: 2.8.1 + + '@dataplan/pg@1.0.0(@dataplan/json@1.0.0(grafast@1.0.0(graphql@16.13.0)))(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0)(pg-sql2@5.0.0)(pg@8.20.0)': + dependencies: + '@dataplan/json': 1.0.0(grafast@1.0.0(graphql@16.13.0)) + '@graphile/lru': 5.0.0 + '@types/node': 22.19.3 + chalk: 4.1.2 + debug: 4.4.3(supports-color@5.5.0) + eventemitter3: 5.0.4 + grafast: 1.0.0(graphql@16.13.0) + graphile-config: 1.0.0 + graphql: 16.13.0 + pg-sql2: 5.0.0 + postgres-array: 3.0.4 + postgres-range: 1.1.4 + tslib: 2.8.1 + optionalDependencies: + pg: 8.20.0 + transitivePeerDependencies: + - supports-color '@emnapi/core@1.8.1': dependencies: @@ -4243,9 +6089,135 @@ snapshots: '@eslint/core': 0.17.0 levn: 0.4.1 - '@graphql-typed-document-node/core@3.2.0(graphql@16.12.0)': + '@floating-ui/core@1.7.5': + dependencies: + '@floating-ui/utils': 0.2.11 + + '@floating-ui/dom@1.7.6': + dependencies: + '@floating-ui/core': 1.7.5 + '@floating-ui/utils': 0.2.11 + + '@floating-ui/react-dom@2.1.8(react-dom@16.14.0(react@16.14.0))(react@16.14.0)': + dependencies: + '@floating-ui/dom': 1.7.6 + react: 16.14.0 + react-dom: 16.14.0(react@16.14.0) + + '@floating-ui/react@0.26.28(react-dom@16.14.0(react@16.14.0))(react@16.14.0)': + dependencies: + '@floating-ui/react-dom': 2.1.8(react-dom@16.14.0(react@16.14.0))(react@16.14.0) + '@floating-ui/utils': 0.2.11 + react: 16.14.0 + react-dom: 16.14.0(react@16.14.0) + tabbable: 6.4.0 + + '@floating-ui/utils@0.2.11': {} + + '@graphile-contrib/pg-many-to-many@2.0.0-rc.2': {} + + '@graphile/lru@5.0.0': + dependencies: + tslib: 2.8.1 + + '@graphiql/plugin-doc-explorer@0.4.2(@graphiql/react@0.37.5(@emotion/is-prop-valid@1.4.0)(@types/node@22.19.3)(graphql-ws@6.0.8(graphql@16.13.0)(ws@8.20.1))(graphql@16.13.0)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(use-sync-external-store@1.6.0(react@16.14.0)))(graphql@16.13.0)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(use-sync-external-store@1.6.0(react@16.14.0))': + dependencies: + '@graphiql/react': 0.37.5(@emotion/is-prop-valid@1.4.0)(@types/node@22.19.3)(graphql-ws@6.0.8(graphql@16.13.0)(ws@8.20.1))(graphql@16.13.0)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(use-sync-external-store@1.6.0(react@16.14.0)) + '@headlessui/react': 2.2.10(react-dom@16.14.0(react@16.14.0))(react@16.14.0) + graphql: 16.13.0 + react: 16.14.0 + react-compiler-runtime: 19.1.0-rc.1(react@16.14.0) + react-dom: 16.14.0(react@16.14.0) + zustand: 5.0.13(react@16.14.0)(use-sync-external-store@1.6.0(react@16.14.0)) + transitivePeerDependencies: + - '@types/react' + - immer + - use-sync-external-store + + '@graphiql/plugin-history@0.4.2(@graphiql/react@0.37.5(@emotion/is-prop-valid@1.4.0)(@types/node@22.19.3)(graphql-ws@6.0.8(graphql@16.13.0)(ws@8.20.1))(graphql@16.13.0)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(use-sync-external-store@1.6.0(react@16.14.0)))(@types/node@22.19.3)(graphql-ws@6.0.8(graphql@16.13.0)(ws@8.20.1))(graphql@16.13.0)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(use-sync-external-store@1.6.0(react@16.14.0))': dependencies: - graphql: 16.12.0 + '@graphiql/react': 0.37.5(@emotion/is-prop-valid@1.4.0)(@types/node@22.19.3)(graphql-ws@6.0.8(graphql@16.13.0)(ws@8.20.1))(graphql@16.13.0)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(use-sync-external-store@1.6.0(react@16.14.0)) + '@graphiql/toolkit': 0.12.0(@types/node@22.19.3)(graphql-ws@6.0.8(graphql@16.13.0)(ws@8.20.1))(graphql@16.13.0) + react: 16.14.0 + react-compiler-runtime: 19.1.0-rc.1(react@16.14.0) + react-dom: 16.14.0(react@16.14.0) + zustand: 5.0.13(react@16.14.0)(use-sync-external-store@1.6.0(react@16.14.0)) + transitivePeerDependencies: + - '@types/node' + - '@types/react' + - graphql + - graphql-ws + - immer + - use-sync-external-store + + '@graphiql/react@0.37.5(@emotion/is-prop-valid@1.4.0)(@types/node@22.19.3)(graphql-ws@6.0.8(graphql@16.13.0)(ws@8.20.1))(graphql@16.13.0)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(use-sync-external-store@1.6.0(react@16.14.0))': + dependencies: + '@graphiql/toolkit': 0.12.0(@types/node@22.19.3)(graphql-ws@6.0.8(graphql@16.13.0)(ws@8.20.1))(graphql@16.13.0) + '@radix-ui/react-dialog': 1.1.15(react-dom@16.14.0(react@16.14.0))(react@16.14.0) + '@radix-ui/react-dropdown-menu': 2.1.16(react-dom@16.14.0(react@16.14.0))(react@16.14.0) + '@radix-ui/react-tooltip': 1.2.8(react-dom@16.14.0(react@16.14.0))(react@16.14.0) + '@radix-ui/react-visually-hidden': 1.2.4(react-dom@16.14.0(react@16.14.0))(react@16.14.0) + clsx: 1.2.1 + framer-motion: 12.38.0(@emotion/is-prop-valid@1.4.0)(react-dom@16.14.0(react@16.14.0))(react@16.14.0) + get-value: 3.0.1 + graphql: 16.13.0 + graphql-language-service: 5.5.1(graphql@16.13.0) + jsonc-parser: 3.3.1 + markdown-it: 14.1.1 + monaco-editor: 0.52.2 + monaco-graphql: 1.8.0(graphql@16.13.0)(monaco-editor@0.52.2)(prettier@3.7.4) + prettier: 3.7.4 + react: 16.14.0 + react-compiler-runtime: 19.1.0-rc.1(react@16.14.0) + react-dom: 16.14.0(react@16.14.0) + set-value: 4.1.0 + zustand: 5.0.13(react@16.14.0)(use-sync-external-store@1.6.0(react@16.14.0)) + transitivePeerDependencies: + - '@emotion/is-prop-valid' + - '@types/node' + - '@types/react' + - '@types/react-dom' + - graphql-ws + - immer + - use-sync-external-store + + '@graphiql/toolkit@0.11.3(@types/node@22.19.3)(graphql-ws@6.0.8(graphql@16.13.0)(ws@8.20.1))(graphql@16.13.0)': + dependencies: + '@n1ru4l/push-pull-async-iterable-iterator': 3.2.0 + graphql: 16.13.0 + meros: 1.3.2(@types/node@22.19.3) + optionalDependencies: + graphql-ws: 6.0.8(graphql@16.13.0)(ws@8.20.1) + transitivePeerDependencies: + - '@types/node' + + '@graphiql/toolkit@0.12.0(@types/node@22.19.3)(graphql-ws@6.0.8(graphql@16.13.0)(ws@8.20.1))(graphql@16.13.0)': + dependencies: + '@n1ru4l/push-pull-async-iterable-iterator': 3.2.0 + graphql: 16.13.0 + meros: 1.3.2(@types/node@22.19.3) + optionalDependencies: + graphql-ws: 6.0.8(graphql@16.13.0)(ws@8.20.1) + transitivePeerDependencies: + - '@types/node' + + '@graphql-typed-document-node/core@3.2.0(graphql@16.13.0)': + dependencies: + graphql: 16.13.0 + + '@graphql-typed-document-node/core@3.2.0(graphql@16.14.0)': + dependencies: + graphql: 16.14.0 + + '@headlessui/react@2.2.10(react-dom@16.14.0(react@16.14.0))(react@16.14.0)': + dependencies: + '@floating-ui/react': 0.26.28(react-dom@16.14.0(react@16.14.0))(react@16.14.0) + '@react-aria/focus': 3.22.0(react-dom@16.14.0(react@16.14.0))(react@16.14.0) + '@react-aria/interactions': 3.28.0(react-dom@16.14.0(react@16.14.0))(react@16.14.0) + '@tanstack/react-virtual': 3.13.24(react-dom@16.14.0(react@16.14.0))(react@16.14.0) + react: 16.14.0 + react-dom: 16.14.0(react@16.14.0) + use-sync-external-store: 1.6.0(react@16.14.0) '@humanfs/core@0.19.1': {} @@ -4258,6 +6230,18 @@ snapshots: '@humanwhocodes/retry@0.4.3': {} + '@internationalized/date@3.12.1': + dependencies: + '@swc/helpers': 0.5.21 + + '@internationalized/number@3.6.6': + dependencies: + '@swc/helpers': 0.5.21 + + '@internationalized/string@3.2.8': + dependencies: + '@swc/helpers': 0.5.21 + '@isaacs/balanced-match@4.0.1': {} '@isaacs/brace-expansion@5.0.1': @@ -4672,6 +6656,8 @@ snapshots: - encoding - react-is + '@n1ru4l/push-pull-async-iterable-iterator@3.2.0': {} + '@napi-rs/wasm-runtime@0.2.12': dependencies: '@emnapi/core': 1.8.1 @@ -4679,6 +6665,8 @@ snapshots: '@tybys/wasm-util': 0.10.1 optional: true + '@nodable/entities@2.1.0': {} + '@one-ini/wasm@0.1.1': {} '@pgpmjs/env@2.17.0': @@ -4686,6 +6674,19 @@ snapshots: '@pgpmjs/types': 2.21.0 deepmerge: 4.3.1 + '@pgpmjs/env@2.23.0': + dependencies: + '@pgpmjs/types': 2.27.0 + deepmerge: 4.3.1 + + '@pgpmjs/logger@1.5.0': + dependencies: + yanse: 0.2.1 + + '@pgpmjs/logger@2.11.0': + dependencies: + yanse: 0.2.1 + '@pgpmjs/logger@2.5.2': dependencies: yanse: 0.2.1 @@ -4694,11 +6695,278 @@ snapshots: dependencies: pg-env: 1.8.2 + '@pgpmjs/types@2.27.0': + dependencies: + pg-env: 1.14.0 + + '@pgsql/quotes@17.1.0': {} + + '@pgsql/types@17.6.2': {} + '@pkgjs/parseargs@0.11.0': optional: true '@pkgr/core@0.2.9': {} + '@radix-ui/primitive@1.1.3': {} + + '@radix-ui/react-arrow@1.1.7(react-dom@16.14.0(react@16.14.0))(react@16.14.0)': + dependencies: + '@radix-ui/react-primitive': 2.1.3(react-dom@16.14.0(react@16.14.0))(react@16.14.0) + react: 16.14.0 + react-dom: 16.14.0(react@16.14.0) + + '@radix-ui/react-collection@1.1.7(react-dom@16.14.0(react@16.14.0))(react@16.14.0)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.2(react@16.14.0) + '@radix-ui/react-context': 1.1.2(react@16.14.0) + '@radix-ui/react-primitive': 2.1.3(react-dom@16.14.0(react@16.14.0))(react@16.14.0) + '@radix-ui/react-slot': 1.2.3(react@16.14.0) + react: 16.14.0 + react-dom: 16.14.0(react@16.14.0) + + '@radix-ui/react-compose-refs@1.1.2(react@16.14.0)': + dependencies: + react: 16.14.0 + + '@radix-ui/react-context@1.1.2(react@16.14.0)': + dependencies: + react: 16.14.0 + + '@radix-ui/react-dialog@1.1.15(react-dom@16.14.0(react@16.14.0))(react@16.14.0)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-compose-refs': 1.1.2(react@16.14.0) + '@radix-ui/react-context': 1.1.2(react@16.14.0) + '@radix-ui/react-dismissable-layer': 1.1.11(react-dom@16.14.0(react@16.14.0))(react@16.14.0) + '@radix-ui/react-focus-guards': 1.1.3(react@16.14.0) + '@radix-ui/react-focus-scope': 1.1.7(react-dom@16.14.0(react@16.14.0))(react@16.14.0) + '@radix-ui/react-id': 1.1.1(react@16.14.0) + '@radix-ui/react-portal': 1.1.9(react-dom@16.14.0(react@16.14.0))(react@16.14.0) + '@radix-ui/react-presence': 1.1.5(react-dom@16.14.0(react@16.14.0))(react@16.14.0) + '@radix-ui/react-primitive': 2.1.3(react-dom@16.14.0(react@16.14.0))(react@16.14.0) + '@radix-ui/react-slot': 1.2.3(react@16.14.0) + '@radix-ui/react-use-controllable-state': 1.2.2(react@16.14.0) + aria-hidden: 1.2.6 + react: 16.14.0 + react-dom: 16.14.0(react@16.14.0) + react-remove-scroll: 2.7.2(react@16.14.0) + + '@radix-ui/react-direction@1.1.1(react@16.14.0)': + dependencies: + react: 16.14.0 + + '@radix-ui/react-dismissable-layer@1.1.11(react-dom@16.14.0(react@16.14.0))(react@16.14.0)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-compose-refs': 1.1.2(react@16.14.0) + '@radix-ui/react-primitive': 2.1.3(react-dom@16.14.0(react@16.14.0))(react@16.14.0) + '@radix-ui/react-use-callback-ref': 1.1.1(react@16.14.0) + '@radix-ui/react-use-escape-keydown': 1.1.1(react@16.14.0) + react: 16.14.0 + react-dom: 16.14.0(react@16.14.0) + + '@radix-ui/react-dropdown-menu@2.1.16(react-dom@16.14.0(react@16.14.0))(react@16.14.0)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-compose-refs': 1.1.2(react@16.14.0) + '@radix-ui/react-context': 1.1.2(react@16.14.0) + '@radix-ui/react-id': 1.1.1(react@16.14.0) + '@radix-ui/react-menu': 2.1.16(react-dom@16.14.0(react@16.14.0))(react@16.14.0) + '@radix-ui/react-primitive': 2.1.3(react-dom@16.14.0(react@16.14.0))(react@16.14.0) + '@radix-ui/react-use-controllable-state': 1.2.2(react@16.14.0) + react: 16.14.0 + react-dom: 16.14.0(react@16.14.0) + + '@radix-ui/react-focus-guards@1.1.3(react@16.14.0)': + dependencies: + react: 16.14.0 + + '@radix-ui/react-focus-scope@1.1.7(react-dom@16.14.0(react@16.14.0))(react@16.14.0)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.2(react@16.14.0) + '@radix-ui/react-primitive': 2.1.3(react-dom@16.14.0(react@16.14.0))(react@16.14.0) + '@radix-ui/react-use-callback-ref': 1.1.1(react@16.14.0) + react: 16.14.0 + react-dom: 16.14.0(react@16.14.0) + + '@radix-ui/react-id@1.1.1(react@16.14.0)': + dependencies: + '@radix-ui/react-use-layout-effect': 1.1.1(react@16.14.0) + react: 16.14.0 + + '@radix-ui/react-menu@2.1.16(react-dom@16.14.0(react@16.14.0))(react@16.14.0)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-collection': 1.1.7(react-dom@16.14.0(react@16.14.0))(react@16.14.0) + '@radix-ui/react-compose-refs': 1.1.2(react@16.14.0) + '@radix-ui/react-context': 1.1.2(react@16.14.0) + '@radix-ui/react-direction': 1.1.1(react@16.14.0) + '@radix-ui/react-dismissable-layer': 1.1.11(react-dom@16.14.0(react@16.14.0))(react@16.14.0) + '@radix-ui/react-focus-guards': 1.1.3(react@16.14.0) + '@radix-ui/react-focus-scope': 1.1.7(react-dom@16.14.0(react@16.14.0))(react@16.14.0) + '@radix-ui/react-id': 1.1.1(react@16.14.0) + '@radix-ui/react-popper': 1.2.8(react-dom@16.14.0(react@16.14.0))(react@16.14.0) + '@radix-ui/react-portal': 1.1.9(react-dom@16.14.0(react@16.14.0))(react@16.14.0) + '@radix-ui/react-presence': 1.1.5(react-dom@16.14.0(react@16.14.0))(react@16.14.0) + '@radix-ui/react-primitive': 2.1.3(react-dom@16.14.0(react@16.14.0))(react@16.14.0) + '@radix-ui/react-roving-focus': 1.1.11(react-dom@16.14.0(react@16.14.0))(react@16.14.0) + '@radix-ui/react-slot': 1.2.3(react@16.14.0) + '@radix-ui/react-use-callback-ref': 1.1.1(react@16.14.0) + aria-hidden: 1.2.6 + react: 16.14.0 + react-dom: 16.14.0(react@16.14.0) + react-remove-scroll: 2.7.2(react@16.14.0) + + '@radix-ui/react-popper@1.2.8(react-dom@16.14.0(react@16.14.0))(react@16.14.0)': + dependencies: + '@floating-ui/react-dom': 2.1.8(react-dom@16.14.0(react@16.14.0))(react@16.14.0) + '@radix-ui/react-arrow': 1.1.7(react-dom@16.14.0(react@16.14.0))(react@16.14.0) + '@radix-ui/react-compose-refs': 1.1.2(react@16.14.0) + '@radix-ui/react-context': 1.1.2(react@16.14.0) + '@radix-ui/react-primitive': 2.1.3(react-dom@16.14.0(react@16.14.0))(react@16.14.0) + '@radix-ui/react-use-callback-ref': 1.1.1(react@16.14.0) + '@radix-ui/react-use-layout-effect': 1.1.1(react@16.14.0) + '@radix-ui/react-use-rect': 1.1.1(react@16.14.0) + '@radix-ui/react-use-size': 1.1.1(react@16.14.0) + '@radix-ui/rect': 1.1.1 + react: 16.14.0 + react-dom: 16.14.0(react@16.14.0) + + '@radix-ui/react-portal@1.1.9(react-dom@16.14.0(react@16.14.0))(react@16.14.0)': + dependencies: + '@radix-ui/react-primitive': 2.1.3(react-dom@16.14.0(react@16.14.0))(react@16.14.0) + '@radix-ui/react-use-layout-effect': 1.1.1(react@16.14.0) + react: 16.14.0 + react-dom: 16.14.0(react@16.14.0) + + '@radix-ui/react-presence@1.1.5(react-dom@16.14.0(react@16.14.0))(react@16.14.0)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.2(react@16.14.0) + '@radix-ui/react-use-layout-effect': 1.1.1(react@16.14.0) + react: 16.14.0 + react-dom: 16.14.0(react@16.14.0) + + '@radix-ui/react-primitive@2.1.3(react-dom@16.14.0(react@16.14.0))(react@16.14.0)': + dependencies: + '@radix-ui/react-slot': 1.2.3(react@16.14.0) + react: 16.14.0 + react-dom: 16.14.0(react@16.14.0) + + '@radix-ui/react-primitive@2.1.4(react-dom@16.14.0(react@16.14.0))(react@16.14.0)': + dependencies: + '@radix-ui/react-slot': 1.2.4(react@16.14.0) + react: 16.14.0 + react-dom: 16.14.0(react@16.14.0) + + '@radix-ui/react-roving-focus@1.1.11(react-dom@16.14.0(react@16.14.0))(react@16.14.0)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-collection': 1.1.7(react-dom@16.14.0(react@16.14.0))(react@16.14.0) + '@radix-ui/react-compose-refs': 1.1.2(react@16.14.0) + '@radix-ui/react-context': 1.1.2(react@16.14.0) + '@radix-ui/react-direction': 1.1.1(react@16.14.0) + '@radix-ui/react-id': 1.1.1(react@16.14.0) + '@radix-ui/react-primitive': 2.1.3(react-dom@16.14.0(react@16.14.0))(react@16.14.0) + '@radix-ui/react-use-callback-ref': 1.1.1(react@16.14.0) + '@radix-ui/react-use-controllable-state': 1.2.2(react@16.14.0) + react: 16.14.0 + react-dom: 16.14.0(react@16.14.0) + + '@radix-ui/react-slot@1.2.3(react@16.14.0)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.2(react@16.14.0) + react: 16.14.0 + + '@radix-ui/react-slot@1.2.4(react@16.14.0)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.2(react@16.14.0) + react: 16.14.0 + + '@radix-ui/react-tooltip@1.2.8(react-dom@16.14.0(react@16.14.0))(react@16.14.0)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-compose-refs': 1.1.2(react@16.14.0) + '@radix-ui/react-context': 1.1.2(react@16.14.0) + '@radix-ui/react-dismissable-layer': 1.1.11(react-dom@16.14.0(react@16.14.0))(react@16.14.0) + '@radix-ui/react-id': 1.1.1(react@16.14.0) + '@radix-ui/react-popper': 1.2.8(react-dom@16.14.0(react@16.14.0))(react@16.14.0) + '@radix-ui/react-portal': 1.1.9(react-dom@16.14.0(react@16.14.0))(react@16.14.0) + '@radix-ui/react-presence': 1.1.5(react-dom@16.14.0(react@16.14.0))(react@16.14.0) + '@radix-ui/react-primitive': 2.1.3(react-dom@16.14.0(react@16.14.0))(react@16.14.0) + '@radix-ui/react-slot': 1.2.3(react@16.14.0) + '@radix-ui/react-use-controllable-state': 1.2.2(react@16.14.0) + '@radix-ui/react-visually-hidden': 1.2.3(react-dom@16.14.0(react@16.14.0))(react@16.14.0) + react: 16.14.0 + react-dom: 16.14.0(react@16.14.0) + + '@radix-ui/react-use-callback-ref@1.1.1(react@16.14.0)': + dependencies: + react: 16.14.0 + + '@radix-ui/react-use-controllable-state@1.2.2(react@16.14.0)': + dependencies: + '@radix-ui/react-use-effect-event': 0.0.2(react@16.14.0) + '@radix-ui/react-use-layout-effect': 1.1.1(react@16.14.0) + react: 16.14.0 + + '@radix-ui/react-use-effect-event@0.0.2(react@16.14.0)': + dependencies: + '@radix-ui/react-use-layout-effect': 1.1.1(react@16.14.0) + react: 16.14.0 + + '@radix-ui/react-use-escape-keydown@1.1.1(react@16.14.0)': + dependencies: + '@radix-ui/react-use-callback-ref': 1.1.1(react@16.14.0) + react: 16.14.0 + + '@radix-ui/react-use-layout-effect@1.1.1(react@16.14.0)': + dependencies: + react: 16.14.0 + + '@radix-ui/react-use-rect@1.1.1(react@16.14.0)': + dependencies: + '@radix-ui/rect': 1.1.1 + react: 16.14.0 + + '@radix-ui/react-use-size@1.1.1(react@16.14.0)': + dependencies: + '@radix-ui/react-use-layout-effect': 1.1.1(react@16.14.0) + react: 16.14.0 + + '@radix-ui/react-visually-hidden@1.2.3(react-dom@16.14.0(react@16.14.0))(react@16.14.0)': + dependencies: + '@radix-ui/react-primitive': 2.1.3(react-dom@16.14.0(react@16.14.0))(react@16.14.0) + react: 16.14.0 + react-dom: 16.14.0(react@16.14.0) + + '@radix-ui/react-visually-hidden@1.2.4(react-dom@16.14.0(react@16.14.0))(react@16.14.0)': + dependencies: + '@radix-ui/react-primitive': 2.1.4(react-dom@16.14.0(react@16.14.0))(react@16.14.0) + react: 16.14.0 + react-dom: 16.14.0(react@16.14.0) + + '@radix-ui/rect@1.1.1': {} + + '@react-aria/focus@3.22.0(react-dom@16.14.0(react@16.14.0))(react@16.14.0)': + dependencies: + '@swc/helpers': 0.5.21 + react: 16.14.0 + react-aria: 3.48.0(react-dom@16.14.0(react@16.14.0))(react@16.14.0) + react-dom: 16.14.0(react@16.14.0) + + '@react-aria/interactions@3.28.0(react-dom@16.14.0(react@16.14.0))(react@16.14.0)': + dependencies: + '@react-types/shared': 3.34.0(react@16.14.0) + '@swc/helpers': 0.5.21 + react: 16.14.0 + react-aria: 3.48.0(react-dom@16.14.0(react@16.14.0))(react@16.14.0) + react-dom: 16.14.0(react@16.14.0) + + '@react-types/shared@3.34.0(react@16.14.0)': + dependencies: + react: 16.14.0 + '@sinclair/typebox@0.27.10': {} '@sinclair/typebox@0.34.48': {} @@ -4715,6 +6983,54 @@ snapshots: dependencies: '@sinonjs/commons': 3.0.1 + '@smithy/core@3.24.3': + dependencies: + '@aws-crypto/crc32': 5.2.0 + '@smithy/types': 4.14.2 + tslib: 2.8.1 + + '@smithy/credential-provider-imds@4.3.3': + dependencies: + '@smithy/core': 3.24.3 + '@smithy/types': 4.14.2 + tslib: 2.8.1 + + '@smithy/fetch-http-handler@5.4.3': + dependencies: + '@smithy/core': 3.24.3 + '@smithy/types': 4.14.2 + tslib: 2.8.1 + + '@smithy/is-array-buffer@2.2.0': + dependencies: + tslib: 2.8.1 + + '@smithy/node-http-handler@4.7.3': + dependencies: + '@smithy/core': 3.24.3 + '@smithy/types': 4.14.2 + tslib: 2.8.1 + + '@smithy/signature-v4@5.4.3': + dependencies: + '@smithy/core': 3.24.3 + '@smithy/types': 4.14.2 + tslib: 2.8.1 + + '@smithy/types@4.14.2': + dependencies: + tslib: 2.8.1 + + '@smithy/util-buffer-from@2.2.0': + dependencies: + '@smithy/is-array-buffer': 2.2.0 + tslib: 2.8.1 + + '@smithy/util-utf8@2.3.0': + dependencies: + '@smithy/util-buffer-from': 2.2.0 + tslib: 2.8.1 + '@styled-system/background@5.1.2': dependencies: '@styled-system/core': 5.1.2 @@ -4766,6 +7082,18 @@ snapshots: '@styled-system/core': 5.1.2 '@styled-system/css': 5.1.5 + '@swc/helpers@0.5.21': + dependencies: + tslib: 2.8.1 + + '@tanstack/react-virtual@3.13.24(react-dom@16.14.0(react@16.14.0))(react@16.14.0)': + dependencies: + '@tanstack/virtual-core': 3.14.0 + react: 16.14.0 + react-dom: 16.14.0(react@16.14.0) + + '@tanstack/virtual-core@3.14.0': {} + '@tybys/wasm-util@0.10.1': dependencies: tslib: 2.8.1 @@ -4826,6 +7154,10 @@ snapshots: '@types/http-errors@2.0.5': {} + '@types/interpret@1.1.4': + dependencies: + '@types/node': 22.19.3 + '@types/istanbul-lib-coverage@2.0.6': {} '@types/istanbul-lib-report@3.0.3': @@ -4857,15 +7189,19 @@ snapshots: '@types/pg@8.16.0': dependencies: '@types/node': 22.19.3 - pg-protocol: 1.11.0 + pg-protocol: 1.13.0 pg-types: 2.2.0 + '@types/pluralize@0.0.33': {} + '@types/qs@6.14.0': {} '@types/range-parser@1.2.7': {} '@types/retry@0.12.5': {} + '@types/semver@7.7.1': {} + '@types/send@1.2.1': dependencies: '@types/node': 22.19.3 @@ -5061,6 +7397,13 @@ snapshots: json-schema-traverse: 0.4.1 uri-js: 4.4.1 + ajv@8.20.0: + dependencies: + fast-deep-equal: 3.1.3 + fast-uri: 3.1.2 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + ansi-colors@4.1.3: {} ansi-escapes@4.3.2: @@ -5092,6 +7435,10 @@ snapshots: argparse@2.0.1: {} + aria-hidden@1.2.6: + dependencies: + tslib: 2.8.1 + async-retry@1.3.3: dependencies: retry: 0.13.1 @@ -5100,7 +7447,7 @@ snapshots: axios@1.13.5: dependencies: - follow-redirects: 1.15.11 + follow-redirects: 1.15.11(debug@4.4.3) form-data: 4.0.5 proxy-from-env: 1.1.0 transitivePeerDependencies: @@ -5215,6 +7562,8 @@ snapshots: base-64@1.0.0: {} + base64-js@1.5.1: {} + baseline-browser-mapping@2.9.11: {} binary-extensions@2.3.0: {} @@ -5235,6 +7584,8 @@ snapshots: boolbase@1.0.0: {} + bowser@2.14.1: {} + brace-expansion@1.1.12: dependencies: balanced-match: 1.0.2 @@ -5268,6 +7619,11 @@ snapshots: buffer-from@1.1.2: {} + buffer@5.6.0: + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + bytes@3.1.2: {} call-bind-apply-helpers@1.0.2: @@ -5370,6 +7726,10 @@ snapshots: strip-ansi: 6.0.1 wrap-ansi: 7.0.0 + clsx@1.2.1: {} + + clsx@2.1.1: {} + co@4.6.0: {} collect-v8-coverage@1.0.3: {} @@ -5411,6 +7771,11 @@ snapshots: core-js@2.6.12: {} + cors@2.8.6: + dependencies: + object-assign: 4.1.1 + vary: 1.1.2 + create-jest@29.7.0(@types/node@22.19.3): dependencies: '@jest/types': 29.6.3 @@ -5465,6 +7830,8 @@ snapshots: dayjs@1.11.20: {} + debounce-promise@3.1.2: {} + debug@4.4.3(supports-color@5.5.0): dependencies: ms: 2.1.3 @@ -5485,6 +7852,8 @@ snapshots: detect-newline@3.1.0: {} + detect-node-es@1.1.0: {} + diff-sequences@29.6.3: {} dom-serializer@0.1.1: @@ -5739,7 +8108,15 @@ snapshots: esutils@2.0.3: {} - etag@1.8.1: {} + etag-hash@2.17.0: {} + + etag@1.8.1: {} + + eventemitter3@4.0.7: {} + + eventemitter3@5.0.4: {} + + events@3.3.0: {} execa@5.1.1: dependencies: @@ -5813,6 +8190,20 @@ snapshots: fast-levenshtein@2.0.6: {} + fast-uri@3.1.2: {} + + fast-xml-builder@1.2.0: + dependencies: + path-expression-matcher: 1.5.0 + xml-naming: 0.1.0 + + fast-xml-parser@5.7.3: + dependencies: + '@nodable/entities': 2.1.0 + fast-xml-builder: 1.2.0 + path-expression-matcher: 1.5.0 + strnum: 2.3.0 + fb-watchman@2.0.2: dependencies: bser: 2.1.1 @@ -5859,7 +8250,9 @@ snapshots: flatted@3.3.3: {} - follow-redirects@1.15.11: {} + follow-redirects@1.15.11(debug@4.4.3): + optionalDependencies: + debug: 4.4.3(supports-color@5.5.0) foreground-child@3.3.1: dependencies: @@ -5876,6 +8269,16 @@ snapshots: forwarded@0.2.0: {} + framer-motion@12.38.0(@emotion/is-prop-valid@1.4.0)(react-dom@16.14.0(react@16.14.0))(react@16.14.0): + dependencies: + motion-dom: 12.38.0 + motion-utils: 12.36.0 + tslib: 2.8.1 + optionalDependencies: + '@emotion/is-prop-valid': 1.4.0 + react: 16.14.0 + react-dom: 16.14.0(react@16.14.0) + fresh@2.0.0: {} fs.realpath@1.0.0: {} @@ -5907,6 +8310,8 @@ snapshots: hasown: 2.0.2 math-intrinsics: 1.1.0 + get-nonce@1.0.1: {} + get-package-type@0.1.0: {} get-proto@1.0.1: @@ -5920,6 +8325,10 @@ snapshots: dependencies: resolve-pkg-maps: 1.0.0 + get-value@3.0.1: + dependencies: + isobject: 3.0.1 + glob-parent@5.1.2: dependencies: is-glob: 4.0.3 @@ -5961,19 +8370,373 @@ snapshots: gopd@1.2.0: {} + gql-ast@3.10.0: + dependencies: + graphql: 16.13.0 + graceful-fs@4.2.11: {} - graphql-request@7.4.0(graphql@16.12.0): + grafast@1.0.0(graphql@16.13.0): + dependencies: + '@graphile/lru': 5.0.0 + chalk: 4.1.2 + debug: 4.4.3(supports-color@5.5.0) + eventemitter3: 5.0.4 + graphile-config: 1.0.0 + graphql: 16.13.0 + iterall: 1.3.0 + tslib: 2.8.1 + transitivePeerDependencies: + - supports-color + + grafserv@1.0.0(@types/node@22.19.3)(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(use-sync-external-store@1.6.0(react@16.14.0))(ws@8.20.1): + dependencies: + '@graphile/lru': 5.0.0 + debug: 4.4.3(supports-color@5.5.0) + eventemitter3: 5.0.4 + grafast: 1.0.0(graphql@16.13.0) + graphile-config: 1.0.0 + graphql: 16.13.0 + graphql-ws: 6.0.8(graphql@16.13.0)(ws@8.20.1) + ruru: 2.0.0(@types/node@22.19.3)(debug@4.4.3)(graphile-config@1.0.0)(graphql-ws@6.0.8(graphql@16.13.0)(ws@8.20.1))(graphql@16.13.0)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(use-sync-external-store@1.6.0(react@16.14.0)) + tslib: 2.8.1 + optionalDependencies: + ws: 8.20.1 + transitivePeerDependencies: + - '@fastify/websocket' + - '@types/node' + - '@types/react' + - '@types/react-dom' + - crossws + - immer + - react + - react-dom + - supports-color + - use-sync-external-store + + graphile-bucket-provisioner-plugin@0.11.0(f7155834fdb82796b3b4b4b1e16b6ff3): + dependencies: + '@constructive-io/bucket-provisioner': 0.11.0 + '@pgpmjs/logger': 2.11.0 + '@pgsql/quotes': 17.1.0 + grafast: 1.0.0(graphql@16.13.0) + graphile-build: 5.0.0(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0) + graphile-build-pg: 5.0.0(@dataplan/pg@1.0.0(@dataplan/json@1.0.0(grafast@1.0.0(graphql@16.13.0)))(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0)(pg-sql2@5.0.0)(pg@8.20.0))(grafast@1.0.0(graphql@16.13.0))(graphile-build@5.0.0(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0)(pg-sql2@5.0.0)(pg@8.20.0)(tamedevil@0.1.0) + graphile-config: 1.0.0 + graphile-utils: 5.0.0(@dataplan/pg@1.0.0(@dataplan/json@1.0.0(grafast@1.0.0(graphql@16.13.0)))(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0)(pg-sql2@5.0.0)(pg@8.20.0))(grafast@1.0.0(graphql@16.13.0))(graphile-build-pg@5.0.0(@dataplan/pg@1.0.0(@dataplan/json@1.0.0(grafast@1.0.0(graphql@16.13.0)))(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0)(pg-sql2@5.0.0)(pg@8.20.0))(grafast@1.0.0(graphql@16.13.0))(graphile-build@5.0.0(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0)(pg-sql2@5.0.0)(pg@8.20.0)(tamedevil@0.1.0))(graphile-build@5.0.0(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0)(tamedevil@0.1.0) + graphql: 16.13.0 + postgraphile: 5.0.0(5e9db3c46a7f7a3a3fa3294d7fa3cdc0) + + graphile-build-pg@5.0.0(@dataplan/pg@1.0.0(@dataplan/json@1.0.0(grafast@1.0.0(graphql@16.13.0)))(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0)(pg-sql2@5.0.0)(pg@8.20.0))(grafast@1.0.0(graphql@16.13.0))(graphile-build@5.0.0(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0)(pg-sql2@5.0.0)(pg@8.20.0)(tamedevil@0.1.0): + dependencies: + '@dataplan/pg': 1.0.0(@dataplan/json@1.0.0(grafast@1.0.0(graphql@16.13.0)))(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0)(pg-sql2@5.0.0)(pg@8.20.0) + '@types/node': 22.19.3 + debug: 4.4.3(supports-color@5.5.0) + grafast: 1.0.0(graphql@16.13.0) + graphile-build: 5.0.0(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0) + graphile-config: 1.0.0 + graphql: 16.13.0 + jsonwebtoken: 9.0.3 + pg-introspection: 1.0.1 + pg-sql2: 5.0.0 + tamedevil: 0.1.0 + tslib: 2.8.1 + optionalDependencies: + pg: 8.20.0 + transitivePeerDependencies: + - supports-color + + graphile-build@5.0.0(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0): + dependencies: + '@types/node': 22.19.3 + '@types/pluralize': 0.0.33 + '@types/semver': 7.7.1 + chalk: 4.1.2 + debug: 4.4.3(supports-color@5.5.0) + grafast: 1.0.0(graphql@16.13.0) + graphile-config: 1.0.0 + graphql: 16.13.0 + lodash: 4.18.1 + pluralize: 7.0.0 + semver: 7.7.3 + tamedevil: 0.1.0 + transliteration: 2.6.1 + tslib: 2.8.1 + transitivePeerDependencies: + - supports-color + + graphile-bulk-mutations@0.3.0(@dataplan/pg@1.0.0(@dataplan/json@1.0.0(grafast@1.0.0(graphql@16.13.0)))(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0)(pg-sql2@5.0.0)(pg@8.20.0))(grafast@1.0.0(graphql@16.13.0))(graphile-build-pg@5.0.0(@dataplan/pg@1.0.0(@dataplan/json@1.0.0(grafast@1.0.0(graphql@16.13.0)))(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0)(pg-sql2@5.0.0)(pg@8.20.0))(grafast@1.0.0(graphql@16.13.0))(graphile-build@5.0.0(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0)(pg-sql2@5.0.0)(pg@8.20.0)(tamedevil@0.1.0))(graphile-build@5.0.0(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0)(pg-sql2@5.0.0)(postgraphile@5.0.0(5e9db3c46a7f7a3a3fa3294d7fa3cdc0)): + dependencies: + '@dataplan/pg': 1.0.0(@dataplan/json@1.0.0(grafast@1.0.0(graphql@16.13.0)))(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0)(pg-sql2@5.0.0)(pg@8.20.0) + grafast: 1.0.0(graphql@16.13.0) + graphile-build: 5.0.0(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0) + graphile-build-pg: 5.0.0(@dataplan/pg@1.0.0(@dataplan/json@1.0.0(grafast@1.0.0(graphql@16.13.0)))(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0)(pg-sql2@5.0.0)(pg@8.20.0))(grafast@1.0.0(graphql@16.13.0))(graphile-build@5.0.0(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0)(pg-sql2@5.0.0)(pg@8.20.0)(tamedevil@0.1.0) + graphile-config: 1.0.0 + graphql: 16.13.0 + pg-sql2: 5.0.0 + postgraphile: 5.0.0(5e9db3c46a7f7a3a3fa3294d7fa3cdc0) + + graphile-config@1.0.0: + dependencies: + '@types/interpret': 1.1.4 + '@types/node': 22.19.3 + '@types/semver': 7.7.1 + chalk: 4.1.2 + debug: 4.4.3(supports-color@5.5.0) + interpret: 3.1.1 + semver: 7.7.3 + tslib: 2.8.1 + yargs: 17.7.2 + transitivePeerDependencies: + - supports-color + + graphile-connection-filter@1.10.0(@dataplan/pg@1.0.0(@dataplan/json@1.0.0(grafast@1.0.0(graphql@16.13.0)))(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0)(pg-sql2@5.0.0)(pg@8.20.0))(graphile-build-pg@5.0.0(@dataplan/pg@1.0.0(@dataplan/json@1.0.0(grafast@1.0.0(graphql@16.13.0)))(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0)(pg-sql2@5.0.0)(pg@8.20.0))(grafast@1.0.0(graphql@16.13.0))(graphile-build@5.0.0(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0)(pg-sql2@5.0.0)(pg@8.20.0)(tamedevil@0.1.0))(graphile-build@5.0.0(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0)(pg-sql2@5.0.0)(postgraphile@5.0.0(5e9db3c46a7f7a3a3fa3294d7fa3cdc0)): + dependencies: + '@dataplan/pg': 1.0.0(@dataplan/json@1.0.0(grafast@1.0.0(graphql@16.13.0)))(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0)(pg-sql2@5.0.0)(pg@8.20.0) + graphile-build: 5.0.0(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0) + graphile-build-pg: 5.0.0(@dataplan/pg@1.0.0(@dataplan/json@1.0.0(grafast@1.0.0(graphql@16.13.0)))(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0)(pg-sql2@5.0.0)(pg@8.20.0))(grafast@1.0.0(graphql@16.13.0))(graphile-build@5.0.0(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0)(pg-sql2@5.0.0)(pg@8.20.0)(tamedevil@0.1.0) + graphile-config: 1.0.0 + graphql: 16.13.0 + pg-sql2: 5.0.0 + postgraphile: 5.0.0(5e9db3c46a7f7a3a3fa3294d7fa3cdc0) + + graphile-ltree@1.7.0(4d7b88ef320fe1668282947182b2e956): + dependencies: + '@dataplan/pg': 1.0.0(@dataplan/json@1.0.0(grafast@1.0.0(graphql@16.13.0)))(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0)(pg-sql2@5.0.0)(pg@8.20.0) + grafast: 1.0.0(graphql@16.13.0) + graphile-build: 5.0.0(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0) + graphile-build-pg: 5.0.0(@dataplan/pg@1.0.0(@dataplan/json@1.0.0(grafast@1.0.0(graphql@16.13.0)))(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0)(pg-sql2@5.0.0)(pg@8.20.0))(grafast@1.0.0(graphql@16.13.0))(graphile-build@5.0.0(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0)(pg-sql2@5.0.0)(pg@8.20.0)(tamedevil@0.1.0) + graphile-config: 1.0.0 + graphql: 16.13.0 + pg-sql2: 5.0.0 + postgraphile: 5.0.0(5e9db3c46a7f7a3a3fa3294d7fa3cdc0) + optionalDependencies: + graphile-connection-filter: 1.10.0(@dataplan/pg@1.0.0(@dataplan/json@1.0.0(grafast@1.0.0(graphql@16.13.0)))(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0)(pg-sql2@5.0.0)(pg@8.20.0))(graphile-build-pg@5.0.0(@dataplan/pg@1.0.0(@dataplan/json@1.0.0(grafast@1.0.0(graphql@16.13.0)))(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0)(pg-sql2@5.0.0)(pg@8.20.0))(grafast@1.0.0(graphql@16.13.0))(graphile-build@5.0.0(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0)(pg-sql2@5.0.0)(pg@8.20.0)(tamedevil@0.1.0))(graphile-build@5.0.0(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0)(pg-sql2@5.0.0)(postgraphile@5.0.0(5e9db3c46a7f7a3a3fa3294d7fa3cdc0)) + + graphile-pg-aggregates@1.3.0(4d7b88ef320fe1668282947182b2e956): + dependencies: + '@dataplan/pg': 1.0.0(@dataplan/json@1.0.0(grafast@1.0.0(graphql@16.13.0)))(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0)(pg-sql2@5.0.0)(pg@8.20.0) + grafast: 1.0.0(graphql@16.13.0) + graphile-build: 5.0.0(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0) + graphile-build-pg: 5.0.0(@dataplan/pg@1.0.0(@dataplan/json@1.0.0(grafast@1.0.0(graphql@16.13.0)))(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0)(pg-sql2@5.0.0)(pg@8.20.0))(grafast@1.0.0(graphql@16.13.0))(graphile-build@5.0.0(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0)(pg-sql2@5.0.0)(pg@8.20.0)(tamedevil@0.1.0) + graphile-config: 1.0.0 + graphile-connection-filter: 1.10.0(@dataplan/pg@1.0.0(@dataplan/json@1.0.0(grafast@1.0.0(graphql@16.13.0)))(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0)(pg-sql2@5.0.0)(pg@8.20.0))(graphile-build-pg@5.0.0(@dataplan/pg@1.0.0(@dataplan/json@1.0.0(grafast@1.0.0(graphql@16.13.0)))(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0)(pg-sql2@5.0.0)(pg@8.20.0))(grafast@1.0.0(graphql@16.13.0))(graphile-build@5.0.0(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0)(pg-sql2@5.0.0)(pg@8.20.0)(tamedevil@0.1.0))(graphile-build@5.0.0(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0)(pg-sql2@5.0.0)(postgraphile@5.0.0(5e9db3c46a7f7a3a3fa3294d7fa3cdc0)) + graphql: 16.13.0 + pg-sql2: 5.0.0 + postgraphile: 5.0.0(5e9db3c46a7f7a3a3fa3294d7fa3cdc0) + + graphile-postgis@2.16.0(4d7b88ef320fe1668282947182b2e956): + dependencies: + '@dataplan/pg': 1.0.0(@dataplan/json@1.0.0(grafast@1.0.0(graphql@16.13.0)))(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0)(pg-sql2@5.0.0)(pg@8.20.0) + grafast: 1.0.0(graphql@16.13.0) + graphile-build: 5.0.0(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0) + graphile-build-pg: 5.0.0(@dataplan/pg@1.0.0(@dataplan/json@1.0.0(grafast@1.0.0(graphql@16.13.0)))(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0)(pg-sql2@5.0.0)(pg@8.20.0))(grafast@1.0.0(graphql@16.13.0))(graphile-build@5.0.0(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0)(pg-sql2@5.0.0)(pg@8.20.0)(tamedevil@0.1.0) + graphile-config: 1.0.0 + graphql: 16.13.0 + pg-sql2: 5.0.0 + postgraphile: 5.0.0(5e9db3c46a7f7a3a3fa3294d7fa3cdc0) + optionalDependencies: + graphile-connection-filter: 1.10.0(@dataplan/pg@1.0.0(@dataplan/json@1.0.0(grafast@1.0.0(graphql@16.13.0)))(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0)(pg-sql2@5.0.0)(pg@8.20.0))(graphile-build-pg@5.0.0(@dataplan/pg@1.0.0(@dataplan/json@1.0.0(grafast@1.0.0(graphql@16.13.0)))(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0)(pg-sql2@5.0.0)(pg@8.20.0))(grafast@1.0.0(graphql@16.13.0))(graphile-build@5.0.0(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0)(pg-sql2@5.0.0)(pg@8.20.0)(tamedevil@0.1.0))(graphile-build@5.0.0(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0)(pg-sql2@5.0.0)(postgraphile@5.0.0(5e9db3c46a7f7a3a3fa3294d7fa3cdc0)) + + graphile-presigned-url-plugin@0.19.0(f7155834fdb82796b3b4b4b1e16b6ff3): + dependencies: + '@aws-sdk/client-s3': 3.1048.0 + '@aws-sdk/s3-request-presigner': 3.1048.0 + '@pgpmjs/logger': 2.11.0 + '@pgsql/quotes': 17.1.0 + grafast: 1.0.0(graphql@16.13.0) + graphile-build: 5.0.0(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0) + graphile-build-pg: 5.0.0(@dataplan/pg@1.0.0(@dataplan/json@1.0.0(grafast@1.0.0(graphql@16.13.0)))(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0)(pg-sql2@5.0.0)(pg@8.20.0))(grafast@1.0.0(graphql@16.13.0))(graphile-build@5.0.0(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0)(pg-sql2@5.0.0)(pg@8.20.0)(tamedevil@0.1.0) + graphile-config: 1.0.0 + graphile-utils: 5.0.0(@dataplan/pg@1.0.0(@dataplan/json@1.0.0(grafast@1.0.0(graphql@16.13.0)))(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0)(pg-sql2@5.0.0)(pg@8.20.0))(grafast@1.0.0(graphql@16.13.0))(graphile-build-pg@5.0.0(@dataplan/pg@1.0.0(@dataplan/json@1.0.0(grafast@1.0.0(graphql@16.13.0)))(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0)(pg-sql2@5.0.0)(pg@8.20.0))(grafast@1.0.0(graphql@16.13.0))(graphile-build@5.0.0(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0)(pg-sql2@5.0.0)(pg@8.20.0)(tamedevil@0.1.0))(graphile-build@5.0.0(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0)(tamedevil@0.1.0) + graphql: 16.13.0 + lru-cache: 11.3.0 + postgraphile: 5.0.0(5e9db3c46a7f7a3a3fa3294d7fa3cdc0) + + graphile-realtime-subscriptions@0.7.0(f7155834fdb82796b3b4b4b1e16b6ff3): + dependencies: + '@pgpmjs/logger': 2.11.0 + '@pgsql/quotes': 17.1.0 + grafast: 1.0.0(graphql@16.13.0) + graphile-build: 5.0.0(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0) + graphile-build-pg: 5.0.0(@dataplan/pg@1.0.0(@dataplan/json@1.0.0(grafast@1.0.0(graphql@16.13.0)))(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0)(pg-sql2@5.0.0)(pg@8.20.0))(grafast@1.0.0(graphql@16.13.0))(graphile-build@5.0.0(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0)(pg-sql2@5.0.0)(pg@8.20.0)(tamedevil@0.1.0) + graphile-config: 1.0.0 + graphile-utils: 5.0.0(@dataplan/pg@1.0.0(@dataplan/json@1.0.0(grafast@1.0.0(graphql@16.13.0)))(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0)(pg-sql2@5.0.0)(pg@8.20.0))(grafast@1.0.0(graphql@16.13.0))(graphile-build-pg@5.0.0(@dataplan/pg@1.0.0(@dataplan/json@1.0.0(grafast@1.0.0(graphql@16.13.0)))(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0)(pg-sql2@5.0.0)(pg@8.20.0))(grafast@1.0.0(graphql@16.13.0))(graphile-build@5.0.0(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0)(pg-sql2@5.0.0)(pg@8.20.0)(tamedevil@0.1.0))(graphile-build@5.0.0(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0)(tamedevil@0.1.0) + graphql: 16.13.0 + postgraphile: 5.0.0(5e9db3c46a7f7a3a3fa3294d7fa3cdc0) + + graphile-search@1.12.0(@dataplan/pg@1.0.0(@dataplan/json@1.0.0(grafast@1.0.0(graphql@16.13.0)))(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0)(pg-sql2@5.0.0)(pg@8.20.0))(graphile-build-pg@5.0.0(@dataplan/pg@1.0.0(@dataplan/json@1.0.0(grafast@1.0.0(graphql@16.13.0)))(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0)(pg-sql2@5.0.0)(pg@8.20.0))(grafast@1.0.0(graphql@16.13.0))(graphile-build@5.0.0(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0)(pg-sql2@5.0.0)(pg@8.20.0)(tamedevil@0.1.0))(graphile-build@5.0.0(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0)(pg-sql2@5.0.0)(postgraphile@5.0.0(5e9db3c46a7f7a3a3fa3294d7fa3cdc0)): + dependencies: + '@dataplan/pg': 1.0.0(@dataplan/json@1.0.0(grafast@1.0.0(graphql@16.13.0)))(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0)(pg-sql2@5.0.0)(pg@8.20.0) + graphile-build: 5.0.0(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0) + graphile-build-pg: 5.0.0(@dataplan/pg@1.0.0(@dataplan/json@1.0.0(grafast@1.0.0(graphql@16.13.0)))(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0)(pg-sql2@5.0.0)(pg@8.20.0))(grafast@1.0.0(graphql@16.13.0))(graphile-build@5.0.0(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0)(pg-sql2@5.0.0)(pg@8.20.0)(tamedevil@0.1.0) + graphile-config: 1.0.0 + graphql: 16.13.0 + pg-sql2: 5.0.0 + postgraphile: 5.0.0(5e9db3c46a7f7a3a3fa3294d7fa3cdc0) + + graphile-settings@5.2.0(@types/node@22.19.3)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(use-sync-external-store@1.6.0(react@16.14.0))(ws@8.20.1): + dependencies: + '@aws-sdk/client-s3': 3.1048.0 + '@constructive-io/bucket-provisioner': 0.11.0 + '@constructive-io/graphql-env': 3.11.0 + '@constructive-io/graphql-types': 3.10.0 + '@constructive-io/s3-streamer': 2.24.0 + '@constructive-io/s3-utils': 2.17.0 + '@constructive-io/upload-names': 2.16.0 + '@dataplan/json': 1.0.0(grafast@1.0.0(graphql@16.13.0)) + '@dataplan/pg': 1.0.0(@dataplan/json@1.0.0(grafast@1.0.0(graphql@16.13.0)))(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0)(pg-sql2@5.0.0)(pg@8.20.0) + '@graphile-contrib/pg-many-to-many': 2.0.0-rc.2 + '@pgpmjs/logger': 2.11.0 + '@pgpmjs/types': 2.27.0 + '@pgsql/quotes': 17.1.0 + cors: 2.8.6 + express: 5.2.1 + grafast: 1.0.0(graphql@16.13.0) + grafserv: 1.0.0(@types/node@22.19.3)(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(use-sync-external-store@1.6.0(react@16.14.0))(ws@8.20.1) + graphile-bucket-provisioner-plugin: 0.11.0(f7155834fdb82796b3b4b4b1e16b6ff3) + graphile-build: 5.0.0(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0) + graphile-build-pg: 5.0.0(@dataplan/pg@1.0.0(@dataplan/json@1.0.0(grafast@1.0.0(graphql@16.13.0)))(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0)(pg-sql2@5.0.0)(pg@8.20.0))(grafast@1.0.0(graphql@16.13.0))(graphile-build@5.0.0(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0)(pg-sql2@5.0.0)(pg@8.20.0)(tamedevil@0.1.0) + graphile-bulk-mutations: 0.3.0(@dataplan/pg@1.0.0(@dataplan/json@1.0.0(grafast@1.0.0(graphql@16.13.0)))(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0)(pg-sql2@5.0.0)(pg@8.20.0))(grafast@1.0.0(graphql@16.13.0))(graphile-build-pg@5.0.0(@dataplan/pg@1.0.0(@dataplan/json@1.0.0(grafast@1.0.0(graphql@16.13.0)))(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0)(pg-sql2@5.0.0)(pg@8.20.0))(grafast@1.0.0(graphql@16.13.0))(graphile-build@5.0.0(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0)(pg-sql2@5.0.0)(pg@8.20.0)(tamedevil@0.1.0))(graphile-build@5.0.0(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0)(pg-sql2@5.0.0)(postgraphile@5.0.0(5e9db3c46a7f7a3a3fa3294d7fa3cdc0)) + graphile-config: 1.0.0 + graphile-connection-filter: 1.10.0(@dataplan/pg@1.0.0(@dataplan/json@1.0.0(grafast@1.0.0(graphql@16.13.0)))(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0)(pg-sql2@5.0.0)(pg@8.20.0))(graphile-build-pg@5.0.0(@dataplan/pg@1.0.0(@dataplan/json@1.0.0(grafast@1.0.0(graphql@16.13.0)))(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0)(pg-sql2@5.0.0)(pg@8.20.0))(grafast@1.0.0(graphql@16.13.0))(graphile-build@5.0.0(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0)(pg-sql2@5.0.0)(pg@8.20.0)(tamedevil@0.1.0))(graphile-build@5.0.0(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0)(pg-sql2@5.0.0)(postgraphile@5.0.0(5e9db3c46a7f7a3a3fa3294d7fa3cdc0)) + graphile-ltree: 1.7.0(4d7b88ef320fe1668282947182b2e956) + graphile-pg-aggregates: 1.3.0(4d7b88ef320fe1668282947182b2e956) + graphile-postgis: 2.16.0(4d7b88ef320fe1668282947182b2e956) + graphile-presigned-url-plugin: 0.19.0(f7155834fdb82796b3b4b4b1e16b6ff3) + graphile-realtime-subscriptions: 0.7.0(f7155834fdb82796b3b4b4b1e16b6ff3) + graphile-search: 1.12.0(@dataplan/pg@1.0.0(@dataplan/json@1.0.0(grafast@1.0.0(graphql@16.13.0)))(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0)(pg-sql2@5.0.0)(pg@8.20.0))(graphile-build-pg@5.0.0(@dataplan/pg@1.0.0(@dataplan/json@1.0.0(grafast@1.0.0(graphql@16.13.0)))(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0)(pg-sql2@5.0.0)(pg@8.20.0))(grafast@1.0.0(graphql@16.13.0))(graphile-build@5.0.0(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0)(pg-sql2@5.0.0)(pg@8.20.0)(tamedevil@0.1.0))(graphile-build@5.0.0(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0)(pg-sql2@5.0.0)(postgraphile@5.0.0(5e9db3c46a7f7a3a3fa3294d7fa3cdc0)) + graphile-sql-expression-validator: 2.13.0(grafast@1.0.0(graphql@16.13.0))(graphile-build-pg@5.0.0(@dataplan/pg@1.0.0(@dataplan/json@1.0.0(grafast@1.0.0(graphql@16.13.0)))(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0)(pg-sql2@5.0.0)(pg@8.20.0))(grafast@1.0.0(graphql@16.13.0))(graphile-build@5.0.0(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0)(pg-sql2@5.0.0)(pg@8.20.0)(tamedevil@0.1.0))(graphile-build@5.0.0(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0) + graphile-upload-plugin: 2.11.0(graphile-build-pg@5.0.0(@dataplan/pg@1.0.0(@dataplan/json@1.0.0(grafast@1.0.0(graphql@16.13.0)))(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0)(pg-sql2@5.0.0)(pg@8.20.0))(grafast@1.0.0(graphql@16.13.0))(graphile-build@5.0.0(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0)(pg-sql2@5.0.0)(pg@8.20.0)(tamedevil@0.1.0))(graphile-build@5.0.0(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0)(postgraphile@5.0.0(5e9db3c46a7f7a3a3fa3294d7fa3cdc0)) + graphile-utils: 5.0.0(@dataplan/pg@1.0.0(@dataplan/json@1.0.0(grafast@1.0.0(graphql@16.13.0)))(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0)(pg-sql2@5.0.0)(pg@8.20.0))(grafast@1.0.0(graphql@16.13.0))(graphile-build-pg@5.0.0(@dataplan/pg@1.0.0(@dataplan/json@1.0.0(grafast@1.0.0(graphql@16.13.0)))(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0)(pg-sql2@5.0.0)(pg@8.20.0))(grafast@1.0.0(graphql@16.13.0))(graphile-build@5.0.0(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0)(pg-sql2@5.0.0)(pg@8.20.0)(tamedevil@0.1.0))(graphile-build@5.0.0(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0)(tamedevil@0.1.0) + graphql: 16.13.0 + inflekt: 0.7.1 + lru-cache: 11.3.0 + pg: 8.20.0 + pg-query-context: 2.15.0 + pg-sql2: 5.0.0 + postgraphile: 5.0.0(5e9db3c46a7f7a3a3fa3294d7fa3cdc0) + request-ip: 3.3.0 + tamedevil: 0.1.0 + transitivePeerDependencies: + - '@envelop/core' + - '@fastify/websocket' + - '@types/node' + - '@types/react' + - '@types/react-dom' + - '@whatwg-node/server' + - bufferutil + - crossws + - h3 + - hono + - immer + - pg-native + - react + - react-dom + - supports-color + - use-sync-external-store + - utf-8-validate + - ws + + graphile-sql-expression-validator@2.13.0(grafast@1.0.0(graphql@16.13.0))(graphile-build-pg@5.0.0(@dataplan/pg@1.0.0(@dataplan/json@1.0.0(grafast@1.0.0(graphql@16.13.0)))(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0)(pg-sql2@5.0.0)(pg@8.20.0))(grafast@1.0.0(graphql@16.13.0))(graphile-build@5.0.0(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0)(pg-sql2@5.0.0)(pg@8.20.0)(tamedevil@0.1.0))(graphile-build@5.0.0(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0): + dependencies: + grafast: 1.0.0(graphql@16.13.0) + graphile-build: 5.0.0(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0) + graphile-build-pg: 5.0.0(@dataplan/pg@1.0.0(@dataplan/json@1.0.0(grafast@1.0.0(graphql@16.13.0)))(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0)(pg-sql2@5.0.0)(pg@8.20.0))(grafast@1.0.0(graphql@16.13.0))(graphile-build@5.0.0(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0)(pg-sql2@5.0.0)(pg@8.20.0)(tamedevil@0.1.0) + graphile-config: 1.0.0 + graphql: 16.13.0 + pgsql-deparser: 17.18.3 + pgsql-parser: 17.9.15 + + graphile-upload-plugin@2.11.0(graphile-build-pg@5.0.0(@dataplan/pg@1.0.0(@dataplan/json@1.0.0(grafast@1.0.0(graphql@16.13.0)))(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0)(pg-sql2@5.0.0)(pg@8.20.0))(grafast@1.0.0(graphql@16.13.0))(graphile-build@5.0.0(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0)(pg-sql2@5.0.0)(pg@8.20.0)(tamedevil@0.1.0))(graphile-build@5.0.0(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0)(postgraphile@5.0.0(5e9db3c46a7f7a3a3fa3294d7fa3cdc0)): + dependencies: + graphile-build: 5.0.0(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0) + graphile-build-pg: 5.0.0(@dataplan/pg@1.0.0(@dataplan/json@1.0.0(grafast@1.0.0(graphql@16.13.0)))(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0)(pg-sql2@5.0.0)(pg@8.20.0))(grafast@1.0.0(graphql@16.13.0))(graphile-build@5.0.0(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0)(pg-sql2@5.0.0)(pg@8.20.0)(tamedevil@0.1.0) + graphile-config: 1.0.0 + graphql: 16.13.0 + postgraphile: 5.0.0(5e9db3c46a7f7a3a3fa3294d7fa3cdc0) + + graphile-utils@5.0.0(@dataplan/pg@1.0.0(@dataplan/json@1.0.0(grafast@1.0.0(graphql@16.13.0)))(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0)(pg-sql2@5.0.0)(pg@8.20.0))(grafast@1.0.0(graphql@16.13.0))(graphile-build-pg@5.0.0(@dataplan/pg@1.0.0(@dataplan/json@1.0.0(grafast@1.0.0(graphql@16.13.0)))(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0)(pg-sql2@5.0.0)(pg@8.20.0))(grafast@1.0.0(graphql@16.13.0))(graphile-build@5.0.0(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0)(pg-sql2@5.0.0)(pg@8.20.0)(tamedevil@0.1.0))(graphile-build@5.0.0(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0)(tamedevil@0.1.0): + dependencies: + '@dataplan/pg': 1.0.0(@dataplan/json@1.0.0(grafast@1.0.0(graphql@16.13.0)))(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0)(pg-sql2@5.0.0)(pg@8.20.0) + debug: 4.4.3(supports-color@5.5.0) + grafast: 1.0.0(graphql@16.13.0) + graphile-build: 5.0.0(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0) + graphile-config: 1.0.0 + graphql: 16.13.0 + json5: 2.2.3 + tamedevil: 0.1.0 + tslib: 2.8.1 + optionalDependencies: + graphile-build-pg: 5.0.0(@dataplan/pg@1.0.0(@dataplan/json@1.0.0(grafast@1.0.0(graphql@16.13.0)))(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0)(pg-sql2@5.0.0)(pg@8.20.0))(grafast@1.0.0(graphql@16.13.0))(graphile-build@5.0.0(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0)(pg-sql2@5.0.0)(pg@8.20.0)(tamedevil@0.1.0) + transitivePeerDependencies: + - supports-color + + graphile-utils@5.0.1(@dataplan/pg@1.0.0(@dataplan/json@1.0.0(grafast@1.0.0(graphql@16.13.0)))(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0)(pg-sql2@5.0.0)(pg@8.20.0))(grafast@1.0.0(graphql@16.13.0))(graphile-build-pg@5.0.0(@dataplan/pg@1.0.0(@dataplan/json@1.0.0(grafast@1.0.0(graphql@16.13.0)))(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0)(pg-sql2@5.0.0)(pg@8.20.0))(grafast@1.0.0(graphql@16.13.0))(graphile-build@5.0.0(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0)(pg-sql2@5.0.0)(pg@8.20.0)(tamedevil@0.1.0))(graphile-build@5.0.0(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0)(tamedevil@0.1.0): + dependencies: + '@dataplan/pg': 1.0.0(@dataplan/json@1.0.0(grafast@1.0.0(graphql@16.13.0)))(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0)(pg-sql2@5.0.0)(pg@8.20.0) + debug: 4.4.3(supports-color@5.5.0) + grafast: 1.0.0(graphql@16.13.0) + graphile-build: 5.0.0(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0) + graphile-config: 1.0.0 + graphql: 16.13.0 + json5: 2.2.3 + tamedevil: 0.1.0 + tslib: 2.8.1 + optionalDependencies: + graphile-build-pg: 5.0.0(@dataplan/pg@1.0.0(@dataplan/json@1.0.0(grafast@1.0.0(graphql@16.13.0)))(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0)(pg-sql2@5.0.0)(pg@8.20.0))(grafast@1.0.0(graphql@16.13.0))(graphile-build@5.0.0(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0)(pg-sql2@5.0.0)(pg@8.20.0)(tamedevil@0.1.0) + transitivePeerDependencies: + - supports-color + + graphiql@5.2.3(@emotion/is-prop-valid@1.4.0)(@types/node@22.19.3)(graphql-ws@6.0.8(graphql@16.13.0)(ws@8.20.1))(graphql@16.13.0)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(use-sync-external-store@1.6.0(react@16.14.0)): + dependencies: + '@graphiql/plugin-doc-explorer': 0.4.2(@graphiql/react@0.37.5(@emotion/is-prop-valid@1.4.0)(@types/node@22.19.3)(graphql-ws@6.0.8(graphql@16.13.0)(ws@8.20.1))(graphql@16.13.0)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(use-sync-external-store@1.6.0(react@16.14.0)))(graphql@16.13.0)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(use-sync-external-store@1.6.0(react@16.14.0)) + '@graphiql/plugin-history': 0.4.2(@graphiql/react@0.37.5(@emotion/is-prop-valid@1.4.0)(@types/node@22.19.3)(graphql-ws@6.0.8(graphql@16.13.0)(ws@8.20.1))(graphql@16.13.0)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(use-sync-external-store@1.6.0(react@16.14.0)))(@types/node@22.19.3)(graphql-ws@6.0.8(graphql@16.13.0)(ws@8.20.1))(graphql@16.13.0)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(use-sync-external-store@1.6.0(react@16.14.0)) + '@graphiql/react': 0.37.5(@emotion/is-prop-valid@1.4.0)(@types/node@22.19.3)(graphql-ws@6.0.8(graphql@16.13.0)(ws@8.20.1))(graphql@16.13.0)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(use-sync-external-store@1.6.0(react@16.14.0)) + graphql: 16.13.0 + react: 16.14.0 + react-compiler-runtime: 19.1.0-rc.1(react@16.14.0) + react-dom: 16.14.0(react@16.14.0) + transitivePeerDependencies: + - '@emotion/is-prop-valid' + - '@types/node' + - '@types/react' + - '@types/react-dom' + - graphql-ws + - immer + - use-sync-external-store + + graphql-language-service@5.5.1(graphql@16.13.0): dependencies: - '@graphql-typed-document-node/core': 3.2.0(graphql@16.12.0) - graphql: 16.12.0 + debounce-promise: 3.1.2 + graphql: 16.13.0 + nullthrows: 1.1.1 + vscode-languageserver-types: 3.17.5 - graphql-tag@2.12.6(graphql@16.12.0): + graphql-request@7.4.0(graphql@16.13.0): dependencies: - graphql: 16.12.0 + '@graphql-typed-document-node/core': 3.2.0(graphql@16.13.0) + graphql: 16.13.0 + + graphql-request@7.4.0(graphql@16.14.0): + dependencies: + '@graphql-typed-document-node/core': 3.2.0(graphql@16.14.0) + graphql: 16.14.0 + + graphql-tag@2.12.6(graphql@16.14.0): + dependencies: + graphql: 16.14.0 tslib: 2.8.1 - graphql@16.12.0: {} + graphql-ws@6.0.8(graphql@16.13.0)(ws@8.20.1): + dependencies: + graphql: 16.13.0 + optionalDependencies: + ws: 8.20.1 + + graphql@16.13.0: {} + + graphql@16.14.0: {} handlebars@4.7.8: dependencies: @@ -6047,6 +8810,14 @@ snapshots: statuses: 2.0.2 toidentifier: 1.0.1 + http-proxy@1.18.1(debug@4.4.3): + dependencies: + eventemitter3: 4.0.7 + follow-redirects: 1.15.11(debug@4.4.3) + requires-port: 1.0.0 + transitivePeerDependencies: + - debug + https-proxy-agent@5.0.1: dependencies: agent-base: 6.0.2 @@ -6064,6 +8835,8 @@ snapshots: dependencies: safer-buffer: 2.1.2 + ieee754@1.2.1: {} + ignore@5.3.2: {} ignore@7.0.5: {} @@ -6080,6 +8853,13 @@ snapshots: imurmurhash@0.1.4: {} + inflection@3.0.2: {} + + inflekt@0.7.1: + dependencies: + inflection: 3.0.2 + komoji: 0.9.0 + inflight@1.0.6: dependencies: once: 1.4.0 @@ -6096,6 +8876,8 @@ snapshots: minimist: 1.2.8 yanse: 0.2.1 + interpret@3.1.1: {} + ipaddr.js@1.9.1: {} is-arrayish@0.2.1: {} @@ -6120,12 +8902,20 @@ snapshots: is-number@7.0.0: {} + is-plain-object@2.0.4: + dependencies: + isobject: 3.0.1 + + is-primitive@3.0.1: {} + is-promise@4.0.0: {} is-stream@2.0.1: {} isexe@2.0.0: {} + isobject@3.0.1: {} + istanbul-lib-coverage@3.2.2: {} istanbul-lib-instrument@5.2.1: @@ -6175,6 +8965,8 @@ snapshots: html-escaper: 2.0.2 istanbul-lib-report: 3.0.1 + iterall@1.3.0: {} + jackspeak@3.4.3: dependencies: '@isaacs/cliui': 8.0.2 @@ -6833,10 +9625,14 @@ snapshots: json-schema-traverse@0.4.1: {} + json-schema-traverse@1.0.0: {} + json-stable-stringify-without-jsonify@1.0.1: {} json5@2.2.3: {} + jsonc-parser@3.3.1: {} + jsonwebtoken@9.0.3: dependencies: jws: 4.0.1 @@ -6877,6 +9673,8 @@ snapshots: kleur@3.0.3: {} + komoji@0.9.0: {} + leven@3.1.0: {} levn@0.4.1: @@ -6884,8 +9682,16 @@ snapshots: prelude-ls: 1.2.1 type-check: 0.4.0 + libpg-query@17.7.3: + dependencies: + '@pgsql/types': 17.6.2 + lines-and-columns@1.2.4: {} + linkify-it@5.0.0: + dependencies: + uc.micro: 2.1.0 + locate-path@5.0.0: dependencies: p-locate: 4.1.0 @@ -6914,6 +9720,8 @@ snapshots: lodash@4.17.21: {} + lodash@4.18.1: {} + long-timeout@0.1.1: {} loose-envify@1.4.0: @@ -6955,8 +9763,19 @@ snapshots: dependencies: tmpl: 1.0.5 + markdown-it@14.1.1: + dependencies: + argparse: 2.0.1 + entities: 4.5.0 + linkify-it: 5.0.0 + mdurl: 2.0.0 + punycode.js: 2.3.1 + uc.micro: 2.1.0 + math-intrinsics@1.1.0: {} + mdurl@2.0.0: {} + media-typer@1.1.0: {} mensch@0.3.4: {} @@ -6965,11 +9784,17 @@ snapshots: merge-stream@2.0.0: {} + meros@1.3.2(@types/node@22.19.3): + optionalDependencies: + '@types/node': 22.19.3 + micromatch@4.0.8: dependencies: braces: 3.0.3 picomatch: 2.3.1 + mime-bytes@0.17.0: {} + mime-db@1.52.0: {} mime-db@1.54.0: {} @@ -7299,6 +10124,22 @@ snapshots: transitivePeerDependencies: - encoding + monaco-editor@0.52.2: {} + + monaco-graphql@1.8.0(graphql@16.13.0)(monaco-editor@0.52.2)(prettier@3.7.4): + dependencies: + graphql: 16.13.0 + graphql-language-service: 5.5.1(graphql@16.13.0) + monaco-editor: 0.52.2 + picomatch-browser: 2.2.6 + prettier: 3.7.4 + + motion-dom@12.38.0: + dependencies: + motion-utils: 12.36.0 + + motion-utils@12.36.0: {} + ms@2.1.3: {} napi-postinstall@0.3.4: {} @@ -7347,6 +10188,8 @@ snapshots: dependencies: boolbase: 1.0.0 + nullthrows@1.1.1: {} + object-assign@4.1.1: {} object-inspect@1.13.4: {} @@ -7428,6 +10271,8 @@ snapshots: path-exists@4.0.0: {} + path-expression-matcher@1.5.0: {} + path-is-absolute@1.0.1: {} path-key@3.1.1: {} @@ -7461,18 +10306,33 @@ snapshots: pg-connection-string@2.12.0: {} + pg-env@1.14.0: {} + pg-env@1.8.2: {} pg-int8@1.0.1: {} + pg-introspection@1.0.1: + dependencies: + tslib: 2.8.1 + pg-pool@3.13.0(pg@8.20.0): dependencies: pg: 8.20.0 - pg-protocol@1.11.0: {} - pg-protocol@1.13.0: {} + pg-query-context@2.15.0: + dependencies: + pg: 8.20.0 + transitivePeerDependencies: + - pg-native + + pg-sql2@5.0.0: + dependencies: + '@graphile/lru': 5.0.0 + tslib: 2.8.1 + pg-types@2.2.0: dependencies: pg-int8: 1.0.1 @@ -7495,8 +10355,21 @@ snapshots: dependencies: split2: 4.2.0 + pgsql-deparser@17.18.3: + dependencies: + '@pgsql/quotes': 17.1.0 + '@pgsql/types': 17.6.2 + + pgsql-parser@17.9.15: + dependencies: + '@pgsql/types': 17.6.2 + libpg-query: 17.7.3 + pgsql-deparser: 17.18.3 + picocolors@1.1.1: {} + picomatch-browser@2.2.6: {} + picomatch@2.3.1: {} picomatch@4.0.3: {} @@ -7507,10 +10380,41 @@ snapshots: dependencies: find-up: 4.1.0 + pluralize@7.0.0: {} + postcss-value-parser@4.2.0: {} + postgraphile@5.0.0(5e9db3c46a7f7a3a3fa3294d7fa3cdc0): + dependencies: + '@dataplan/json': 1.0.0(grafast@1.0.0(graphql@16.13.0)) + '@dataplan/pg': 1.0.0(@dataplan/json@1.0.0(grafast@1.0.0(graphql@16.13.0)))(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0)(pg-sql2@5.0.0)(pg@8.20.0) + '@graphile/lru': 5.0.0 + '@types/node': 22.19.3 + '@types/pg': 8.16.0 + debug: 4.4.3(supports-color@5.5.0) + grafast: 1.0.0(graphql@16.13.0) + grafserv: 1.0.0(@types/node@22.19.3)(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(use-sync-external-store@1.6.0(react@16.14.0))(ws@8.20.1) + graphile-build: 5.0.0(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0) + graphile-build-pg: 5.0.0(@dataplan/pg@1.0.0(@dataplan/json@1.0.0(grafast@1.0.0(graphql@16.13.0)))(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0)(pg-sql2@5.0.0)(pg@8.20.0))(grafast@1.0.0(graphql@16.13.0))(graphile-build@5.0.0(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0)(pg-sql2@5.0.0)(pg@8.20.0)(tamedevil@0.1.0) + graphile-config: 1.0.0 + graphile-utils: 5.0.1(@dataplan/pg@1.0.0(@dataplan/json@1.0.0(grafast@1.0.0(graphql@16.13.0)))(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0)(pg-sql2@5.0.0)(pg@8.20.0))(grafast@1.0.0(graphql@16.13.0))(graphile-build-pg@5.0.0(@dataplan/pg@1.0.0(@dataplan/json@1.0.0(grafast@1.0.0(graphql@16.13.0)))(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0)(pg-sql2@5.0.0)(pg@8.20.0))(grafast@1.0.0(graphql@16.13.0))(graphile-build@5.0.0(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0)(pg-sql2@5.0.0)(pg@8.20.0)(tamedevil@0.1.0))(graphile-build@5.0.0(grafast@1.0.0(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0))(graphile-config@1.0.0)(graphql@16.13.0)(tamedevil@0.1.0) + graphql: 16.13.0 + iterall: 1.3.0 + jsonwebtoken: 9.0.3 + pg: 8.20.0 + pg-sql2: 5.0.0 + tamedevil: 0.1.0 + tslib: 2.8.1 + ws: 8.20.1 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + postgres-array@2.0.0: {} + postgres-array@3.0.4: {} + postgres-bytea@1.0.1: {} postgres-date@1.0.7: {} @@ -7519,6 +10423,8 @@ snapshots: dependencies: xtend: 4.0.2 + postgres-range@1.1.4: {} + prelude-ls@1.2.1: {} prettier@3.7.4: {} @@ -7555,6 +10461,8 @@ snapshots: proxy-from-env@1.1.0: {} + punycode.js@2.3.1: {} + punycode@2.3.1: {} pure-rand@6.1.0: {} @@ -7574,6 +10482,24 @@ snapshots: iconv-lite: 0.7.1 unpipe: 1.0.0 + react-aria@3.48.0(react-dom@16.14.0(react@16.14.0))(react@16.14.0): + dependencies: + '@internationalized/date': 3.12.1 + '@internationalized/number': 3.6.6 + '@internationalized/string': 3.2.8 + '@react-types/shared': 3.34.0(react@16.14.0) + '@swc/helpers': 0.5.21 + aria-hidden: 1.2.6 + clsx: 2.1.1 + react: 16.14.0 + react-dom: 16.14.0(react@16.14.0) + react-stately: 3.46.0(react@16.14.0) + use-sync-external-store: 1.6.0(react@16.14.0) + + react-compiler-runtime@19.1.0-rc.1(react@16.14.0): + dependencies: + react: 16.14.0 + react-dom@16.14.0(react@16.14.0): dependencies: loose-envify: 1.4.0 @@ -7586,6 +10512,37 @@ snapshots: react-is@18.3.1: {} + react-remove-scroll-bar@2.3.8(react@16.14.0): + dependencies: + react: 16.14.0 + react-style-singleton: 2.2.3(react@16.14.0) + tslib: 2.8.1 + + react-remove-scroll@2.7.2(react@16.14.0): + dependencies: + react: 16.14.0 + react-remove-scroll-bar: 2.3.8(react@16.14.0) + react-style-singleton: 2.2.3(react@16.14.0) + tslib: 2.8.1 + use-callback-ref: 1.3.3(react@16.14.0) + use-sidecar: 1.1.3(react@16.14.0) + + react-stately@3.46.0(react@16.14.0): + dependencies: + '@internationalized/date': 3.12.1 + '@internationalized/number': 3.6.6 + '@internationalized/string': 3.2.8 + '@react-types/shared': 3.34.0(react@16.14.0) + '@swc/helpers': 0.5.21 + react: 16.14.0 + use-sync-external-store: 1.6.0(react@16.14.0) + + react-style-singleton@2.2.3(react@16.14.0): + dependencies: + get-nonce: 1.0.1 + react: 16.14.0 + tslib: 2.8.1 + react@16.14.0: dependencies: loose-envify: 1.4.0 @@ -7606,10 +10563,16 @@ snapshots: relateurl@0.2.7: {} + request-ip@3.3.0: {} + require-directory@2.1.1: {} + require-from-string@2.0.2: {} + require-main-filename@2.0.0: {} + requires-port@1.0.0: {} + resolve-cwd@3.0.0: dependencies: resolve-from: 5.0.0 @@ -7645,6 +10608,44 @@ snapshots: transitivePeerDependencies: - supports-color + ruru-types@2.0.0(@emotion/is-prop-valid@1.4.0)(@types/node@22.19.3)(graphql-ws@6.0.8(graphql@16.13.0)(ws@8.20.1))(graphql@16.13.0)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(use-sync-external-store@1.6.0(react@16.14.0)): + dependencies: + '@graphiql/toolkit': 0.11.3(@types/node@22.19.3)(graphql-ws@6.0.8(graphql@16.13.0)(ws@8.20.1))(graphql@16.13.0) + graphiql: 5.2.3(@emotion/is-prop-valid@1.4.0)(@types/node@22.19.3)(graphql-ws@6.0.8(graphql@16.13.0)(ws@8.20.1))(graphql@16.13.0)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(use-sync-external-store@1.6.0(react@16.14.0)) + graphql: 16.13.0 + optionalDependencies: + react: 16.14.0 + react-dom: 16.14.0(react@16.14.0) + transitivePeerDependencies: + - '@emotion/is-prop-valid' + - '@types/node' + - '@types/react' + - '@types/react-dom' + - graphql-ws + - immer + - use-sync-external-store + + ruru@2.0.0(@types/node@22.19.3)(debug@4.4.3)(graphile-config@1.0.0)(graphql-ws@6.0.8(graphql@16.13.0)(ws@8.20.1))(graphql@16.13.0)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(use-sync-external-store@1.6.0(react@16.14.0)): + dependencies: + '@emotion/is-prop-valid': 1.4.0 + graphile-config: 1.0.0 + graphql: 16.13.0 + http-proxy: 1.18.1(debug@4.4.3) + ruru-types: 2.0.0(@emotion/is-prop-valid@1.4.0)(@types/node@22.19.3)(graphql-ws@6.0.8(graphql@16.13.0)(ws@8.20.1))(graphql@16.13.0)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(use-sync-external-store@1.6.0(react@16.14.0)) + tslib: 2.8.1 + yargs: 17.7.2 + optionalDependencies: + react: 16.14.0 + react-dom: 16.14.0(react@16.14.0) + transitivePeerDependencies: + - '@types/node' + - '@types/react' + - '@types/react-dom' + - debug + - graphql-ws + - immer + - use-sync-external-store + safe-buffer@5.2.1: {} safer-buffer@2.1.2: {} @@ -7687,6 +10688,11 @@ snapshots: set-blocking@2.0.0: {} + set-value@4.1.0: + dependencies: + is-plain-object: 2.0.4 + is-primitive: 3.0.1 + setprototypeof@1.2.0: {} shallowequal@1.1.0: {} @@ -7760,6 +10766,11 @@ snapshots: statuses@2.0.2: {} + stream-browserify@3.0.0: + dependencies: + inherits: 2.0.4 + readable-stream: 3.6.2 + string-length@4.0.2: dependencies: char-regex: 1.0.2 @@ -7795,6 +10806,8 @@ snapshots: strip-json-comments@3.1.1: {} + strnum@2.3.0: {} + styled-components@5.3.11(@babel/core@7.28.5)(react-dom@16.14.0(react@16.14.0))(react-is@18.3.1)(react@16.14.0): dependencies: '@babel/helper-module-imports': 7.27.1(supports-color@5.5.0) @@ -7847,6 +10860,13 @@ snapshots: dependencies: '@pkgr/core': 0.2.9 + tabbable@6.4.0: {} + + tamedevil@0.1.0: + dependencies: + '@graphile/lru': 5.0.0 + tslib: 2.8.1 + test-exclude@6.0.0: dependencies: '@istanbuljs/schema': 0.1.3 @@ -7868,6 +10888,8 @@ snapshots: tr46@0.0.3: {} + transliteration@2.6.1: {} + ts-api-utils@2.4.0(typescript@5.9.3): dependencies: typescript: 5.9.3 @@ -7963,6 +10985,8 @@ snapshots: typescript@5.9.3: {} + uc.micro@2.1.0: {} + uglify-js@3.4.10: dependencies: commander: 2.19.0 @@ -8012,8 +11036,25 @@ snapshots: url-join@4.0.1: {} + use-callback-ref@1.3.3(react@16.14.0): + dependencies: + react: 16.14.0 + tslib: 2.8.1 + + use-sidecar@1.1.3(react@16.14.0): + dependencies: + detect-node-es: 1.1.0 + react: 16.14.0 + tslib: 2.8.1 + + use-sync-external-store@1.6.0(react@16.14.0): + dependencies: + react: 16.14.0 + util-deprecate@1.0.2: {} + uuid-hash@2.16.0: {} + v8-to-istanbul@9.3.0: dependencies: '@jridgewell/trace-mapping': 0.3.31 @@ -8024,6 +11065,8 @@ snapshots: vary@1.1.2: {} + vscode-languageserver-types@3.17.5: {} + walker@1.0.8: dependencies: makeerror: 1.0.12 @@ -8096,6 +11139,10 @@ snapshots: imurmurhash: 0.1.4 signal-exit: 4.1.0 + ws@8.20.1: {} + + xml-naming@0.1.0: {} + xmlbuilder@13.0.2: {} xtend@4.0.2: {} @@ -8142,3 +11189,8 @@ snapshots: yargs-parser: 21.1.1 yocto-queue@0.1.0: {} + + zustand@5.0.13(react@16.14.0)(use-sync-external-store@1.6.0(react@16.14.0)): + optionalDependencies: + react: 16.14.0 + use-sync-external-store: 1.6.0(react@16.14.0) diff --git a/skaffold.yaml b/skaffold.yaml index 61fb7f1..220cf6e 100644 --- a/skaffold.yaml +++ b/skaffold.yaml @@ -89,6 +89,50 @@ profiles: resourceName: python-example namespace: constructive-functions port: 80 + localPort: 8086 + - resourceType: service + resourceName: knative-job-service + namespace: constructive-functions + port: 8080 + localPort: 8080 + - resourceType: service + resourceName: postgres + namespace: constructive-functions + port: 5432 + localPort: 5432 + - resourceType: service + resourceName: constructive-server + namespace: constructive-functions + port: 3000 + localPort: 3002 + - name: rag-embedding + build: + artifacts: + - image: constructive-functions + context: . + docker: + dockerfile: Dockerfile.dev + sync: + manual: + - src: 'functions/**/*.ts' + dest: /usr/src/app + local: + push: false + manifests: + kustomize: + paths: + - k8s/overlays/local-simple + rawYaml: + - generated/rag-embedding/k8s/local-deployment.yaml + - generated/rag-embedding/k8s/functions-configmap.yaml + deploy: + kubectl: + defaultNamespace: constructive-functions + portForward: + - resourceType: service + resourceName: rag-embedding + namespace: constructive-functions + port: 80 localPort: 8085 - resourceType: service resourceName: knative-job-service @@ -269,6 +313,7 @@ profiles: rawYaml: - generated/example/k8s/local-deployment.yaml - generated/python-example/k8s/local-deployment.yaml + - generated/rag-embedding/k8s/local-deployment.yaml - generated/send-email/k8s/local-deployment.yaml - generated/send-verification-link/k8s/local-deployment.yaml - generated/text-embedding/k8s/local-deployment.yaml @@ -286,6 +331,11 @@ profiles: resourceName: python-example namespace: constructive-functions port: 80 + localPort: 8086 + - resourceType: service + resourceName: rag-embedding + namespace: constructive-functions + port: 80 localPort: 8085 - resourceType: service resourceName: send-email @@ -346,6 +396,11 @@ profiles: resourceName: python-example namespace: constructive-functions port: 80 + localPort: 8086 + - resourceType: service + resourceName: rag-embedding + namespace: constructive-functions + port: 80 localPort: 8085 - resourceType: service resourceName: send-email diff --git a/tests/e2e/__tests__/rag-embedding.e2e.test.ts b/tests/e2e/__tests__/rag-embedding.e2e.test.ts new file mode 100644 index 0000000..459c9aa --- /dev/null +++ b/tests/e2e/__tests__/rag-embedding.e2e.test.ts @@ -0,0 +1,291 @@ +/** + * E2E: rag-embedding function + * + * This test provisions a complete test environment: + * 1. Sign in/up via SDK auth + * 2. Provision a new database via SDK + * 3. Create article table via metaschema SQL + * 4. Configure embedding_chunks (creates article_chunks table) + * 5. Insert test article + * 6. Add rag-embedding job and verify completion + * + * Run: pnpm test:e2e -- --testPathPattern=rag-embedding + */ +import { + getTestConnections, + closeConnections, + TestClient, +} from '../utils/db'; +import { addJob, waitForJobComplete, waitForJobCreated, deleteTestJobs } from '../utils/jobs'; +import { + signInOrSignUp as sdkSignInOrSignUp, + provisionDatabase as sdkProvisionDatabase, + getSchemaInfo as sdkGetSchemaInfo, + createTable as sdkCreateTable, + createField as sdkCreateField, + createPrimaryKey as sdkCreatePrimaryKey, + setupEmbeddingChunks as sdkSetupEmbeddingChunks, +} from '../utils/sdk'; + +const TEST_PREFIX = 'k8s-e2e-rag-embedding'; +const TEST_EMAIL = 'rag-test@test.com'; +const TEST_PASSWORD = 'test123456!'; + +async function createArticlesTable( + accessToken: string, + databaseId: string, + schemaId: string +): Promise { + const tableId = await sdkCreateTable(accessToken, databaseId, schemaId, 'article'); + + const idFieldId = await sdkCreateField(accessToken, tableId, 'id', 'uuid', { + isRequired: true, + defaultValue: 'uuid_generate_v4()', + }); + await sdkCreatePrimaryKey(accessToken, tableId, [idFieldId]); + + await sdkCreateField(accessToken, tableId, 'title', 'text'); + await sdkCreateField(accessToken, tableId, 'content', 'text'); + + return tableId; +} + +async function setupEmbeddingChunks( + accessToken: string, + databaseId: string, + tableId: string +): Promise { + return sdkSetupEmbeddingChunks(accessToken, databaseId, tableId, { + contentFieldName: 'content', + dimensions: 768, + chunkSize: 1000, + chunkOverlap: 200, + chunkStrategy: 'fixed', + chunkingTaskName: 'rag-embedding', + }); +} + +async function insertTestArticle( + pg: TestClient, + schemaName: string, + databaseId: string +): Promise { + const testContent = ` +Artificial Intelligence and Machine Learning + +Artificial intelligence (AI) is the simulation of human intelligence processes by machines. +Machine learning is a subset of AI that provides systems the ability to automatically learn. + +Deep Learning and Neural Networks + +Deep learning is part of a broader family of machine learning methods based on artificial neural networks. +These systems learn to perform tasks by considering examples, generally without being programmed. + `.trim(); + + const tableName = `"${schemaName}"."article"`; + + // Use session-level config (false = not transaction-local) so it persists for the INSERT + await pg.query(`SELECT set_config('jwt.claims.database_id', $1, false)`, [databaseId]); + + const result = await pg.query( + `INSERT INTO ${tableName} (title, content) + VALUES ($1, $2) + RETURNING id`, + ['Introduction to AI', testContent] + ); + + return result.rows[0].id; +} + +describe('E2E: rag-embedding', () => { + let pg: TestClient; + let databaseId: string; + let schemaName: string; + let articleId: string; + let chunksTableName: string; + let accessToken: string; + let subdomain: string; + let userId: string; + + const dbName = `rag_test_${Date.now()}`; + + beforeAll(async () => { + const connections = await getTestConnections(); + pg = connections.pg; + + console.log('[rag-embedding e2e] Authenticating via SDK...'); + const auth = await sdkSignInOrSignUp(TEST_EMAIL, TEST_PASSWORD); + accessToken = auth.accessToken; + userId = auth.userId; + subdomain = dbName.replace(/_/g, '-'); + console.log(`[rag-embedding e2e] User ID: ${userId}`); + + console.log('[rag-embedding e2e] Provisioning database via SDK...'); + const db = await sdkProvisionDatabase(accessToken, userId, dbName); + databaseId = db.databaseId; + console.log(`[rag-embedding e2e] Database ID: ${databaseId}`); + + console.log('[rag-embedding e2e] Getting schema info via SDK...'); + const schema = await sdkGetSchemaInfo(accessToken, databaseId); + schemaName = schema.schemaName; + console.log(`[rag-embedding e2e] Schema: ${schemaName}`); + + console.log('[rag-embedding e2e] Creating article table via SDK...'); + const tableId = await createArticlesTable(accessToken, databaseId, schema.schemaId); + console.log(`[rag-embedding e2e] Table ID: ${tableId}`); + + console.log('[rag-embedding e2e] Setting up embedding_chunks via SDK...'); + chunksTableName = await setupEmbeddingChunks(accessToken, databaseId, tableId); + console.log(`[rag-embedding e2e] Chunks table: ${chunksTableName}`); + + console.log('[rag-embedding e2e] Inserting test article...'); + articleId = await insertTestArticle(pg, schemaName, databaseId); + console.log(`[rag-embedding e2e] Article ID: ${articleId}`); + }, 300000); + + afterAll(async () => { + if (pg) { + await deleteTestJobs(pg, TEST_PREFIX); + // Clean up test database to prevent OOM from accumulated schema caches + if (databaseId) { + try { + await pg.query(`DELETE FROM metaschema_public.database WHERE id = $1`, [databaseId]); + console.log(`[rag-embedding e2e] Cleaned up test database: ${databaseId}`); + } catch (err) { + console.log(`[rag-embedding e2e] Failed to clean up database: ${err}`); + } + } + } + await closeConnections(); + }); + + it('should process rag-embedding job and create chunks', async () => { + const job = await addJob(pg, databaseId, 'rag-embedding', { + table: 'article', + schema: schemaName, + id: articleId, + chunks_table: chunksTableName, + chunk_size: '1000', + chunk_overlap: '200', + chunk_strategy: 'fixed', + }); + + expect(job.id).toBeDefined(); + console.log(`[rag-embedding e2e] Added job: ${job.id}`); + + const result = await waitForJobComplete(pg, job.id, { timeout: 60000 }); + console.log(`[rag-embedding e2e] Job result: ${result.status}`, result.error || ''); + + expect(result.status).toBe('completed'); + + const chunks = await pg.query( + `SELECT id, chunk_index, content, embedding + FROM "${schemaName}"."${chunksTableName}" + WHERE article_id = $1 + ORDER BY chunk_index`, + [articleId] + ); + + console.log(`[rag-embedding e2e] Chunks created: ${chunks.rows.length}`); + + expect(chunks.rows.length).toBeGreaterThan(0); + expect(chunks.rows[0].content).toBeDefined(); + expect(chunks.rows[0].embedding).toBeDefined(); + }, 90000); + + it('should process job with actor_id for updated content', async () => { + // Clear existing chunks first + await pg.query( + `DELETE FROM "${schemaName}"."${chunksTableName}" WHERE article_id = $1`, + [articleId] + ); + + // Update article content directly via SQL + const updatedContent = `Updated content for RAG testing. + +This is a test of the rag-embedding job with actor_id. +The job should process the updated content and create new chunks.`; + + await pg.query(`SELECT set_config('jwt.claims.database_id', $1, false)`, [databaseId]); + await pg.query( + `UPDATE "${schemaName}"."article" SET content = $1 WHERE id = $2`, + [updatedContent, articleId] + ); + console.log('[rag-embedding e2e] Article updated via SQL'); + + // Set user_id claim so add_job() auto-injects actor_id (like a real trigger would) + await pg.query(`SELECT set_config('jwt.claims.user_id', $1, false)`, [userId]); + + // Add job - actor_id is auto-injected by add_job() from jwt.claims.user_id + const job = await addJob(pg, databaseId, 'rag-embedding', { + table: 'article', + schema: schemaName, + id: articleId, + chunks_table: chunksTableName, + chunk_size: '1000', + chunk_overlap: '200', + chunk_strategy: 'fixed', + }); + + console.log(`[rag-embedding e2e] Added job with actor_id: ${job.id}`); + + const result = await waitForJobComplete(pg, job.id, { timeout: 60000 }); + console.log(`[rag-embedding e2e] Job result: ${result.status}`, result.error || ''); + expect(result.status).toBe('completed'); + + // Check chunks were created + const chunks = await pg.query( + `SELECT id, chunk_index, content + FROM "${schemaName}"."${chunksTableName}" + WHERE article_id = $1 + ORDER BY chunk_index`, + [articleId] + ); + + console.log(`[rag-embedding e2e] Chunks after update: ${chunks.rows.length}`); + }, 90000); + + it('should auto-trigger job on INSERT', async () => { + // Set JWT claims for trigger to call add_job() + await pg.query(`SELECT set_config('jwt.claims.database_id', $1, false)`, [databaseId]); + await pg.query(`SELECT set_config('jwt.claims.user_id', $1, false)`, [userId]); + + // Get last job ID to filter new jobs + const lastJob = await pg.oneOrNone<{ id: string }>( + `SELECT id FROM app_jobs.jobs WHERE database_id = $1 ORDER BY id DESC LIMIT 1`, + [databaseId] + ); + + // INSERT triggers article_enqueue_chunking_insert_tg + const tableName = `"${schemaName}"."article"`; + const result = await pg.query( + `INSERT INTO ${tableName} (title, content) VALUES ($1, $2) RETURNING id`, + ['Trigger Test', 'Content to test automatic trigger creates rag-embedding job.'] + ); + const newArticleId = result.rows[0].id; + console.log(`[rag-embedding e2e] Inserted article: ${newArticleId}`); + + // Wait for trigger-created job + const job = await waitForJobCreated(pg, databaseId, 'rag-embedding', { + timeout: 5000, + afterId: lastJob?.id, + }); + + expect(job).not.toBeNull(); + console.log(`[rag-embedding e2e] Trigger created job: ${job!.id}`); + expect(job!.payload.id).toBe(newArticleId); + + // Wait for completion + const complete = await waitForJobComplete(pg, job!.id, { timeout: 60000 }); + console.log(`[rag-embedding e2e] Trigger job: ${complete.status}`); + expect(complete.status).toBe('completed'); + + // Verify chunks + const chunks = await pg.query( + `SELECT id FROM "${schemaName}"."${chunksTableName}" WHERE article_id = $1`, + [newArticleId] + ); + expect(chunks.rows.length).toBeGreaterThan(0); + console.log(`[rag-embedding e2e] Trigger test chunks: ${chunks.rows.length}`); + }, 90000); +}); diff --git a/tests/e2e/utils/sdk.ts b/tests/e2e/utils/sdk.ts new file mode 100644 index 0000000..8621e4c --- /dev/null +++ b/tests/e2e/utils/sdk.ts @@ -0,0 +1,242 @@ +/** + * SDK utilities for e2e tests that require provisioning databases, + * creating tables, and other metaschema operations. + * + * Uses @constructive-io/node SDK to interact with constructive-server. + */ +import { GraphQLClient } from 'graphql-request'; + +const SERVER_URL = process.env.SERVER_URL || 'http://localhost:3002'; + +function getClient(accessToken?: string): GraphQLClient { + const headers: Record = { + 'Content-Type': 'application/json', + }; + if (accessToken) { + headers['Authorization'] = `Bearer ${accessToken}`; + } + return new GraphQLClient(`${SERVER_URL}/graphql`, { headers }); +} + +export async function signInOrSignUp( + email: string, + password: string +): Promise<{ accessToken: string; userId: string }> { + const client = getClient(); + + // Try sign in first + try { + const signInResult = await client.request<{ + authenticate: { jwtToken: string } | null; + }>( + `mutation SignIn($email: String!, $password: String!) { + authenticate(input: { email: $email, password: $password }) { + jwtToken + } + }`, + { email, password } + ); + + if (signInResult.authenticate?.jwtToken) { + const token = signInResult.authenticate.jwtToken; + const payload = JSON.parse(Buffer.from(token.split('.')[1], 'base64').toString()); + return { accessToken: token, userId: payload.user_id }; + } + } catch { + // Sign in failed, try sign up + } + + // Sign up + const signUpResult = await client.request<{ + registerUser: { jwtToken: string }; + }>( + `mutation SignUp($email: String!, $password: String!) { + registerUser(input: { email: $email, password: $password }) { + jwtToken + } + }`, + { email, password } + ); + + const token = signUpResult.registerUser.jwtToken; + const payload = JSON.parse(Buffer.from(token.split('.')[1], 'base64').toString()); + return { accessToken: token, userId: payload.user_id }; +} + +export async function provisionDatabase( + accessToken: string, + userId: string, + name: string +): Promise<{ databaseId: string }> { + const client = getClient(accessToken); + + const result = await client.request<{ + provisionDatabase: { database: { id: string } }; + }>( + `mutation ProvisionDatabase($name: String!, $ownerId: UUID!) { + provisionDatabase(input: { database: { name: $name, ownerId: $ownerId } }) { + database { + id + } + } + }`, + { name, ownerId: userId } + ); + + return { databaseId: result.provisionDatabase.database.id }; +} + +export async function getSchemaInfo( + accessToken: string, + databaseId: string +): Promise<{ schemaId: string; schemaName: string }> { + const client = getClient(accessToken); + + const result = await client.request<{ + database: { + schemasByDatabaseId: { + nodes: Array<{ id: string; name: string }>; + }; + }; + }>( + `query GetSchema($databaseId: UUID!) { + database(id: $databaseId) { + schemasByDatabaseId(condition: { isDefault: true }) { + nodes { + id + name + } + } + } + }`, + { databaseId } + ); + + const schema = result.database.schemasByDatabaseId.nodes[0]; + return { schemaId: schema.id, schemaName: schema.name }; +} + +export async function createTable( + accessToken: string, + databaseId: string, + schemaId: string, + tableName: string +): Promise { + const client = getClient(accessToken); + + const result = await client.request<{ + createTable: { table: { id: string } }; + }>( + `mutation CreateTable($schemaId: UUID!, $name: String!) { + createTable(input: { table: { schemaId: $schemaId, name: $name } }) { + table { + id + } + } + }`, + { schemaId, name: tableName } + ); + + return result.createTable.table.id; +} + +export async function createField( + accessToken: string, + tableId: string, + name: string, + type: string, + options?: { isRequired?: boolean; defaultValue?: string } +): Promise { + const client = getClient(accessToken); + + const result = await client.request<{ + createField: { field: { id: string } }; + }>( + `mutation CreateField($tableId: UUID!, $name: String!, $type: String!, $isRequired: Boolean, $defaultValue: String) { + createField(input: { field: { tableId: $tableId, name: $name, type: $type, isRequired: $isRequired, defaultValue: $defaultValue } }) { + field { + id + } + } + }`, + { + tableId, + name, + type, + isRequired: options?.isRequired ?? false, + defaultValue: options?.defaultValue ?? null, + } + ); + + return result.createField.field.id; +} + +export async function createPrimaryKey( + accessToken: string, + tableId: string, + fieldIds: string[] +): Promise { + const client = getClient(accessToken); + + await client.request( + `mutation CreatePrimaryKey($tableId: UUID!, $fieldIds: [UUID!]!) { + createPrimaryKey(input: { tableId: $tableId, fieldIds: $fieldIds }) { + clientMutationId + } + }`, + { tableId, fieldIds } + ); +} + +export async function setupEmbeddingChunks( + accessToken: string, + databaseId: string, + tableId: string, + options: { + contentFieldName: string; + dimensions: number; + chunkSize: number; + chunkOverlap: number; + chunkStrategy: string; + chunkingTaskName: string; + } +): Promise { + const client = getClient(accessToken); + + const result = await client.request<{ + setupEmbeddingChunks: { chunksTableName: string }; + }>( + `mutation SetupEmbeddingChunks( + $tableId: UUID!, + $contentFieldName: String!, + $dimensions: Int!, + $chunkSize: Int!, + $chunkOverlap: Int!, + $chunkStrategy: String!, + $chunkingTaskName: String! + ) { + setupEmbeddingChunks(input: { + tableId: $tableId, + contentFieldName: $contentFieldName, + dimensions: $dimensions, + chunkSize: $chunkSize, + chunkOverlap: $chunkOverlap, + chunkStrategy: $chunkStrategy, + chunkingTaskName: $chunkingTaskName + }) { + chunksTableName + } + }`, + { + tableId, + contentFieldName: options.contentFieldName, + dimensions: options.dimensions, + chunkSize: options.chunkSize, + chunkOverlap: options.chunkOverlap, + chunkStrategy: options.chunkStrategy, + chunkingTaskName: options.chunkingTaskName, + } + ); + + return result.setupEmbeddingChunks.chunksTableName; +}