diff --git a/electron-builder.yml b/electron-builder.yml index 294335c36a..f95bbcfed2 100644 --- a/electron-builder.yml +++ b/electron-builder.yml @@ -39,6 +39,9 @@ files: asarUnpack: - resources/** - '**/*.{metal,exp,lib}' +extraResources: + - from: 'migrations/sqlite-drizzle' + to: 'migrations/sqlite-drizzle' win: executableName: Cherry Studio artifactName: ${productName}-${version}-${arch}-setup.${ext} diff --git a/electron.vite.config.ts b/electron.vite.config.ts index bcbb53d079..050a64fd28 100644 --- a/electron.vite.config.ts +++ b/electron.vite.config.ts @@ -32,6 +32,7 @@ export default defineConfig({ alias: { '@main': resolve('src/main'), '@types': resolve('src/renderer/src/types'), + '@storage': resolve('src/main/storage'), '@shared': resolve('packages/shared') } }, diff --git a/migrations/README.md b/migrations/README.md new file mode 100644 index 0000000000..50bc41848a --- /dev/null +++ b/migrations/README.md @@ -0,0 +1,5 @@ +Using `libsql` as the `sqlite3` driver, and `drizzle` as the ORM and database migration tool + +`migrations/sqlite-drizzle` contains auto-generated migration data. Please **DO NOT** modify it. + +To generate migrations, use the command `yarn run migrations:generate` diff --git a/migrations/sqlite-drizzle.config.ts b/migrations/sqlite-drizzle.config.ts new file mode 100644 index 0000000000..f0fac86fa3 --- /dev/null +++ b/migrations/sqlite-drizzle.config.ts @@ -0,0 +1,7 @@ +import { defineConfig } from 'drizzle-kit' +export default defineConfig({ + out: './migrations/sqlite-drizzle', + schema: './src/main/db/schema/*', + dialect: 'sqlite', + casing: 'snake_case' +}) diff --git a/migrations/sqlite-drizzle/0000_panoramic_morlun.sql b/migrations/sqlite-drizzle/0000_panoramic_morlun.sql new file mode 100644 index 0000000000..376f7c298c --- /dev/null +++ b/migrations/sqlite-drizzle/0000_panoramic_morlun.sql @@ -0,0 +1,10 @@ +CREATE TABLE `preference` ( + `scope` text NOT NULL, + `key` text NOT NULL, + `value` text, + `created_at` integer, + `updated_at` integer, + `deleted_at` integer +); +--> statement-breakpoint +CREATE INDEX `scope_name_idx` ON `preference` (`scope`,`key`); \ No newline at end of file diff --git a/migrations/sqlite-drizzle/meta/0000_snapshot.json b/migrations/sqlite-drizzle/meta/0000_snapshot.json new file mode 100644 index 0000000000..46b451f11e --- /dev/null +++ b/migrations/sqlite-drizzle/meta/0000_snapshot.json @@ -0,0 +1,79 @@ +{ + "version": "6", + "dialect": "sqlite", + "id": "c8c54066-c6f6-404b-a46d-84787ae22485", + "prevId": "00000000-0000-0000-0000-000000000000", + "tables": { + "preference": { + "name": "preference", + "columns": { + "scope": { + "name": "scope", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "key": { + "name": "key", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "value": { + "name": "value", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "created_at": { + "name": "created_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "updated_at": { + "name": "updated_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "deleted_at": { + "name": "deleted_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + } + }, + "indexes": { + "scope_name_idx": { + "name": "scope_name_idx", + "columns": [ + "scope", + "key" + ], + "isUnique": false + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + } + }, + "views": {}, + "enums": {}, + "_meta": { + "schemas": {}, + "tables": {}, + "columns": {} + }, + "internal": { + "indexes": {} + } +} \ No newline at end of file diff --git a/migrations/sqlite-drizzle/meta/_journal.json b/migrations/sqlite-drizzle/meta/_journal.json new file mode 100644 index 0000000000..1e28e5b6cf --- /dev/null +++ b/migrations/sqlite-drizzle/meta/_journal.json @@ -0,0 +1,13 @@ +{ + "version": "7", + "dialect": "sqlite", + "entries": [ + { + "idx": 0, + "version": "6", + "when": 1747914098702, + "tag": "0000_panoramic_morlun", + "breakpoints": true + } + ] +} \ No newline at end of file diff --git a/package.json b/package.json index 9741b6ca73..aeb61e6fb6 100644 --- a/package.json +++ b/package.json @@ -54,7 +54,8 @@ "format": "prettier --write .", "lint": "eslint . --ext .js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --fix", "postinstall": "electron-builder install-app-deps", - "prepare": "husky" + "prepare": "husky", + "migrations:generate": "drizzle-kit generate --config ./migrations/sqlite-drizzle.config.ts" }, "dependencies": { "@cherrystudio/embedjs": "^0.1.31", @@ -71,12 +72,12 @@ "@electron-toolkit/utils": "^3.0.0", "@electron/notarize": "^2.5.0", "@langchain/community": "^0.3.36", + "@libsql/client": "^0.15.7", "@strongtz/win32-arm64-msvc": "^0.4.7", "@tanstack/react-query": "^5.27.0", "@types/react-infinite-scroll-component": "^5.0.0", "archiver": "^7.0.1", "async-mutex": "^0.5.0", - "better-sqlite3": "^11.10.0", "color": "^5.0.0", "diff": "^7.0.0", "docx": "^9.0.2", @@ -127,7 +128,6 @@ "@shikijs/markdown-it": "^3.4.2", "@swc/plugin-styled-components": "^7.1.5", "@tryfabric/martian": "^1.2.4", - "@types/better-sqlite3": "^7.6.13", "@types/diff": "^7", "@types/fs-extra": "^11", "@types/lodash": "^4.17.5", diff --git a/packages/shared/preferences.ts b/packages/shared/preferences.ts new file mode 100644 index 0000000000..bd318d8fdd --- /dev/null +++ b/packages/shared/preferences.ts @@ -0,0 +1,35 @@ +export interface Preferences { + default: { + test1: string + test2: number + test3: boolean + test4: string[] + test5: { + content1: string + content2: number + } + } + user: { + test1: string + test2: number + test3: boolean + } +} + +export const defaultPreferences: Preferences = { + default: { + test1: 'test1', + test2: 1, + test3: true, + test4: ['test4-1', 'test4-2'], + test5: { + content1: 'test5-1', + content2: 2 + } + }, + user: { + test1: 'test1', + test2: 1, + test3: false + } +} diff --git a/src/main/db/DbService.ts b/src/main/db/DbService.ts new file mode 100644 index 0000000000..1e0fa57a84 --- /dev/null +++ b/src/main/db/DbService.ts @@ -0,0 +1,70 @@ +import { drizzle } from 'drizzle-orm/libsql' +import { migrate } from 'drizzle-orm/libsql/migrator' +import { app } from 'electron' +import Logger from 'electron-log' +import path from 'path' +import { pathToFileURL } from 'url' + +import Seeds from './seed' +import type { DbType } from './types' + +const DB_NAME = 'cherrystudio.sqlite' +const MIGRATIONS_BASE_PATH = 'migrations/sqlite-drizzle' + +class DbService { + private static instance: DbService + private db: DbType + + private constructor() { + this.db = drizzle({ + connection: { url: pathToFileURL(path.join(app.getPath('userData'), DB_NAME)).href }, + casing: 'snake_case' + }) + } + + public static getInstance(): DbService { + if (!DbService.instance) { + DbService.instance = new DbService() + } + return DbService.instance + } + + public async migrateDb() { + const migrationsFolder = this.getMigrationsFolder() + await migrate(this.db, { migrationsFolder }) + } + + public getDb(): DbType { + return this.db + } + + public async migrateSeed(seedName: keyof typeof Seeds): Promise { + try { + const Seed = Seeds[seedName] + await new Seed().migrate(this.db) + return true + } catch (error) { + Logger.error(error) + return false + } + } + + /** + * Get the migrations folder based on the app's packaging status + * @returns The path to the migrations folder + */ + private getMigrationsFolder() { + if (app.isPackaged) { + //see electron-builder.yml, extraResources from/to + return path.join(process.resourcesPath, MIGRATIONS_BASE_PATH) + } else { + // in dev/preview, __dirname maybe /out/main + return path.join(__dirname, '../../', MIGRATIONS_BASE_PATH) + } + } +} + +// Export a singleton instance +const dbService = DbService.getInstance() + +export default dbService diff --git a/src/main/db/README.md b/src/main/db/README.md new file mode 100644 index 0000000000..fda0fa5364 --- /dev/null +++ b/src/main/db/README.md @@ -0,0 +1,2 @@ +* All the database table names use **singular** form, snake_casing +* Export table names use `xxxxTable` \ No newline at end of file diff --git a/src/main/db/schema/columnHelpers.ts b/src/main/db/schema/columnHelpers.ts new file mode 100644 index 0000000000..f2b4571d9a --- /dev/null +++ b/src/main/db/schema/columnHelpers.ts @@ -0,0 +1,11 @@ +import { integer } from 'drizzle-orm/sqlite-core' + +const createTimestamp = () => { + return Date.now() +} + +export const crudTimestamps = { + createdAt: integer().$defaultFn(createTimestamp), + updatedAt: integer().$defaultFn(createTimestamp).$onUpdateFn(createTimestamp), + deletedAt: integer() +} diff --git a/src/main/db/schema/preference.ts b/src/main/db/schema/preference.ts new file mode 100644 index 0000000000..1a02e8e99d --- /dev/null +++ b/src/main/db/schema/preference.ts @@ -0,0 +1,14 @@ +import { index, sqliteTable, text } from 'drizzle-orm/sqlite-core' + +import { crudTimestamps } from './columnHelpers' + +export const preferenceTable = sqliteTable( + 'preference', + { + scope: text().notNull(), + key: text().notNull(), + value: text({ mode: 'json' }), + ...crudTimestamps + }, + (t) => [index('scope_name_idx').on(t.scope, t.key)] +) diff --git a/src/main/db/seed/index.ts b/src/main/db/seed/index.ts new file mode 100644 index 0000000000..6897b2c7fe --- /dev/null +++ b/src/main/db/seed/index.ts @@ -0,0 +1,7 @@ +import PreferenceSeed from './preferenceSeed' + +const seedList = { + preference: PreferenceSeed +} + +export default seedList diff --git a/src/main/db/seed/preferenceSeed.ts b/src/main/db/seed/preferenceSeed.ts new file mode 100644 index 0000000000..8d8d9ae9a8 --- /dev/null +++ b/src/main/db/seed/preferenceSeed.ts @@ -0,0 +1,47 @@ +import { preferenceTable } from '@main/db/schema/preference' +import { defaultPreferences } from '@shared/preferences' + +import type { DbType, ISeed } from '../types' + +class PreferenceSeed implements ISeed { + async migrate(db: DbType): Promise { + const preferences = await db.select().from(preferenceTable) + + // Convert existing preferences to a Map for quick lookup + const existingPrefs = new Map(preferences.map((p) => [`${p.scope}.${p.key}`, p])) + + // Collect all new preferences to insert + const newPreferences: Array<{ + scope: string + key: string + value: unknown + }> = [] + + // Process each scope in defaultPreferences + for (const [scope, scopeData] of Object.entries(defaultPreferences)) { + // Process each key-value pair in the scope + for (const [key, value] of Object.entries(scopeData)) { + const prefKey = `${scope}.${key}` + + // Skip if this preference already exists + if (existingPrefs.has(prefKey)) { + continue + } + + // Add to new preferences array + newPreferences.push({ + scope, + key, + value + }) + } + } + + // If there are new preferences to insert, do it in a transaction + if (newPreferences.length > 0) { + await db.insert(preferenceTable).values(newPreferences) + } + } +} + +export default PreferenceSeed diff --git a/src/main/db/types.d.ts b/src/main/db/types.d.ts new file mode 100644 index 0000000000..07fb0008dd --- /dev/null +++ b/src/main/db/types.d.ts @@ -0,0 +1,7 @@ +import type { LibSQLDatabase } from 'drizzle-orm/libsql' + +export type DbType = LibSQLDatabase + +export interface ISeed { + migrate(db: DbType): Promise +} diff --git a/src/main/index.ts b/src/main/index.ts index 12b1c9c16f..175776cbae 100644 --- a/src/main/index.ts +++ b/src/main/index.ts @@ -1,6 +1,7 @@ import '@main/config' import { electronApp, optimizer } from '@electron-toolkit/utils' +import dbService from '@main/db/DbService' import { replaceDevtoolsFont } from '@main/utils/windowUtil' import { app } from 'electron' import installExtension, { REACT_DEVELOPER_TOOLS, REDUX_DEVTOOLS } from 'electron-devtools-installer' @@ -20,7 +21,6 @@ import { registerShortcuts } from './services/ShortcutService' import { TrayService } from './services/TrayService' import { windowService } from './services/WindowService' import { setUserDataDir } from './utils/file' - Logger.initialize() // in production mode, handle uncaught exception and unhandled rejection globally @@ -44,10 +44,13 @@ if (!app.requestSingleInstanceLock()) { // Portable dir must be setup before app ready setUserDataDir() + dbService.migrateDb().then(async () => { + await dbService.migrateSeed('preference') + }) + // This method will be called when Electron has finished // initialization and is ready to create browser windows. // Some APIs can only be used after this event occurs. - app.whenReady().then(async () => { // Set app user model id for windows electronApp.setAppUserModelId(import.meta.env.VITE_MAIN_BUNDLE_ID || 'com.kangfenmao.CherryStudio') diff --git a/src/main/services/PrefService.ts b/src/main/services/PrefService.ts new file mode 100644 index 0000000000..0f6caff1e5 --- /dev/null +++ b/src/main/services/PrefService.ts @@ -0,0 +1 @@ +class PrefService {} diff --git a/tsconfig.node.json b/tsconfig.node.json index ec30dcfec7..bd5d412043 100644 --- a/tsconfig.node.json +++ b/tsconfig.node.json @@ -17,6 +17,7 @@ "paths": { "@main/*": ["src/main/*"], "@types": ["src/renderer/src/types/index.ts"], + "@storage/*": ["src/main/db/*"], "@shared/*": ["packages/shared/*"] } } diff --git a/yarn.lock b/yarn.lock index aea042c526..deb783c509 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3562,6 +3562,19 @@ __metadata: languageName: node linkType: hard +"@libsql/client@npm:^0.15.7": + version: 0.15.7 + resolution: "@libsql/client@npm:0.15.7" + dependencies: + "@libsql/core": "npm:^0.15.7" + "@libsql/hrana-client": "npm:^0.7.0" + js-base64: "npm:^3.7.5" + libsql: "npm:^0.5.11" + promise-limit: "npm:^2.7.0" + checksum: 10c0/07d5acb77410651e784edb7463ec0ceab99b614d17540ba3a462a810364253b54b4f8d93be659aab8a3351f15d78fe607c8d3359f250f043f50375e4b312ac69 + languageName: node + linkType: hard + "@libsql/core@npm:^0.14.0": version: 0.14.0 resolution: "@libsql/core@npm:0.14.0" @@ -3571,6 +3584,15 @@ __metadata: languageName: node linkType: hard +"@libsql/core@npm:^0.15.7": + version: 0.15.7 + resolution: "@libsql/core@npm:0.15.7" + dependencies: + js-base64: "npm:^3.7.5" + checksum: 10c0/b6c91467509b2c36bbae1562a6ebbec548a4564223b6315f629ee5665c763f5ad2e347d7d05a002d3b9bfc5f21bd31de04ec26fffa0eb4aff1f7fb67453a726e + languageName: node + linkType: hard + "@libsql/darwin-arm64@npm:0.4.7": version: 0.4.7 resolution: "@libsql/darwin-arm64@npm:0.4.7" @@ -3578,6 +3600,13 @@ __metadata: languageName: node linkType: hard +"@libsql/darwin-arm64@npm:0.5.11": + version: 0.5.11 + resolution: "@libsql/darwin-arm64@npm:0.5.11" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + "@libsql/darwin-x64@npm:0.4.7": version: 0.4.7 resolution: "@libsql/darwin-x64@npm:0.4.7" @@ -3585,6 +3614,13 @@ __metadata: languageName: node linkType: hard +"@libsql/darwin-x64@npm:0.5.11": + version: 0.5.11 + resolution: "@libsql/darwin-x64@npm:0.5.11" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + "@libsql/hrana-client@npm:^0.7.0": version: 0.7.0 resolution: "@libsql/hrana-client@npm:0.7.0" @@ -3614,6 +3650,20 @@ __metadata: languageName: node linkType: hard +"@libsql/linux-arm-gnueabihf@npm:0.5.11": + version: 0.5.11 + resolution: "@libsql/linux-arm-gnueabihf@npm:0.5.11" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + +"@libsql/linux-arm-musleabihf@npm:0.5.11": + version: 0.5.11 + resolution: "@libsql/linux-arm-musleabihf@npm:0.5.11" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + "@libsql/linux-arm64-gnu@npm:0.4.7": version: 0.4.7 resolution: "@libsql/linux-arm64-gnu@npm:0.4.7" @@ -3621,6 +3671,13 @@ __metadata: languageName: node linkType: hard +"@libsql/linux-arm64-gnu@npm:0.5.11": + version: 0.5.11 + resolution: "@libsql/linux-arm64-gnu@npm:0.5.11" + conditions: os=linux & cpu=arm64 + languageName: node + linkType: hard + "@libsql/linux-arm64-musl@npm:0.4.7": version: 0.4.7 resolution: "@libsql/linux-arm64-musl@npm:0.4.7" @@ -3628,6 +3685,13 @@ __metadata: languageName: node linkType: hard +"@libsql/linux-arm64-musl@npm:0.5.11": + version: 0.5.11 + resolution: "@libsql/linux-arm64-musl@npm:0.5.11" + conditions: os=linux & cpu=arm64 + languageName: node + linkType: hard + "@libsql/linux-x64-gnu@npm:0.4.7": version: 0.4.7 resolution: "@libsql/linux-x64-gnu@npm:0.4.7" @@ -3635,6 +3699,13 @@ __metadata: languageName: node linkType: hard +"@libsql/linux-x64-gnu@npm:0.5.11": + version: 0.5.11 + resolution: "@libsql/linux-x64-gnu@npm:0.5.11" + conditions: os=linux & cpu=x64 + languageName: node + linkType: hard + "@libsql/linux-x64-musl@npm:0.4.7": version: 0.4.7 resolution: "@libsql/linux-x64-musl@npm:0.4.7" @@ -3642,6 +3713,13 @@ __metadata: languageName: node linkType: hard +"@libsql/linux-x64-musl@npm:0.5.11": + version: 0.5.11 + resolution: "@libsql/linux-x64-musl@npm:0.5.11" + conditions: os=linux & cpu=x64 + languageName: node + linkType: hard + "@libsql/win32-x64-msvc@npm:0.4.7": version: 0.4.7 resolution: "@libsql/win32-x64-msvc@npm:0.4.7" @@ -3649,6 +3727,13 @@ __metadata: languageName: node linkType: hard +"@libsql/win32-x64-msvc@npm:0.5.11": + version: 0.5.11 + resolution: "@libsql/win32-x64-msvc@npm:0.5.11" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + "@malept/cross-spawn-promise@npm:^2.0.0": version: 2.0.0 resolution: "@malept/cross-spawn-promise@npm:2.0.0" @@ -4665,15 +4750,6 @@ __metadata: languageName: node linkType: hard -"@types/better-sqlite3@npm:^7.6.13": - version: 7.6.13 - resolution: "@types/better-sqlite3@npm:7.6.13" - dependencies: - "@types/node": "npm:*" - checksum: 10c0/c4336e7b92343eb0e988ded007c53fa9887b98a38d61175226e86124a1a2c28b1a4e3892873c5041e350b7bfa2901f85c82db1542c4f0eed1d3a899682c92106 - languageName: node - linkType: hard - "@types/cacheable-request@npm:^6.0.1": version: 6.0.3 resolution: "@types/cacheable-request@npm:6.0.3" @@ -6126,6 +6202,7 @@ __metadata: "@hello-pangea/dnd": "npm:^16.6.0" "@kangfenmao/keyv-storage": "npm:^0.1.0" "@langchain/community": "npm:^0.3.36" + "@libsql/client": "npm:^0.15.7" "@modelcontextprotocol/sdk": "npm:^1.11.4" "@mozilla/readability": "npm:^0.6.0" "@notionhq/client": "npm:^2.2.15" @@ -6135,7 +6212,6 @@ __metadata: "@swc/plugin-styled-components": "npm:^7.1.5" "@tanstack/react-query": "npm:^5.27.0" "@tryfabric/martian": "npm:^1.2.4" - "@types/better-sqlite3": "npm:^7.6.13" "@types/diff": "npm:^7" "@types/fs-extra": "npm:^11" "@types/lodash": "npm:^4.17.5" @@ -6160,7 +6236,6 @@ __metadata: archiver: "npm:^7.0.1" async-mutex: "npm:^0.5.0" axios: "npm:^1.7.3" - better-sqlite3: "npm:^11.10.0" browser-image-compression: "npm:^2.0.2" color: "npm:^5.0.0" dayjs: "npm:^1.11.11" @@ -6888,17 +6963,6 @@ __metadata: languageName: node linkType: hard -"better-sqlite3@npm:^11.10.0": - version: 11.10.0 - resolution: "better-sqlite3@npm:11.10.0" - dependencies: - bindings: "npm:^1.5.0" - node-gyp: "npm:latest" - prebuild-install: "npm:^7.1.1" - checksum: 10c0/1fffbf9e5fc9d24847a3ecf09491bceab1c294b46ba41df1c449dc20b6f5c5d9d94ff24becd0b1632ee282bd21278b7fea53a5a6215bb99209ded0ae05eda3b0 - languageName: node - linkType: hard - "bignumber.js@npm:^9.0.0": version: 9.2.1 resolution: "bignumber.js@npm:9.2.1" @@ -6913,15 +6977,6 @@ __metadata: languageName: node linkType: hard -"bindings@npm:^1.5.0": - version: 1.5.0 - resolution: "bindings@npm:1.5.0" - dependencies: - file-uri-to-path: "npm:1.0.0" - checksum: 10c0/3dab2491b4bb24124252a91e656803eac24292473e56554e35bbfe3cc1875332cfa77600c3bac7564049dc95075bf6fcc63a4609920ff2d64d0fe405fcf0d4ba - languageName: node - linkType: hard - "birecord@npm:^0.1.1": version: 0.1.1 resolution: "birecord@npm:0.1.1" @@ -8880,13 +8935,6 @@ __metadata: languageName: node linkType: hard -"detect-libc@npm:^2.0.0": - version: 2.0.4 - resolution: "detect-libc@npm:2.0.4" - checksum: 10c0/c15541f836eba4b1f521e4eecc28eefefdbc10a94d3b8cb4c507689f332cc111babb95deda66f2de050b22122113189986d5190be97d51b5a2b23b938415e67c - languageName: node - linkType: hard - "detect-libc@npm:^2.0.1": version: 2.0.3 resolution: "detect-libc@npm:2.0.3" @@ -10837,13 +10885,6 @@ __metadata: languageName: node linkType: hard -"file-uri-to-path@npm:1.0.0": - version: 1.0.0 - resolution: "file-uri-to-path@npm:1.0.0" - checksum: 10c0/3b545e3a341d322d368e880e1c204ef55f1d45cdea65f7efc6c6ce9e0c4d22d802d5629320eb779d006fe59624ac17b0e848d83cc5af7cd101f206cb704f5519 - languageName: node - linkType: hard - "file-url@npm:^2.0.0": version: 2.0.2 resolution: "file-url@npm:2.0.2" @@ -13293,6 +13334,45 @@ __metadata: languageName: node linkType: hard +"libsql@npm:^0.5.11": + version: 0.5.11 + resolution: "libsql@npm:0.5.11" + dependencies: + "@libsql/darwin-arm64": "npm:0.5.11" + "@libsql/darwin-x64": "npm:0.5.11" + "@libsql/linux-arm-gnueabihf": "npm:0.5.11" + "@libsql/linux-arm-musleabihf": "npm:0.5.11" + "@libsql/linux-arm64-gnu": "npm:0.5.11" + "@libsql/linux-arm64-musl": "npm:0.5.11" + "@libsql/linux-x64-gnu": "npm:0.5.11" + "@libsql/linux-x64-musl": "npm:0.5.11" + "@libsql/win32-x64-msvc": "npm:0.5.11" + "@neon-rs/load": "npm:^0.0.4" + detect-libc: "npm:2.0.2" + dependenciesMeta: + "@libsql/darwin-arm64": + optional: true + "@libsql/darwin-x64": + optional: true + "@libsql/linux-arm-gnueabihf": + optional: true + "@libsql/linux-arm-musleabihf": + optional: true + "@libsql/linux-arm64-gnu": + optional: true + "@libsql/linux-arm64-musl": + optional: true + "@libsql/linux-x64-gnu": + optional: true + "@libsql/linux-x64-musl": + optional: true + "@libsql/win32-x64-msvc": + optional: true + checksum: 10c0/94a0b2032ca587dd4442df46dd66ec0e6071fd3289af0bd3a9914472c083f0b6944ba1502aaaa854aac7a0a549d0dcf0e15696d35b0267d8edd09c6fd06c1385 + conditions: (os=darwin | os=linux | os=win32) & (cpu=x64 | cpu=arm64 | cpu=wasm32 | cpu=arm) + languageName: node + linkType: hard + "libsql@patch:libsql@npm%3A0.4.7#~/.yarn/patches/libsql-npm-0.4.7-444e260fb1.patch": version: 0.4.7 resolution: "libsql@patch:libsql@npm%3A0.4.7#~/.yarn/patches/libsql-npm-0.4.7-444e260fb1.patch::version=0.4.7&hash=972e11" @@ -15097,13 +15177,6 @@ __metadata: languageName: node linkType: hard -"napi-build-utils@npm:^2.0.0": - version: 2.0.0 - resolution: "napi-build-utils@npm:2.0.0" - checksum: 10c0/5833aaeb5cc5c173da47a102efa4680a95842c13e0d9cc70428bd3ee8d96bb2172f8860d2811799b5daa5cbeda779933601492a2028a6a5351c6d0fcf6de83db - languageName: node - linkType: hard - "natural-compare@npm:^1.4.0": version: 1.4.0 resolution: "natural-compare@npm:1.4.0" @@ -15148,15 +15221,6 @@ __metadata: languageName: node linkType: hard -"node-abi@npm:^3.3.0": - version: 3.75.0 - resolution: "node-abi@npm:3.75.0" - dependencies: - semver: "npm:^7.3.5" - checksum: 10c0/c43a2409407df3737848fd96202b0a49e15039994aecce963969e9ef7342a8fc544aba94e0bfd8155fb9de5f5fe9a4b6ccad8bf509e7c46caf096fc4491d63f2 - languageName: node - linkType: hard - "node-abi@npm:^3.45.0": version: 3.74.0 resolution: "node-abi@npm:3.74.0" @@ -16378,28 +16442,6 @@ __metadata: languageName: node linkType: hard -"prebuild-install@npm:^7.1.1": - version: 7.1.3 - resolution: "prebuild-install@npm:7.1.3" - dependencies: - detect-libc: "npm:^2.0.0" - expand-template: "npm:^2.0.3" - github-from-package: "npm:0.0.0" - minimist: "npm:^1.2.3" - mkdirp-classic: "npm:^0.5.3" - napi-build-utils: "npm:^2.0.0" - node-abi: "npm:^3.3.0" - pump: "npm:^3.0.0" - rc: "npm:^1.2.7" - simple-get: "npm:^4.0.0" - tar-fs: "npm:^2.0.0" - tunnel-agent: "npm:^0.6.0" - bin: - prebuild-install: bin.js - checksum: 10c0/25919a42b52734606a4036ab492d37cfe8b601273d8dfb1fa3c84e141a0a475e7bad3ab848c741d2f810cef892fcf6059b8c7fe5b29f98d30e0c29ad009bedff - languageName: node - linkType: hard - "prelude-ls@npm:^1.2.1": version: 1.2.1 resolution: "prelude-ls@npm:1.2.1" @@ -18440,17 +18482,6 @@ __metadata: languageName: node linkType: hard -"simple-get@npm:^4.0.0": - version: 4.0.1 - resolution: "simple-get@npm:4.0.1" - dependencies: - decompress-response: "npm:^6.0.0" - once: "npm:^1.3.1" - simple-concat: "npm:^1.0.0" - checksum: 10c0/b0649a581dbca741babb960423248899203165769747142033479a7dc5e77d7b0fced0253c731cd57cf21e31e4d77c9157c3069f4448d558ebc96cf9e1eebcf0 - languageName: node - linkType: hard - "simple-update-notifier@npm:2.0.0": version: 2.0.0 resolution: "simple-update-notifier@npm:2.0.0"