From 5d954af3630eddad185a23eac143cec2daa9e0f5 Mon Sep 17 00:00:00 2001 From: cade Date: Thu, 18 Jun 2026 00:19:00 +0800 Subject: [PATCH] Added SQLite library and web worker setup --- package.json | 2 ++ quasar.config.ts | 9 ++++++++- src/boot/sqlite-worker.ts | 6 ++++++ src/r2mm/manager/sqlite/PackageDb.worker.ts | 11 +++++++++++ src/r2mm/manager/sqlite/PackageDbClient.ts | 20 ++++++++++++++++++++ yarn.lock | 16 ++++++++++++++++ 6 files changed, 63 insertions(+), 1 deletion(-) create mode 100644 src/boot/sqlite-worker.ts create mode 100644 src/r2mm/manager/sqlite/PackageDb.worker.ts create mode 100644 src/r2mm/manager/sqlite/PackageDbClient.ts diff --git a/package.json b/package.json index 96ca4d33f..20bed8e5c 100644 --- a/package.json +++ b/package.json @@ -28,6 +28,7 @@ "dependencies": { "@node-steam/vdf": "^2.1.0", "@quasar/extras": "^1.17.0", + "@sqlite.org/sqlite-wasm": "3.53.0-build1", "adm-zip": "^0.5.5", "ajv": "^8.17.1", "ajv-formats": "^3.0.1", @@ -39,6 +40,7 @@ "bulma-slider": "2.0.4", "bulma-steps": "^2.2.1", "bulma-switch": "^2.0.0", + "comlink": "4.4.2", "core-js": "^3.47.0", "dexie": "^3.2.7", "dot-prop": "^5.2.0", diff --git a/quasar.config.ts b/quasar.config.ts index d9f477a22..98529eb91 100644 --- a/quasar.config.ts +++ b/quasar.config.ts @@ -17,7 +17,8 @@ export default defineConfig((ctx) => { 'i18n', // 'axios', 'floating-vue', - 'ecosystem' + 'ecosystem', + 'sqlite-worker' ], // https://v2.quasar.dev/quasar-cli-vite/quasar-config-file#css @@ -71,6 +72,12 @@ export default defineConfig((ctx) => { extendViteConf (viteConf) { // Force Vite to use esbuild for CSS, overriding any defaults viteConf.build!.cssMinify = 'esbuild'; + + viteConf.optimizeDeps ??= {}; + viteConf.optimizeDeps.exclude = [ + ...(viteConf.optimizeDeps.exclude ?? []), + '@sqlite.org/sqlite-wasm', + ]; }, viteVuePluginOptions: { template: { diff --git a/src/boot/sqlite-worker.ts b/src/boot/sqlite-worker.ts new file mode 100644 index 000000000..ee8c8688b --- /dev/null +++ b/src/boot/sqlite-worker.ts @@ -0,0 +1,6 @@ +import { defineBoot } from '#q-app/wrappers'; +import { initPackageDbWorker } from 'src/r2mm/manager/sqlite/PackageDbClient'; + +export default defineBoot(async () => { + await initPackageDbWorker(); +}); diff --git a/src/r2mm/manager/sqlite/PackageDb.worker.ts b/src/r2mm/manager/sqlite/PackageDb.worker.ts new file mode 100644 index 000000000..50f557233 --- /dev/null +++ b/src/r2mm/manager/sqlite/PackageDb.worker.ts @@ -0,0 +1,11 @@ +import * as Comlink from 'comlink'; + +const api = { + init(): void { + console.log('Web worker hit'); + }, +}; + +export type PackageDbApi = typeof api; + +Comlink.expose(api); diff --git a/src/r2mm/manager/sqlite/PackageDbClient.ts b/src/r2mm/manager/sqlite/PackageDbClient.ts new file mode 100644 index 000000000..ede4594e3 --- /dev/null +++ b/src/r2mm/manager/sqlite/PackageDbClient.ts @@ -0,0 +1,20 @@ +import * as Comlink from 'comlink'; + +import type { PackageDbApi } from './PackageDb.worker'; + +let api: Comlink.Remote | undefined; + +function getApi(): Comlink.Remote { + if (api === undefined) { + const worker = new Worker( + new URL('./PackageDb.worker.ts', import.meta.url), + { type: 'module' } + ); + api = Comlink.wrap(worker); + } + return api; +} + +export async function initPackageDbWorker(): Promise { + await getApi().init(); +} diff --git a/yarn.lock b/yarn.lock index 213d0a486..9aaa84e4c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2069,6 +2069,13 @@ __metadata: languageName: node linkType: hard +"@sqlite.org/sqlite-wasm@npm:3.53.0-build1": + version: 3.53.0-build1 + resolution: "@sqlite.org/sqlite-wasm@npm:3.53.0-build1" + checksum: 10c0/9a03c170aa2bd07c346097ca1709b3721a46213ed82d67330966e1aecdcd25f39d5ce664b2471c1268a7b8b47a8f6d6783e464b3eece15ad6f96dccd15a5bb92 + languageName: node + linkType: hard + "@szmarczak/http-timer@npm:^1.1.2": version: 1.1.2 resolution: "@szmarczak/http-timer@npm:1.1.2" @@ -4224,6 +4231,13 @@ __metadata: languageName: node linkType: hard +"comlink@npm:4.4.2": + version: 4.4.2 + resolution: "comlink@npm:4.4.2" + checksum: 10c0/38aa1f455cf08e94aaa8fc494fd203cc0ef02ece6c21404b7931ce17567e8a72deacddab98aa5650cfd78332ff24c34610586f6fb27fd19dc77e753ed1980deb + languageName: node + linkType: hard + "commander@npm:^10.0.0": version: 10.0.1 resolution: "commander@npm:10.0.1" @@ -9175,6 +9189,7 @@ __metadata: "@node-steam/vdf": "npm:^2.1.0" "@quasar/app-vite": "npm:^2.4.0" "@quasar/extras": "npm:^1.17.0" + "@sqlite.org/sqlite-wasm": "npm:3.53.0-build1" "@types/adm-zip": "npm:^0.4.34" "@types/async-lock": "npm:^1.1.2" "@types/chai": "npm:^4.2.11" @@ -9201,6 +9216,7 @@ __metadata: bulma-slider: "npm:2.0.4" bulma-steps: "npm:^2.2.1" bulma-switch: "npm:^2.0.0" + comlink: "npm:4.4.2" core-js: "npm:^3.47.0" devtron: "npm:^1.4.0" dexie: "npm:^3.2.7"