From a48624ef1e625e722ea3fe1a1b65992506d1fa2a Mon Sep 17 00:00:00 2001 From: Neko Ayaka Date: Sat, 8 Feb 2025 23:12:46 +0700 Subject: [PATCH] feat: memory driver with @duckdb/duckdb-wasm --- cspell.config.yaml | 5 + eslint.config.js | 1 + package.json | 6 +- .../README.md | 0 .../memory-driver-duckdb/drizzle.config.ts | 7 + packages/memory-driver-duckdb/package.json | 69 + .../playground/db/schema.ts | 8 + .../playground/drizzle/0000_blue_selene.sql | 4 + .../drizzle/meta/0000_snapshot.json | 47 + .../playground/drizzle/meta/_journal.json | 13 + .../playground/index.html | 23 + .../playground/public/favicon-96x96.png | Bin 0 -> 1592 bytes .../playground/public/favicon.svg | 8 + .../playground/src/App.vue | 70 + .../playground/src/main.ts | 8 + .../src/drizzle-orm/dialect/duckdb-common.ts | 19 + .../dialect/duckdb-default-bundles.ts | 19 + .../src/drizzle-orm/dialect/duckdb-format.ts | 552 ++++ .../src/drizzle-orm/dialect/duckdb-types.ts | 245 ++ .../dialect/duckdb-vite-bundles.ts | 30 + .../src/drizzle-orm/dialect/duckdb.ts | 81 + .../src/drizzle-orm/dialect/index.ts | 6 + .../src/drizzle-orm/driver.ts | 140 + .../src/drizzle-orm/index.ts | 7 + .../src/drizzle-orm/migrator.ts | 13 + .../src/drizzle-orm/session.ts | 189 ++ .../src/drizzle-orm/vite.ts | 1 + packages/memory-driver-duckdb/src/index.ts | 1 + .../tsconfig.json | 8 +- packages/memory-driver-duckdb/uno.config.ts | 7 + packages/memory-driver-duckdb/vite.config.ts | 13 + packages/memory-driver/package.json | 29 - .../src/drizzle-orm/browser/index.ts | 0 packages/memory-driver/src/index.ts | 0 packages/stage-web/src/pages/index.vue | 6 +- pnpm-lock.yaml | 2380 ++++++++++++++++- pnpm-workspace.yaml | 1 + 37 files changed, 3922 insertions(+), 94 deletions(-) rename packages/{memory-driver => memory-driver-duckdb}/README.md (100%) create mode 100644 packages/memory-driver-duckdb/drizzle.config.ts create mode 100644 packages/memory-driver-duckdb/package.json create mode 100644 packages/memory-driver-duckdb/playground/db/schema.ts create mode 100644 packages/memory-driver-duckdb/playground/drizzle/0000_blue_selene.sql create mode 100644 packages/memory-driver-duckdb/playground/drizzle/meta/0000_snapshot.json create mode 100644 packages/memory-driver-duckdb/playground/drizzle/meta/_journal.json create mode 100644 packages/memory-driver-duckdb/playground/index.html create mode 100644 packages/memory-driver-duckdb/playground/public/favicon-96x96.png create mode 100644 packages/memory-driver-duckdb/playground/public/favicon.svg create mode 100644 packages/memory-driver-duckdb/playground/src/App.vue create mode 100644 packages/memory-driver-duckdb/playground/src/main.ts create mode 100644 packages/memory-driver-duckdb/src/drizzle-orm/dialect/duckdb-common.ts create mode 100644 packages/memory-driver-duckdb/src/drizzle-orm/dialect/duckdb-default-bundles.ts create mode 100644 packages/memory-driver-duckdb/src/drizzle-orm/dialect/duckdb-format.ts create mode 100644 packages/memory-driver-duckdb/src/drizzle-orm/dialect/duckdb-types.ts create mode 100644 packages/memory-driver-duckdb/src/drizzle-orm/dialect/duckdb-vite-bundles.ts create mode 100644 packages/memory-driver-duckdb/src/drizzle-orm/dialect/duckdb.ts create mode 100644 packages/memory-driver-duckdb/src/drizzle-orm/dialect/index.ts create mode 100644 packages/memory-driver-duckdb/src/drizzle-orm/driver.ts create mode 100644 packages/memory-driver-duckdb/src/drizzle-orm/index.ts create mode 100644 packages/memory-driver-duckdb/src/drizzle-orm/migrator.ts create mode 100644 packages/memory-driver-duckdb/src/drizzle-orm/session.ts create mode 100644 packages/memory-driver-duckdb/src/drizzle-orm/vite.ts create mode 100644 packages/memory-driver-duckdb/src/index.ts rename packages/{memory-driver => memory-driver-duckdb}/tsconfig.json (75%) create mode 100644 packages/memory-driver-duckdb/uno.config.ts create mode 100644 packages/memory-driver-duckdb/vite.config.ts delete mode 100644 packages/memory-driver/package.json delete mode 100644 packages/memory-driver/src/drizzle-orm/browser/index.ts delete mode 100644 packages/memory-driver/src/index.ts diff --git a/cspell.config.yaml b/cspell.config.yaml index 37de4c07a..295a225ae 100644 --- a/cspell.config.yaml +++ b/cspell.config.yaml @@ -32,6 +32,10 @@ words: - demi - dotenvx - dtype + - duckdb + - DuckDBWASM + - DuckDBWASMQuery + - DuckDBWASMQ - elevenlabs - formkit - gcornut @@ -82,6 +86,7 @@ words: - pixi - pixiv - pretrained + - pthread - rehype - rushstack - Shadcn diff --git a/eslint.config.js b/eslint.config.js index ea47a7da8..d217920e3 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -9,6 +9,7 @@ export default antfu( '**/assets/js/**', '**/assets/live2d/models/**', 'packages/stage-tamagotchi/out/**', + '**/drizzle/**', ], }, ) diff --git a/package.json b/package.json index f11a5ff9b..1bb55f01d 100644 --- a/package.json +++ b/package.json @@ -51,8 +51,10 @@ "vitest": "^3.0.4" }, "workspaces": [ - "packages/*", - "docs" + "packages/**", + "services/**", + "examples/**", + "docs/**" ], "simple-git-hooks": { "pre-commit": "pnpm lint-staged && pnpm typecheck" diff --git a/packages/memory-driver/README.md b/packages/memory-driver-duckdb/README.md similarity index 100% rename from packages/memory-driver/README.md rename to packages/memory-driver-duckdb/README.md diff --git a/packages/memory-driver-duckdb/drizzle.config.ts b/packages/memory-driver-duckdb/drizzle.config.ts new file mode 100644 index 000000000..ff63453eb --- /dev/null +++ b/packages/memory-driver-duckdb/drizzle.config.ts @@ -0,0 +1,7 @@ +import { defineConfig } from 'drizzle-kit' + +export default defineConfig({ + dialect: 'postgresql', + schema: './playground/db/schema.ts', + out: './playground/drizzle', +}) diff --git a/packages/memory-driver-duckdb/package.json b/packages/memory-driver-duckdb/package.json new file mode 100644 index 000000000..6b7cbb9c8 --- /dev/null +++ b/packages/memory-driver-duckdb/package.json @@ -0,0 +1,69 @@ +{ + "name": "@proj-airi/memory-driver-duckdb", + "type": "module", + "version": "1.0.0", + "private": true, + "description": "", + "author": { + "name": "Neko Ayaka", + "email": "neko@ayaka.moe", + "url": "https://github.com/nekomeowww" + }, + "license": "MIT", + "repository": { + "type": "git", + "url": "https://github.com/moeru-ai/airi.git", + "directory": "packages/memory-driver-duckdb" + }, + "exports": { + ".": { + "types": "./dist/index.d.ts", + "import": "./dist/index.mjs", + "require": "./dist/index.cjs" + }, + "./drizzle-orm": { + "types": "./dist/drizzle-orm/index.d.ts", + "import": "./dist/drizzle-orm/index.mjs", + "node": "./dist/drizzle-orm/index.cjs" + }, + "./drizzle-orm/vite": { + "types": "./dist/drizzle-orm/vite.d.ts", + "import": "./dist/drizzle-orm/vite.mjs", + "node": "./dist/drizzle-orm/vite.cjs" + } + }, + "main": "./dist/index.cjs", + "module": "./dist/index.mjs", + "types": "./dist/index.d.ts", + "files": [ + "README.md", + "dist", + "package.json" + ], + "scripts": { + "playground:dev": "vite", + "dev": "pnpm run stub && vite", + "stub": "unbuild --stub", + "build": "unbuild", + "typecheck": "tsc --noEmit", + "db:generate": "drizzle-kit generate" + }, + "dependencies": { + "@date-fns/tz": "^1.2.0", + "@duckdb/duckdb-wasm": "^1.29.0", + "apache-arrow": "^19.0.0", + "date-fns": "^4.1.0", + "defu": "^6.1.4", + "drizzle-orm": "^0.39.1", + "es-toolkit": "^1.32.0" + }, + "devDependencies": { + "@unocss/reset": "^65.4.3", + "@vitejs/plugin-vue": "^5.2.1", + "@vueuse/core": "^12.5.0", + "drizzle-kit": "^0.30.4", + "vite": "^6.0.11", + "vue": "^3.5.13", + "vue-tsc": "^2.2.0" + } +} diff --git a/packages/memory-driver-duckdb/playground/db/schema.ts b/packages/memory-driver-duckdb/playground/db/schema.ts new file mode 100644 index 000000000..eb17af9af --- /dev/null +++ b/packages/memory-driver-duckdb/playground/db/schema.ts @@ -0,0 +1,8 @@ +import { sql } from 'drizzle-orm' +import { bigint, pgTable } from 'drizzle-orm/pg-core' + +export const users = pgTable('users', () => { + return { + id: bigint({ mode: 'number' }).primaryKey().unique().default(sql`0`), + } +}) diff --git a/packages/memory-driver-duckdb/playground/drizzle/0000_blue_selene.sql b/packages/memory-driver-duckdb/playground/drizzle/0000_blue_selene.sql new file mode 100644 index 000000000..039a4e8b5 --- /dev/null +++ b/packages/memory-driver-duckdb/playground/drizzle/0000_blue_selene.sql @@ -0,0 +1,4 @@ +CREATE TABLE "users" ( + "id" bigint PRIMARY KEY DEFAULT 0 NOT NULL, + CONSTRAINT "users_id_unique" UNIQUE("id") +); diff --git a/packages/memory-driver-duckdb/playground/drizzle/meta/0000_snapshot.json b/packages/memory-driver-duckdb/playground/drizzle/meta/0000_snapshot.json new file mode 100644 index 000000000..071ef7702 --- /dev/null +++ b/packages/memory-driver-duckdb/playground/drizzle/meta/0000_snapshot.json @@ -0,0 +1,47 @@ +{ + "id": "243b9794-66eb-484e-8359-cc3354344cf6", + "prevId": "00000000-0000-0000-0000-000000000000", + "version": "7", + "dialect": "postgresql", + "tables": { + "public.users": { + "name": "users", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "bigint", + "primaryKey": true, + "notNull": true, + "default": "0" + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "users_id_unique": { + "name": "users_id_unique", + "nullsNotDistinct": false, + "columns": [ + "id" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + } + }, + "enums": {}, + "schemas": {}, + "sequences": {}, + "roles": {}, + "policies": {}, + "views": {}, + "_meta": { + "columns": {}, + "schemas": {}, + "tables": {} + } +} \ No newline at end of file diff --git a/packages/memory-driver-duckdb/playground/drizzle/meta/_journal.json b/packages/memory-driver-duckdb/playground/drizzle/meta/_journal.json new file mode 100644 index 000000000..96aa778fc --- /dev/null +++ b/packages/memory-driver-duckdb/playground/drizzle/meta/_journal.json @@ -0,0 +1,13 @@ +{ + "version": "7", + "dialect": "postgresql", + "entries": [ + { + "idx": 0, + "version": "7", + "when": 1739028279439, + "tag": "0000_blue_selene", + "breakpoints": true + } + ] +} \ No newline at end of file diff --git a/packages/memory-driver-duckdb/playground/index.html b/packages/memory-driver-duckdb/playground/index.html new file mode 100644 index 000000000..88a9df4f1 --- /dev/null +++ b/packages/memory-driver-duckdb/playground/index.html @@ -0,0 +1,23 @@ + + + + + Project AIRI Memory Driver @duckdb/duckdb-wasm Playground + + + + + + +
+ + + + diff --git a/packages/memory-driver-duckdb/playground/public/favicon-96x96.png b/packages/memory-driver-duckdb/playground/public/favicon-96x96.png new file mode 100644 index 0000000000000000000000000000000000000000..a70eda1afe66bcdb77cedc2cdae6ac440753e4c5 GIT binary patch literal 1592 zcmV-82FLk{P)Px)@<~KNRCr$PU0YJzFc7q%a;}8Cz&Y4G2iyfXR|=exYqe2~t(l%_c?=PM6!JW} z=Oy{UIP{-T1jbP9UHQ-n2o8cyKqnv=fnfDL13Cf02n4I|8PEv`Mj%*y&wx%qFap8q zdj@=00^Uzgr(qf&lYiqdyuOdq`N!$uHP~OZ`egq&jX(1RH|P61^~JzKdItPHJ^i|w z#+Nl4KE~D5ELu-A>jeNMn`-1~)aNx60$BAj zXT&_RS8nPc4i=8SPUG~Je%IVo(UeHWB;+PwFGDS$d#_;yR?Uv)1h7)o3#R3IYi~nz zxe3^-Rw7QZ)=IuHCLuQgQj|yym<3h~IT8Vk>~<5dN1bc|u14k_{jE6xj7dQQR;x8q zfO-9M5gTszz~L8L9?Q?QGHE72ij4WpMe#JTM$Xl61qp0(o%Sgn!CmX}nEG8KWbH6)k`U^OQxx|W7ZS;dw&XF&0?$tsYYfWNT( zHw3WKQj}AKTvQ1jgeWiQ_DUmvF?trheMEWOYz}kH7jy^?m$~tOOO5P`Iz56Alf2o7|ls4d>ihwP^ zk@U4hX431L!T=!FGEEa`NEWZja}hA7I@rX}x{u1Y?lmm?0o0c^1X!9h5SbnV5P&S1 z=8gVDh&uyXX8}^?EK|s}^njT>mq)@Ez&HdLvOwD)Ed*y!5rEK4L$a&ZOJWEBN|0#^ z1Le;oqd{cQahM)}M1N_t_)_0Eozr^j@im$S$g@gYS>Vb5IBLKZSmxy|FpwsR0;*ll^v6ICCDzcGVFKVrr3poY;To~EHFWSV%FrxmL%?MkK|heRM>d#%AE$HrjFeV6O%y>VNa22u(v|kf71SSYwG~ zt6ozESe2#g*ki26mQU9POk=wfkev4Jq^Y1+>U|SE3!xzdWE-pvnhH!n)R*>$5)hgV z!N6Y=j~Y!5VJ*LwRXFQ<+S=jX=B42oux42vD;bZ9cpq_Z0s5gzkmTTU#xMW1RQXAR zBqx6pZl1P=;q~bMu_@Vk$PAE3`A&cD1O&6$3Frg_BM_{i+=r%jBKO-z|jz0000 + + + + + \ No newline at end of file diff --git a/packages/memory-driver-duckdb/playground/src/App.vue b/packages/memory-driver-duckdb/playground/src/App.vue new file mode 100644 index 000000000..a54148c4f --- /dev/null +++ b/packages/memory-driver-duckdb/playground/src/App.vue @@ -0,0 +1,70 @@ + + +