feat: add drizzle orm

This commit is contained in:
Huakun Shen 2025-03-21 05:28:19 -04:00
parent c39e98258c
commit 68857a6f6d
No known key found for this signature in database
12 changed files with 1602 additions and 99 deletions

34
packages/drizzle/.gitignore vendored Normal file
View File

@ -0,0 +1,34 @@
# dependencies (bun install)
node_modules
# output
out
dist
*.tgz
# code coverage
coverage
*.lcov
# logs
logs
_.log
report.[0-9]_.[0-9]_.[0-9]_.[0-9]_.json
# dotenv environment variable files
.env
.env.development.local
.env.test.local
.env.production.local
.env.local
# caches
.eslintcache
.cache
*.tsbuildinfo
# IntelliJ based IDEs
.idea
# Finder (MacOS) folder config
.DS_Store

View File

@ -0,0 +1 @@
# drizzle

View File

@ -0,0 +1,12 @@
import "dotenv/config"
import { defineConfig } from "drizzle-kit"
export default defineConfig({
out: "./drizzle",
// schema: "./src/db/schema.ts",
dialect: "sqlite",
dbCredentials: {
url: "/Users/hk/Library/Application Support/sh.kunkun.desktop/kk.dev.sqlite"
// url: process.env.DB_FILE_NAME!
}
})

View File

@ -0,0 +1,71 @@
-- Current sql file was generated after introspecting the database
-- If you want to run this migration please uncomment this code before executing migrations
/*
CREATE TABLE `schema_version` (
`version` integer NOT NULL
);
--> statement-breakpoint
CREATE TABLE `extensions` (
`ext_id` integer PRIMARY KEY AUTOINCREMENT,
`identifier` text NOT NULL,
`version` text NOT NULL,
`enabled` numeric DEFAULT (TRUE),
`path` text,
`data` numeric,
`installed_at` numeric DEFAULT (CURRENT_TIMESTAMP)
);
--> statement-breakpoint
CREATE TABLE `commands` (
`cmd_id` integer PRIMARY KEY AUTOINCREMENT,
`ext_id` integer NOT NULL,
`name` text NOT NULL,
`enabled` numeric DEFAULT (TRUE),
`alias` text,
`hotkey` text,
`type` text NOT NULL,
`data` numeric,
FOREIGN KEY (`ext_id`) REFERENCES `extensions`(`ext_id`) ON UPDATE no action ON DELETE cascade
);
--> statement-breakpoint
CREATE TABLE `extension_data` (
`data_id` integer PRIMARY KEY AUTOINCREMENT,
`ext_id` integer NOT NULL,
`data_type` text NOT NULL,
`data` numeric NOT NULL,
`metadata` numeric,
`search_text` text,
`created_at` numeric DEFAULT (CURRENT_TIMESTAMP),
`updated_at` numeric DEFAULT (CURRENT_TIMESTAMP),
FOREIGN KEY (`ext_id`) REFERENCES `extensions`(`ext_id`) ON UPDATE no action ON DELETE cascade
);
--> statement-breakpoint
CREATE TABLE `extension_data_fts` (
`data_id` numeric,
`search_text` numeric,
`extension_data_fts` numeric,
`rank` numeric
);
--> statement-breakpoint
CREATE TABLE `extension_data_fts_data` (
`id` integer PRIMARY KEY,
`block` blob
);
--> statement-breakpoint
CREATE TABLE `extension_data_fts_idx` (
`segid` numeric NOT NULL,
`term` numeric NOT NULL,
`pgno` numeric,
PRIMARY KEY(`segid`, `term`)
);
--> statement-breakpoint
CREATE TABLE `extension_data_fts_docsize` (
`id` integer PRIMARY KEY,
`sz` blob
);
--> statement-breakpoint
CREATE TABLE `extension_data_fts_config` (
`k` numeric PRIMARY KEY NOT NULL,
`v` numeric
);
*/

View File

@ -0,0 +1,405 @@
{
"id": "00000000-0000-0000-0000-000000000000",
"prevId": "",
"version": "6",
"dialect": "sqlite",
"tables": {
"schema_version": {
"name": "schema_version",
"columns": {
"version": {
"autoincrement": false,
"name": "version",
"type": "integer",
"primaryKey": false,
"notNull": true
}
},
"compositePrimaryKeys": {},
"indexes": {},
"foreignKeys": {},
"uniqueConstraints": {},
"checkConstraints": {}
},
"extensions": {
"name": "extensions",
"columns": {
"ext_id": {
"autoincrement": true,
"name": "ext_id",
"type": "integer",
"primaryKey": true,
"notNull": false
},
"identifier": {
"autoincrement": false,
"name": "identifier",
"type": "text",
"primaryKey": false,
"notNull": true
},
"version": {
"autoincrement": false,
"name": "version",
"type": "text",
"primaryKey": false,
"notNull": true
},
"enabled": {
"default": "(TRUE)",
"autoincrement": false,
"name": "enabled",
"type": "numeric",
"primaryKey": false,
"notNull": false
},
"path": {
"autoincrement": false,
"name": "path",
"type": "text",
"primaryKey": false,
"notNull": false
},
"data": {
"autoincrement": false,
"name": "data",
"type": "numeric",
"primaryKey": false,
"notNull": false
},
"installed_at": {
"default": "(CURRENT_TIMESTAMP)",
"autoincrement": false,
"name": "installed_at",
"type": "numeric",
"primaryKey": false,
"notNull": false
}
},
"compositePrimaryKeys": {},
"indexes": {},
"foreignKeys": {},
"uniqueConstraints": {},
"checkConstraints": {}
},
"commands": {
"name": "commands",
"columns": {
"cmd_id": {
"autoincrement": true,
"name": "cmd_id",
"type": "integer",
"primaryKey": true,
"notNull": false
},
"ext_id": {
"autoincrement": false,
"name": "ext_id",
"type": "integer",
"primaryKey": false,
"notNull": true
},
"name": {
"autoincrement": false,
"name": "name",
"type": "text",
"primaryKey": false,
"notNull": true
},
"enabled": {
"default": "(TRUE)",
"autoincrement": false,
"name": "enabled",
"type": "numeric",
"primaryKey": false,
"notNull": false
},
"alias": {
"autoincrement": false,
"name": "alias",
"type": "text",
"primaryKey": false,
"notNull": false
},
"hotkey": {
"autoincrement": false,
"name": "hotkey",
"type": "text",
"primaryKey": false,
"notNull": false
},
"type": {
"autoincrement": false,
"name": "type",
"type": "text",
"primaryKey": false,
"notNull": true
},
"data": {
"autoincrement": false,
"name": "data",
"type": "numeric",
"primaryKey": false,
"notNull": false
}
},
"compositePrimaryKeys": {},
"indexes": {},
"foreignKeys": {
"commands_ext_id_extensions_ext_id_fk": {
"name": "commands_ext_id_extensions_ext_id_fk",
"tableFrom": "commands",
"tableTo": "extensions",
"columnsFrom": [
"ext_id"
],
"columnsTo": [
"ext_id"
],
"onDelete": "cascade",
"onUpdate": "no action"
}
},
"uniqueConstraints": {},
"checkConstraints": {}
},
"extension_data": {
"name": "extension_data",
"columns": {
"data_id": {
"autoincrement": true,
"name": "data_id",
"type": "integer",
"primaryKey": true,
"notNull": false
},
"ext_id": {
"autoincrement": false,
"name": "ext_id",
"type": "integer",
"primaryKey": false,
"notNull": true
},
"data_type": {
"autoincrement": false,
"name": "data_type",
"type": "text",
"primaryKey": false,
"notNull": true
},
"data": {
"autoincrement": false,
"name": "data",
"type": "numeric",
"primaryKey": false,
"notNull": true
},
"metadata": {
"autoincrement": false,
"name": "metadata",
"type": "numeric",
"primaryKey": false,
"notNull": false
},
"search_text": {
"autoincrement": false,
"name": "search_text",
"type": "text",
"primaryKey": false,
"notNull": false
},
"created_at": {
"default": "(CURRENT_TIMESTAMP)",
"autoincrement": false,
"name": "created_at",
"type": "numeric",
"primaryKey": false,
"notNull": false
},
"updated_at": {
"default": "(CURRENT_TIMESTAMP)",
"autoincrement": false,
"name": "updated_at",
"type": "numeric",
"primaryKey": false,
"notNull": false
}
},
"compositePrimaryKeys": {},
"indexes": {},
"foreignKeys": {
"extension_data_ext_id_extensions_ext_id_fk": {
"name": "extension_data_ext_id_extensions_ext_id_fk",
"tableFrom": "extension_data",
"tableTo": "extensions",
"columnsFrom": [
"ext_id"
],
"columnsTo": [
"ext_id"
],
"onDelete": "cascade",
"onUpdate": "no action"
}
},
"uniqueConstraints": {},
"checkConstraints": {}
},
"extension_data_fts": {
"name": "extension_data_fts",
"columns": {
"data_id": {
"autoincrement": false,
"name": "data_id",
"type": "numeric",
"primaryKey": false,
"notNull": false
},
"search_text": {
"autoincrement": false,
"name": "search_text",
"type": "numeric",
"primaryKey": false,
"notNull": false
},
"extension_data_fts": {
"autoincrement": false,
"name": "extension_data_fts",
"type": "numeric",
"primaryKey": false,
"notNull": false
},
"rank": {
"autoincrement": false,
"name": "rank",
"type": "numeric",
"primaryKey": false,
"notNull": false
}
},
"compositePrimaryKeys": {},
"indexes": {},
"foreignKeys": {},
"uniqueConstraints": {},
"checkConstraints": {}
},
"extension_data_fts_data": {
"name": "extension_data_fts_data",
"columns": {
"id": {
"autoincrement": false,
"name": "id",
"type": "integer",
"primaryKey": true,
"notNull": false
},
"block": {
"autoincrement": false,
"name": "block",
"type": "blob",
"primaryKey": false,
"notNull": false
}
},
"compositePrimaryKeys": {},
"indexes": {},
"foreignKeys": {},
"uniqueConstraints": {},
"checkConstraints": {}
},
"extension_data_fts_idx": {
"name": "extension_data_fts_idx",
"columns": {
"segid": {
"autoincrement": false,
"name": "segid",
"type": "numeric",
"primaryKey": false,
"notNull": true
},
"term": {
"autoincrement": false,
"name": "term",
"type": "numeric",
"primaryKey": false,
"notNull": true
},
"pgno": {
"autoincrement": false,
"name": "pgno",
"type": "numeric",
"primaryKey": false,
"notNull": false
}
},
"compositePrimaryKeys": {
"extension_data_fts_idx_segid_term_pk": {
"columns": [
"segid",
"term"
],
"name": "extension_data_fts_idx_segid_term_pk"
}
},
"indexes": {},
"foreignKeys": {},
"uniqueConstraints": {},
"checkConstraints": {}
},
"extension_data_fts_docsize": {
"name": "extension_data_fts_docsize",
"columns": {
"id": {
"autoincrement": false,
"name": "id",
"type": "integer",
"primaryKey": true,
"notNull": false
},
"sz": {
"autoincrement": false,
"name": "sz",
"type": "blob",
"primaryKey": false,
"notNull": false
}
},
"compositePrimaryKeys": {},
"indexes": {},
"foreignKeys": {},
"uniqueConstraints": {},
"checkConstraints": {}
},
"extension_data_fts_config": {
"name": "extension_data_fts_config",
"columns": {
"k": {
"autoincrement": false,
"name": "k",
"type": "numeric",
"primaryKey": true,
"notNull": true
},
"v": {
"autoincrement": false,
"name": "v",
"type": "numeric",
"primaryKey": false,
"notNull": false
}
},
"compositePrimaryKeys": {},
"indexes": {},
"foreignKeys": {},
"uniqueConstraints": {},
"checkConstraints": {}
}
},
"views": {},
"enums": {},
"_meta": {
"schemas": {},
"tables": {},
"columns": {}
}
}

View File

@ -0,0 +1,13 @@
{
"version": "7",
"dialect": "sqlite",
"entries": [
{
"idx": 0,
"version": "6",
"when": 1742544246324,
"tag": "0000_colossal_jocasta",
"breakpoints": true
}
]
}

View File

@ -0,0 +1,21 @@
import { relations } from "drizzle-orm/relations";
import { extensions, commands, extensionData } from "./schema";
export const commandsRelations = relations(commands, ({one}) => ({
extension: one(extensions, {
fields: [commands.extId],
references: [extensions.extId]
}),
}));
export const extensionsRelations = relations(extensions, ({many}) => ({
commands: many(commands),
extensionData: many(extensionData),
}));
export const extensionDataRelations = relations(extensionData, ({one}) => ({
extension: one(extensions, {
fields: [extensionData.extId],
references: [extensions.extId]
}),
}));

View File

@ -0,0 +1,70 @@
import { sqliteTable, AnySQLiteColumn, integer, text, numeric, foreignKey, blob, primaryKey } from "drizzle-orm/sqlite-core"
import { sql } from "drizzle-orm"
export const schemaVersion = sqliteTable("schema_version", {
version: integer().notNull(),
});
export const extensions = sqliteTable("extensions", {
extId: integer("ext_id").primaryKey({ autoIncrement: true }),
identifier: text().notNull(),
version: text().notNull(),
enabled: numeric().default(sql`(TRUE)`),
path: text(),
data: numeric(),
installedAt: numeric("installed_at").default(sql`(CURRENT_TIMESTAMP)`),
});
export const commands = sqliteTable("commands", {
cmdId: integer("cmd_id").primaryKey({ autoIncrement: true }),
extId: integer("ext_id").notNull().references(() => extensions.extId, { onDelete: "cascade" } ),
name: text().notNull(),
enabled: numeric().default(sql`(TRUE)`),
alias: text(),
hotkey: text(),
type: text().notNull(),
data: numeric(),
});
export const extensionData = sqliteTable("extension_data", {
dataId: integer("data_id").primaryKey({ autoIncrement: true }),
extId: integer("ext_id").notNull().references(() => extensions.extId, { onDelete: "cascade" } ),
dataType: text("data_type").notNull(),
data: numeric().notNull(),
metadata: numeric(),
searchText: text("search_text"),
createdAt: numeric("created_at").default(sql`(CURRENT_TIMESTAMP)`),
updatedAt: numeric("updated_at").default(sql`(CURRENT_TIMESTAMP)`),
});
export const extensionDataFts = sqliteTable("extension_data_fts", {
dataId: numeric("data_id"),
searchText: numeric("search_text"),
extensionDataFts: numeric("extension_data_fts"),
rank: numeric(),
});
export const extensionDataFtsData = sqliteTable("extension_data_fts_data", {
id: integer().primaryKey(),
block: blob(),
});
export const extensionDataFtsIdx = sqliteTable("extension_data_fts_idx", {
segid: numeric().notNull(),
term: numeric().notNull(),
pgno: numeric(),
},
(table) => [
primaryKey({ columns: [table.segid, table.term], name: "extension_data_fts_idx_segid_term_pk"})
]);
export const extensionDataFtsDocsize = sqliteTable("extension_data_fts_docsize", {
id: integer().primaryKey(),
sz: blob(),
});
export const extensionDataFtsConfig = sqliteTable("extension_data_fts_config", {
k: numeric().primaryKey().notNull(),
v: numeric(),
});

View File

@ -0,0 +1 @@
console.log("Hello via Bun!");

View File

@ -0,0 +1,19 @@
{
"name": "drizzle",
"module": "index.ts",
"type": "module",
"private": true,
"devDependencies": {
"@types/bun": "latest",
"drizzle-kit": "^0.30.5",
"tsx": "^4.19.3"
},
"peerDependencies": {
"typescript": "^5"
},
"dependencies": {
"@libsql/client": "^0.15.0",
"dotenv": "^16.4.7",
"drizzle-orm": "^0.40.1"
}
}

View File

@ -0,0 +1,28 @@
{
"compilerOptions": {
// Environment setup & latest features
"lib": ["esnext"],
"target": "ESNext",
"module": "ESNext",
"moduleDetection": "force",
"jsx": "react-jsx",
"allowJs": true,
// Bundler mode
"moduleResolution": "bundler",
"allowImportingTsExtensions": true,
"verbatimModuleSyntax": true,
"noEmit": true,
// Best practices
"strict": true,
"skipLibCheck": true,
"noFallthroughCasesInSwitch": true,
"noUncheckedIndexedAccess": true,
// Some stricter flags (disabled by default)
"noUnusedLocals": false,
"noUnusedParameters": false,
"noPropertyAccessFromIndexSignature": false
}
}

1026
pnpm-lock.yaml generated

File diff suppressed because it is too large Load Diff