diff --git a/adapters/cf/package.json b/adapters/cf/package.json index 3f08d96..4ed7b2d 100644 --- a/adapters/cf/package.json +++ b/adapters/cf/package.json @@ -30,6 +30,7 @@ "payloadcms-vectorize": ">=1.0.1" }, "devDependencies": { + "@cloudflare/workers-types": "^4.20240000.0", "payloadcms-vectorize": "workspace:*" }, "engines": { diff --git a/adapters/cf/src/index.ts b/adapters/cf/src/index.ts index dd78a3e..f3a51bb 100644 --- a/adapters/cf/src/index.ts +++ b/adapters/cf/src/index.ts @@ -1,7 +1,7 @@ import type { CollectionSlug } from 'payload' import type { DbAdapter } from 'payloadcms-vectorize' import { getVectorizeBinding } from './types.js' -import type { CloudflareVectorizeBinding, KnowledgePoolsConfig } from './types.js' +import type { CloudflareVectorizeBinding, KnowledgePoolsConfig, VectorizeBinding } from './types.js' import cfMappingsCollection, { CF_MAPPINGS_SLUG } from './collections/cfMappings.js' import embed from './embed.js' import search from './search.js' @@ -13,7 +13,7 @@ interface CloudflareVectorizeConfig { /** Knowledge pools configuration with their dimensions */ config: KnowledgePoolsConfig /** Cloudflare Vectorize binding for vector storage */ - binding: CloudflareVectorizeBinding + binding: VectorizeBinding } /** @@ -134,5 +134,5 @@ export const createCloudflareVectorizeIntegration = ( } export { CF_MAPPINGS_SLUG } from './collections/cfMappings.js' -export type { CloudflareVectorizeBinding, KnowledgePoolsConfig } +export type { CloudflareVectorizeBinding, KnowledgePoolsConfig, VectorizeBinding } export type { KnowledgePoolsConfig as KnowledgePoolConfig } diff --git a/adapters/cf/src/types.ts b/adapters/cf/src/types.ts index 92786d4..1cecab2 100644 --- a/adapters/cf/src/types.ts +++ b/adapters/cf/src/types.ts @@ -1,13 +1,19 @@ +/// import type { BasePayload } from 'payload' import { getVectorizedPayload } from 'payloadcms-vectorize' +/** + * The subset of the Cloudflare `Vectorize` binding used by this adapter. + */ +export type VectorizeBinding = Pick + /** * Retrieve the Cloudflare Vectorize binding from a Payload instance. * Throws if the binding is not found. */ -export function getVectorizeBinding(payload: BasePayload): CloudflareVectorizeBinding { +export function getVectorizeBinding(payload: BasePayload): VectorizeBinding { const binding = getVectorizedPayload(payload)?.getDbAdapterCustom() - ?._vectorizeBinding as CloudflareVectorizeBinding | undefined + ?._vectorizeBinding as VectorizeBinding | undefined if (!binding) { throw new Error('[@payloadcms-vectorize/cf] Cloudflare Vectorize binding not found') } @@ -27,39 +33,5 @@ export interface CloudflareVectorizePoolConfig { */ export type KnowledgePoolsConfig = Record -/** A single vector match returned by a Vectorize query */ -export interface VectorizeMatch { - id: string - score?: number - metadata?: Record -} - -/** Result of a Vectorize query */ -export interface VectorizeQueryResult { - matches: VectorizeMatch[] - count: number -} - -/** Vector to upsert into Vectorize */ -export interface VectorizeVector { - id: string - values: number[] - metadata?: Record -} - -/** - * Cloudflare Vectorize binding interface. - * Mirrors the subset of the Vectorize API we use. - * For the full type, install `@cloudflare/workers-types`. - */ -export interface CloudflareVectorizeBinding { - query(vector: number[], options?: { - topK?: number - returnMetadata?: boolean | 'indexed' | 'all' - filter?: Record - /** Vectorize metadata filtering */ - where?: Record - }): Promise - upsert(vectors: VectorizeVector[]): Promise - deleteByIds(ids: string[]): Promise -} +/** @deprecated Use {@link VectorizeBinding}. */ +export type CloudflareVectorizeBinding = VectorizeBinding diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c9e19e1..28b5ddf 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -19,10 +19,10 @@ importers: version: 3.3.3 '@payloadcms/db-postgres': specifier: 3.69.0 - version: 3.69.0(@libsql/client@0.14.0)(@opentelemetry/api@1.9.0)(payload@3.69.0(graphql@16.12.0)(typescript@5.7.3)) + version: 3.69.0(@cloudflare/workers-types@4.20260531.1)(@libsql/client@0.14.0)(@opentelemetry/api@1.9.0)(payload@3.69.0(graphql@16.12.0)(typescript@5.7.3)) '@payloadcms/db-sqlite': specifier: 3.69.0 - version: 3.69.0(@opentelemetry/api@1.9.0)(@types/pg@8.16.0)(payload@3.69.0(graphql@16.12.0)(typescript@5.7.3))(pg@8.16.3) + version: 3.69.0(@cloudflare/workers-types@4.20260531.1)(@opentelemetry/api@1.9.0)(@types/pg@8.16.0)(payload@3.69.0(graphql@16.12.0)(typescript@5.7.3))(pg@8.16.3) '@payloadcms/eslint-config': specifier: 3.9.0 version: 3.9.0(@typescript-eslint/eslint-plugin@8.51.0(@typescript-eslint/parser@8.51.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.7.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.7.3))(jest@30.2.0(@types/node@22.19.3)(babel-plugin-macros@3.1.0)(esbuild-register@3.6.0(esbuild@0.25.12)))(jiti@2.6.1) @@ -153,6 +153,9 @@ importers: specifier: '>=3.0.0 <4.0.0' version: 3.69.0(graphql@16.12.0)(typescript@5.7.3) devDependencies: + '@cloudflare/workers-types': + specifier: ^4.20240000.0 + version: 4.20260531.1 payloadcms-vectorize: specifier: workspace:* version: link:../.. @@ -180,7 +183,7 @@ importers: dependencies: '@payloadcms/db-postgres': specifier: '>=3.0.0 <4.0.0' - version: 3.69.0(@libsql/client@0.14.0)(@opentelemetry/api@1.9.0)(payload@3.69.0(graphql@16.12.0)(typescript@5.7.3)) + version: 3.69.0(@cloudflare/workers-types@4.20260531.1)(@libsql/client@0.14.0)(@opentelemetry/api@1.9.0)(payload@3.69.0(graphql@16.12.0)(typescript@5.7.3)) payload: specifier: '>=3.0.0 <4.0.0' version: 3.69.0(graphql@16.12.0)(typescript@5.7.3) @@ -457,6 +460,9 @@ packages: '@changesets/write@0.4.0': resolution: {integrity: sha512-CdTLvIOPiCNuH71pyDu3rA+Q0n65cmAbXnwWH84rKGiFumFzkmHNT8KHTMEchcxN+Kl8I54xGUhJ7l3E7X396Q==} + '@cloudflare/workers-types@4.20260531.1': + resolution: {integrity: sha512-7DybhbX12n+mVgJEDvm9W/jjqpaUIczg+RWj1Hua9nGEG+pNJnT+yZj1JKENrbdyuGWx3OFEgUCNFcGJN86Dvg==} + '@date-fns/tz@1.2.0': resolution: {integrity: sha512-LBrd7MiJZ9McsOgxqWX7AaxrDjcFVjWH/tIKJd7pnR7McaslGYOP1QmmiBXdJH/H/yLCT+rcQ7FaPBUxRGUtrg==} @@ -7225,6 +7231,8 @@ snapshots: human-id: 4.1.3 prettier: 2.8.8 + '@cloudflare/workers-types@4.20260531.1': {} + '@date-fns/tz@1.2.0': {} '@dnd-kit/accessibility@3.1.1(react@19.1.0)': @@ -8649,13 +8657,13 @@ snapshots: - socks - supports-color - '@payloadcms/db-postgres@3.69.0(@libsql/client@0.14.0)(@opentelemetry/api@1.9.0)(payload@3.69.0(graphql@16.12.0)(typescript@5.7.3))': + '@payloadcms/db-postgres@3.69.0(@cloudflare/workers-types@4.20260531.1)(@libsql/client@0.14.0)(@opentelemetry/api@1.9.0)(payload@3.69.0(graphql@16.12.0)(typescript@5.7.3))': dependencies: - '@payloadcms/drizzle': 3.69.0(@libsql/client@0.14.0)(@opentelemetry/api@1.9.0)(@types/pg@8.10.2)(payload@3.69.0(graphql@16.12.0)(typescript@5.7.3))(pg@8.16.3) + '@payloadcms/drizzle': 3.69.0(@cloudflare/workers-types@4.20260531.1)(@libsql/client@0.14.0)(@opentelemetry/api@1.9.0)(@types/pg@8.10.2)(payload@3.69.0(graphql@16.12.0)(typescript@5.7.3))(pg@8.16.3) '@types/pg': 8.10.2 console-table-printer: 2.12.1 drizzle-kit: 0.31.7 - drizzle-orm: 0.44.7(@libsql/client@0.14.0)(@opentelemetry/api@1.9.0)(@types/pg@8.10.2)(pg@8.16.3) + drizzle-orm: 0.44.7(@cloudflare/workers-types@4.20260531.1)(@libsql/client@0.14.0)(@opentelemetry/api@1.9.0)(@types/pg@8.10.2)(pg@8.16.3) payload: 3.69.0(graphql@16.12.0)(typescript@5.7.3) pg: 8.16.3 prompts: 2.4.2 @@ -8692,13 +8700,13 @@ snapshots: - sqlite3 - supports-color - '@payloadcms/db-sqlite@3.69.0(@opentelemetry/api@1.9.0)(@types/pg@8.16.0)(payload@3.69.0(graphql@16.12.0)(typescript@5.7.3))(pg@8.16.3)': + '@payloadcms/db-sqlite@3.69.0(@cloudflare/workers-types@4.20260531.1)(@opentelemetry/api@1.9.0)(@types/pg@8.16.0)(payload@3.69.0(graphql@16.12.0)(typescript@5.7.3))(pg@8.16.3)': dependencies: '@libsql/client': 0.14.0 - '@payloadcms/drizzle': 3.69.0(@libsql/client@0.14.0)(@opentelemetry/api@1.9.0)(@types/pg@8.16.0)(payload@3.69.0(graphql@16.12.0)(typescript@5.7.3))(pg@8.16.3) + '@payloadcms/drizzle': 3.69.0(@cloudflare/workers-types@4.20260531.1)(@libsql/client@0.14.0)(@opentelemetry/api@1.9.0)(@types/pg@8.16.0)(payload@3.69.0(graphql@16.12.0)(typescript@5.7.3))(pg@8.16.3) console-table-printer: 2.12.1 drizzle-kit: 0.31.7 - drizzle-orm: 0.44.7(@libsql/client@0.14.0)(@opentelemetry/api@1.9.0)(@types/pg@8.16.0)(pg@8.16.3) + drizzle-orm: 0.44.7(@cloudflare/workers-types@4.20260531.1)(@libsql/client@0.14.0)(@opentelemetry/api@1.9.0)(@types/pg@8.16.0)(pg@8.16.3) payload: 3.69.0(graphql@16.12.0)(typescript@5.7.3) prompts: 2.4.2 to-snake-case: 1.0.0 @@ -8736,11 +8744,11 @@ snapshots: - supports-color - utf-8-validate - '@payloadcms/drizzle@3.69.0(@libsql/client@0.14.0)(@opentelemetry/api@1.9.0)(@types/pg@8.10.2)(payload@3.69.0(graphql@16.12.0)(typescript@5.7.3))(pg@8.16.3)': + '@payloadcms/drizzle@3.69.0(@cloudflare/workers-types@4.20260531.1)(@libsql/client@0.14.0)(@opentelemetry/api@1.9.0)(@types/pg@8.10.2)(payload@3.69.0(graphql@16.12.0)(typescript@5.7.3))(pg@8.16.3)': dependencies: console-table-printer: 2.12.1 dequal: 2.0.3 - drizzle-orm: 0.44.7(@libsql/client@0.14.0)(@opentelemetry/api@1.9.0)(@types/pg@8.10.2)(pg@8.16.3) + drizzle-orm: 0.44.7(@cloudflare/workers-types@4.20260531.1)(@libsql/client@0.14.0)(@opentelemetry/api@1.9.0)(@types/pg@8.10.2)(pg@8.16.3) payload: 3.69.0(graphql@16.12.0)(typescript@5.7.3) prompts: 2.4.2 to-snake-case: 1.0.0 @@ -8776,11 +8784,11 @@ snapshots: - sql.js - sqlite3 - '@payloadcms/drizzle@3.69.0(@libsql/client@0.14.0)(@opentelemetry/api@1.9.0)(@types/pg@8.16.0)(payload@3.69.0(graphql@16.12.0)(typescript@5.7.3))(pg@8.16.3)': + '@payloadcms/drizzle@3.69.0(@cloudflare/workers-types@4.20260531.1)(@libsql/client@0.14.0)(@opentelemetry/api@1.9.0)(@types/pg@8.16.0)(payload@3.69.0(graphql@16.12.0)(typescript@5.7.3))(pg@8.16.3)': dependencies: console-table-printer: 2.12.1 dequal: 2.0.3 - drizzle-orm: 0.44.7(@libsql/client@0.14.0)(@opentelemetry/api@1.9.0)(@types/pg@8.16.0)(pg@8.16.3) + drizzle-orm: 0.44.7(@cloudflare/workers-types@4.20260531.1)(@libsql/client@0.14.0)(@opentelemetry/api@1.9.0)(@types/pg@8.16.0)(pg@8.16.3) payload: 3.69.0(graphql@16.12.0)(typescript@5.7.3) prompts: 2.4.2 to-snake-case: 1.0.0 @@ -10671,15 +10679,17 @@ snapshots: transitivePeerDependencies: - supports-color - drizzle-orm@0.44.7(@libsql/client@0.14.0)(@opentelemetry/api@1.9.0)(@types/pg@8.10.2)(pg@8.16.3): + drizzle-orm@0.44.7(@cloudflare/workers-types@4.20260531.1)(@libsql/client@0.14.0)(@opentelemetry/api@1.9.0)(@types/pg@8.10.2)(pg@8.16.3): optionalDependencies: + '@cloudflare/workers-types': 4.20260531.1 '@libsql/client': 0.14.0 '@opentelemetry/api': 1.9.0 '@types/pg': 8.10.2 pg: 8.16.3 - drizzle-orm@0.44.7(@libsql/client@0.14.0)(@opentelemetry/api@1.9.0)(@types/pg@8.16.0)(pg@8.16.3): + drizzle-orm@0.44.7(@cloudflare/workers-types@4.20260531.1)(@libsql/client@0.14.0)(@opentelemetry/api@1.9.0)(@types/pg@8.16.0)(pg@8.16.3): optionalDependencies: + '@cloudflare/workers-types': 4.20260531.1 '@libsql/client': 0.14.0 '@opentelemetry/api': 1.9.0 '@types/pg': 8.16.0 diff --git a/tsconfig.json b/tsconfig.json index 8c2fdbc..2622313 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -22,5 +22,5 @@ } ] }, - "include": ["./src/**/*.ts", "./src/**/*.tsx", "./adapters/*/src/**/*.ts", "./dev/next-env.d.ts"] + "include": ["./src/**/*.ts", "./src/**/*.tsx", "./dev/next-env.d.ts"] }