diff --git a/packages/wrangler/e2e/dev-with-resources.test.ts b/packages/wrangler/e2e/dev-with-resources.test.ts index 97788403a92a..b71894685e07 100644 --- a/packages/wrangler/e2e/dev-with-resources.test.ts +++ b/packages/wrangler/e2e/dev-with-resources.test.ts @@ -544,7 +544,9 @@ describe.sequential.each(RUNTIMES)("Bindings: $flags", ({ runtime, flags }) => { await helper.run(`wrangler vectorize insert ${name} --file samples.ndjson`); - const worker = helper.runLongLived(`wrangler dev ${flags}`); + const worker = helper.runLongLived( + `wrangler dev ${flags} --experimental-vectorize-bind-to-prod` + ); const { url } = await worker.waitForReady(); const res = await fetch(url); diff --git a/packages/wrangler/src/api/dev.ts b/packages/wrangler/src/api/dev.ts index ecf5dcc506e3..53d8ec2f4739 100644 --- a/packages/wrangler/src/api/dev.ts +++ b/packages/wrangler/src/api/dev.ts @@ -83,6 +83,7 @@ export interface UnstableDevOptions { watch?: boolean; // unstable_dev doesn't support watch-mode yet in testMode devEnv?: boolean; fileBasedRegistry?: boolean; + vectorizeBindToProd?: boolean; }; } @@ -128,6 +129,7 @@ export async function unstable_dev( testScheduled, devEnv = false, fileBasedRegistry = false, + vectorizeBindToProd, // 2. options for alpha/beta products/libs d1Databases, enablePagesAssetsServiceBinding, @@ -223,6 +225,7 @@ export async function unstable_dev( experimentalVersions: undefined, experimentalDevEnv: devEnv, experimentalRegistry: fileBasedRegistry, + experimentalVectorizeBindToProd: vectorizeBindToProd ?? false, }; //due to Pages adoption of unstable_dev, we can't *just* disable rebuilds and watching. instead, we'll have two versions of startDev, which will converge. diff --git a/packages/wrangler/src/api/startDevWorker/ConfigController.ts b/packages/wrangler/src/api/startDevWorker/ConfigController.ts index e5b591291453..8c0bdfbfd619 100644 --- a/packages/wrangler/src/api/startDevWorker/ConfigController.ts +++ b/packages/wrangler/src/api/startDevWorker/ConfigController.ts @@ -124,6 +124,7 @@ async function resolveDevConfig( // absolute resolved path persist: localPersistencePath, registry: input.dev?.registry, + bindVectorizeToProd: input.dev?.bindVectorizeToProd ?? false, } satisfies StartDevWorkerOptions["dev"]; } diff --git a/packages/wrangler/src/api/startDevWorker/LocalRuntimeController.ts b/packages/wrangler/src/api/startDevWorker/LocalRuntimeController.ts index be72911bbb70..6d74a4ae2fe1 100644 --- a/packages/wrangler/src/api/startDevWorker/LocalRuntimeController.ts +++ b/packages/wrangler/src/api/startDevWorker/LocalRuntimeController.ts @@ -118,6 +118,7 @@ async function convertToConfigBundle( inspect: true, services: bindings.services, serviceBindings: fetchers, + bindVectorizeToProd: event.config.dev?.bindVectorizeToProd ?? false, }; } diff --git a/packages/wrangler/src/api/startDevWorker/types.ts b/packages/wrangler/src/api/startDevWorker/types.ts index 71ec5526e8f3..c8f89f905843 100644 --- a/packages/wrangler/src/api/startDevWorker/types.ts +++ b/packages/wrangler/src/api/startDevWorker/types.ts @@ -158,6 +158,9 @@ export interface StartDevWorkerInput { registry?: WorkerRegistry; testScheduled?: boolean; + + /** Whether to use Vectorize mixed mode -- the worker is run locally but accesses to Vectorize are made remotely */ + bindVectorizeToProd?: boolean; }; legacy?: { site?: Hook; diff --git a/packages/wrangler/src/dev.tsx b/packages/wrangler/src/dev.tsx index 8b205a78ce54..252789749720 100644 --- a/packages/wrangler/src/dev.tsx +++ b/packages/wrangler/src/dev.tsx @@ -352,6 +352,12 @@ export function devOptions(yargs: CommonYargsArgv) { "Use the experimental file based dev registry for multi-worker development", default: false, }) + .option("experimental-vectorize-bind-to-prod", { + alias: ["x-vectorize-bind-to-prod"], + type: "boolean", + describe: "Bind to production Vectorize indexes in local development mode", + default: false, + }) ); } @@ -747,6 +753,7 @@ export async function startDev(args: StartDevOptions) { testScheduled: args.testScheduled, logLevel: args.logLevel, registry: devEnv.config.latestConfig?.dev.registry, + bindVectorizeToProd: args.experimentalVectorizeBindToProd, }, legacy: { site: (configParam) => { @@ -1006,6 +1013,7 @@ export async function startDev(args: StartDevOptions) { rawArgs={args} rawConfig={configParam} devEnv={devEnv} + bindVectorizeToProd={args.experimentalVectorizeBindToProd} /> ); } @@ -1205,6 +1213,7 @@ export async function startApiDev(args: StartDevOptions) { rawArgs: args, rawConfig: configParam, devEnv, + bindVectorizeToProd: args.experimentalVectorizeBindToProd, }); } diff --git a/packages/wrangler/src/dev/dev.tsx b/packages/wrangler/src/dev/dev.tsx index 251ead69beed..0540e5650329 100644 --- a/packages/wrangler/src/dev/dev.tsx +++ b/packages/wrangler/src/dev/dev.tsx @@ -196,6 +196,7 @@ export type DevProps = { rawConfig: Config; rawArgs: StartDevOptions; devEnv: DevEnv; + bindVectorizeToProd: boolean; }; export function DevImplementation(props: DevProps): JSX.Element { @@ -398,6 +399,7 @@ function DevSession(props: DevSessionProps) { liveReload: props.liveReload, testScheduled: props.testScheduled, persist: "", + bindVectorizeToProd: props.bindVectorizeToProd, }, legacy: { site: @@ -655,6 +657,7 @@ function DevSession(props: DevSessionProps) { enablePagesAssetsServiceBinding={props.enablePagesAssetsServiceBinding} sourceMapPath={bundle?.sourceMapPath} services={props.bindings.services} + bindVectorizeToProd={props.bindVectorizeToProd} /> ) : ( ; + bindVectorizeToProd: boolean; } export class WranglerLog extends Log { @@ -920,6 +921,13 @@ export async function buildMiniflareOptions( } } + if (!config.bindVectorizeToProd && config.bindings.vectorize?.length) { + logger.warn( + "Vectorize local bindings are not supported yet. You may use the `--experimental-vectorize-bind-to-prod` flag to bind to your production index in local dev mode." + ); + config.bindings.vectorize = []; + } + if (config.bindings.vectorize?.length) { if (!didWarnMiniflareVectorizeSupport) { didWarnMiniflareVectorizeSupport = true; diff --git a/packages/wrangler/src/dev/start-server.ts b/packages/wrangler/src/dev/start-server.ts index 4ba59da72251..bce85cc8e038 100644 --- a/packages/wrangler/src/dev/start-server.ts +++ b/packages/wrangler/src/dev/start-server.ts @@ -147,6 +147,7 @@ export async function startDevServer( persist: props.localPersistencePath ?? undefined, testScheduled: props.testScheduled, registry: workerDefinitions, + bindVectorizeToProd: props.bindVectorizeToProd, }, build: { bundle: !props.noBundle, @@ -317,6 +318,7 @@ export async function startDevServer( sourceMapPath: bundle?.sourceMapPath, services: props.bindings.services, experimentalDevEnv: props.experimentalDevEnv, + bindVectorizeToProd: props.bindVectorizeToProd, }); return { diff --git a/packages/wrangler/src/pages/dev.ts b/packages/wrangler/src/pages/dev.ts index 630e4bc71a41..093cd2981fc7 100644 --- a/packages/wrangler/src/pages/dev.ts +++ b/packages/wrangler/src/pages/dev.ts @@ -251,6 +251,11 @@ export function Options(yargs: CommonYargsArgv) { "Use the experimental file based dev registry for multi-worker development", default: false, }, + "experimental-vectorize-bind-to-prod": { + type: "boolean", + describe: "Bind to production Vectorize indexes in local development mode", + default: false, + } }); }