Created
September 1, 2023 17:18
-
-
Save mizchi/d9e819dc8c2dd09c1ab92c52a3e1d4b5 to your computer and use it in GitHub Desktop.
Cloudflare env emulator
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* cloudflare local emulator | |
*/ | |
import { parse } from "@iarna/toml"; | |
type WranglerConfig = { | |
d1_databases?: Array<{ | |
database_name: string; | |
database_id: string; | |
binding: string; | |
migrations_dir: string; | |
}>; | |
}; | |
let _env: Record<string, any> | undefined = undefined; | |
export async function createCloudflareEnv() { | |
if (!import.meta.env.DEV) throw new Error("DEV ONLY"); | |
if (_env) return _env; | |
if (import.meta.env.DEV) { | |
const env: Record<string, any> = {}; | |
const { default: raw } = await import("../../wrangler.toml?raw"); | |
const parsed = parse(raw) as WranglerConfig; | |
for (const database of parsed.d1_databases ?? []) { | |
env[database.binding] = await createD1(database.database_id); | |
} | |
return (_env = env); | |
} | |
throw new Error("Unreachable"); | |
} | |
async function createD1(database_id: string) { | |
const { D1DatabaseAPI, D1Database } = await import("@miniflare/d1"); | |
const { createSQLiteDB } = await import("@miniflare/shared"); | |
const db = await createSQLiteDB( | |
`.wrangler/state/v3/d1/${database_id}/db.sqlite`, | |
); | |
return new D1Database(new D1DatabaseAPI(db)); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment