Saltar al contenido principal

D1, Drizzle y Wrangler

Instalaciones

bun add drizzle-orm
bun add @libsql/client

bun add -D drizzle-kit
bun add -D @sveltejs/adapter-cloudflare-workers

Config

drizzle.config.ts
import { defineConfig } from 'drizzle-kit';

if (!process.env.DATABASE_URL) throw new Error('DATABASE_URL is not set');

export default defineConfig({
  schema: './src/lib/server/db/schema.ts',

  dbCredentials: {
    accountId: process.env.ACCOUNT_ID!,
    databaseId: process.env.DATABASE_ID!,
    token: process.env.TOKEN!
  },

  verbose: true,
  strict: true,
  dialect: 'sqlite',
  driver: 'd1-http'
});

Esquemas

Migraciones

1. Generar migración

  • En esta etapa, la base de datos física aún no se modificará; esto solo prepara el SQL que luego se enviará de manera interna.
bunx drizzle-kit generate

2. Aplicar en la base de datos

bunx drizzle-kit migrate

Configurar adaptador de Cloudflare

wrangler.toml

wrangler.toml
name = "<app-name>"
compatibility_date = "2023-10-30"


[[d1_databases]]
binding = "DB"
database_name = "<db-name>"
database_id = ""

svelte.config.ts

svelte.config.js
import adapter from '@sveltejs/adapter-cloudflare-workers';
import { vitePreprocess } from '@sveltejs/vite-plugin-svelte';

/** @type {import('@sveltejs/kit').Config} */
const config = {
  preprocess: vitePreprocess(),

  kit: {
    adapter: adapter({
      routes: {
        include: ['/*'],
        exclude: ['<all>']
      },
      platformProxy: {
        configPath: 'wrangler.toml',
        environment: undefined,
        experimentalJsonConfig: false,
        persist: false
      }
    })
  }
};

export default config;

src/app.d.ts

declare global {
  namespace App {
    interface Platform {
      env?: {
        DB: D1Database; // DB o el mismo nombre del binding
      };
    }
  }
}

export {};