[{"data":1,"prerenderedAt":1363},["ShallowReactive",2],{"navigation_docs":3,"-runtypes-drizzle-orm-cloudflare-storage":399},[4,162,346],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":24},"RPC","icon-park-outline:lightning","\u002Frpc","01.rpc",[10,25,63,77,102,136],{"title":11,"icon":12,"redirect":7,"path":13,"stem":14,"children":15,"page":24},"Introduction","icon-park-outline:home","\u002Frpc\u002Fintroduction","01.rpc\u002F01.introduction",[16,20],{"title":17,"path":18,"stem":19},"Quick Start","\u002Frpc\u002Fintroduction\u002Fquick-start","01.rpc\u002F01.introduction\u002F02.quick-start",{"title":21,"path":22,"stem":23},"Manual Install","\u002Frpc\u002Fintroduction\u002Fmanual-install","01.rpc\u002F01.introduction\u002F03.manual-install",false,{"title":26,"icon":27,"path":28,"stem":29,"children":30,"page":24},"Server","icon-park-outline:server","\u002Frpc\u002Fserver","01.rpc\u002F02.server",[31,35,39,43,47,51,55,59],{"title":32,"path":33,"stem":34},"Routes","\u002Frpc\u002Fserver\u002Froutes","01.rpc\u002F02.server\u002F01.routes",{"title":36,"path":37,"stem":38},"Middleware","\u002Frpc\u002Fserver\u002Fmiddleware","01.rpc\u002F02.server\u002F02.middleware",{"title":40,"path":41,"stem":42},"Call Context","\u002Frpc\u002Fserver\u002Fcall-context","01.rpc\u002F02.server\u002F03.call-context",{"title":44,"path":45,"stem":46},"Headers","\u002Frpc\u002Fserver\u002Fheaders","01.rpc\u002F02.server\u002F04.headers",{"title":48,"path":49,"stem":50},"Error Handling","\u002Frpc\u002Fserver\u002Ferror-handling","01.rpc\u002F02.server\u002F05.error-handling",{"title":52,"path":53,"stem":54},"Validation","\u002Frpc\u002Fserver\u002Fvalidation","01.rpc\u002F02.server\u002F06.validation",{"title":56,"path":57,"stem":58},"JSON Round Trip","\u002Frpc\u002Fserver\u002Fjson-round-trip","01.rpc\u002F02.server\u002F07.json-round-trip",{"title":60,"path":61,"stem":62},"Drizzle Tables","\u002Frpc\u002Fserver\u002Fdrizzle-tables","01.rpc\u002F02.server\u002F08.drizzle-tables",{"title":64,"icon":65,"path":66,"stem":67,"children":68,"page":24},"Middlewares","icon-park-outline:link-one","\u002Frpc\u002Fmiddlewares","01.rpc\u002F03.middlewares",[69,73],{"title":70,"path":71,"stem":72},"fetchMetadata","\u002Frpc\u002Fmiddlewares\u002Ffetch-metadata","01.rpc\u002F03.middlewares\u002F01.fetch-metadata",{"title":74,"path":75,"stem":76},"syncRoutes","\u002Frpc\u002Fmiddlewares\u002Fsync-routes","01.rpc\u002F03.middlewares\u002F02.sync-routes",{"title":78,"icon":79,"path":80,"stem":81,"children":82,"page":24},"Client","icon-park-outline:computer","\u002Frpc\u002Fclient","01.rpc\u002F04.client",[83,87,91,94,98],{"title":84,"path":85,"stem":86},"Client Overview","\u002Frpc\u002Fclient\u002Fclient-overview","01.rpc\u002F04.client\u002F00.client-overview",{"title":88,"path":89,"stem":90},"Client Middleware","\u002Frpc\u002Fclient\u002Fclient-middleware","01.rpc\u002F04.client\u002F01.client-middleware",{"title":48,"path":92,"stem":93},"\u002Frpc\u002Fclient\u002Ferror-handling","01.rpc\u002F04.client\u002F02.error-handling",{"title":95,"path":96,"stem":97},"Batch Requests","\u002Frpc\u002Fclient\u002Fbatch","01.rpc\u002F04.client\u002F03.batch",{"title":99,"path":100,"stem":101},"Cancellation & Timeouts","\u002Frpc\u002Fclient\u002Fcancellation-timeouts","01.rpc\u002F04.client\u002F04.cancellation-timeouts",{"title":103,"redirect":104,"icon":105,"path":106,"stem":107,"children":108,"page":24},"Platforms","\u002Frpc\u002Fplatforms\u002Fnode-js","icon-park-outline:play","\u002Frpc\u002Fplatforms","01.rpc\u002F06.platforms",[109,112,116,120,124,128,132],{"title":110,"path":104,"stem":111},"Node.js","01.rpc\u002F06.platforms\u002F01.node-js",{"title":113,"path":114,"stem":115},"Bun","\u002Frpc\u002Fplatforms\u002Fbun","01.rpc\u002F06.platforms\u002F02.bun",{"title":117,"path":118,"stem":119},"AWS Lambda","\u002Frpc\u002Fplatforms\u002Faws-lambda","01.rpc\u002F06.platforms\u002F03.aws-lambda",{"title":121,"path":122,"stem":123},"Google Cloud Functions","\u002Frpc\u002Fplatforms\u002Fgoogle-cloud-functions","01.rpc\u002F06.platforms\u002F04.google-cloud-functions",{"title":125,"path":126,"stem":127},"Cloudflare Workers","\u002Frpc\u002Fplatforms\u002Fcloudflare","01.rpc\u002F06.platforms\u002F05.cloudflare",{"title":129,"path":130,"stem":131},"Vercel","\u002Frpc\u002Fplatforms\u002Fvercel","01.rpc\u002F06.platforms\u002F06.vercel",{"title":133,"path":134,"stem":135},"uWebSockets.js","\u002Frpc\u002Fplatforms\u002Fuwebsockets","01.rpc\u002F06.platforms\u002F07.uwebsockets",{"title":137,"icon":138,"path":139,"stem":140,"children":141,"page":24},"Devtools","icon-park-outline:tool","\u002Frpc\u002Fdevtools","01.rpc\u002F07.devtools",[142,146,150,154,158],{"title":143,"path":144,"stem":145},"Linter","\u002Frpc\u002Fdevtools\u002Flinter","01.rpc\u002F07.devtools\u002F01.linter",{"title":147,"path":148,"stem":149},"Vite","\u002Frpc\u002Fdevtools\u002Fvite","01.rpc\u002F07.devtools\u002F02.vite",{"title":151,"path":152,"stem":153},"Next.js","\u002Frpc\u002Fdevtools\u002Fnextjs","01.rpc\u002F07.devtools\u002F03.nextjs",{"title":155,"path":156,"stem":157},"CLI","\u002Frpc\u002Fdevtools\u002Fcli","01.rpc\u002F07.devtools\u002F04.cli",{"title":159,"path":160,"stem":161},"API Types","\u002Frpc\u002Fdevtools\u002Fapi-types","01.rpc\u002F07.devtools\u002F05.api-types",{"title":163,"icon":164,"path":165,"stem":166,"children":167,"page":24},"RunTypes","i-lucide-braces","\u002Fruntypes","02.runtypes",[168,184,224,254,268,290,332],{"title":11,"icon":169,"redirect":165,"path":170,"stem":171,"children":172,"page":24},"i-lucide-rocket","\u002Fruntypes\u002Fintroduction","02.runtypes\u002F01.introduction",[173,177,180],{"title":174,"path":175,"stem":176},"Built on typescript-go","\u002Fruntypes\u002Fintroduction\u002Fbuilt-on-typescript-go","02.runtypes\u002F01.introduction\u002F02.built-on-typescript-go",{"title":17,"path":178,"stem":179},"\u002Fruntypes\u002Fintroduction\u002Fquick-start","02.runtypes\u002F01.introduction\u002F03.quick-start",{"title":181,"path":182,"stem":183},"Configuration","\u002Fruntypes\u002Fintroduction\u002Fconfiguration","02.runtypes\u002F01.introduction\u002F04.configuration",{"title":185,"icon":186,"redirect":187,"path":188,"stem":189,"children":190,"page":24},"Guide","i-lucide-book-open","\u002Fruntypes\u002Fguide\u002Ftype-builders","\u002Fruntypes\u002Fguide","02.runtypes\u002F02.guide",[191,194,198,201,204,208,212,216,220],{"title":192,"path":187,"stem":193},"Types vs Type Builders","02.runtypes\u002F02.guide\u002F01.type-builders",{"title":195,"path":196,"stem":197},"Reflection","\u002Fruntypes\u002Fguide\u002Freflection","02.runtypes\u002F02.guide\u002F02.reflection",{"title":52,"path":199,"stem":200},"\u002Fruntypes\u002Fguide\u002Fvalidation","02.runtypes\u002F02.guide\u002F03.validation",{"title":56,"path":202,"stem":203},"\u002Fruntypes\u002Fguide\u002Fjson-round-trip","02.runtypes\u002F02.guide\u002F04.json-round-trip",{"title":205,"path":206,"stem":207},"Data Mocking","\u002Fruntypes\u002Fguide\u002Fmocking","02.runtypes\u002F02.guide\u002F07.mocking",{"title":209,"path":210,"stem":211},"JSON Schemas","\u002Fruntypes\u002Fguide\u002Fjson-schemas","02.runtypes\u002F02.guide\u002F08.json-schemas",{"title":213,"path":214,"stem":215},"Pure Functions","\u002Fruntypes\u002Fguide\u002Fpure-functions","02.runtypes\u002F02.guide\u002F09.pure-functions",{"title":217,"path":218,"stem":219},"Compiler Markers","\u002Fruntypes\u002Fguide\u002Fcompiler-markers","02.runtypes\u002F02.guide\u002F10.compiler-markers",{"title":221,"path":222,"stem":223},"All Compiled Functions","\u002Fruntypes\u002Fguide\u002Fall-compiled-functions","02.runtypes\u002F02.guide\u002F11.all-compiled-functions",{"title":225,"icon":226,"redirect":227,"path":228,"stem":229,"children":230,"page":24},"Type Formats","i-lucide-shapes","\u002Fruntypes\u002Ftype-formats\u002Foverview","\u002Fruntypes\u002Ftype-formats","02.runtypes\u002F03.type-formats",[231,234,238,242,246,250],{"title":232,"path":227,"stem":233},"Overview","02.runtypes\u002F03.type-formats\u002F01.overview",{"title":235,"path":236,"stem":237},"String Formats","\u002Fruntypes\u002Ftype-formats\u002Fstring","02.runtypes\u002F03.type-formats\u002F02.string",{"title":239,"path":240,"stem":241},"Number Formats","\u002Fruntypes\u002Ftype-formats\u002Fnumber","02.runtypes\u002F03.type-formats\u002F03.number",{"title":243,"path":244,"stem":245},"BigInt Formats","\u002Fruntypes\u002Ftype-formats\u002Fbigint","02.runtypes\u002F03.type-formats\u002F04.bigint",{"title":247,"path":248,"stem":249},"Date and Time Formats","\u002Fruntypes\u002Ftype-formats\u002Fdate-time","02.runtypes\u002F03.type-formats\u002F05.date-time",{"title":251,"path":252,"stem":253},"Collection Formats","\u002Fruntypes\u002Ftype-formats\u002Fcollections","02.runtypes\u002F03.type-formats\u002F06.collections",{"title":255,"icon":256,"redirect":257,"path":258,"stem":259,"children":260,"page":24},"Tooling","i-lucide-wrench","\u002Fruntypes\u002Ftooling\u002Flinting","\u002Fruntypes\u002Ftooling","02.runtypes\u002F04.tooling",[261,264],{"title":262,"path":257,"stem":263},"Linting","02.runtypes\u002F04.tooling\u002F01.linting",{"title":265,"path":266,"stem":267},"Source Conversion","\u002Fruntypes\u002Ftooling\u002Fsource-conversion","02.runtypes\u002F04.tooling\u002F02.source-conversion",{"title":269,"icon":270,"redirect":271,"path":272,"stem":273,"children":274,"page":24},"AI Integration","i-lucide-sparkles","\u002Fruntypes\u002Fai-integration\u002Fworkflow-and-commands","\u002Fruntypes\u002Fai-integration","02.runtypes\u002F05.ai-integration",[275,278,282,286],{"title":276,"path":271,"stem":277},"AI Workflow","02.runtypes\u002F05.ai-integration\u002F01.workflow-and-commands",{"title":279,"path":280,"stem":281},"FriendlyText","\u002Fruntypes\u002Fai-integration\u002Ffriendly-text","02.runtypes\u002F05.ai-integration\u002F02.friendly-text",{"title":283,"path":284,"stem":285},"MockData","\u002Fruntypes\u002Fai-integration\u002Fmock-data","02.runtypes\u002F05.ai-integration\u002F03.mock-data",{"title":287,"path":288,"stem":289},"Translations (i18n)","\u002Fruntypes\u002Fai-integration\u002Fi18n","02.runtypes\u002F05.ai-integration\u002F04.i18n",{"title":291,"icon":292,"redirect":293,"path":294,"stem":295,"children":296,"page":24},"Drizzle ORM","i-lineicons-drizzle","\u002Fruntypes\u002Fdrizzle-orm\u002Fdrizzle-overview","\u002Fruntypes\u002Fdrizzle-orm","02.runtypes\u002F06.drizzle-orm",[297,300,304,308,312,316,320,324,328],{"title":298,"path":293,"stem":299},"Drizzle Overview","02.runtypes\u002F06.drizzle-orm\u002F00.drizzle-overview",{"title":301,"path":302,"stem":303},"Column Formats","\u002Fruntypes\u002Fdrizzle-orm\u002Fcolumn-formats","02.runtypes\u002F06.drizzle-orm\u002F01.column-formats",{"title":305,"path":306,"stem":307},"Views","\u002Fruntypes\u002Fdrizzle-orm\u002Fviews","02.runtypes\u002F06.drizzle-orm\u002F02.views",{"title":309,"path":310,"stem":311},"Indexes and Constraints","\u002Fruntypes\u002Fdrizzle-orm\u002Fconstraints","02.runtypes\u002F06.drizzle-orm\u002F03.constraints",{"title":313,"path":314,"stem":315},"Row Level Security","\u002Fruntypes\u002Fdrizzle-orm\u002Frow-level-security","02.runtypes\u002F06.drizzle-orm\u002F04.row-level-security",{"title":317,"path":318,"stem":319},"Relations","\u002Fruntypes\u002Fdrizzle-orm\u002Frelations","02.runtypes\u002F06.drizzle-orm\u002F05.relations",{"title":321,"path":322,"stem":323},"The Schema File","\u002Fruntypes\u002Fdrizzle-orm\u002Fschema-file","02.runtypes\u002F06.drizzle-orm\u002F06.schema-file",{"title":325,"path":326,"stem":327},"Migrate an Existing Schema","\u002Fruntypes\u002Fdrizzle-orm\u002Fmigrate-an-existing-schema","02.runtypes\u002F06.drizzle-orm\u002F07.migrate-an-existing-schema",{"title":329,"path":330,"stem":331},"Cloudflare D1 and Durable Objects","\u002Fruntypes\u002Fdrizzle-orm\u002Fcloudflare-storage","02.runtypes\u002F06.drizzle-orm\u002F08.cloudflare-storage",{"title":333,"icon":334,"redirect":335,"path":336,"stem":337,"children":338,"page":24},"Diagnostics","i-lucide-triangle-alert","\u002Fruntypes\u002Fdiagnostics\u002Ferror-levels","\u002Fruntypes\u002Fdiagnostics","02.runtypes\u002F08.diagnostics",[339,342],{"title":340,"path":335,"stem":341},"Error Levels","02.runtypes\u002F08.diagnostics\u002F01.error-levels",{"title":343,"path":344,"stem":345},"All Diagnostics","\u002Fruntypes\u002Fdiagnostics\u002Fall-diagnostics","02.runtypes\u002F08.diagnostics\u002F02.all-diagnostics",{"title":347,"icon":348,"path":349,"stem":350,"children":351,"page":24},"Benchmarks","i-lucide-gauge","\u002Fbenchmarks","03.benchmarks",[352,372],{"title":5,"icon":6,"redirect":353,"path":354,"stem":355,"children":356,"page":24},"\u002Fbenchmarks\u002Frpc\u002Fhello-world","\u002Fbenchmarks\u002Frpc","03.benchmarks\u002F02.rpc",[357,360,364,368],{"title":358,"path":353,"stem":359},"Hello World","03.benchmarks\u002F02.rpc\u002F01.hello-world",{"title":361,"path":362,"stem":363},"Light Validation","\u002Fbenchmarks\u002Frpc\u002Flight-validation","03.benchmarks\u002F02.rpc\u002F02.light-validation",{"title":365,"path":366,"stem":367},"Heavy Validation","\u002Fbenchmarks\u002Frpc\u002Fheavy-validation","03.benchmarks\u002F02.rpc\u002F03.heavy-validation",{"title":369,"path":370,"stem":371},"Payload Sizes","\u002Fbenchmarks\u002Frpc\u002Fpayload-sizes","03.benchmarks\u002F02.rpc\u002F04.payload-sizes",{"title":163,"icon":164,"redirect":373,"path":374,"stem":375,"children":376,"page":24},"\u002Fbenchmarks\u002Fruntypes\u002Fis-valid","\u002Fbenchmarks\u002Fruntypes","03.benchmarks\u002F03.runtypes",[377,380,384,388,392,395],{"title":378,"path":373,"stem":379},"Is Valid","03.benchmarks\u002F03.runtypes\u002F01.is-valid",{"title":381,"path":382,"stem":383},"Is Valid Formats","\u002Fbenchmarks\u002Fruntypes\u002Fis-valid-formats","03.benchmarks\u002F03.runtypes\u002F02.is-valid-formats",{"title":385,"path":386,"stem":387},"Get Errors","\u002Fbenchmarks\u002Fruntypes\u002Fget-errors","03.benchmarks\u002F03.runtypes\u002F03.get-errors",{"title":389,"path":390,"stem":391},"Get Errors Formats","\u002Fbenchmarks\u002Fruntypes\u002Fget-errors-formats","03.benchmarks\u002F03.runtypes\u002F04.get-errors-formats",{"title":56,"path":393,"stem":394},"\u002Fbenchmarks\u002Fruntypes\u002Fjson-round-trip","03.benchmarks\u002F03.runtypes\u002F05.json-round-trip",{"title":396,"path":397,"stem":398},"Type Checking","\u002Fbenchmarks\u002Fruntypes\u002Ftype-checking","03.benchmarks\u002F03.runtypes\u002F07.type-checking",{"id":400,"title":329,"body":401,"description":1357,"extension":1358,"links":1359,"meta":1360,"navigation":625,"path":330,"seo":1361,"stem":331,"__hash__":1362},"docs\u002F02.runtypes\u002F06.drizzle-orm\u002F08.cloudflare-storage.md",{"type":402,"value":403,"toc":1352},"minimark",[404,422,468,487,492,507,910,914,920,1318,1322,1325,1342,1348],[405,406,407,408,415,416,421],"p",{},"Cloudflare has two SQLite databases: ",[409,410,414],"a",{"href":411,"rel":412},"https:\u002F\u002Fdevelopers.cloudflare.com\u002Fd1\u002F",[413],"nofollow","D1"," and the SQL storage inside a ",[409,417,420],{"href":418,"rel":419},"https:\u002F\u002Fdevelopers.cloudflare.com\u002Fdurable-objects\u002F",[413],"Durable Object",". Both use the SQLite package.",[423,424,429],"pre",{"className":425,"code":426,"language":427,"meta":428,"style":428},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","npm install @mionjs\u002Fdrizzle-orm-sqlite-core @mionjs\u002Fdrizzle-orm @mionjs\u002Frun-types\nnpm install drizzle-orm   # only needed to run queries\n","bash","",[430,431,432,454],"code",{"__ignoreMap":428},[433,434,437,441,445,448,451],"span",{"class":435,"line":436},"line",1,[433,438,440],{"class":439},"sBMFI","npm",[433,442,444],{"class":443},"sfazB"," install",[433,446,447],{"class":443}," @mionjs\u002Fdrizzle-orm-sqlite-core",[433,449,450],{"class":443}," @mionjs\u002Fdrizzle-orm",[433,452,453],{"class":443}," @mionjs\u002Frun-types\n",[433,455,457,459,461,464],{"class":435,"line":456},2,[433,458,440],{"class":439},[433,460,444],{"class":443},[433,462,463],{"class":443}," drizzle-orm",[433,465,467],{"class":466},"sHwdD","   # only needed to run queries\n",[405,469,470,471,474,475,478,479,482,483,486],{},"There is no D1 or Durable Objects package: in Drizzle ORM, ",[430,472,473],{},"drizzle-orm\u002Fd1"," and ",[430,476,477],{},"drizzle-orm\u002Fdurable-sqlite"," are only drivers. The tables come from ",[430,480,481],{},"drizzle-orm\u002Fsqlite-core",", which ",[430,484,485],{},"@mionjs\u002Fdrizzle-orm-sqlite-core"," already covers. You declare a table once and pick a driver where you connect.",[488,489,491],"h2",{"id":490},"connecting-to-d1","Connecting to D1",[405,493,494,495,498,499,502,503,506],{},"Pass the binding from your Worker's ",[430,496,497],{},"env"," to ",[430,500,501],{},"drizzle",", and the table through ",[430,504,505],{},"toDrizzle",".",[423,508,512],{"className":509,"code":510,"language":511,"meta":428,"style":428},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import {drizzle} from 'drizzle-orm\u002Fd1';\nimport {eq} from 'drizzle-orm';\nimport {toDrizzle} from '@mionjs\u002Fdrizzle-orm-sqlite-core\u002Fdrizzle';\nimport {notes, type Note} from '.\u002Fdrizzle-proxy-sqlite-example.ts';\n\n\u002F\u002F built once\nconst notesDb = toDrizzle(notes);\n\n\u002F\u002F the database binding\ninterface Env {\n  DB: Parameters\u003Ctypeof drizzle>[0];\n}\n\nexport async function findNote(\n  env: Env,\n  id: number\n): Promise\u003CNote | undefined> {\n  const db = drizzle(env.DB);\n  \u002F\u002F the timestamp is already a Date\n  const [note] = await db.select().from(notesDb).where(eq(notesDb.id, id));\n  return note;\n}\n","ts",[430,513,514,544,566,588,620,627,633,655,660,666,678,712,718,723,741,755,766,791,820,826,894,905],{"__ignoreMap":428},[433,515,516,520,524,527,530,533,536,538,541],{"class":435,"line":436},[433,517,519],{"class":518},"s7zQu","import",[433,521,523],{"class":522},"sMK4o"," {",[433,525,501],{"class":526},"sTEyZ",[433,528,529],{"class":522},"}",[433,531,532],{"class":518}," from",[433,534,535],{"class":522}," '",[433,537,473],{"class":443},[433,539,540],{"class":522},"'",[433,542,543],{"class":522},";\n",[433,545,546,548,550,553,555,557,559,562,564],{"class":435,"line":456},[433,547,519],{"class":518},[433,549,523],{"class":522},[433,551,552],{"class":526},"eq",[433,554,529],{"class":522},[433,556,532],{"class":518},[433,558,535],{"class":522},[433,560,561],{"class":443},"drizzle-orm",[433,563,540],{"class":522},[433,565,543],{"class":522},[433,567,569,571,573,575,577,579,581,584,586],{"class":435,"line":568},3,[433,570,519],{"class":518},[433,572,523],{"class":522},[433,574,505],{"class":526},[433,576,529],{"class":522},[433,578,532],{"class":518},[433,580,535],{"class":522},[433,582,583],{"class":443},"@mionjs\u002Fdrizzle-orm-sqlite-core\u002Fdrizzle",[433,585,540],{"class":522},[433,587,543],{"class":522},[433,589,591,593,595,598,601,604,607,609,611,613,616,618],{"class":435,"line":590},4,[433,592,519],{"class":518},[433,594,523],{"class":522},[433,596,597],{"class":526},"notes",[433,599,600],{"class":522},",",[433,602,603],{"class":518}," type",[433,605,606],{"class":526}," Note",[433,608,529],{"class":522},[433,610,532],{"class":518},[433,612,535],{"class":522},[433,614,615],{"class":443},".\u002Fdrizzle-proxy-sqlite-example.ts",[433,617,540],{"class":522},[433,619,543],{"class":522},[433,621,623],{"class":435,"line":622},5,[433,624,626],{"emptyLinePlaceholder":625},true,"\n",[433,628,630],{"class":435,"line":629},6,[433,631,632],{"class":466},"\u002F\u002F built once\n",[433,634,636,640,643,646,650,653],{"class":435,"line":635},7,[433,637,639],{"class":638},"spNyl","const",[433,641,642],{"class":526}," notesDb ",[433,644,645],{"class":522},"=",[433,647,649],{"class":648},"s2Zo4"," toDrizzle",[433,651,652],{"class":526},"(notes)",[433,654,543],{"class":522},[433,656,658],{"class":435,"line":657},8,[433,659,626],{"emptyLinePlaceholder":625},[433,661,663],{"class":435,"line":662},9,[433,664,665],{"class":466},"\u002F\u002F the database binding\n",[433,667,669,672,675],{"class":435,"line":668},10,[433,670,671],{"class":638},"interface",[433,673,674],{"class":439}," Env",[433,676,677],{"class":522}," {\n",[433,679,681,685,688,691,694,697,700,703,707,710],{"class":435,"line":680},11,[433,682,684],{"class":683},"swJcz","  DB",[433,686,687],{"class":522},":",[433,689,690],{"class":439}," Parameters",[433,692,693],{"class":522},"\u003Ctypeof",[433,695,696],{"class":526}," drizzle",[433,698,699],{"class":522},">",[433,701,702],{"class":526},"[",[433,704,706],{"class":705},"sbssI","0",[433,708,709],{"class":526},"]",[433,711,543],{"class":522},[433,713,715],{"class":435,"line":714},12,[433,716,717],{"class":522},"}\n",[433,719,721],{"class":435,"line":720},13,[433,722,626],{"emptyLinePlaceholder":625},[433,724,726,729,732,735,738],{"class":435,"line":725},14,[433,727,728],{"class":518},"export",[433,730,731],{"class":638}," async",[433,733,734],{"class":638}," function",[433,736,737],{"class":648}," findNote",[433,739,740],{"class":522},"(\n",[433,742,744,748,750,752],{"class":435,"line":743},15,[433,745,747],{"class":746},"sHdIc","  env",[433,749,687],{"class":522},[433,751,674],{"class":439},[433,753,754],{"class":522},",\n",[433,756,758,761,763],{"class":435,"line":757},16,[433,759,760],{"class":746},"  id",[433,762,687],{"class":522},[433,764,765],{"class":439}," number\n",[433,767,769,772,775,778,781,784,787,789],{"class":435,"line":768},17,[433,770,771],{"class":522},"):",[433,773,774],{"class":439}," Promise",[433,776,777],{"class":522},"\u003C",[433,779,780],{"class":439},"Note",[433,782,783],{"class":522}," |",[433,785,786],{"class":439}," undefined",[433,788,699],{"class":522},[433,790,677],{"class":522},[433,792,794,797,800,803,805,808,810,812,815,818],{"class":435,"line":793},18,[433,795,796],{"class":638},"  const",[433,798,799],{"class":526}," db",[433,801,802],{"class":522}," =",[433,804,696],{"class":648},[433,806,807],{"class":683},"(",[433,809,497],{"class":526},[433,811,506],{"class":522},[433,813,814],{"class":526},"DB",[433,816,817],{"class":683},")",[433,819,543],{"class":522},[433,821,823],{"class":435,"line":822},19,[433,824,825],{"class":466},"  \u002F\u002F the timestamp is already a Date\n",[433,827,829,831,834,837,839,841,844,846,848,851,854,856,859,861,864,866,868,871,873,875,877,879,881,884,886,889,892],{"class":435,"line":828},20,[433,830,796],{"class":638},[433,832,833],{"class":522}," [",[433,835,836],{"class":526},"note",[433,838,709],{"class":522},[433,840,802],{"class":522},[433,842,843],{"class":518}," await",[433,845,799],{"class":526},[433,847,506],{"class":522},[433,849,850],{"class":648},"select",[433,852,853],{"class":683},"()",[433,855,506],{"class":522},[433,857,858],{"class":648},"from",[433,860,807],{"class":683},[433,862,863],{"class":526},"notesDb",[433,865,817],{"class":683},[433,867,506],{"class":522},[433,869,870],{"class":648},"where",[433,872,807],{"class":683},[433,874,552],{"class":648},[433,876,807],{"class":683},[433,878,863],{"class":526},[433,880,506],{"class":522},[433,882,883],{"class":526},"id",[433,885,600],{"class":522},[433,887,888],{"class":526}," id",[433,890,891],{"class":683},"))",[433,893,543],{"class":522},[433,895,897,900,903],{"class":435,"line":896},21,[433,898,899],{"class":518},"  return",[433,901,902],{"class":526}," note",[433,904,543],{"class":522},[433,906,908],{"class":435,"line":907},22,[433,909,717],{"class":522},[488,911,913],{"id":912},"connecting-to-durable-objects","Connecting to Durable Objects",[405,915,916,917,919],{},"Inside the object, pass its storage to ",[430,918,501],{}," instead. Everything else is identical.",[423,921,923],{"className":509,"code":922,"language":511,"meta":428,"style":428},"import {drizzle} from 'drizzle-orm\u002Fdurable-sqlite';\nimport type {DrizzleSqliteDODatabase} from 'drizzle-orm\u002Fdurable-sqlite';\nimport {toDrizzle} from '@mionjs\u002Fdrizzle-orm-sqlite-core\u002Fdrizzle';\nimport {\n  notes,\n  type Note,\n  type NewNote,\n} from '.\u002Fdrizzle-proxy-sqlite-example.ts';\n\nconst notesDb = toDrizzle(notes);\n\n\u002F\u002F storage needed by Drizzle\ninterface Storage {\n  sql: {exec(query: string, ...bindings: unknown[]): unknown};\n}\n\nexport class NotesObject {\n  private readonly db: DrizzleSqliteDODatabase;\n\n  constructor(storage: Storage) {\n    this.db = drizzle(storage as never);\n  }\n\n  \u002F\u002F models, validators and table work across databases\n  async addNote(note: NewNote): Promise\u003CNote> {\n    const [row] = await this.db.insert(notesDb).values(note).returning();\n    return row;\n  }\n}\n",[430,924,925,945,968,988,994,1001,1010,1019,1033,1037,1051,1055,1060,1069,1114,1118,1122,1134,1151,1155,1173,1199,1204,1209,1215,1244,1297,1308,1313],{"__ignoreMap":428},[433,926,927,929,931,933,935,937,939,941,943],{"class":435,"line":436},[433,928,519],{"class":518},[433,930,523],{"class":522},[433,932,501],{"class":526},[433,934,529],{"class":522},[433,936,532],{"class":518},[433,938,535],{"class":522},[433,940,477],{"class":443},[433,942,540],{"class":522},[433,944,543],{"class":522},[433,946,947,949,951,953,956,958,960,962,964,966],{"class":435,"line":456},[433,948,519],{"class":518},[433,950,603],{"class":518},[433,952,523],{"class":522},[433,954,955],{"class":526},"DrizzleSqliteDODatabase",[433,957,529],{"class":522},[433,959,532],{"class":518},[433,961,535],{"class":522},[433,963,477],{"class":443},[433,965,540],{"class":522},[433,967,543],{"class":522},[433,969,970,972,974,976,978,980,982,984,986],{"class":435,"line":568},[433,971,519],{"class":518},[433,973,523],{"class":522},[433,975,505],{"class":526},[433,977,529],{"class":522},[433,979,532],{"class":518},[433,981,535],{"class":522},[433,983,583],{"class":443},[433,985,540],{"class":522},[433,987,543],{"class":522},[433,989,990,992],{"class":435,"line":590},[433,991,519],{"class":518},[433,993,677],{"class":522},[433,995,996,999],{"class":435,"line":622},[433,997,998],{"class":526},"  notes",[433,1000,754],{"class":522},[433,1002,1003,1006,1008],{"class":435,"line":629},[433,1004,1005],{"class":518},"  type",[433,1007,606],{"class":526},[433,1009,754],{"class":522},[433,1011,1012,1014,1017],{"class":435,"line":635},[433,1013,1005],{"class":518},[433,1015,1016],{"class":526}," NewNote",[433,1018,754],{"class":522},[433,1020,1021,1023,1025,1027,1029,1031],{"class":435,"line":657},[433,1022,529],{"class":522},[433,1024,532],{"class":518},[433,1026,535],{"class":522},[433,1028,615],{"class":443},[433,1030,540],{"class":522},[433,1032,543],{"class":522},[433,1034,1035],{"class":435,"line":662},[433,1036,626],{"emptyLinePlaceholder":625},[433,1038,1039,1041,1043,1045,1047,1049],{"class":435,"line":668},[433,1040,639],{"class":638},[433,1042,642],{"class":526},[433,1044,645],{"class":522},[433,1046,649],{"class":648},[433,1048,652],{"class":526},[433,1050,543],{"class":522},[433,1052,1053],{"class":435,"line":680},[433,1054,626],{"emptyLinePlaceholder":625},[433,1056,1057],{"class":435,"line":714},[433,1058,1059],{"class":466},"\u002F\u002F storage needed by Drizzle\n",[433,1061,1062,1064,1067],{"class":435,"line":720},[433,1063,671],{"class":638},[433,1065,1066],{"class":439}," Storage",[433,1068,677],{"class":522},[433,1070,1071,1074,1076,1078,1081,1083,1086,1088,1091,1093,1096,1099,1101,1104,1107,1109,1111],{"class":435,"line":725},[433,1072,1073],{"class":683},"  sql",[433,1075,687],{"class":522},[433,1077,523],{"class":522},[433,1079,1080],{"class":683},"exec",[433,1082,807],{"class":522},[433,1084,1085],{"class":746},"query",[433,1087,687],{"class":522},[433,1089,1090],{"class":439}," string",[433,1092,600],{"class":522},[433,1094,1095],{"class":522}," ...",[433,1097,1098],{"class":746},"bindings",[433,1100,687],{"class":522},[433,1102,1103],{"class":439}," unknown",[433,1105,1106],{"class":526},"[]",[433,1108,771],{"class":522},[433,1110,1103],{"class":439},[433,1112,1113],{"class":522},"};\n",[433,1115,1116],{"class":435,"line":743},[433,1117,717],{"class":522},[433,1119,1120],{"class":435,"line":757},[433,1121,626],{"emptyLinePlaceholder":625},[433,1123,1124,1126,1129,1132],{"class":435,"line":768},[433,1125,728],{"class":518},[433,1127,1128],{"class":638}," class",[433,1130,1131],{"class":439}," NotesObject",[433,1133,677],{"class":522},[433,1135,1136,1139,1142,1144,1146,1149],{"class":435,"line":793},[433,1137,1138],{"class":638},"  private",[433,1140,1141],{"class":638}," readonly",[433,1143,799],{"class":683},[433,1145,687],{"class":522},[433,1147,1148],{"class":439}," DrizzleSqliteDODatabase",[433,1150,543],{"class":522},[433,1152,1153],{"class":435,"line":822},[433,1154,626],{"emptyLinePlaceholder":625},[433,1156,1157,1160,1162,1165,1167,1169,1171],{"class":435,"line":828},[433,1158,1159],{"class":638},"  constructor",[433,1161,807],{"class":522},[433,1163,1164],{"class":746},"storage",[433,1166,687],{"class":522},[433,1168,1066],{"class":439},[433,1170,817],{"class":522},[433,1172,677],{"class":522},[433,1174,1175,1178,1181,1183,1185,1187,1189,1192,1195,1197],{"class":435,"line":896},[433,1176,1177],{"class":522},"    this.",[433,1179,1180],{"class":526},"db",[433,1182,802],{"class":522},[433,1184,696],{"class":648},[433,1186,807],{"class":683},[433,1188,1164],{"class":526},[433,1190,1191],{"class":518}," as",[433,1193,1194],{"class":439}," never",[433,1196,817],{"class":683},[433,1198,543],{"class":522},[433,1200,1201],{"class":435,"line":907},[433,1202,1203],{"class":522},"  }\n",[433,1205,1207],{"class":435,"line":1206},23,[433,1208,626],{"emptyLinePlaceholder":625},[433,1210,1212],{"class":435,"line":1211},24,[433,1213,1214],{"class":466},"  \u002F\u002F models, validators and table work across databases\n",[433,1216,1218,1221,1224,1226,1228,1230,1232,1234,1236,1238,1240,1242],{"class":435,"line":1217},25,[433,1219,1220],{"class":638},"  async",[433,1222,1223],{"class":683}," addNote",[433,1225,807],{"class":522},[433,1227,836],{"class":746},[433,1229,687],{"class":522},[433,1231,1016],{"class":439},[433,1233,771],{"class":522},[433,1235,774],{"class":439},[433,1237,777],{"class":522},[433,1239,780],{"class":439},[433,1241,699],{"class":522},[433,1243,677],{"class":522},[433,1245,1247,1250,1252,1255,1257,1259,1261,1264,1266,1268,1271,1273,1275,1277,1279,1282,1284,1286,1288,1290,1293,1295],{"class":435,"line":1246},26,[433,1248,1249],{"class":638},"    const",[433,1251,833],{"class":522},[433,1253,1254],{"class":526},"row",[433,1256,709],{"class":522},[433,1258,802],{"class":522},[433,1260,843],{"class":518},[433,1262,1263],{"class":522}," this.",[433,1265,1180],{"class":526},[433,1267,506],{"class":522},[433,1269,1270],{"class":648},"insert",[433,1272,807],{"class":683},[433,1274,863],{"class":526},[433,1276,817],{"class":683},[433,1278,506],{"class":522},[433,1280,1281],{"class":648},"values",[433,1283,807],{"class":683},[433,1285,836],{"class":526},[433,1287,817],{"class":683},[433,1289,506],{"class":522},[433,1291,1292],{"class":648},"returning",[433,1294,853],{"class":683},[433,1296,543],{"class":522},[433,1298,1300,1303,1306],{"class":435,"line":1299},27,[433,1301,1302],{"class":518},"    return",[433,1304,1305],{"class":526}," row",[433,1307,543],{"class":522},[433,1309,1311],{"class":435,"line":1310},28,[433,1312,1203],{"class":522},[433,1314,1316],{"class":435,"line":1315},29,[433,1317,717],{"class":522},[488,1319,1321],{"id":1320},"features-on-cloudflare","Features on Cloudflare",[405,1323,1324],{},"It all comes from the table's types, as on any other database:",[1326,1327,1328,1332,1339],"ul",{},[1329,1330,1331],"li",{},"routes typed with the inferred models, validated before your handler runs",[1329,1333,1334,1335,1338],{},"a timestamp column that arrives as a real ",[430,1336,1337],{},"Date",", in both directions, with nothing to convert by hand",[1329,1340,1341],{},"mock data and friendly error messages generated from the same models",[405,1343,1344,1345,506],{},"Serve those routes with ",[409,1346,1347],{"href":126},"@mionjs\u002Fplatform-cloudflare",[1349,1350,1351],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}",{"title":428,"searchDepth":456,"depth":456,"links":1353},[1354,1355,1356],{"id":490,"depth":456,"text":491},{"id":912,"depth":456,"text":913},{"id":1320,"depth":456,"text":1321},"Declare tables with the SQLite package, then connect them to D1 or Durable Objects storage.","md",null,{},{"title":329,"description":1357},"1ZvhZUhEmnxZq0ChCwWpGEOufaCZyE5Z6bqesbWGzVg",1793324366553]