@lunarhue/expo-wa-sqlite 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (224) hide show
  1. package/.claude/settings.local.json +9 -0
  2. package/.lovely-docs.yaml +11 -0
  3. package/LICENSE +21 -0
  4. package/demo/next.config.mjs +17 -0
  5. package/demo/package.json +26 -0
  6. package/demo/scripts/copy-wasm.mjs +14 -0
  7. package/demo/src/app/layout.tsx +16 -0
  8. package/demo/src/app/page.tsx +16 -0
  9. package/demo/src/app/todos.tsx +118 -0
  10. package/demo/src/db/schema.ts +7 -0
  11. package/demo/tsconfig.json +18 -0
  12. package/lovely-docs/drizzle-orm/arktype.md +113 -0
  13. package/lovely-docs/drizzle-orm/batch-api.md +35 -0
  14. package/lovely-docs/drizzle-orm/cache.md +145 -0
  15. package/lovely-docs/drizzle-orm/check-migrations.md +52 -0
  16. package/lovely-docs/drizzle-orm/column_types/mysql-column-types.md +76 -0
  17. package/lovely-docs/drizzle-orm/column_types/postgresql_column_types.md +314 -0
  18. package/lovely-docs/drizzle-orm/column_types/singlestore-column-types.md +171 -0
  19. package/lovely-docs/drizzle-orm/column_types/sqlite_column_types.md +132 -0
  20. package/lovely-docs/drizzle-orm/column_types.md +76 -0
  21. package/lovely-docs/drizzle-orm/common_patterns_&_recipes/case-insensitive-unique-email.md +113 -0
  22. package/lovely-docs/drizzle-orm/common_patterns_&_recipes/conditional-filters-in-query.md +69 -0
  23. package/lovely-docs/drizzle-orm/common_patterns_&_recipes/count-rows.md +76 -0
  24. package/lovely-docs/drizzle-orm/common_patterns_&_recipes/cursor-based-pagination.md +142 -0
  25. package/lovely-docs/drizzle-orm/common_patterns_&_recipes/d1_http_api_configuration.md +49 -0
  26. package/lovely-docs/drizzle-orm/common_patterns_&_recipes/decrementing-a-value.md +36 -0
  27. package/lovely-docs/drizzle-orm/common_patterns_&_recipes/empty-array-default-value.md +43 -0
  28. package/lovely-docs/drizzle-orm/common_patterns_&_recipes/full-text-search-with-generated-columns.md +73 -0
  29. package/lovely-docs/drizzle-orm/common_patterns_&_recipes/gel-auth-extension.md +89 -0
  30. package/lovely-docs/drizzle-orm/common_patterns_&_recipes/include-or-exclude-columns.md +51 -0
  31. package/lovely-docs/drizzle-orm/common_patterns_&_recipes/incrementing-a-value.md +36 -0
  32. package/lovely-docs/drizzle-orm/common_patterns_&_recipes/limit-offset-pagination.md +104 -0
  33. package/lovely-docs/drizzle-orm/common_patterns_&_recipes/mysql-local-setup.md +55 -0
  34. package/lovely-docs/drizzle-orm/common_patterns_&_recipes/point-datatype-psql.md +79 -0
  35. package/lovely-docs/drizzle-orm/common_patterns_&_recipes/postgis-geometry-point.md +115 -0
  36. package/lovely-docs/drizzle-orm/common_patterns_&_recipes/postgresql-full-text-search.md +150 -0
  37. package/lovely-docs/drizzle-orm/common_patterns_&_recipes/postgresql-local-setup.md +55 -0
  38. package/lovely-docs/drizzle-orm/common_patterns_&_recipes/seeding-with-option.md +69 -0
  39. package/lovely-docs/drizzle-orm/common_patterns_&_recipes/seeding-with-partially-exposed-schema.md +60 -0
  40. package/lovely-docs/drizzle-orm/common_patterns_&_recipes/select-parent-rows-with-at-least-one-related-child-row.md +74 -0
  41. package/lovely-docs/drizzle-orm/common_patterns_&_recipes/timestamp-default-value.md +93 -0
  42. package/lovely-docs/drizzle-orm/common_patterns_&_recipes/toggling-a-boolean-field.md +20 -0
  43. package/lovely-docs/drizzle-orm/common_patterns_&_recipes/update-many-with-different-values.md +50 -0
  44. package/lovely-docs/drizzle-orm/common_patterns_&_recipes/upsert.md +169 -0
  45. package/lovely-docs/drizzle-orm/common_patterns_&_recipes/vector-similarity-search.md +79 -0
  46. package/lovely-docs/drizzle-orm/common_patterns_&_recipes.md +787 -0
  47. package/lovely-docs/drizzle-orm/connect-aws-data-api-pg.md +47 -0
  48. package/lovely-docs/drizzle-orm/connect-bun-sql.md +35 -0
  49. package/lovely-docs/drizzle-orm/connect-bun-sqlite.md +42 -0
  50. package/lovely-docs/drizzle-orm/connect-cloudflare-d1.md +61 -0
  51. package/lovely-docs/drizzle-orm/connect-cloudflare-do.md +86 -0
  52. package/lovely-docs/drizzle-orm/connect-neon.md +72 -0
  53. package/lovely-docs/drizzle-orm/connect-nile.md +84 -0
  54. package/lovely-docs/drizzle-orm/connect-pglite.md +39 -0
  55. package/lovely-docs/drizzle-orm/connect-planetscale.md +37 -0
  56. package/lovely-docs/drizzle-orm/connect-prisma-postgres.md +48 -0
  57. package/lovely-docs/drizzle-orm/connect-sqlite-cloud.md +29 -0
  58. package/lovely-docs/drizzle-orm/connect-supabase.md +45 -0
  59. package/lovely-docs/drizzle-orm/connect-tidb-serverless.md +35 -0
  60. package/lovely-docs/drizzle-orm/connect-turso-database.md +28 -0
  61. package/lovely-docs/drizzle-orm/connect-turso.md +60 -0
  62. package/lovely-docs/drizzle-orm/connect-vercel-postgres.md +37 -0
  63. package/lovely-docs/drizzle-orm/connect-xata.md +29 -0
  64. package/lovely-docs/drizzle-orm/custom-migrations.md +40 -0
  65. package/lovely-docs/drizzle-orm/custom-types.md +137 -0
  66. package/lovely-docs/drizzle-orm/database-connection-overview.md +89 -0
  67. package/lovely-docs/drizzle-orm/database_setup_guides/bun-sql-existing.md +59 -0
  68. package/lovely-docs/drizzle-orm/database_setup_guides/bun-sqlite-existing.md +48 -0
  69. package/lovely-docs/drizzle-orm/database_setup_guides/bun-sqlite-new.md +34 -0
  70. package/lovely-docs/drizzle-orm/database_setup_guides/d1-new.md +74 -0
  71. package/lovely-docs/drizzle-orm/database_setup_guides/expo-sqlite-setup.md +169 -0
  72. package/lovely-docs/drizzle-orm/database_setup_guides/gel-existing-project.md +81 -0
  73. package/lovely-docs/drizzle-orm/database_setup_guides/get-started-bun-sql.md +29 -0
  74. package/lovely-docs/drizzle-orm/database_setup_guides/getting_started_with_gel.md +85 -0
  75. package/lovely-docs/drizzle-orm/database_setup_guides/mysql-existing-project.md +32 -0
  76. package/lovely-docs/drizzle-orm/database_setup_guides/mysql-setup.md +43 -0
  77. package/lovely-docs/drizzle-orm/database_setup_guides/neon-existing-project.md +39 -0
  78. package/lovely-docs/drizzle-orm/database_setup_guides/neon-setup.md +45 -0
  79. package/lovely-docs/drizzle-orm/database_setup_guides/nile-existing-project.md +66 -0
  80. package/lovely-docs/drizzle-orm/database_setup_guides/nile-setup.md +59 -0
  81. package/lovely-docs/drizzle-orm/database_setup_guides/op-sqlite_setup_guide.md +135 -0
  82. package/lovely-docs/drizzle-orm/database_setup_guides/pglite-existing-project.md +67 -0
  83. package/lovely-docs/drizzle-orm/database_setup_guides/pglite-setup.md +33 -0
  84. package/lovely-docs/drizzle-orm/database_setup_guides/planetscale-existing-project.md +70 -0
  85. package/lovely-docs/drizzle-orm/database_setup_guides/planetscale-setup.md +46 -0
  86. package/lovely-docs/drizzle-orm/database_setup_guides/postgresql-existing-project.md +57 -0
  87. package/lovely-docs/drizzle-orm/database_setup_guides/postgresql-setup.md +44 -0
  88. package/lovely-docs/drizzle-orm/database_setup_guides/singlestore-existing-project.md +22 -0
  89. package/lovely-docs/drizzle-orm/database_setup_guides/singlestore-setup.md +37 -0
  90. package/lovely-docs/drizzle-orm/database_setup_guides/sqlite-cloud-existing-project.md +52 -0
  91. package/lovely-docs/drizzle-orm/database_setup_guides/sqlite-cloud-setup.md +53 -0
  92. package/lovely-docs/drizzle-orm/database_setup_guides/sqlite-durable-objects-setup.md +163 -0
  93. package/lovely-docs/drizzle-orm/database_setup_guides/sqlite-existing-project.md +36 -0
  94. package/lovely-docs/drizzle-orm/database_setup_guides/sqlite-new.md +28 -0
  95. package/lovely-docs/drizzle-orm/database_setup_guides/supabase-existing-project.md +32 -0
  96. package/lovely-docs/drizzle-orm/database_setup_guides/tidb-existing-project.md +25 -0
  97. package/lovely-docs/drizzle-orm/database_setup_guides/tidb-serverless-setup.md +41 -0
  98. package/lovely-docs/drizzle-orm/database_setup_guides/turso-database-existing.md +61 -0
  99. package/lovely-docs/drizzle-orm/database_setup_guides/turso-database-setup.md +60 -0
  100. package/lovely-docs/drizzle-orm/database_setup_guides/turso-existing.md +74 -0
  101. package/lovely-docs/drizzle-orm/database_setup_guides/turso-new.md +78 -0
  102. package/lovely-docs/drizzle-orm/database_setup_guides/vercel-postgres-existing-project.md +71 -0
  103. package/lovely-docs/drizzle-orm/database_setup_guides/vercel-postgres-setup.md +46 -0
  104. package/lovely-docs/drizzle-orm/database_setup_guides/xata-existing-project.md +32 -0
  105. package/lovely-docs/drizzle-orm/database_setup_guides/xata-new.md +30 -0
  106. package/lovely-docs/drizzle-orm/database_setup_guides.md +144 -0
  107. package/lovely-docs/drizzle-orm/delete.md +57 -0
  108. package/lovely-docs/drizzle-orm/drizzle-config-file.md +252 -0
  109. package/lovely-docs/drizzle-orm/drizzle-kit-up.md +43 -0
  110. package/lovely-docs/drizzle-orm/dynamic-query-building.md +68 -0
  111. package/lovely-docs/drizzle-orm/eslint-plugin.md +76 -0
  112. package/lovely-docs/drizzle-orm/expo-sqlite.md +101 -0
  113. package/lovely-docs/drizzle-orm/export.md +88 -0
  114. package/lovely-docs/drizzle-orm/faq.md +28 -0
  115. package/lovely-docs/drizzle-orm/filter-and-conditional-operators.md +169 -0
  116. package/lovely-docs/drizzle-orm/gel-setup.md +37 -0
  117. package/lovely-docs/drizzle-orm/generate.md +119 -0
  118. package/lovely-docs/drizzle-orm/generated-columns.md +128 -0
  119. package/lovely-docs/drizzle-orm/getting_started/database_integrations/drizzle-with-turso.md +159 -0
  120. package/lovely-docs/drizzle-orm/getting_started/database_integrations/drizzle_with_nile_database.md +195 -0
  121. package/lovely-docs/drizzle-orm/getting_started/database_integrations/neon_postgres_integration.md +157 -0
  122. package/lovely-docs/drizzle-orm/getting_started/database_integrations/supabase_integration.md +150 -0
  123. package/lovely-docs/drizzle-orm/getting_started/database_integrations/vercel-postgres-setup.md +152 -0
  124. package/lovely-docs/drizzle-orm/getting_started/database_integrations/xata_integration.md +143 -0
  125. package/lovely-docs/drizzle-orm/getting_started/database_integrations.md +117 -0
  126. package/lovely-docs/drizzle-orm/getting_started/edge_functions_integration/drizzle_with_vercel_edge_functions.md +220 -0
  127. package/lovely-docs/drizzle-orm/getting_started/edge_functions_integration/netlify_edge_functions_with_neon_postgres.md +120 -0
  128. package/lovely-docs/drizzle-orm/getting_started/edge_functions_integration/netlify_edge_functions_with_supabase.md +94 -0
  129. package/lovely-docs/drizzle-orm/getting_started/edge_functions_integration/supabase_edge_functions_integration.md +116 -0
  130. package/lovely-docs/drizzle-orm/getting_started/edge_functions_integration.md +63 -0
  131. package/lovely-docs/drizzle-orm/getting_started/todo_app_with_neon_postgres.md +323 -0
  132. package/lovely-docs/drizzle-orm/getting_started.md +443 -0
  133. package/lovely-docs/drizzle-orm/graphql.md +107 -0
  134. package/lovely-docs/drizzle-orm/http-proxy-driver.md +138 -0
  135. package/lovely-docs/drizzle-orm/indexes-constraints.md +135 -0
  136. package/lovely-docs/drizzle-orm/insert.mdx.md +118 -0
  137. package/lovely-docs/drizzle-orm/joins.md +145 -0
  138. package/lovely-docs/drizzle-orm/kit-overview.md +81 -0
  139. package/lovely-docs/drizzle-orm/migrate.md +54 -0
  140. package/lovely-docs/drizzle-orm/migration_guides/migrate-from-sequelize.md +335 -0
  141. package/lovely-docs/drizzle-orm/migration_guides/migrate-from-typeorm.md +317 -0
  142. package/lovely-docs/drizzle-orm/migration_guides/migrate_from_prisma_to_drizzle.md +258 -0
  143. package/lovely-docs/drizzle-orm/migration_guides.md +201 -0
  144. package/lovely-docs/drizzle-orm/migrations.md +50 -0
  145. package/lovely-docs/drizzle-orm/mysql-setup.md +51 -0
  146. package/lovely-docs/drizzle-orm/op-sqlite-setup.md +80 -0
  147. package/lovely-docs/drizzle-orm/overview.md +69 -0
  148. package/lovely-docs/drizzle-orm/postgresql-setup.md +71 -0
  149. package/lovely-docs/drizzle-orm/postgresql_extensions.md +93 -0
  150. package/lovely-docs/drizzle-orm/prepared-statements.md +77 -0
  151. package/lovely-docs/drizzle-orm/prisma-extension.md +46 -0
  152. package/lovely-docs/drizzle-orm/pull.md +134 -0
  153. package/lovely-docs/drizzle-orm/push.md +129 -0
  154. package/lovely-docs/drizzle-orm/queries-and-crud.md +72 -0
  155. package/lovely-docs/drizzle-orm/quick-start.md +63 -0
  156. package/lovely-docs/drizzle-orm/react-native-sqlite-setup.md +1 -0
  157. package/lovely-docs/drizzle-orm/read-replicas.md +66 -0
  158. package/lovely-docs/drizzle-orm/relational-queries.md +271 -0
  159. package/lovely-docs/drizzle-orm/relations.md +194 -0
  160. package/lovely-docs/drizzle-orm/release_notes/live-queries.md +27 -0
  161. package/lovely-docs/drizzle-orm/release_notes/pglite_driver_support.md +14 -0
  162. package/lovely-docs/drizzle-orm/release_notes/v0.11.0_release.md +139 -0
  163. package/lovely-docs/drizzle-orm/release_notes/v0.16.2_release_notes.md +86 -0
  164. package/lovely-docs/drizzle-orm/release_notes/v0.23.2_release.md +5 -0
  165. package/lovely-docs/drizzle-orm/release_notes/v0.27.2_-_unique_constraints_support.md +66 -0
  166. package/lovely-docs/drizzle-orm/release_notes/v0.28.0_release_notes.md +80 -0
  167. package/lovely-docs/drizzle-orm/release_notes/v0.28.1_release.md +7 -0
  168. package/lovely-docs/drizzle-orm/release_notes/v0.28.2_release_notes.md +18 -0
  169. package/lovely-docs/drizzle-orm/release_notes/v0.28.3_release_notes.md +48 -0
  170. package/lovely-docs/drizzle-orm/release_notes/v0.28.4_release.md +8 -0
  171. package/lovely-docs/drizzle-orm/release_notes/v0.28.5_release_notes.md +7 -0
  172. package/lovely-docs/drizzle-orm/release_notes/v0.28.6_release_notes.md +54 -0
  173. package/lovely-docs/drizzle-orm/release_notes/v0.29.0_release_notes.md +143 -0
  174. package/lovely-docs/drizzle-orm/release_notes/v0.29.1_release_notes.md +72 -0
  175. package/lovely-docs/drizzle-orm/release_notes/v0.29.2_release_notes.md +95 -0
  176. package/lovely-docs/drizzle-orm/release_notes/v0.29.3_release.md +7 -0
  177. package/lovely-docs/drizzle-orm/release_notes/v0.29.4_release_notes.md +40 -0
  178. package/lovely-docs/drizzle-orm/release_notes/v0.29.5_release_notes.md +69 -0
  179. package/lovely-docs/drizzle-orm/release_notes/v0.30.0_release_notes.md +31 -0
  180. package/lovely-docs/drizzle-orm/release_notes/v0.30.10_release.md +18 -0
  181. package/lovely-docs/drizzle-orm/release_notes/v0.30.1_release_notes.md +16 -0
  182. package/lovely-docs/drizzle-orm/release_notes/v0.30.2_release_notes.md +7 -0
  183. package/lovely-docs/drizzle-orm/release_notes/v0.30.3_release_notes.md +8 -0
  184. package/lovely-docs/drizzle-orm/release_notes/v0.30.5_release_notes.md +20 -0
  185. package/lovely-docs/drizzle-orm/release_notes/v0.30.7_release.md +5 -0
  186. package/lovely-docs/drizzle-orm/release_notes/v0.30.8_release_notes.md +36 -0
  187. package/lovely-docs/drizzle-orm/release_notes/v0.30.9_release.md +29 -0
  188. package/lovely-docs/drizzle-orm/release_notes/v0.31.0_release_notes.md +186 -0
  189. package/lovely-docs/drizzle-orm/release_notes/v0.31.2_tidb_cloud_serverless_support.md +16 -0
  190. package/lovely-docs/drizzle-orm/release_notes/v0.31.3_release.md +19 -0
  191. package/lovely-docs/drizzle-orm/release_notes/v0.31.4_release.md +1 -0
  192. package/lovely-docs/drizzle-orm/release_notes/v0.32.0_release_notes.md +136 -0
  193. package/lovely-docs/drizzle-orm/release_notes/v0.32.1_release_notes.md +15 -0
  194. package/lovely-docs/drizzle-orm/release_notes/v0.32.2_release.md +13 -0
  195. package/lovely-docs/drizzle-orm/release_notes/xata-http-driver-support.md +27 -0
  196. package/lovely-docs/drizzle-orm/release_notes.md +25 -0
  197. package/lovely-docs/drizzle-orm/rls.mdx.md +385 -0
  198. package/lovely-docs/drizzle-orm/schema-declaration.md +239 -0
  199. package/lovely-docs/drizzle-orm/schemas.md +63 -0
  200. package/lovely-docs/drizzle-orm/seed-generators.md +220 -0
  201. package/lovely-docs/drizzle-orm/seed-limitations.md +3 -0
  202. package/lovely-docs/drizzle-orm/seed-overview.md +155 -0
  203. package/lovely-docs/drizzle-orm/seed-versioning.md +85 -0
  204. package/lovely-docs/drizzle-orm/select.md +411 -0
  205. package/lovely-docs/drizzle-orm/sequences.md +62 -0
  206. package/lovely-docs/drizzle-orm/serverless-performance.md +21 -0
  207. package/lovely-docs/drizzle-orm/set-operations.md +127 -0
  208. package/lovely-docs/drizzle-orm/singlestore-setup.md +57 -0
  209. package/lovely-docs/drizzle-orm/sql-template.md +127 -0
  210. package/lovely-docs/drizzle-orm/sqlite-setup.md +65 -0
  211. package/lovely-docs/drizzle-orm/studio.md +47 -0
  212. package/lovely-docs/drizzle-orm/transactions.md +83 -0
  213. package/lovely-docs/drizzle-orm/type-helpers-and-utilities.md +160 -0
  214. package/lovely-docs/drizzle-orm/typebox.md +110 -0
  215. package/lovely-docs/drizzle-orm/update.md +79 -0
  216. package/lovely-docs/drizzle-orm/upgrade-to-0.21.0.md +40 -0
  217. package/lovely-docs/drizzle-orm/valibot.md +115 -0
  218. package/lovely-docs/drizzle-orm/views.md +135 -0
  219. package/lovely-docs/drizzle-orm/why-drizzle.md +66 -0
  220. package/lovely-docs/drizzle-orm/zod.md +113 -0
  221. package/lovely-docs/drizzle-orm.md +60 -0
  222. package/package.json +24 -0
  223. package/src/index.ts +186 -0
  224. package/tsconfig.json +14 -0
@@ -0,0 +1,220 @@
1
+ ## Using Drizzle ORM with Vercel Edge Functions
2
+
3
+ This tutorial covers integrating Drizzle ORM with Vercel Functions running in Edge runtime. Edge runtime has limitations compared to Node.js, so edge-compatible drivers are required.
4
+
5
+ ### Prerequisites
6
+ - Vercel CLI installed
7
+ - Existing Next.js project (or create with `npx create-next-app@latest --typescript`)
8
+ - Drizzle ORM and Drizzle Kit installed (`npm install drizzle-orm -D drizzle-kit`)
9
+
10
+ ### Edge-Compatible Drivers
11
+ Choose a driver based on your database:
12
+ - **Neon serverless driver**: For Neon Postgres (HTTP/WebSocket instead of TCP)
13
+ - **Vercel Postgres driver**: Built on Neon serverless driver, for Vercel Postgres
14
+ - **PlanetScale serverless driver**: For MySQL over HTTP
15
+ - **libSQL client**: For Turso database
16
+
17
+ ### Neon Postgres Setup
18
+
19
+ 1. Install driver: `npm install @neondatabase/serverless`
20
+
21
+ 2. Create schema in `src/db/schema.ts`:
22
+ ```typescript
23
+ import { pgTable, serial, text } from "drizzle-orm/pg-core";
24
+
25
+ export const usersTable = pgTable('users_table', {
26
+ id: serial('id').primaryKey(),
27
+ name: text('name').notNull(),
28
+ age: text('age').notNull(),
29
+ email: text('email').notNull().unique(),
30
+ })
31
+ ```
32
+
33
+ 3. Create `drizzle.config.ts`:
34
+ ```typescript
35
+ import { defineConfig } from "drizzle-kit";
36
+
37
+ export default defineConfig({
38
+ schema: "./src/db/schema.ts",
39
+ dialect: "postgresql",
40
+ dbCredentials: {
41
+ url: process.env.POSTGRES_URL!,
42
+ },
43
+ });
44
+ ```
45
+
46
+ 4. Set `.env`:
47
+ ```
48
+ POSTGRES_URL="postgres://[user]:[password]@[host]-[region].aws.neon.tech:5432/[db-name]?sslmode=[ssl-mode]"
49
+ ```
50
+
51
+ 5. Generate and run migrations:
52
+ ```bash
53
+ npx drizzle-kit generate
54
+ npx drizzle-kit migrate
55
+ # Or use push for quick prototyping:
56
+ npx drizzle-kit push
57
+ ```
58
+
59
+ 6. Connect in `src/db/index.ts`:
60
+ ```typescript
61
+ import { drizzle } from 'drizzle-orm/neon-serverless';
62
+ export const db = drizzle(process.env.POSTGRES_URL!)
63
+ ```
64
+
65
+ 7. Create API route in `src/app/api/hello/route.ts`:
66
+ ```typescript
67
+ import { db } from "@/db";
68
+ import { usersTable } from "@/db/schema";
69
+ import { NextResponse } from "next/server";
70
+
71
+ export const dynamic = 'force-dynamic';
72
+ export const runtime = 'edge'
73
+
74
+ export async function GET(request: Request) {
75
+ const users = await db.select().from(usersTable)
76
+ return NextResponse.json({ users, message: 'success' });
77
+ }
78
+ ```
79
+
80
+ 8. Test locally: `npx next dev` then navigate to `/api/hello`
81
+
82
+ 9. Deploy: `vercel` then `vercel env add POSTGRES_URL` then `vercel` again
83
+
84
+ ### Vercel Postgres Setup
85
+
86
+ 1. Install: `npm install @vercel/postgres`
87
+
88
+ 2. Schema and config identical to Neon (same PostgreSQL dialect)
89
+
90
+ 3. Connect in `src/db/index.ts`:
91
+ ```typescript
92
+ import { drizzle } from 'drizzle-orm/vercel-postgres';
93
+ export const db = drizzle()
94
+ ```
95
+
96
+ 4. API route, testing, and deployment same as Neon
97
+
98
+ ### PlanetScale (MySQL) Setup
99
+
100
+ 1. Install: `npm install @planetscale/database`
101
+
102
+ 2. Create schema in `src/db/schema.ts`:
103
+ ```typescript
104
+ import { mysqlTable, serial, text } from "drizzle-orm/mysql-core";
105
+
106
+ export const usersTable = mysqlTable('users_table', {
107
+ id: serial('id').primaryKey(),
108
+ name: text('name').notNull(),
109
+ age: text('age').notNull(),
110
+ email: text('email').notNull().unique(),
111
+ })
112
+ ```
113
+
114
+ 3. Create `drizzle.config.ts`:
115
+ ```typescript
116
+ import { defineConfig } from "drizzle-kit";
117
+
118
+ export default defineConfig({
119
+ schema: "./src/db/schema.ts",
120
+ dialect: "mysql",
121
+ dbCredentials: {
122
+ url: process.env.MYSQL_URL!,
123
+ },
124
+ });
125
+ ```
126
+
127
+ 4. Set `.env`:
128
+ ```
129
+ MYSQL_URL="mysql://[user]:[password]@[host].[region].psdb.cloud/[db-name]?ssl={'rejectUnauthorized':[ssl-rejectUnauthorized]}"
130
+ ```
131
+
132
+ 5. Generate and run migrations: `npx drizzle-kit generate` then `npx drizzle-kit migrate`
133
+
134
+ 6. Connect in `src/db/index.ts`:
135
+ ```typescript
136
+ import { drizzle } from "drizzle-orm/planetscale-serverless";
137
+ export const db = drizzle(process.env.MYSQL_URL!)
138
+ ```
139
+
140
+ 7. API route in `src/app/api/hello/route.ts`:
141
+ ```typescript
142
+ import { db } from "@/app/db/db";
143
+ import { usersTable } from "@/app/db/schema";
144
+ import { NextResponse } from "next/server";
145
+
146
+ export const dynamic = 'force-dynamic';
147
+ export const runtime = 'edge'
148
+
149
+ export async function GET(request: Request) {
150
+ const users = await db.select().from(usersTable)
151
+ return NextResponse.json({ users, message: 'success' });
152
+ }
153
+ ```
154
+
155
+ 8. Test and deploy same as Neon, but use `vercel env add MYSQL_URL`
156
+
157
+ ### Turso (SQLite) Setup
158
+
159
+ 1. Install: `npm install @libsql/client`
160
+
161
+ 2. Create schema in `src/db/schema.ts`:
162
+ ```typescript
163
+ import { integer, sqliteTable, text } from "drizzle-orm/sqlite-core";
164
+
165
+ export const usersTable = sqliteTable('users_table', {
166
+ id: integer('id').primaryKey(),
167
+ name: text('name').notNull(),
168
+ age: text('age').notNull(),
169
+ email: text('email').notNull().unique(),
170
+ })
171
+ ```
172
+
173
+ 3. Create `drizzle.config.ts`:
174
+ ```typescript
175
+ import { defineConfig } from "drizzle-kit";
176
+
177
+ export default defineConfig({
178
+ schema: "./src/db/schema.ts",
179
+ dialect: "turso",
180
+ dbCredentials: {
181
+ url: process.env.TURSO_CONNECTION_URL!,
182
+ authToken: process.env.TURSO_AUTH_TOKEN!,
183
+ },
184
+ });
185
+ ```
186
+
187
+ 4. Set `.env`:
188
+ ```
189
+ TURSO_CONNECTION_URL="libsql://[db-name].turso.io"
190
+ TURSO_AUTH_TOKEN="[auth-token]"
191
+ ```
192
+
193
+ 5. Generate and run migrations: `npx drizzle-kit generate` then `npx drizzle-kit migrate`
194
+
195
+ 6. Connect in `src/db/index.ts`:
196
+ ```typescript
197
+ import { drizzle } from 'drizzle-orm/libsql';
198
+
199
+ export const db = drizzle({ connection: {
200
+ url: process.env.TURSO_CONNECTION_URL!,
201
+ authToken: process.env.TURSO_AUTH_TOKEN!,
202
+ }})
203
+ ```
204
+
205
+ 7. API route in `src/app/api/hello/route.ts`:
206
+ ```typescript
207
+ import { db } from "@/app/db/db";
208
+ import { usersTable } from "@/app/db/schema";
209
+ import { NextResponse } from "next/server";
210
+
211
+ export const dynamic = 'force-dynamic';
212
+ export const runtime = 'edge'
213
+
214
+ export async function GET(request: Request) {
215
+ const users = await db.select().from(usersTable)
216
+ return NextResponse.json({ users, message: 'success' });
217
+ }
218
+ ```
219
+
220
+ 8. Test locally and deploy: `vercel` then `vercel env add TURSO_CONNECTION_URL` and `vercel env add TURSO_AUTH_TOKEN` then `vercel`
@@ -0,0 +1,120 @@
1
+ ## Setup Overview
2
+ This tutorial integrates Drizzle ORM with Netlify Edge Functions and Neon Postgres database.
3
+
4
+ ## Prerequisites
5
+ - Netlify CLI installed
6
+ - Drizzle ORM and Drizzle Kit: `npm install drizzle-orm -D drizzle-kit`
7
+ - dotenv package (or Node.js v20.6.0+): `npm install dotenv`
8
+ - Optional: `npm install @netlify/edge-functions` for Context types
9
+
10
+ Note: These packages are only for local development. Edge Functions use imports from `import_map.json`.
11
+
12
+ ## Configuration Steps
13
+
14
+ **1. Neon Postgres Setup**
15
+ - Log into Neon Console and select/create a project
16
+ - Use the default `neondb` database
17
+ - Copy connection string from Connect button
18
+
19
+ **2. Environment Variables**
20
+ Add to `.env`:
21
+ ```
22
+ DATABASE_URL=postgres://username:password@ep-cool-darkness-123456.us-east-2.aws.neon.tech/neondb?sslmode=require
23
+ ```
24
+
25
+ **3. Edge Function File Structure**
26
+ Create `netlify/edge-functions/user.ts`:
27
+ ```typescript
28
+ import type { Context } from "@netlify/edge-functions";
29
+
30
+ export default async (request: Request, context: Context) => {
31
+ return new Response("User data");
32
+ };
33
+ ```
34
+
35
+ **4. Import Map**
36
+ Create `import_map.json` in project root:
37
+ ```json
38
+ {
39
+ "imports": {
40
+ "drizzle-orm/": "https://esm.sh/drizzle-orm/",
41
+ "@neondatabase/serverless": "https://esm.sh/@neondatabase/serverless"
42
+ }
43
+ }
44
+ ```
45
+
46
+ **5. Netlify Configuration**
47
+ Create `netlify.toml`:
48
+ ```toml
49
+ [functions]
50
+ deno_import_map = "./import_map.json"
51
+
52
+ [[edge_functions]]
53
+ path = "/user"
54
+ function = "user"
55
+ ```
56
+
57
+ **6. Database Schema**
58
+ Create `netlify/edge-functions/common/schema.ts`:
59
+ ```typescript
60
+ import { pgTable, serial, text, integer } from "drizzle-orm/pg-core";
61
+
62
+ export const usersTable = pgTable('users_table', {
63
+ id: serial('id').primaryKey(),
64
+ name: text('name').notNull(),
65
+ age: integer('age').notNull(),
66
+ email: text('email').notNull().unique(),
67
+ })
68
+ ```
69
+
70
+ **7. Drizzle Config**
71
+ Create `drizzle.config.ts`:
72
+ ```typescript
73
+ import 'dotenv/config';
74
+ import type { Config } from "drizzle-kit";
75
+
76
+ export default {
77
+ schema: './netlify/edge-functions/common/schema.ts',
78
+ out: './drizzle',
79
+ dialect: 'postgresql',
80
+ dbCredentials: {
81
+ url: process.env.DATABASE_URL!,
82
+ },
83
+ } satisfies Config;
84
+ ```
85
+
86
+ **8. Apply Schema**
87
+ ```bash
88
+ npx drizzle-kit push
89
+ ```
90
+
91
+ **9. Connect to Database in Edge Function**
92
+ Update `netlify/edge-functions/user.ts`:
93
+ ```typescript
94
+ import type { Context } from "@netlify/edge-functions";
95
+ import { usersTable } from "./common/schema.ts";
96
+ import { neon } from '@neondatabase/serverless';
97
+ import { drizzle } from 'drizzle-orm/neon-http';
98
+
99
+ export default async (request: Request, context: Context) => {
100
+ const sql = neon(Netlify.env.get("DATABASE_URL")!);
101
+ const db = drizzle({ client: sql });
102
+ const users = await db.select().from(usersTable);
103
+ return new Response(JSON.stringify(users));
104
+ };
105
+ ```
106
+
107
+ ## Local Testing
108
+ ```bash
109
+ netlify dev
110
+ ```
111
+ Navigate to `/user` route. VS Code may show red underlines for imports despite correct execution; configure it when prompted or restart Deno Language Server.
112
+
113
+ ## Deployment
114
+ ```bash
115
+ netlify init
116
+ netlify env:import .env
117
+ netlify deploy
118
+ netlify deploy --prod # for production
119
+ ```
120
+ Access deployed function at `https://<your-site>/user`
@@ -0,0 +1,94 @@
1
+ ## Setup
2
+
3
+ Prerequisites: Netlify CLI, drizzle-orm, drizzle-kit, dotenv (or Node.js v20.6.0+), optionally @netlify/edge-functions for types.
4
+
5
+ Create Supabase project, get connection string from dashboard (Connect > Transaction pooler), add to `.env`:
6
+ ```
7
+ DATABASE_URL=<YOUR_DATABASE_URL>
8
+ ```
9
+
10
+ ## Project Structure
11
+
12
+ Create `netlify/edge-functions/` directory for edge functions.
13
+
14
+ Create `import_map.json` in project root:
15
+ ```json
16
+ {
17
+ "imports": {
18
+ "drizzle-orm/": "https://esm.sh/drizzle-orm/",
19
+ "postgres": "https://esm.sh/postgres"
20
+ }
21
+ }
22
+ ```
23
+
24
+ Create `netlify.toml`:
25
+ ```toml
26
+ [functions]
27
+ deno_import_map = "./import_map.json"
28
+
29
+ [[edge_functions]]
30
+ path = "/user"
31
+ function = "user"
32
+ ```
33
+
34
+ ## Schema and Configuration
35
+
36
+ Create `netlify/edge-functions/common/schema.ts`:
37
+ ```typescript
38
+ import { pgTable, serial, text, integer } from "drizzle-orm/pg-core";
39
+
40
+ export const usersTable = pgTable('users_table', {
41
+ id: serial('id').primaryKey(),
42
+ name: text('name').notNull(),
43
+ age: integer('age').notNull(),
44
+ email: text('email').notNull().unique(),
45
+ })
46
+ ```
47
+
48
+ Create `drizzle.config.ts` in project root:
49
+ ```typescript
50
+ import 'dotenv/config';
51
+ import type { Config } from "drizzle-kit";
52
+
53
+ export default {
54
+ schema: './netlify/edge-functions/common/schema.ts',
55
+ out: './drizzle',
56
+ dialect: 'postgresql',
57
+ dbCredentials: {
58
+ url: process.env.DATABASE_URL!,
59
+ },
60
+ } satisfies Config;
61
+ ```
62
+
63
+ Apply schema: `npx drizzle-kit push`
64
+
65
+ ## Edge Function
66
+
67
+ Create `netlify/edge-functions/user.ts`:
68
+ ```typescript
69
+ import type { Context } from "@netlify/edge-functions";
70
+ import { usersTable } from "./common/schema.ts";
71
+ import { drizzle } from 'drizzle-orm/postgres-js';
72
+ import postgres from 'postgres';
73
+
74
+ export default async (request: Request, context: Context) => {
75
+ const queryClient = postgres(Netlify.env.get("DATABASE_URL")!);
76
+ const db = drizzle({ client: queryClient });
77
+ const users = await db.select().from(usersTable);
78
+ return new Response(JSON.stringify(users));
79
+ };
80
+ ```
81
+
82
+ Access environment variables via `Netlify.env.get()`. Request and Response types are global.
83
+
84
+ ## Testing and Deployment
85
+
86
+ Local testing: `netlify dev` - navigate to `/user` route.
87
+
88
+ Initialize project: `netlify init`
89
+
90
+ Import env vars: `netlify env:import .env`
91
+
92
+ Deploy: `netlify deploy` (draft) or `netlify deploy --prod` (production)
93
+
94
+ Access deployed function at `<deployed-url>/user`
@@ -0,0 +1,116 @@
1
+ ## Setup
2
+
3
+ Prerequisites: Supabase CLI, Drizzle ORM, Drizzle Kit, Docker Desktop.
4
+
5
+ ## Schema Definition
6
+
7
+ Create `src/schema.ts`:
8
+ ```typescript
9
+ import { pgTable, serial, text, integer } from "drizzle-orm/pg-core";
10
+
11
+ export const usersTable = pgTable('users_table', {
12
+ id: serial('id').primaryKey(),
13
+ name: text('name').notNull(),
14
+ age: integer('age').notNull()
15
+ })
16
+ ```
17
+
18
+ ## Configuration
19
+
20
+ Create `drizzle.config.ts`:
21
+ ```typescript
22
+ import { defineConfig } from "drizzle-kit";
23
+
24
+ export default defineConfig({
25
+ schema: "./src/schema.ts",
26
+ out: "./supabase/migrations",
27
+ dialect: "postgresql",
28
+ });
29
+ ```
30
+
31
+ ## Project Initialization
32
+
33
+ ```bash
34
+ supabase init
35
+ npx drizzle-kit generate
36
+ supabase start
37
+ supabase migration up
38
+ ```
39
+
40
+ ## Edge Function Setup
41
+
42
+ ```bash
43
+ supabase functions new drizzle-tutorial
44
+ ```
45
+
46
+ Add to `supabase/functions/drizzle-tutorial/deno.json`:
47
+ ```json
48
+ {
49
+ "imports": {
50
+ "drizzle-orm/": "npm:/drizzle-orm/",
51
+ "postgres": "npm:postgres"
52
+ }
53
+ }
54
+ ```
55
+
56
+ ## Database Connection
57
+
58
+ In `supabase/functions/drizzle-tutorial/index.ts`:
59
+ ```typescript
60
+ import { integer, pgTable, serial, text } from "drizzle-orm/pg-core";
61
+ import { drizzle } from "drizzle-orm/postgres-js";
62
+ import "jsr:@supabase/functions-js/edge-runtime.d.ts";
63
+ import postgres from "postgres";
64
+
65
+ const usersTable = pgTable('users_table', {
66
+ id: serial('id').primaryKey(),
67
+ name: text('name').notNull(),
68
+ age: integer('age').notNull()
69
+ })
70
+
71
+ Deno.serve(async () => {
72
+ const connectionString = Deno.env.get("SUPABASE_DB_URL")!;
73
+ const client = postgres(connectionString, { prepare: false });
74
+ const db = drizzle({ client });
75
+
76
+ await db.insert(usersTable).values({
77
+ name: "Alice",
78
+ age: 25
79
+ })
80
+ const data = await db.select().from(usersTable);
81
+
82
+ return new Response(JSON.stringify(data))
83
+ })
84
+ ```
85
+
86
+ Note: Disable prefetch with `{ prepare: false }` for Transaction pool mode.
87
+
88
+ ## Local Testing
89
+
90
+ ```bash
91
+ supabase functions serve --no-verify-jwt
92
+ ```
93
+
94
+ Navigate to `/drizzle-tutorial` to see results.
95
+
96
+ ## Deployment
97
+
98
+ Link to hosted project:
99
+ ```bash
100
+ supabase link --project-ref=<REFERENCE_ID>
101
+ supabase db push
102
+ ```
103
+
104
+ Set environment variable (use Transaction pooler connection string):
105
+ ```bash
106
+ supabase secrets set DATABASE_URL=<CONNECTION_STRING>
107
+ ```
108
+
109
+ Update function to use `DATABASE_URL` instead of `SUPABASE_DB_URL`.
110
+
111
+ Deploy:
112
+ ```bash
113
+ supabase functions deploy drizzle-tutorial --no-verify-jwt
114
+ ```
115
+
116
+ Each Edge Function is independent with its own `deno.json` and dependencies.
@@ -0,0 +1,63 @@
1
+ ## Edge Functions Integration with Drizzle ORM
2
+
3
+ Tutorials for integrating Drizzle ORM with serverless edge function platforms: Netlify Edge Functions, Supabase Edge Functions, and Vercel Edge Functions.
4
+
5
+ ### Netlify Edge Functions
6
+
7
+ **With Neon Postgres:**
8
+ - Setup: Install drizzle-orm, drizzle-kit, dotenv
9
+ - Create `import_map.json` with ESM imports for drizzle-orm and @neondatabase/serverless
10
+ - Configure `netlify.toml` with deno_import_map and edge function paths
11
+ - Define schema in `netlify/edge-functions/common/schema.ts` using pgTable
12
+ - Create `drizzle.config.ts` pointing to schema with postgresql dialect
13
+ - Run `npx drizzle-kit push` to apply schema
14
+ - In edge function, connect via: `const sql = neon(Netlify.env.get("DATABASE_URL")!); const db = drizzle({ client: sql });`
15
+ - Deploy with `netlify init`, `netlify env:import .env`, `netlify deploy --prod`
16
+
17
+ **With Supabase:**
18
+ - Same setup as Neon but use postgres-js client instead
19
+ - `import_map.json` imports drizzle-orm and postgres from esm.sh
20
+ - Connect via: `const queryClient = postgres(Netlify.env.get("DATABASE_URL")!); const db = drizzle({ client: queryClient });`
21
+ - Access environment variables via `Netlify.env.get()`
22
+
23
+ ### Supabase Edge Functions
24
+
25
+ - Prerequisites: Supabase CLI, Docker Desktop
26
+ - Schema in `src/schema.ts` using pgTable
27
+ - `drizzle.config.ts` with schema path and postgresql dialect
28
+ - Initialize: `supabase init`, `npx drizzle-kit generate`, `supabase start`, `supabase migration up`
29
+ - Create function: `supabase functions new function-name`
30
+ - Add `deno.json` with imports for drizzle-orm and postgres
31
+ - In function index.ts, connect via: `const client = postgres(Deno.env.get("SUPABASE_DB_URL")!); const db = drizzle({ client });`
32
+ - Use `{ prepare: false }` option for Transaction pool mode
33
+ - Local test: `supabase functions serve --no-verify-jwt`
34
+ - Deploy: `supabase link --project-ref=<ID>`, `supabase db push`, `supabase secrets set DATABASE_URL=<URL>`, `supabase functions deploy function-name --no-verify-jwt`
35
+
36
+ ### Vercel Edge Functions
37
+
38
+ Requires edge-compatible drivers (no TCP connections). Choose based on database:
39
+ - Neon Postgres: @neondatabase/serverless
40
+ - Vercel Postgres: @vercel/postgres (built on Neon)
41
+ - PlanetScale MySQL: @planetscale/database
42
+ - Turso SQLite: @libsql/client
43
+
44
+ **Neon/Vercel Postgres Setup:**
45
+ - Schema in `src/db/schema.ts` using pgTable
46
+ - `drizzle.config.ts` with postgresql dialect and POSTGRES_URL credential
47
+ - Generate migrations: `npx drizzle-kit generate`, `npx drizzle-kit migrate` (or `push` for prototyping)
48
+ - Connect in `src/db/index.ts`: `import { drizzle } from 'drizzle-orm/neon-serverless'; export const db = drizzle(process.env.POSTGRES_URL!)`
49
+ - For Vercel Postgres: `import { drizzle } from 'drizzle-orm/vercel-postgres'; export const db = drizzle()`
50
+ - API route in `src/app/api/route.ts` with `export const runtime = 'edge'` and `export const dynamic = 'force-dynamic'`
51
+ - Deploy: `vercel`, `vercel env add POSTGRES_URL`, `vercel`
52
+
53
+ **PlanetScale MySQL Setup:**
54
+ - Schema using mysqlTable instead of pgTable
55
+ - `drizzle.config.ts` with mysql dialect and MYSQL_URL credential
56
+ - Connect: `import { drizzle } from "drizzle-orm/planetscale-serverless"; export const db = drizzle(process.env.MYSQL_URL!)`
57
+ - Deploy with `vercel env add MYSQL_URL`
58
+
59
+ **Turso SQLite Setup:**
60
+ - Schema using sqliteTable
61
+ - `drizzle.config.ts` with turso dialect, TURSO_CONNECTION_URL and TURSO_AUTH_TOKEN credentials
62
+ - Connect: `import { drizzle } from 'drizzle-orm/libsql'; export const db = drizzle({ connection: { url: process.env.TURSO_CONNECTION_URL!, authToken: process.env.TURSO_AUTH_TOKEN! }})`
63
+ - Deploy with `vercel env add TURSO_CONNECTION_URL` and `vercel env add TURSO_AUTH_TOKEN`