UNPKG

nitro-cloudflare-dev

Version:

POC module to enable access to the Cloudflare runtime bindings in development server of Nitro and Nuxt

87 lines (86 loc) 2.35 kB
import { useRuntimeConfig, getRequestURL } from "#imports"; const _proxy = _getPlatformProxy().catch((error) => { console.error("Failed to initialize wrangler bindings proxy", error); return _createStubProxy(); }).then((proxy) => { globalThis.__env__ = proxy.env; return proxy; }); globalThis.__env__ = _proxy.then((proxy) => proxy.env); export default (function(nitroApp) { nitroApp.hooks.hook("request", async (event) => { const proxy = await _proxy; event.context.cf = proxy.cf; event.context.waitUntil = proxy.ctx.waitUntil.bind(proxy.ctx); const request = new Request(getRequestURL(event)); request.cf = proxy.cf; event.context.cloudflare = { ...event.context.cloudflare, request, env: proxy.env, context: proxy.ctx }; event.node.req.__unenv__ = { ...event.node.req.__unenv__, waitUntil: event.context.waitUntil }; }); nitroApp.hooks._hooks.request.unshift(nitroApp.hooks._hooks.request.pop()); nitroApp.hooks.hook("close", () => { return _proxy?.then((proxy) => proxy.dispose); }); }); async function _getPlatformProxy() { const _pkg = "wrangler"; const { getPlatformProxy } = await import(_pkg).catch(() => { throw new Error( "Package `wrangler` not found, please install it with: `npx nypm@latest add -D wrangler`" ); }); const runtimeConfig = useRuntimeConfig(); const proxyOptions = { configPath: runtimeConfig.wrangler.configPath, persist: { path: runtimeConfig.wrangler.persistDir } }; if (runtimeConfig.wrangler.environment) { proxyOptions.environment = runtimeConfig.wrangler.environment; } const proxy = await getPlatformProxy(proxyOptions); return proxy; } function _createStubProxy() { return { env: {}, cf: {}, ctx: { waitUntil() { }, passThroughOnException() { } }, caches: { open() { const result = Promise.resolve(new _CacheStub()); return result; }, get default() { return new _CacheStub(); } }, dispose: () => Promise.resolve() }; } class _CacheStub { delete() { const result = Promise.resolve(false); return result; } match() { const result = Promise.resolve(void 0); return result; } put() { const result = Promise.resolve(); return result; } }