From e1d6d4acf0d18d1d7a6e1b108e775c075c79d921 Mon Sep 17 00:00:00 2001 From: godo Date: Fri, 2 May 2025 17:22:39 +0800 Subject: [PATCH] add local models --- os/package-lock.json | 2020 ++++++++++++++++- os/package.json | 5 +- os/src-tauri/Cargo.toml | 4 + os/src-tauri/src/lib.rs | 1 + os/src/api/init.ts | 0 os/src/api/local/cache/index.ts | 79 + os/src/api/local/models/users.ts | 13 + os/src/api/local/orm/db.ts | 21 + os/src/api/local/orm/migration.ts | 18 + os/src/api/local/orm/orm.ts | 213 ++ os/src/api/local/service/auth.ts | 0 os/src/api/{ => member}/auth.ts | 0 os/src/api/{ => member}/files.ts | 0 os/src/api/{ => member}/knowledge.ts | 0 os/src/api/{ => member}/share.ts | 0 os/src/api/{ => member}/workflow.ts | 0 os/src/api/net/auth.ts | 79 + os/src/api/net/files.ts | 250 ++ os/src/api/net/knowledge.ts | 8 + os/src/api/net/share.ts | 25 + os/src/api/net/workflow.ts | 53 + os/src/components/auth/AuthLogin.vue | 64 +- os/src/components/auth/EmailLogin.vue | 2 +- os/src/components/auth/PhoneLogin.vue | 2 +- os/src/components/auth/SetUp.vue | 66 +- os/src/components/files/SaveFile.vue | 2 +- os/src/components/taskbar/ScreenRecorder.vue | 2 +- os/src/components/taskbar/Screenshort.vue | 2 +- os/src/components/taskbar/StartMenu.vue | 2 +- os/src/components/user/ChooseUser.vue | 2 +- os/src/components/windows/Collaboration.vue | 2 +- os/src/components/windows/IframeApp.vue | 2 +- .../workbench/worktable/ApplyList.vue | 2 +- .../workbench/worktable/CopyFromMe.vue | 2 +- .../workbench/worktable/CopyToMe.vue | 2 +- .../workbench/worktable/MyApply.vue | 2 +- .../workbench/worktable/MyCheck.vue | 2 +- .../components/workbench/worktable/MyTask.vue | 2 +- .../workbench/worktable/TaskList.vue | 2 +- os/src/stores/desktop.ts | 2 +- os/src/stores/dragfiles.ts | 2 +- os/src/stores/filesystem.ts | 6 +- os/src/stores/login.ts | 2 +- os/src/stores/settingsConfig.ts | 4 +- os/src/styles/login.scss | 3 + os/src/views/knowledgeChat.vue | 2 +- os/uno.config.ts | 24 +- 47 files changed, 2848 insertions(+), 148 deletions(-) create mode 100644 os/src/api/init.ts create mode 100644 os/src/api/local/cache/index.ts create mode 100644 os/src/api/local/models/users.ts create mode 100644 os/src/api/local/orm/db.ts create mode 100644 os/src/api/local/orm/migration.ts create mode 100644 os/src/api/local/orm/orm.ts create mode 100644 os/src/api/local/service/auth.ts rename os/src/api/{ => member}/auth.ts (100%) rename os/src/api/{ => member}/files.ts (100%) rename os/src/api/{ => member}/knowledge.ts (100%) rename os/src/api/{ => member}/share.ts (100%) rename os/src/api/{ => member}/workflow.ts (100%) create mode 100644 os/src/api/net/auth.ts create mode 100644 os/src/api/net/files.ts create mode 100644 os/src/api/net/knowledge.ts create mode 100644 os/src/api/net/share.ts create mode 100644 os/src/api/net/workflow.ts diff --git a/os/package-lock.json b/os/package-lock.json index c162e5c..f5071f3 100644 --- a/os/package-lock.json +++ b/os/package-lock.json @@ -9,11 +9,25 @@ "version": "1.0.0", "dependencies": { "@element-plus/icons-vue": "^2.1.0", + "@libsql/client": "^0.15.4", + "@tauri-apps/plugin-autostart": "~2", + "@tauri-apps/plugin-dialog": "~2.2.1", + "@tauri-apps/plugin-fs": "~2.2.1", + "@tauri-apps/plugin-notification": "~2.2.2", + "@tauri-apps/plugin-opener": "~2.2.6", + "@tauri-apps/plugin-os": "~2.2.1", + "@tauri-apps/plugin-process": "~2.2.1", + "@tauri-apps/plugin-store": "~2.2.0", + "@tauri-apps/plugin-updater": "~2.7.1", + "@tauri-apps/plugin-upload": "~2.2.1", + "@tauri-apps/plugin-websocket": "~2.3.0", + "@tauri-apps/plugin-window-state": "~2.2.2", "@types/file-saver": "^2.0.7", "axios": "^1.7.9", "chart.js": "^4.4.7", "cherry-markdown": "^0.8.58", "dexie": "^4.0.10", + "drizzle-orm": "^0.43.1", "element-plus": "^2.3.9", "exceljs": "^4.4.0", "file-saver": "^2.0.5", @@ -41,9 +55,11 @@ "@types/node": "^22.10.10", "@types/tinycolor2": "^1.4.6", "@vitejs/plugin-vue": "^4.2.3", + "drizzle-kit": "^0.31.0", "less": "^4.2.2", "sass": "^1.83.4", "typescript": "^5.0.2", + "unocss": "66.1.0-beta.13", "unplugin-auto-import": "^19.0.0", "unplugin-vue-components": "^28.0.0", "vite": "^4.4.5", @@ -90,6 +106,20 @@ "vue-template-compiler": ">=2.5.0" } }, + "node_modules/@antfu/install-pkg": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@antfu/install-pkg/-/install-pkg-1.0.0.tgz", + "integrity": "sha512-xvX6P/lo1B3ej0OsaErAjqgFYzYVcJpamjLAFLYh9vRJngBrMoUG7aVnrGTeqM7yxbyTD5p3F2+0/QUEh8Vzhw==", + "dev": true, + "license": "MIT", + "dependencies": { + "package-manager-detector": "^0.2.8", + "tinyexec": "^0.3.2" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, "node_modules/@antfu/utils": { "version": "0.7.10", "resolved": "https://registry.npmmirror.com/@antfu/utils/-/utils-0.7.10.tgz", @@ -531,6 +561,13 @@ "node": ">=10" } }, + "node_modules/@drizzle-team/brocli": { + "version": "0.10.2", + "resolved": "https://registry.npmjs.org/@drizzle-team/brocli/-/brocli-0.10.2.tgz", + "integrity": "sha512-z33Il7l5dKjUgGULTqBsQBQwckHh5AbIuxhdsIxDDiZAzBOrZO6q9ogcWC65kU382AfynTfgNumVcNIjuIua6w==", + "dev": true, + "license": "Apache-2.0" + }, "node_modules/@element-plus/icons-vue": { "version": "2.3.1", "resolved": "https://registry.npmmirror.com/@element-plus/icons-vue/-/icons-vue-2.3.1.tgz", @@ -539,6 +576,47 @@ "vue": "^3.2.0" } }, + "node_modules/@esbuild-kit/core-utils": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/@esbuild-kit/core-utils/-/core-utils-3.3.2.tgz", + "integrity": "sha512-sPRAnw9CdSsRmEtnsl2WXWdyquogVpB3yZ3dgwJfe8zrOzTsV7cJvmwrKVa+0ma5BoiGJ+BoqkMvawbayKUsqQ==", + "deprecated": "Merged into tsx: https://tsx.is", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "~0.18.20", + "source-map-support": "^0.5.21" + } + }, + "node_modules/@esbuild-kit/esm-loader": { + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/@esbuild-kit/esm-loader/-/esm-loader-2.6.5.tgz", + "integrity": "sha512-FxEMIkJKnodyA1OaCUoEvbYRkoZlLZ4d/eXFu9Fh8CbBBgP5EmZxrfTRyN0qpXZ4vOvqnE5YdRdcrmUUXuU+dA==", + "deprecated": "Merged into tsx: https://tsx.is", + "dev": true, + "license": "MIT", + "dependencies": { + "@esbuild-kit/core-utils": "^3.3.2", + "get-tsconfig": "^4.7.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.3.tgz", + "integrity": "sha512-W8bFfPA8DowP8l//sxjJLSLkD8iEjMc7cBVyP+u4cEv9sM7mdUCkgsj+t0n/BWPFtv7WWCN5Yzj0N6FJNUUqBQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, "node_modules/@esbuild/android-arm": { "version": "0.18.20", "resolved": "https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.18.20.tgz", @@ -795,6 +873,23 @@ "node": ">=12" } }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.3.tgz", + "integrity": "sha512-1QaLtOWq0mzK6tzzp0jRN3eccmN3hezey7mhLnzC6oNlJoUJz4nym5ZD7mDnS/LZQgkrhEbEiTn515lPeLpgWA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, "node_modules/@esbuild/netbsd-x64": { "version": "0.18.20", "resolved": "https://registry.npmmirror.com/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz", @@ -811,6 +906,23 @@ "node": ">=12" } }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.3.tgz", + "integrity": "sha512-zGAVApJEYTbOC6H/3QBr2mq3upG/LBEXr85/pTtKiv2IXcgKV0RT0QA/hSXZqSvLEpXeIxah7LczB4lkiYhTAQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, "node_modules/@esbuild/openbsd-x64": { "version": "0.18.20", "resolved": "https://registry.npmmirror.com/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz", @@ -950,6 +1062,90 @@ "resolved": "https://registry.npmmirror.com/@floating-ui/utils/-/utils-0.2.9.tgz", "integrity": "sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg==" }, + "node_modules/@iconify/types": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@iconify/types/-/types-2.0.0.tgz", + "integrity": "sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@iconify/utils": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@iconify/utils/-/utils-2.3.0.tgz", + "integrity": "sha512-GmQ78prtwYW6EtzXRU1rY+KwOKfz32PD7iJh6Iyqw68GiKuoZ2A6pRtzWONz5VQJbp50mEjXh/7NkumtrAgRKA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@antfu/install-pkg": "^1.0.0", + "@antfu/utils": "^8.1.0", + "@iconify/types": "^2.0.0", + "debug": "^4.4.0", + "globals": "^15.14.0", + "kolorist": "^1.8.0", + "local-pkg": "^1.0.0", + "mlly": "^1.7.4" + } + }, + "node_modules/@iconify/utils/node_modules/@antfu/utils": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/@antfu/utils/-/utils-8.1.1.tgz", + "integrity": "sha512-Mex9nXf9vR6AhcXmMrlz/HVgYYZpVGJ6YlPgwl7UnaFpnshXs6EK/oa5Gpf3CzENMjkvEx2tQtntGnb7UtSTOQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@iconify/utils/node_modules/confbox": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.2.2.tgz", + "integrity": "sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@iconify/utils/node_modules/globals": { + "version": "15.15.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-15.15.0.tgz", + "integrity": "sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@iconify/utils/node_modules/local-pkg": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-1.1.1.tgz", + "integrity": "sha512-WunYko2W1NcdfAFpuLUoucsgULmgDBRkdxHxWQ7mK0cQqwPiy8E1enjuRBrhLtZkB5iScJ1XIPdhVEFK8aOLSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "mlly": "^1.7.4", + "pkg-types": "^2.0.1", + "quansync": "^0.2.8" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@iconify/utils/node_modules/pkg-types": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-2.1.0.tgz", + "integrity": "sha512-wmJwA+8ihJixSoHKxZJRBQG1oY8Yr9pGLzRmSsNms0iNWyHHAlZCa7mmKiFR10YPZuz/2k169JiS/inOjBCZ2A==", + "dev": true, + "license": "MIT", + "dependencies": { + "confbox": "^0.2.1", + "exsolve": "^1.0.1", + "pathe": "^2.0.3" + } + }, "node_modules/@intlify/core-base": { "version": "11.0.1", "resolved": "https://registry.npmmirror.com/@intlify/core-base/-/core-base-11.0.1.tgz", @@ -1039,6 +1235,174 @@ "resolved": "https://registry.npmmirror.com/@kurkle/color/-/color-0.3.4.tgz", "integrity": "sha512-M5UknZPHRu3DEDWoipU6sE8PdkZ6Z/S+v4dD+Ke8IaNlpdSQah50lz1KtcFBa2vsdOnwbbnxJwVM4wty6udA5w==" }, + "node_modules/@libsql/client": { + "version": "0.15.4", + "resolved": "https://registry.npmjs.org/@libsql/client/-/client-0.15.4.tgz", + "integrity": "sha512-m8a7giWlhLdfKVIZFd3UlBptWTS+H0toSOL09BxbqzBeFHwuVC+5ewyi4LMBxoy2TLNQGE4lO8cwpsTWmu695w==", + "license": "MIT", + "dependencies": { + "@libsql/core": "^0.15.4", + "@libsql/hrana-client": "^0.7.0", + "js-base64": "^3.7.5", + "libsql": "^0.5.6", + "promise-limit": "^2.7.0" + } + }, + "node_modules/@libsql/core": { + "version": "0.15.4", + "resolved": "https://registry.npmjs.org/@libsql/core/-/core-0.15.4.tgz", + "integrity": "sha512-NMvh6xnn3vrcd7DNehj0HiJcRWB2a8hHhJUTkOBej3Pf3KB21HOmdOUjXxJ5pGbjWXh4ezQBmHtF5ozFhocXaA==", + "license": "MIT", + "dependencies": { + "js-base64": "^3.7.5" + } + }, + "node_modules/@libsql/darwin-arm64": { + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/@libsql/darwin-arm64/-/darwin-arm64-0.5.8.tgz", + "integrity": "sha512-dJRfwCHAKOIgysMbB+PBo3ZmCVuGC02fH57kFEFlqbbUv6wnAZV5g7GErQIv4IlC4VPKAS4RL20fjLUgXE+0Xg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@libsql/darwin-x64": { + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/@libsql/darwin-x64/-/darwin-x64-0.5.8.tgz", + "integrity": "sha512-ua5ngqJy9o4lyjYDzF8c69YbOAwP2TQXPhDURs8l97b09HHFh5/8gWRNor7vYRpsziwp8TC77DdQ0C84+gP5tg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@libsql/hrana-client": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@libsql/hrana-client/-/hrana-client-0.7.0.tgz", + "integrity": "sha512-OF8fFQSkbL7vJY9rfuegK1R7sPgQ6kFMkDamiEccNUvieQ+3urzfDFI616oPl8V7T9zRmnTkSjMOImYCAVRVuw==", + "license": "MIT", + "dependencies": { + "@libsql/isomorphic-fetch": "^0.3.1", + "@libsql/isomorphic-ws": "^0.1.5", + "js-base64": "^3.7.5", + "node-fetch": "^3.3.2" + } + }, + "node_modules/@libsql/hrana-client/node_modules/node-fetch": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", + "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", + "license": "MIT", + "dependencies": { + "data-uri-to-buffer": "^4.0.0", + "fetch-blob": "^3.1.4", + "formdata-polyfill": "^4.0.10" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/node-fetch" + } + }, + "node_modules/@libsql/isomorphic-fetch": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@libsql/isomorphic-fetch/-/isomorphic-fetch-0.3.1.tgz", + "integrity": "sha512-6kK3SUK5Uu56zPq/Las620n5aS9xJq+jMBcNSOmjhNf/MUvdyji4vrMTqD7ptY7/4/CAVEAYDeotUz60LNQHtw==", + "license": "MIT", + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@libsql/isomorphic-ws": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@libsql/isomorphic-ws/-/isomorphic-ws-0.1.5.tgz", + "integrity": "sha512-DtLWIH29onUYR00i0GlQ3UdcTRC6EP4u9w/h9LxpUZJWRMARk6dQwZ6Jkd+QdwVpuAOrdxt18v0K2uIYR3fwFg==", + "license": "MIT", + "dependencies": { + "@types/ws": "^8.5.4", + "ws": "^8.13.0" + } + }, + "node_modules/@libsql/linux-arm64-gnu": { + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/@libsql/linux-arm64-gnu/-/linux-arm64-gnu-0.5.8.tgz", + "integrity": "sha512-6HHZlPbMu+cmCJafg/dwOcWFMu07hTB5teMKU5ke66kqeWLRBnOs5/DnZGVz6q0k+Z4L4UTRbdrnCklR3GmvFg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@libsql/linux-arm64-musl": { + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/@libsql/linux-arm64-musl/-/linux-arm64-musl-0.5.8.tgz", + "integrity": "sha512-QGhZadKk3gvrDHa63U7xQrsqET/43E6L7/15oh7I+SINl8meoZAJNTJNYfOUmPM2lPPfNDgr46v4p5ggo6su0A==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@libsql/linux-x64-gnu": { + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/@libsql/linux-x64-gnu/-/linux-x64-gnu-0.5.8.tgz", + "integrity": "sha512-HUWxOvLE5W287O/vaHWFpZMqaaebEBZvcUqJJ/E+IcC9kmKc6GqDW+fJkfPfosrpGyPNbYDj0w9pIcck0l/oeA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@libsql/linux-x64-musl": { + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/@libsql/linux-x64-musl/-/linux-x64-musl-0.5.8.tgz", + "integrity": "sha512-hfhkPwqzFroU01xUB7ZXFw3bP+jqcGolGLyhEkeh/Rsoune0ucm1KPrU2tqTBqQP4a7lL0nSL1A37nfjIO61Hw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@libsql/win32-x64-msvc": { + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/@libsql/win32-x64-msvc/-/win32-x64-msvc-0.5.8.tgz", + "integrity": "sha512-8hKczus0swLEvXu8N0znWdyFo5QzFnE9mnz7G/sb+eVn+zpPlT6ZdFHZdhQzev9C0to7kvYDj03qESTUIwDiqg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@neon-rs/load": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/@neon-rs/load/-/load-0.0.4.tgz", + "integrity": "sha512-kTPhdZyTQxB+2wpiRcFWrDcejc4JI6tkPuS7UZCG4l6Zvc5kU/gGQ/ozvHTh1XR5tS+UlfAfGuPajjzQjCiHCw==", + "license": "MIT" + }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmmirror.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -1508,6 +1872,22 @@ "url": "https://opencollective.com/popperjs" } }, + "node_modules/@quansync/fs": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@quansync/fs/-/fs-0.1.2.tgz", + "integrity": "sha512-ezIadUb1aFhwJLd++WVqVpi9rnlX8vnd4ju7saPhwLHJN1mJgOv0puePTGV+FbtSnWtwoHDT8lAm4kagDZmpCg==", + "dev": true, + "license": "MIT", + "dependencies": { + "quansync": "^0.2.10" + }, + "engines": { + "node": ">=20.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sxzz" + } + }, "node_modules/@rollup/pluginutils": { "version": "5.1.4", "resolved": "https://registry.npmmirror.com/@rollup/pluginutils/-/pluginutils-5.1.4.tgz", @@ -1567,6 +1947,16 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/@tauri-apps/api": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@tauri-apps/api/-/api-2.5.0.tgz", + "integrity": "sha512-Ldux4ip+HGAcPUmuLT8EIkk6yafl5vK0P0c0byzAKzxJh7vxelVtdPONjfgTm96PbN24yjZNESY8CKo8qniluA==", + "license": "Apache-2.0 OR MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/tauri" + } + }, "node_modules/@tauri-apps/cli": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/@tauri-apps/cli/-/cli-2.5.0.tgz", @@ -1784,6 +2174,114 @@ "node": ">= 10" } }, + "node_modules/@tauri-apps/plugin-autostart": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@tauri-apps/plugin-autostart/-/plugin-autostart-2.3.0.tgz", + "integrity": "sha512-yxQTpc4NolT1r317yjKVhrG+YwCWPBOj7p+70m/q0w1JHc53pGcHmTboAbA3kGY6PQ+9y9oE7cdmHq7PH9z/SQ==", + "license": "MIT OR Apache-2.0", + "dependencies": { + "@tauri-apps/api": "^2.0.0" + } + }, + "node_modules/@tauri-apps/plugin-dialog": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@tauri-apps/plugin-dialog/-/plugin-dialog-2.2.1.tgz", + "integrity": "sha512-wZmCouo4PgTosh/UoejPw9DPs6RllS5Pp3fuOV2JobCu36mR5AXU2MzU9NZiVaFi/5Zfc8RN0IhcZHnksJ1o8A==", + "license": "MIT OR Apache-2.0", + "dependencies": { + "@tauri-apps/api": "^2.0.0" + } + }, + "node_modules/@tauri-apps/plugin-fs": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@tauri-apps/plugin-fs/-/plugin-fs-2.2.1.tgz", + "integrity": "sha512-KdGzvvA4Eg0Dhw55MwczFbjxLxsTx0FvwwC/0StXlr6IxwPUxh5ziZQoaugkBFs8t+wfebdQrjBEzd8NmmDXNw==", + "license": "MIT OR Apache-2.0", + "dependencies": { + "@tauri-apps/api": "^2.0.0" + } + }, + "node_modules/@tauri-apps/plugin-notification": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@tauri-apps/plugin-notification/-/plugin-notification-2.2.2.tgz", + "integrity": "sha512-d71rJdtkFUTcG4dqydnv6d7ZwlNZVcdjrVOPwc9GsF6y9DgVN1WCZ9T/vbfD2qrJslf7ai+rnNJc62TLLC2IdA==", + "license": "MIT OR Apache-2.0", + "dependencies": { + "@tauri-apps/api": "^2.0.0" + } + }, + "node_modules/@tauri-apps/plugin-opener": { + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/@tauri-apps/plugin-opener/-/plugin-opener-2.2.6.tgz", + "integrity": "sha512-bSdkuP71ZQRepPOn8BOEdBKYJQvl6+jb160QtJX/i2H9BF6ZySY/kYljh76N2Ne5fJMQRge7rlKoStYQY5Jq1w==", + "license": "MIT OR Apache-2.0", + "dependencies": { + "@tauri-apps/api": "^2.0.0" + } + }, + "node_modules/@tauri-apps/plugin-os": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@tauri-apps/plugin-os/-/plugin-os-2.2.1.tgz", + "integrity": "sha512-cNYpNri2CCc6BaNeB6G/mOtLvg8dFyFQyCUdf2y0K8PIAKGEWdEcu8DECkydU2B+oj4OJihDPD2de5K6cbVl9A==", + "license": "MIT OR Apache-2.0", + "dependencies": { + "@tauri-apps/api": "^2.0.0" + } + }, + "node_modules/@tauri-apps/plugin-process": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@tauri-apps/plugin-process/-/plugin-process-2.2.1.tgz", + "integrity": "sha512-cF/k8J+YjjuowhNG1AboHNTlrGiOwgX5j6NzsX6WFf9FMzyZUchkCgZMxCdSE5NIgFX0vvOgLQhODFJgbMenLg==", + "license": "MIT OR Apache-2.0", + "dependencies": { + "@tauri-apps/api": "^2.0.0" + } + }, + "node_modules/@tauri-apps/plugin-store": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@tauri-apps/plugin-store/-/plugin-store-2.2.0.tgz", + "integrity": "sha512-hJTRtuJis4w5fW1dkcgftsYxKXK0+DbAqurZ3CURHG5WkAyyZgbxpeYctw12bbzF9ZbZREXZklPq8mocCC3Sgg==", + "license": "MIT OR Apache-2.0", + "dependencies": { + "@tauri-apps/api": "^2.0.0" + } + }, + "node_modules/@tauri-apps/plugin-updater": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/@tauri-apps/plugin-updater/-/plugin-updater-2.7.1.tgz", + "integrity": "sha512-1OPqEY/z7NDVSeTEMIhD2ss/vXWdpfZ5Th2Mk0KtPR/RA6FKuOTDGZQhxoyYBk0pcZJ+nNZUbl/IujDCLBApjA==", + "license": "MIT OR Apache-2.0", + "dependencies": { + "@tauri-apps/api": "^2.0.0" + } + }, + "node_modules/@tauri-apps/plugin-upload": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@tauri-apps/plugin-upload/-/plugin-upload-2.2.1.tgz", + "integrity": "sha512-2EyVhJYLAp2mJH0UzO3QGU0vPk/YWvAfdI2wXbczyzEZY/AZVa9wConyB1TV/NGhyJRim4LwWgkmnEvcKLkECw==", + "license": "MIT OR Apache-2.0", + "dependencies": { + "@tauri-apps/api": "^2.0.0" + } + }, + "node_modules/@tauri-apps/plugin-websocket": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@tauri-apps/plugin-websocket/-/plugin-websocket-2.3.0.tgz", + "integrity": "sha512-eAwRGe3tnqDeQYE0wq4g1PUKbam9tYvlC4uP/au12Y/z7MP4lrS4ylv+aoZ5Ly+hTlBdi7hDkhHomwF/UeBesA==", + "license": "MIT OR Apache-2.0", + "dependencies": { + "@tauri-apps/api": "^2.0.0" + } + }, + "node_modules/@tauri-apps/plugin-window-state": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@tauri-apps/plugin-window-state/-/plugin-window-state-2.2.2.tgz", + "integrity": "sha512-7pFwmMtGhhhE/WgmM7PUrj0BSSWVAQMfDdYbRalphIqqF1tWBvxtlxclx8bTutpXHLJTQoCpIeWtBEIXsoAlGw==", + "license": "MIT OR Apache-2.0", + "dependencies": { + "@tauri-apps/api": "^2.0.0" + } + }, "node_modules/@tootallnate/once": { "version": "2.0.0", "resolved": "https://registry.npmmirror.com/@tootallnate/once/-/once-2.0.0.tgz", @@ -1845,7 +2343,6 @@ "version": "22.10.10", "resolved": "https://registry.npmmirror.com/@types/node/-/node-22.10.10.tgz", "integrity": "sha512-X47y/mPNzxviAGY5TcYPtYL8JsY3kAq2n8fMmKoRCxq/c4v4pyGNCzM2R6+M5/umG4ZfHuT+sgqDYqWc9rJ6ww==", - "dev": true, "dependencies": { "undici-types": "~6.20.0" } @@ -1874,13 +2371,476 @@ "resolved": "https://registry.npmmirror.com/@types/web-bluetooth/-/web-bluetooth-0.0.16.tgz", "integrity": "sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ==" }, - "node_modules/@vitejs/plugin-vue": { - "version": "4.6.2", - "resolved": "https://registry.npmmirror.com/@vitejs/plugin-vue/-/plugin-vue-4.6.2.tgz", - "integrity": "sha512-kqf7SGFoG+80aZG6Pf+gsZIVvGSCKE98JbiWqcCV9cThtg91Jav0yvYFC9Zb+jKetNGF6ZKeoaxgZfND21fWKw==", + "node_modules/@types/ws": { + "version": "8.18.1", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz", + "integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@unocss/astro": { + "version": "66.1.0-beta.13", + "resolved": "https://registry.npmjs.org/@unocss/astro/-/astro-66.1.0-beta.13.tgz", + "integrity": "sha512-NLCiDbHo/Sk905x8UucjXO/9qDrdFMSdJsJmh0HXqaCWeInnUWgv0T+PnxW6D5qzENqw8dgg4gH8RDOgKExU3Q==", "dev": true, - "engines": { - "node": "^14.18.0 || >=16.0.0" + "license": "MIT", + "dependencies": { + "@unocss/core": "66.1.0-beta.13", + "@unocss/reset": "66.1.0-beta.13", + "@unocss/vite": "66.1.0-beta.13" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vite": "^2.9.0 || ^3.0.0-0 || ^4.0.0 || ^5.0.0-0 || ^6.0.0-0" + }, + "peerDependenciesMeta": { + "vite": { + "optional": true + } + } + }, + "node_modules/@unocss/cli": { + "version": "66.1.0-beta.13", + "resolved": "https://registry.npmjs.org/@unocss/cli/-/cli-66.1.0-beta.13.tgz", + "integrity": "sha512-2r0rG7oL0u58lbz8WagFekjrvzKaODhFor3Iu5YWLJYKae04fxT+3LVEt2dwMK/DSK5DEaHEMkzG8Jv5mASsbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.3.0", + "@unocss/config": "66.1.0-beta.13", + "@unocss/core": "66.1.0-beta.13", + "@unocss/preset-uno": "66.1.0-beta.13", + "cac": "^6.7.14", + "chokidar": "^3.6.0", + "colorette": "^2.0.20", + "consola": "^3.4.2", + "magic-string": "^0.30.17", + "pathe": "^2.0.3", + "perfect-debounce": "^1.0.0", + "tinyglobby": "^0.2.12", + "unplugin-utils": "^0.2.4" + }, + "bin": { + "unocss": "bin/unocss.mjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@unocss/cli/node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/@unocss/cli/node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/@unocss/config": { + "version": "66.1.0-beta.13", + "resolved": "https://registry.npmjs.org/@unocss/config/-/config-66.1.0-beta.13.tgz", + "integrity": "sha512-YBdjPWIAQPQYmU3uBF+NLbctFiGYGPviFolA9yOW6ijVioSCvrCESyyDK+gSW4gVnAU1u2St6LhePd6/kPzUaw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@unocss/core": "66.1.0-beta.13", + "unconfig": "^7.3.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@unocss/core": { + "version": "66.1.0-beta.13", + "resolved": "https://registry.npmjs.org/@unocss/core/-/core-66.1.0-beta.13.tgz", + "integrity": "sha512-kf5QIlReypn5dE18CqaEP7pRQlSoVP0O+Y3Y0nSF6U/TU9eB4InDhLfZF1PzjgR2EWQIaqnVTFNtAN52uJIFYQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@unocss/extractor-arbitrary-variants": { + "version": "66.1.0-beta.13", + "resolved": "https://registry.npmjs.org/@unocss/extractor-arbitrary-variants/-/extractor-arbitrary-variants-66.1.0-beta.13.tgz", + "integrity": "sha512-N4xKXhNHgQqFnMjUnzsuJTBaKWV+jtPb6y8Ny1KVc3zPygJ/PUldh0nKWbdD/jPp3ZSrEA4x7Gi871n3rCUP2w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@unocss/core": "66.1.0-beta.13" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@unocss/inspector": { + "version": "66.1.0-beta.13", + "resolved": "https://registry.npmjs.org/@unocss/inspector/-/inspector-66.1.0-beta.13.tgz", + "integrity": "sha512-dCzTt9cqTNTD7vWmZO5qxGCxs1aubiGZFVTtH6jJwXFEHL8qIjB477G5piBjeuo8na3KAV+Khdm9Z35ApzuXjA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@unocss/core": "66.1.0-beta.13", + "@unocss/rule-utils": "66.1.0-beta.13", + "colorette": "^2.0.20", + "gzip-size": "^6.0.0", + "sirv": "^3.0.1", + "vue-flow-layout": "^0.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@unocss/postcss": { + "version": "66.1.0-beta.13", + "resolved": "https://registry.npmjs.org/@unocss/postcss/-/postcss-66.1.0-beta.13.tgz", + "integrity": "sha512-uSRATIAAw6t/DsiqE8VIyaXwht2lejYcTHQfF1GRDu07gDhM/hD6uc4s8rEGgaEgzJBNPdEr/xPGHDwg1QChDw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@unocss/config": "66.1.0-beta.13", + "@unocss/core": "66.1.0-beta.13", + "@unocss/rule-utils": "66.1.0-beta.13", + "css-tree": "^3.1.0", + "postcss": "^8.5.3", + "tinyglobby": "^0.2.12" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "postcss": "^8.4.21" + } + }, + "node_modules/@unocss/preset-attributify": { + "version": "66.1.0-beta.13", + "resolved": "https://registry.npmjs.org/@unocss/preset-attributify/-/preset-attributify-66.1.0-beta.13.tgz", + "integrity": "sha512-qD0B9dTb2QioTKS7YyIVPDRhV4URJrxt+1j/HW10o5/aqkOutphiuP6FhITi3mWSfBz1GyL25MdK1oXeOrmCqg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@unocss/core": "66.1.0-beta.13" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@unocss/preset-icons": { + "version": "66.1.0-beta.13", + "resolved": "https://registry.npmjs.org/@unocss/preset-icons/-/preset-icons-66.1.0-beta.13.tgz", + "integrity": "sha512-PefDt6sJB++Y/p0zYDU7s+DR1h+OQIIqXC39X7VcyjPkeQLzJ2lORR9opVZBVCQke32tYLkk6JyaFGfuKTUL9Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@iconify/utils": "^2.3.0", + "@unocss/core": "66.1.0-beta.13", + "ofetch": "^1.4.1" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@unocss/preset-mini": { + "version": "66.1.0-beta.13", + "resolved": "https://registry.npmjs.org/@unocss/preset-mini/-/preset-mini-66.1.0-beta.13.tgz", + "integrity": "sha512-hRSm3AN/txbFOFa3829UN/c+zeHcNWmP2M9dkpgmCwYwpzk821NXMRLT5eUxgvjLquqAmxRLdlDKH27rOz80Ew==", + "dev": true, + "license": "MIT", + "dependencies": { + "@unocss/core": "66.1.0-beta.13", + "@unocss/extractor-arbitrary-variants": "66.1.0-beta.13", + "@unocss/rule-utils": "66.1.0-beta.13" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@unocss/preset-tagify": { + "version": "66.1.0-beta.13", + "resolved": "https://registry.npmjs.org/@unocss/preset-tagify/-/preset-tagify-66.1.0-beta.13.tgz", + "integrity": "sha512-K4ieNbN5xufAczeDaR9s8XMikVL4a0l3NYkGzbYYVELDXiCkj++geDQPDsoYvqakI5DX5ikHi1YwoOC/k4uRww==", + "dev": true, + "license": "MIT", + "dependencies": { + "@unocss/core": "66.1.0-beta.13" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@unocss/preset-typography": { + "version": "66.1.0-beta.13", + "resolved": "https://registry.npmjs.org/@unocss/preset-typography/-/preset-typography-66.1.0-beta.13.tgz", + "integrity": "sha512-MHb3XYNNkK26SZHWUaxMMK250yMtbeIMg8nOsrlGWr1gmdbePMAnmW5puj9ppl8g9gBAFer7hl0h0qRQjGDtUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@unocss/core": "66.1.0-beta.13", + "@unocss/preset-mini": "66.1.0-beta.13", + "@unocss/rule-utils": "66.1.0-beta.13" + } + }, + "node_modules/@unocss/preset-uno": { + "version": "66.1.0-beta.13", + "resolved": "https://registry.npmjs.org/@unocss/preset-uno/-/preset-uno-66.1.0-beta.13.tgz", + "integrity": "sha512-MxYOWbFwKOW5tIxF6ckrGH3ST85h9+jNg+AWJIoHoKeIZPVXbA+ayY/J8n58a8p1vw24Dpky76W8D68qa2MuKg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@unocss/core": "66.1.0-beta.13", + "@unocss/preset-wind3": "66.1.0-beta.13" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@unocss/preset-web-fonts": { + "version": "66.1.0-beta.13", + "resolved": "https://registry.npmjs.org/@unocss/preset-web-fonts/-/preset-web-fonts-66.1.0-beta.13.tgz", + "integrity": "sha512-LshyEnyAnu3yYECsMvPQKbFb2G0Uv7TwMPN/eXNrMcAcN0WcNTzGHEFG7fNQM2llmK3SRrqwKdApg2jm+4RvMg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@unocss/core": "66.1.0-beta.13", + "ofetch": "^1.4.1" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@unocss/preset-wind": { + "version": "66.1.0-beta.13", + "resolved": "https://registry.npmjs.org/@unocss/preset-wind/-/preset-wind-66.1.0-beta.13.tgz", + "integrity": "sha512-OrFlmmuKxnj+vuJDP+wDhN7QuZOEwxTYAtEdUH/xT6nXgTYkgfEjZnIp+6AZazUuGIkrioaVRy/IhAFpdeJFKg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@unocss/core": "66.1.0-beta.13", + "@unocss/preset-wind3": "66.1.0-beta.13" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@unocss/preset-wind3": { + "version": "66.1.0-beta.13", + "resolved": "https://registry.npmjs.org/@unocss/preset-wind3/-/preset-wind3-66.1.0-beta.13.tgz", + "integrity": "sha512-H7JKJgPfmKMTA0DzGw+FHOQA34GAJPyLc6PY+1QbaIvMl6aVL6d9JQ3zeDaBZOPI136Zq/Z/rFOiGcJtVJ+8Vg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@unocss/core": "66.1.0-beta.13", + "@unocss/preset-mini": "66.1.0-beta.13", + "@unocss/rule-utils": "66.1.0-beta.13" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@unocss/preset-wind4": { + "version": "66.1.0-beta.13", + "resolved": "https://registry.npmjs.org/@unocss/preset-wind4/-/preset-wind4-66.1.0-beta.13.tgz", + "integrity": "sha512-wQBoBV8+jOeh/sh/LNxWOjry8LusED5/FvpbmjtfpheDJK6up6cEwCJMcj2cjSBRs7MEPwaXTddmNpuoORvC/Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@unocss/core": "66.1.0-beta.13", + "@unocss/extractor-arbitrary-variants": "66.1.0-beta.13", + "@unocss/rule-utils": "66.1.0-beta.13" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@unocss/reset": { + "version": "66.1.0-beta.13", + "resolved": "https://registry.npmjs.org/@unocss/reset/-/reset-66.1.0-beta.13.tgz", + "integrity": "sha512-EsYpOtQAICHPTJjejNT0w8VTA/kUHpadnr2HdeBzYVCNxC1+Bs5LjZvZ+NElkrK3/V64DqZr68rLUtC7xoN6ig==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@unocss/rule-utils": { + "version": "66.1.0-beta.13", + "resolved": "https://registry.npmjs.org/@unocss/rule-utils/-/rule-utils-66.1.0-beta.13.tgz", + "integrity": "sha512-YcMP+QZzoAz2J4Der/D4OXccx09ywSbYTD3v+KOfy0fSeofO4dn7gnCzuJ2OAhZ/G+y9D2Eoe63YX7T5CieiFg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@unocss/core": "^66.1.0-beta.13", + "magic-string": "^0.30.17" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@unocss/transformer-attributify-jsx": { + "version": "66.1.0-beta.13", + "resolved": "https://registry.npmjs.org/@unocss/transformer-attributify-jsx/-/transformer-attributify-jsx-66.1.0-beta.13.tgz", + "integrity": "sha512-bUdhTp98hgO714EcwqNxelcz9/z/4wftUGClmAtufjTPxH4BL7/rjCYM0RrZqUSjKGC9qb3bK+4hFXMaUYxsmQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@unocss/core": "66.1.0-beta.13" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@unocss/transformer-compile-class": { + "version": "66.1.0-beta.13", + "resolved": "https://registry.npmjs.org/@unocss/transformer-compile-class/-/transformer-compile-class-66.1.0-beta.13.tgz", + "integrity": "sha512-BBa/rF8Y0nDjZTT9jV2qYxxf+SmpHLsVI/f7nwEqAotTs7rowSAmAf0cOOZDgWHHZ8GtbITfl9iypw2mwpykUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@unocss/core": "66.1.0-beta.13" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@unocss/transformer-directives": { + "version": "66.1.0-beta.13", + "resolved": "https://registry.npmjs.org/@unocss/transformer-directives/-/transformer-directives-66.1.0-beta.13.tgz", + "integrity": "sha512-Mtta0KYJM5nHOBWLTUSe4QQ6GAUW+2WwgL9ZawHdPIAORMGsIs2Mne1UZ0KfUabXo7j8Ooadd4qmyG7Eart3mw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@unocss/core": "66.1.0-beta.13", + "@unocss/rule-utils": "66.1.0-beta.13", + "css-tree": "^3.1.0" + } + }, + "node_modules/@unocss/transformer-variant-group": { + "version": "66.1.0-beta.13", + "resolved": "https://registry.npmjs.org/@unocss/transformer-variant-group/-/transformer-variant-group-66.1.0-beta.13.tgz", + "integrity": "sha512-c87DkGhj9gnaFC67yTc6Y1u4pltK0CSQ10+lmXLNNx6vFIB7QWfKEiQ+deeTbf6mFIr9fNV3x27bgdMVBzZZWA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@unocss/core": "66.1.0-beta.13" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@unocss/vite": { + "version": "66.1.0-beta.13", + "resolved": "https://registry.npmjs.org/@unocss/vite/-/vite-66.1.0-beta.13.tgz", + "integrity": "sha512-j3hdjvmzRLWsfvfMyxgQaTJI010Lp5qJolf3UFkh/+bu4JMSZ9PytL7aWcCbu4yAFggiWaTyydHkrT73j1tioA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.3.0", + "@unocss/config": "66.1.0-beta.13", + "@unocss/core": "66.1.0-beta.13", + "@unocss/inspector": "66.1.0-beta.13", + "chokidar": "^3.6.0", + "magic-string": "^0.30.17", + "pathe": "^2.0.3", + "tinyglobby": "^0.2.12", + "unplugin-utils": "^0.2.4" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vite": "^2.9.0 || ^3.0.0-0 || ^4.0.0 || ^5.0.0-0 || ^6.0.0-0" + } + }, + "node_modules/@unocss/vite/node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/@unocss/vite/node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/@vitejs/plugin-vue": { + "version": "4.6.2", + "resolved": "https://registry.npmmirror.com/@vitejs/plugin-vue/-/plugin-vue-4.6.2.tgz", + "integrity": "sha512-kqf7SGFoG+80aZG6Pf+gsZIVvGSCKE98JbiWqcCV9cThtg91Jav0yvYFC9Zb+jKetNGF6ZKeoaxgZfND21fWKw==", + "dev": true, + "engines": { + "node": "^14.18.0 || >=16.0.0" }, "peerDependencies": { "vite": "^4.0.0 || ^5.0.0", @@ -2613,6 +3573,13 @@ "node": "*" } }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true, + "license": "MIT" + }, "node_modules/buffer-indexof-polyfill": { "version": "1.0.2", "resolved": "https://registry.npmmirror.com/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz", @@ -2676,6 +3643,16 @@ "resolved": "https://registry.npmmirror.com/pathe/-/pathe-1.1.2.tgz", "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==" }, + "node_modules/cac": { + "version": "6.7.14", + "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", + "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/caniuse-lite": { "version": "1.0.30001695", "resolved": "https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001695.tgz", @@ -2813,6 +3790,13 @@ "resolved": "https://registry.npmmirror.com/cli-width/-/cli-width-2.2.1.tgz", "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==" }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true, + "license": "MIT" + }, "node_modules/combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmmirror.com/combined-stream/-/combined-stream-1.0.8.tgz", @@ -2877,9 +3861,10 @@ "integrity": "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==" }, "node_modules/consola": { - "version": "3.4.0", - "resolved": "https://registry.npmmirror.com/consola/-/consola-3.4.0.tgz", - "integrity": "sha512-EiPU8G6dQG0GFHNR8ljnZFki/8a+cQwEQ+7wpxdChl02Q8HXlwEZWD5lqAF8vC2sEC3Tehr8hy7vErz88LHyUA==", + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/consola/-/consola-3.4.2.tgz", + "integrity": "sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==", + "license": "MIT", "engines": { "node": "^14.18.0 || >=16.10.0" } @@ -2978,6 +3963,20 @@ "utrie": "^1.0.2" } }, + "node_modules/css-tree": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.1.0.tgz", + "integrity": "sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "mdn-data": "2.12.2", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + } + }, "node_modules/cssom": { "version": "0.5.0", "resolved": "https://registry.npmmirror.com/cssom/-/cssom-0.5.0.tgz", @@ -3463,6 +4462,15 @@ "lodash-es": "^4.17.21" } }, + "node_modules/data-uri-to-buffer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", + "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, "node_modules/data-urls": { "version": "3.0.2", "resolved": "https://registry.npmmirror.com/data-urls/-/data-urls-3.0.2.tgz", @@ -3644,22 +4652,581 @@ "node": ">=12" } }, - "node_modules/dompurify": { - "version": "2.4.3", - "resolved": "https://registry.npmmirror.com/dompurify/-/dompurify-2.4.3.tgz", - "integrity": "sha512-q6QaLcakcRjebxjg8/+NP+h0rPfatOgOzc46Fst9VAA3jF2ApfKBNKMzdP4DYTqtUMXSCd5pRS/8Po/OmoCHZQ==", - "optional": true - }, - "node_modules/dotenv": { - "version": "16.4.7", - "resolved": "https://registry.npmmirror.com/dotenv/-/dotenv-16.4.7.tgz", - "integrity": "sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://dotenvx.com" - } + "node_modules/dompurify": { + "version": "2.4.3", + "resolved": "https://registry.npmmirror.com/dompurify/-/dompurify-2.4.3.tgz", + "integrity": "sha512-q6QaLcakcRjebxjg8/+NP+h0rPfatOgOzc46Fst9VAA3jF2ApfKBNKMzdP4DYTqtUMXSCd5pRS/8Po/OmoCHZQ==", + "optional": true + }, + "node_modules/dotenv": { + "version": "16.4.7", + "resolved": "https://registry.npmmirror.com/dotenv/-/dotenv-16.4.7.tgz", + "integrity": "sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/drizzle-kit": { + "version": "0.31.0", + "resolved": "https://registry.npmjs.org/drizzle-kit/-/drizzle-kit-0.31.0.tgz", + "integrity": "sha512-pcKVT+GbfPA+bUovPIilgVOoq+onNBo/YQBG86sf3/GFHkN6lRJPm1l7dKN0IMAk57RQoIm4GUllRrasLlcaSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@drizzle-team/brocli": "^0.10.2", + "@esbuild-kit/esm-loader": "^2.5.5", + "esbuild": "^0.25.2", + "esbuild-register": "^3.5.0" + }, + "bin": { + "drizzle-kit": "bin.cjs" + } + }, + "node_modules/drizzle-kit/node_modules/@esbuild/android-arm": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.3.tgz", + "integrity": "sha512-PuwVXbnP87Tcff5I9ngV0lmiSu40xw1At6i3GsU77U7cjDDB4s0X2cyFuBiDa1SBk9DnvWwnGvVaGBqoFWPb7A==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/drizzle-kit/node_modules/@esbuild/android-arm64": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.3.tgz", + "integrity": "sha512-XelR6MzjlZuBM4f5z2IQHK6LkK34Cvv6Rj2EntER3lwCBFdg6h2lKbtRjpTTsdEjD/WSe1q8UyPBXP1x3i/wYQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/drizzle-kit/node_modules/@esbuild/android-x64": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.3.tgz", + "integrity": "sha512-ogtTpYHT/g1GWS/zKM0cc/tIebFjm1F9Aw1boQ2Y0eUQ+J89d0jFY//s9ei9jVIlkYi8AfOjiixcLJSGNSOAdQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/drizzle-kit/node_modules/@esbuild/darwin-arm64": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.3.tgz", + "integrity": "sha512-eESK5yfPNTqpAmDfFWNsOhmIOaQA59tAcF/EfYvo5/QWQCzXn5iUSOnqt3ra3UdzBv073ykTtmeLJZGt3HhA+w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/drizzle-kit/node_modules/@esbuild/darwin-x64": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.3.tgz", + "integrity": "sha512-Kd8glo7sIZtwOLcPbW0yLpKmBNWMANZhrC1r6K++uDR2zyzb6AeOYtI6udbtabmQpFaxJ8uduXMAo1gs5ozz8A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/drizzle-kit/node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.3.tgz", + "integrity": "sha512-EJiyS70BYybOBpJth3M0KLOus0n+RRMKTYzhYhFeMwp7e/RaajXvP+BWlmEXNk6uk+KAu46j/kaQzr6au+JcIw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/drizzle-kit/node_modules/@esbuild/freebsd-x64": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.3.tgz", + "integrity": "sha512-Q+wSjaLpGxYf7zC0kL0nDlhsfuFkoN+EXrx2KSB33RhinWzejOd6AvgmP5JbkgXKmjhmpfgKZq24pneodYqE8Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/drizzle-kit/node_modules/@esbuild/linux-arm": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.3.tgz", + "integrity": "sha512-dUOVmAUzuHy2ZOKIHIKHCm58HKzFqd+puLaS424h6I85GlSDRZIA5ycBixb3mFgM0Jdh+ZOSB6KptX30DD8YOQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/drizzle-kit/node_modules/@esbuild/linux-arm64": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.3.tgz", + "integrity": "sha512-xCUgnNYhRD5bb1C1nqrDV1PfkwgbswTTBRbAd8aH5PhYzikdf/ddtsYyMXFfGSsb/6t6QaPSzxtbfAZr9uox4A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/drizzle-kit/node_modules/@esbuild/linux-ia32": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.3.tgz", + "integrity": "sha512-yplPOpczHOO4jTYKmuYuANI3WhvIPSVANGcNUeMlxH4twz/TeXuzEP41tGKNGWJjuMhotpGabeFYGAOU2ummBw==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/drizzle-kit/node_modules/@esbuild/linux-loong64": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.3.tgz", + "integrity": "sha512-P4BLP5/fjyihmXCELRGrLd793q/lBtKMQl8ARGpDxgzgIKJDRJ/u4r1A/HgpBpKpKZelGct2PGI4T+axcedf6g==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/drizzle-kit/node_modules/@esbuild/linux-mips64el": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.3.tgz", + "integrity": "sha512-eRAOV2ODpu6P5divMEMa26RRqb2yUoYsuQQOuFUexUoQndm4MdpXXDBbUoKIc0iPa4aCO7gIhtnYomkn2x+bag==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/drizzle-kit/node_modules/@esbuild/linux-ppc64": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.3.tgz", + "integrity": "sha512-ZC4jV2p7VbzTlnl8nZKLcBkfzIf4Yad1SJM4ZMKYnJqZFD4rTI+pBG65u8ev4jk3/MPwY9DvGn50wi3uhdaghg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/drizzle-kit/node_modules/@esbuild/linux-riscv64": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.3.tgz", + "integrity": "sha512-LDDODcFzNtECTrUUbVCs6j9/bDVqy7DDRsuIXJg6so+mFksgwG7ZVnTruYi5V+z3eE5y+BJZw7VvUadkbfg7QA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/drizzle-kit/node_modules/@esbuild/linux-s390x": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.3.tgz", + "integrity": "sha512-s+w/NOY2k0yC2p9SLen+ymflgcpRkvwwa02fqmAwhBRI3SC12uiS10edHHXlVWwfAagYSY5UpmT/zISXPMW3tQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/drizzle-kit/node_modules/@esbuild/linux-x64": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.3.tgz", + "integrity": "sha512-nQHDz4pXjSDC6UfOE1Fw9Q8d6GCAd9KdvMZpfVGWSJztYCarRgSDfOVBY5xwhQXseiyxapkiSJi/5/ja8mRFFA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/drizzle-kit/node_modules/@esbuild/netbsd-x64": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.3.tgz", + "integrity": "sha512-i5Hm68HXHdgv8wkrt+10Bc50zM0/eonPb/a/OFVfB6Qvpiirco5gBA5bz7S2SHuU+Y4LWn/zehzNX14Sp4r27g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/drizzle-kit/node_modules/@esbuild/openbsd-x64": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.3.tgz", + "integrity": "sha512-fpqctI45NnCIDKBH5AXQBsD0NDPbEFczK98hk/aa6HJxbl+UtLkJV2+Bvy5hLSLk3LHmqt0NTkKNso1A9y1a4w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/drizzle-kit/node_modules/@esbuild/sunos-x64": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.3.tgz", + "integrity": "sha512-ROJhm7d8bk9dMCUZjkS8fgzsPAZEjtRJqCAmVgB0gMrvG7hfmPmz9k1rwO4jSiblFjYmNvbECL9uhaPzONMfgA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/drizzle-kit/node_modules/@esbuild/win32-arm64": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.3.tgz", + "integrity": "sha512-YWcow8peiHpNBiIXHwaswPnAXLsLVygFwCB3A7Bh5jRkIBFWHGmNQ48AlX4xDvQNoMZlPYzjVOQDYEzWCqufMQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/drizzle-kit/node_modules/@esbuild/win32-ia32": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.3.tgz", + "integrity": "sha512-qspTZOIGoXVS4DpNqUYUs9UxVb04khS1Degaw/MnfMe7goQ3lTfQ13Vw4qY/Nj0979BGvMRpAYbs/BAxEvU8ew==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/drizzle-kit/node_modules/@esbuild/win32-x64": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.3.tgz", + "integrity": "sha512-ICgUR+kPimx0vvRzf+N/7L7tVSQeE3BYY+NhHRHXS1kBuPO7z2+7ea2HbhDyZdTephgvNvKrlDDKUexuCVBVvg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/drizzle-kit/node_modules/esbuild": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.3.tgz", + "integrity": "sha512-qKA6Pvai73+M2FtftpNKRxJ78GIjmFXFxd/1DVBqGo/qNhLSfv+G12n9pNoWdytJC8U00TrViOwpjT0zgqQS8Q==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.3", + "@esbuild/android-arm": "0.25.3", + "@esbuild/android-arm64": "0.25.3", + "@esbuild/android-x64": "0.25.3", + "@esbuild/darwin-arm64": "0.25.3", + "@esbuild/darwin-x64": "0.25.3", + "@esbuild/freebsd-arm64": "0.25.3", + "@esbuild/freebsd-x64": "0.25.3", + "@esbuild/linux-arm": "0.25.3", + "@esbuild/linux-arm64": "0.25.3", + "@esbuild/linux-ia32": "0.25.3", + "@esbuild/linux-loong64": "0.25.3", + "@esbuild/linux-mips64el": "0.25.3", + "@esbuild/linux-ppc64": "0.25.3", + "@esbuild/linux-riscv64": "0.25.3", + "@esbuild/linux-s390x": "0.25.3", + "@esbuild/linux-x64": "0.25.3", + "@esbuild/netbsd-arm64": "0.25.3", + "@esbuild/netbsd-x64": "0.25.3", + "@esbuild/openbsd-arm64": "0.25.3", + "@esbuild/openbsd-x64": "0.25.3", + "@esbuild/sunos-x64": "0.25.3", + "@esbuild/win32-arm64": "0.25.3", + "@esbuild/win32-ia32": "0.25.3", + "@esbuild/win32-x64": "0.25.3" + } + }, + "node_modules/drizzle-orm": { + "version": "0.43.1", + "resolved": "https://registry.npmjs.org/drizzle-orm/-/drizzle-orm-0.43.1.tgz", + "integrity": "sha512-dUcDaZtE/zN4RV/xqGrVSMpnEczxd5cIaoDeor7Zst9wOe/HzC/7eAaulywWGYXdDEc9oBPMjayVEDg0ziTLJA==", + "license": "Apache-2.0", + "peerDependencies": { + "@aws-sdk/client-rds-data": ">=3", + "@cloudflare/workers-types": ">=4", + "@electric-sql/pglite": ">=0.2.0", + "@libsql/client": ">=0.10.0", + "@libsql/client-wasm": ">=0.10.0", + "@neondatabase/serverless": ">=0.10.0", + "@op-engineering/op-sqlite": ">=2", + "@opentelemetry/api": "^1.4.1", + "@planetscale/database": ">=1.13", + "@prisma/client": "*", + "@tidbcloud/serverless": "*", + "@types/better-sqlite3": "*", + "@types/pg": "*", + "@types/sql.js": "*", + "@vercel/postgres": ">=0.8.0", + "@xata.io/client": "*", + "better-sqlite3": ">=7", + "bun-types": "*", + "expo-sqlite": ">=14.0.0", + "gel": ">=2", + "knex": "*", + "kysely": "*", + "mysql2": ">=2", + "pg": ">=8", + "postgres": ">=3", + "sql.js": ">=1", + "sqlite3": ">=5" + }, + "peerDependenciesMeta": { + "@aws-sdk/client-rds-data": { + "optional": true + }, + "@cloudflare/workers-types": { + "optional": true + }, + "@electric-sql/pglite": { + "optional": true + }, + "@libsql/client": { + "optional": true + }, + "@libsql/client-wasm": { + "optional": true + }, + "@neondatabase/serverless": { + "optional": true + }, + "@op-engineering/op-sqlite": { + "optional": true + }, + "@opentelemetry/api": { + "optional": true + }, + "@planetscale/database": { + "optional": true + }, + "@prisma/client": { + "optional": true + }, + "@tidbcloud/serverless": { + "optional": true + }, + "@types/better-sqlite3": { + "optional": true + }, + "@types/pg": { + "optional": true + }, + "@types/sql.js": { + "optional": true + }, + "@vercel/postgres": { + "optional": true + }, + "@xata.io/client": { + "optional": true + }, + "better-sqlite3": { + "optional": true + }, + "bun-types": { + "optional": true + }, + "expo-sqlite": { + "optional": true + }, + "gel": { + "optional": true + }, + "knex": { + "optional": true + }, + "kysely": { + "optional": true + }, + "mysql2": { + "optional": true + }, + "pg": { + "optional": true + }, + "postgres": { + "optional": true + }, + "prisma": { + "optional": true + }, + "sql.js": { + "optional": true + }, + "sqlite3": { + "optional": true + } + } + }, + "node_modules/duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", + "dev": true, + "license": "MIT" }, "node_modules/duplexer2": { "version": "0.1.4", @@ -3823,6 +5390,19 @@ "@esbuild/win32-x64": "0.18.20" } }, + "node_modules/esbuild-register": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/esbuild-register/-/esbuild-register-3.6.0.tgz", + "integrity": "sha512-H2/S7Pm8a9CL1uhp9OvjwrBh5Pvx0H8qVOxNu8Wed9Y7qv56MPtq+GGM8RJpq6glYJn9Wspr8uw7l55uyinNeg==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.3.4" + }, + "peerDependencies": { + "esbuild": ">=0.12 <1" + } + }, "node_modules/escalade": { "version": "3.2.0", "resolved": "https://registry.npmmirror.com/escalade/-/escalade-3.2.0.tgz", @@ -3945,6 +5525,13 @@ "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, + "node_modules/exsolve": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/exsolve/-/exsolve-1.0.5.tgz", + "integrity": "sha512-pz5dvkYYKQ1AHVrgOzBKWeP4u4FRb3a6DNK2ucr0OoNwYIU4QWsJ+NM36LLzORT+z845MzKHHhpXiUF5nvQoJg==", + "dev": true, + "license": "MIT" + }, "node_modules/external-editor": { "version": "2.2.0", "resolved": "https://registry.npmmirror.com/external-editor/-/external-editor-2.2.0.tgz", @@ -4020,6 +5607,29 @@ "reusify": "^1.0.4" } }, + "node_modules/fetch-blob": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", + "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "paypal", + "url": "https://paypal.me/jimmywarting" + } + ], + "license": "MIT", + "dependencies": { + "node-domexception": "^1.0.0", + "web-streams-polyfill": "^3.0.3" + }, + "engines": { + "node": "^12.20 || >= 14.13" + } + }, "node_modules/figures": { "version": "6.1.0", "resolved": "https://registry.npmmirror.com/figures/-/figures-6.1.0.tgz", @@ -4083,6 +5693,18 @@ "node": ">= 6" } }, + "node_modules/formdata-polyfill": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", + "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", + "license": "MIT", + "dependencies": { + "fetch-blob": "^3.1.2" + }, + "engines": { + "node": ">=12.20.0" + } + }, "node_modules/fs-constants": { "version": "1.0.0", "resolved": "https://registry.npmmirror.com/fs-constants/-/fs-constants-1.0.0.tgz", @@ -4196,6 +5818,19 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/get-tsconfig": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.10.0.tgz", + "integrity": "sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A==", + "dev": true, + "license": "MIT", + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, "node_modules/giget": { "version": "1.2.4", "resolved": "https://registry.npmmirror.com/giget/-/giget-1.2.4.tgz", @@ -4307,6 +5942,22 @@ "resolved": "https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.11.tgz", "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" }, + "node_modules/gzip-size": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", + "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "duplexer": "^0.1.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/has-ansi": { "version": "2.0.0", "resolved": "https://registry.npmmirror.com/has-ansi/-/has-ansi-2.0.0.tgz", @@ -4719,6 +6370,12 @@ "jiti": "lib/jiti-cli.mjs" } }, + "node_modules/js-base64": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-3.7.7.tgz", + "integrity": "sha512-7rCnleh0z2CkXhH67J8K1Ytz0b2Y+yxTPL+/KOJoa20hfnVQ/3/T6W/KflYI4bRHRagNeXeU2bkNGI3v1oS/lw==", + "license": "BSD-3-Clause" + }, "node_modules/js-md5": { "version": "0.8.3", "resolved": "https://registry.npmmirror.com/js-md5/-/js-md5-0.8.3.tgz", @@ -4976,6 +6633,44 @@ "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==", "dev": true }, + "node_modules/libsql": { + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/libsql/-/libsql-0.5.8.tgz", + "integrity": "sha512-+OopMI1wM/NvAJTHf3O3+beHd1YfKLnSVsOGBl3/7UBDZ4ydVadkbBk5Hjjs9d3ALC5rBaftMY59AvwyC8MzPw==", + "cpu": [ + "x64", + "arm64", + "wasm32" + ], + "license": "MIT", + "os": [ + "darwin", + "linux", + "win32" + ], + "dependencies": { + "@neon-rs/load": "^0.0.4", + "detect-libc": "2.0.2" + }, + "optionalDependencies": { + "@libsql/darwin-arm64": "0.5.8", + "@libsql/darwin-x64": "0.5.8", + "@libsql/linux-arm64-gnu": "0.5.8", + "@libsql/linux-arm64-musl": "0.5.8", + "@libsql/linux-x64-gnu": "0.5.8", + "@libsql/linux-x64-musl": "0.5.8", + "@libsql/win32-x64-msvc": "0.5.8" + } + }, + "node_modules/libsql/node_modules/detect-libc": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.2.tgz", + "integrity": "sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==", + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, "node_modules/lie": { "version": "3.3.0", "resolved": "https://registry.npmmirror.com/lie/-/lie-3.3.0.tgz", @@ -5157,6 +6852,13 @@ "semver": "bin/semver" } }, + "node_modules/mdn-data": { + "version": "2.12.2", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.12.2.tgz", + "integrity": "sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==", + "dev": true, + "license": "CC0-1.0" + }, "node_modules/memoize-one": { "version": "6.0.0", "resolved": "https://registry.npmmirror.com/memoize-one/-/memoize-one-6.0.0.tgz", @@ -5425,6 +7127,26 @@ "dev": true, "optional": true }, + "node_modules/node-domexception": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", + "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", + "deprecated": "Use your platform's native DOMException instead", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "github", + "url": "https://paypal.me/jimmywarting" + } + ], + "license": "MIT", + "engines": { + "node": ">=10.5.0" + } + }, "node_modules/node-emoji": { "version": "1.11.0", "resolved": "https://registry.npmmirror.com/node-emoji/-/node-emoji-1.11.0.tgz", @@ -5539,6 +7261,18 @@ "node": ">=0.10.0" } }, + "node_modules/ofetch": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/ofetch/-/ofetch-1.4.1.tgz", + "integrity": "sha512-QZj2DfGplQAr2oj9KzceK9Hwz6Whxazmn85yYeVuS3u9XTMOGMRx0kO95MQ+vLsj/S/NwBDMMLU5hpxvI6Tklw==", + "dev": true, + "license": "MIT", + "dependencies": { + "destr": "^2.0.3", + "node-fetch-native": "^1.6.4", + "ufo": "^1.5.4" + } + }, "node_modules/ohash": { "version": "1.1.4", "resolved": "https://registry.npmmirror.com/ohash/-/ohash-1.1.4.tgz", @@ -5639,6 +7373,16 @@ "node": ">=0.10.0" } }, + "node_modules/package-manager-detector": { + "version": "0.2.11", + "resolved": "https://registry.npmjs.org/package-manager-detector/-/package-manager-detector-0.2.11.tgz", + "integrity": "sha512-BEnLolu+yuz22S56CU1SUKq3XC3PkwD5wv4ikR4MfGvnRVcmzXR9DwSlW2fEamyTPyXHomBJRzgapeuBvRNzJQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "quansync": "^0.2.7" + } + }, "node_modules/pako": { "version": "1.0.11", "resolved": "https://registry.npmmirror.com/pako/-/pako-1.0.11.tgz", @@ -5705,9 +7449,10 @@ } }, "node_modules/pathe": { - "version": "2.0.2", - "resolved": "https://registry.npmmirror.com/pathe/-/pathe-2.0.2.tgz", - "integrity": "sha512-15Ztpk+nov8DR524R4BF7uEuzESgzUEAV4Ah7CUMNGXdE5ELuvxElxGXndBl32vMSsWa1jpNf22Z+Er3sKwq+w==" + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "license": "MIT" }, "node_modules/perfect-debounce": { "version": "1.0.0", @@ -5819,9 +7564,9 @@ } }, "node_modules/postcss": { - "version": "8.5.1", - "resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.5.1.tgz", - "integrity": "sha512-6oz2beyjc5VMn/KV1pPw8fliQkhBXrVn1Z3TVyqZxU8kZpzEKhBdmCFqI6ZbmGtamQvQGuU1sgPTk8ZrXDD7jQ==", + "version": "8.5.3", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.3.tgz", + "integrity": "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==", "funding": [ { "type": "opencollective", @@ -5836,6 +7581,7 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { "nanoid": "^3.3.8", "picocolors": "^1.1.1", @@ -5890,6 +7636,12 @@ "resolved": "https://registry.npmmirror.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz", "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" }, + "node_modules/promise-limit": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/promise-limit/-/promise-limit-2.7.0.tgz", + "integrity": "sha512-7nJ6v5lnJsXwGprnGXga4wx6d1POjvi5Qmf1ivTRxTjH4Z/9Czja/UCMLVmB9N93GeWOU93XaFaEt6jbuoagNw==", + "license": "ISC" + }, "node_modules/proxy-from-env": { "version": "1.1.0", "resolved": "https://registry.npmmirror.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz", @@ -5921,6 +7673,23 @@ "node": ">=6" } }, + "node_modules/quansync": { + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/quansync/-/quansync-0.2.10.tgz", + "integrity": "sha512-t41VRkMYbkHyCYmOvx/6URnN80H7k4X0lLdBMGsz+maAwrJQYB1djpV6vHrQIBE0WBSGqhtEHrK9U3DWWH8v7A==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/antfu" + }, + { + "type": "individual", + "url": "https://github.com/sponsors/sxzz" + } + ], + "license": "MIT" + }, "node_modules/querystringify": { "version": "2.2.0", "resolved": "https://registry.npmmirror.com/querystringify/-/querystringify-2.2.0.tgz", @@ -6029,6 +7798,16 @@ "resolved": "https://registry.npmmirror.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz", "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==" }, + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, "node_modules/restore-cursor": { "version": "2.0.0", "resolved": "https://registry.npmmirror.com/restore-cursor/-/restore-cursor-2.0.0.tgz", @@ -6289,10 +8068,11 @@ } }, "node_modules/sirv": { - "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/sirv/-/sirv-3.0.0.tgz", - "integrity": "sha512-BPwJGUeDaDCHihkORDchNyyTvWFhcusy1XMmhEVTQTwGeybFbp8YEmB+njbPnth1FibULBSBVwCQni25XlCUDg==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/sirv/-/sirv-3.0.1.tgz", + "integrity": "sha512-FoqMu0NCGBLCcAkS1qA+XJIQTR6/JHfQXl+uGteNCQ76T91DMUjPa9xfmeqMY3z80nLSg9yQmNjK0Px6RWsH/A==", "dev": true, + "license": "MIT", "dependencies": { "@polka/url": "^1.0.0-next.24", "mrmime": "^2.0.0", @@ -6329,6 +8109,17 @@ "node": ">=0.10.0" } }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, "node_modules/speakingurl": { "version": "14.0.1", "resolved": "https://registry.npmmirror.com/speakingurl/-/speakingurl-14.0.1.tgz", @@ -6567,6 +8358,51 @@ "resolved": "https://registry.npmmirror.com/tinyexec/-/tinyexec-0.3.2.tgz", "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==" }, + "node_modules/tinyglobby": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.13.tgz", + "integrity": "sha512-mEwzpUgrLySlveBwEVDMKk5B57bhLPYovRfPAXD5gA/98Opn0rCDj3GtLwFvCvH5RK9uPCExUROW5NjDwvqkxw==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.4.4", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tinyglobby/node_modules/fdir": { + "version": "6.4.4", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.4.tgz", + "integrity": "sha512-1NZP+GK4GfuAv3PqKvxQRDMjdSRZjnkq7KfhlNrCNNlZ0ygQFpebfrnfnq/W7fpUnAv9aGWmY1zKx7FYL3gwhg==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/tinyglobby/node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/tmp": { "version": "0.2.3", "resolved": "https://registry.npmmirror.com/tmp/-/tmp-0.2.3.tgz", @@ -6669,6 +8505,22 @@ "resolved": "https://registry.npmmirror.com/ufo/-/ufo-1.5.4.tgz", "integrity": "sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==" }, + "node_modules/unconfig": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/unconfig/-/unconfig-7.3.2.tgz", + "integrity": "sha512-nqG5NNL2wFVGZ0NA/aCFw0oJ2pxSf1lwg4Z5ill8wd7K4KX/rQbHlwbh+bjctXL5Ly1xtzHenHGOK0b+lG6JVg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@quansync/fs": "^0.1.1", + "defu": "^6.1.4", + "jiti": "^2.4.2", + "quansync": "^0.2.8" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, "node_modules/unctx": { "version": "2.4.1", "resolved": "https://registry.npmmirror.com/unctx/-/unctx-2.4.1.tgz", @@ -6691,8 +8543,7 @@ "node_modules/undici-types": { "version": "6.20.0", "resolved": "https://registry.npmmirror.com/undici-types/-/undici-types-6.20.0.tgz", - "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==", - "dev": true + "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==" }, "node_modules/unicorn-magic": { "version": "0.3.0", @@ -6786,6 +8637,52 @@ "node": ">= 4.0.0" } }, + "node_modules/unocss": { + "version": "66.1.0-beta.13", + "resolved": "https://registry.npmjs.org/unocss/-/unocss-66.1.0-beta.13.tgz", + "integrity": "sha512-i81hDD676DpGyG8DdnrAplsl3MjZ3bD0N321CLWgOQuGlkNRjjPNyAyfli17Fs2V+w6vIao8Us3vf2ioQiGq+w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@unocss/astro": "66.1.0-beta.13", + "@unocss/cli": "66.1.0-beta.13", + "@unocss/core": "66.1.0-beta.13", + "@unocss/postcss": "66.1.0-beta.13", + "@unocss/preset-attributify": "66.1.0-beta.13", + "@unocss/preset-icons": "66.1.0-beta.13", + "@unocss/preset-mini": "66.1.0-beta.13", + "@unocss/preset-tagify": "66.1.0-beta.13", + "@unocss/preset-typography": "66.1.0-beta.13", + "@unocss/preset-uno": "66.1.0-beta.13", + "@unocss/preset-web-fonts": "66.1.0-beta.13", + "@unocss/preset-wind": "66.1.0-beta.13", + "@unocss/preset-wind3": "66.1.0-beta.13", + "@unocss/preset-wind4": "66.1.0-beta.13", + "@unocss/transformer-attributify-jsx": "66.1.0-beta.13", + "@unocss/transformer-compile-class": "66.1.0-beta.13", + "@unocss/transformer-directives": "66.1.0-beta.13", + "@unocss/transformer-variant-group": "66.1.0-beta.13", + "@unocss/vite": "66.1.0-beta.13" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@unocss/webpack": "66.1.0-beta.13", + "vite": "^2.9.0 || ^3.0.0-0 || ^4.0.0 || ^5.0.0-0 || ^6.0.0-0" + }, + "peerDependenciesMeta": { + "@unocss/webpack": { + "optional": true + }, + "vite": { + "optional": true + } + } + }, "node_modules/unplugin": { "version": "2.1.2", "resolved": "https://registry.npmmirror.com/unplugin/-/unplugin-2.1.2.tgz", @@ -6843,6 +8740,36 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/unplugin-utils": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/unplugin-utils/-/unplugin-utils-0.2.4.tgz", + "integrity": "sha512-8U/MtpkPkkk3Atewj1+RcKIjb5WBimZ/WSLhhR3w6SsIj8XJuKTacSP8g+2JhfSGw0Cb125Y+2zA/IzJZDVbhA==", + "dev": true, + "license": "MIT", + "dependencies": { + "pathe": "^2.0.2", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=18.12.0" + }, + "funding": { + "url": "https://github.com/sponsors/sxzz" + } + }, + "node_modules/unplugin-utils/node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/unplugin-vue-components": { "version": "28.0.0", "resolved": "https://registry.npmmirror.com/unplugin-vue-components/-/unplugin-vue-components-28.0.0.tgz", @@ -7245,6 +9172,16 @@ } } }, + "node_modules/vue-flow-layout": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/vue-flow-layout/-/vue-flow-layout-0.1.1.tgz", + "integrity": "sha512-JdgRRUVrN0Y2GosA0M68DEbKlXMqJ7FQgsK8CjQD2vxvNSqAU6PZEpi4cfcTVtfM2GVOMjHo7GKKLbXxOBqDqA==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "vue": "^3.4.37" + } + }, "node_modules/vue-i18n": { "version": "11.0.1", "resolved": "https://registry.npmmirror.com/vue-i18n/-/vue-i18n-11.0.1.tgz", @@ -7528,6 +9465,15 @@ "loose-envify": "^1.0.0" } }, + "node_modules/web-streams-polyfill": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", + "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, "node_modules/web-worker": { "version": "1.3.0", "resolved": "https://registry.npmmirror.com/web-worker/-/web-worker-1.3.0.tgz", diff --git a/os/package.json b/os/package.json index 14e9610..f36ead4 100644 --- a/os/package.json +++ b/os/package.json @@ -13,10 +13,12 @@ "build:android": "tauri android build --apk", "android-init": "pnpm tauri plugin android init", "build:ios": "tauri ios build --ipa", - "ios-init": "pnpm tauri plugin ios init" + "ios-init": "pnpm tauri plugin ios init", + "migrate": "drizzle-kit generate:sqlite" }, "dependencies": { "@element-plus/icons-vue": "^2.1.0", + "@libsql/client": "^0.15.4", "@tauri-apps/plugin-autostart": "~2", "@tauri-apps/plugin-dialog": "~2.2.1", "@tauri-apps/plugin-fs": "~2.2.1", @@ -24,6 +26,7 @@ "@tauri-apps/plugin-opener": "~2.2.6", "@tauri-apps/plugin-os": "~2.2.1", "@tauri-apps/plugin-process": "~2.2.1", + "@tauri-apps/plugin-sql": "^2.2.0", "@tauri-apps/plugin-store": "~2.2.0", "@tauri-apps/plugin-updater": "~2.7.1", "@tauri-apps/plugin-upload": "~2.2.1", diff --git a/os/src-tauri/Cargo.toml b/os/src-tauri/Cargo.toml index b12bcf2..e19aa9b 100644 --- a/os/src-tauri/Cargo.toml +++ b/os/src-tauri/Cargo.toml @@ -38,3 +38,7 @@ tauri-plugin-autostart = "2" tauri-plugin-single-instance = "2" tauri-plugin-updater = "2" tauri-plugin-window-state = "2" + +[dependencies.tauri-plugin-sql] +features = ["sqlite"] # or "postgres", or "mysql" +version = "2.0.0" diff --git a/os/src-tauri/src/lib.rs b/os/src-tauri/src/lib.rs index 187facf..1871119 100644 --- a/os/src-tauri/src/lib.rs +++ b/os/src-tauri/src/lib.rs @@ -3,6 +3,7 @@ pub fn run() { tauri::Builder::default() .plugin(tauri_plugin_single_instance::init(|_app, _, _| { })) + .plugin(tauri_plugin_sql::Builder::default().build()) .plugin(tauri_plugin_window_state::Builder::new().build()) .plugin(tauri_plugin_websocket::init()) .plugin(tauri_plugin_opener::init()) diff --git a/os/src/api/init.ts b/os/src/api/init.ts new file mode 100644 index 0000000..e69de29 diff --git a/os/src/api/local/cache/index.ts b/os/src/api/local/cache/index.ts new file mode 100644 index 0000000..a18917b --- /dev/null +++ b/os/src/api/local/cache/index.ts @@ -0,0 +1,79 @@ +import { Store } from '@tauri-apps/plugin-store'; + +// 创建 Store 实例(使用异步方式获取) +let store: Store; + +async function getStore(): Promise { + if (!store) { + store = await Store.load('store.bin'); + } + return store; +} + +// 缓存默认有效期(单位:毫秒) +const DEFAULT_TTL = 1000 * 60 * 10; // 默认 10 分钟 + +/** + * 设置带过期时间的缓存 + * @param key 缓存键名 + * @param value 缓存值 + * @param ttl 缓存有效时间(毫秒),不传则使用默认值 + */ +export async function set(key: string, value: T, ttl?: number): Promise { + const storeInstance = await getStore(); + const expireAt = Date.now() + (ttl ?? DEFAULT_TTL); + await storeInstance.set(key, { value, expireAt }); + await storeInstance.save(); // 可选:立即保存 +} + +/** + * 获取缓存值(如果未过期) + * @param key 缓存键名 + * @returns 缓存值或 null(如果未找到或已过期) + */ +export async function get(key: string): Promise { + const storeInstance = await getStore(); + // 使用 storeInstance.has 做初步存在性检查 + const exists = await storeInstance.has(key); + if (!exists) return null; + const entry = await storeInstance.get<{ value: T; expireAt: number }>(key); + + if (!entry) return null; + + const { value, expireAt } = entry; + if (Date.now() > expireAt) { + await storeInstance.delete(key); // 删除过期缓存 + return null; + } + + return value; +} +/** + * 检查缓存中是否存在指定的键且未过期 + * @param key 缓存键名 + * @returns 如果存在且未过期返回 true,否则返回 false + */ +export async function has(key: string): Promise { + const storeInstance = await getStore(); + // 使用 storeInstance.has 做初步存在性检查 + const exists = await storeInstance.has(key); + if (!exists) return false; + const entry = await storeInstance.get<{ value: any; expireAt: number }>(key); + + if (!entry) return false; + + const { expireAt } = entry; + if (Date.now() > expireAt) { + await storeInstance.delete(key); // 删除已过期的键 + return false; + } + + return true; +} +/** + * 清除所有缓存 + */ +export async function clear(): Promise { + const storeInstance = await getStore(); + await storeInstance.clear(); +} \ No newline at end of file diff --git a/os/src/api/local/models/users.ts b/os/src/api/local/models/users.ts new file mode 100644 index 0000000..3370a75 --- /dev/null +++ b/os/src/api/local/models/users.ts @@ -0,0 +1,13 @@ +import { createORM } from '../orm/orm.ts'; + +interface Users { + id?: number; + username: string; + password: string; + nickname: string; + email: string; + phone: string; + isMaster: boolean; +} + +export const userDb = createORM('users'); \ No newline at end of file diff --git a/os/src/api/local/orm/db.ts b/os/src/api/local/orm/db.ts new file mode 100644 index 0000000..e5c5035 --- /dev/null +++ b/os/src/api/local/orm/db.ts @@ -0,0 +1,21 @@ +// src/api/local/db.ts +import Database from '@tauri-apps/plugin-sql'; +import { migrationDatabase } from './migration'; +let dbInstance: Database | null = null; + +export async function connectDatabase(dbPath: string = 'sqlite:godoos.db'): Promise { + if (!dbInstance) { + dbInstance = await Database.load(dbPath); + console.log('✅ 数据库已连接'); + } +} +export async function setupDatabase() { + await connectDatabase(); + await migrationDatabase(); +} +export function getDatabase(): Database { + if (!dbInstance) { + throw new Error('数据库尚未连接,请先调用 connectDatabase'); + } + return dbInstance; +} \ No newline at end of file diff --git a/os/src/api/local/orm/migration.ts b/os/src/api/local/orm/migration.ts new file mode 100644 index 0000000..d2242f5 --- /dev/null +++ b/os/src/api/local/orm/migration.ts @@ -0,0 +1,18 @@ +import { getDatabase } from './db'; + +export async function migrationDatabase(): Promise { + const db = getDatabase(); + + await db.execute( + `CREATE TABLE IF NOT EXISTS users ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + username TEXT NOT NULL UNIQUE, + password TEXT NOT NULL, + nickname TEXT, + email TEXT, + phone TEXT, + isMaster INTEGER DEFAULT 0 + )` + ); + console.log('✅ 用户表已初始化'); +} \ No newline at end of file diff --git a/os/src/api/local/orm/orm.ts b/os/src/api/local/orm/orm.ts new file mode 100644 index 0000000..10f87a5 --- /dev/null +++ b/os/src/api/local/orm/orm.ts @@ -0,0 +1,213 @@ +// src/api/local/orm/orm.ts +import { getDatabase } from './db'; +import Database from '@tauri-apps/plugin-sql'; +// const userORM = createORM<{ id: number; name: string; role: string }>('users'); +// // 查询并分页 +// await userORM.where({ role: 'admin' }).page(1, 10).select(); +// // 更新数据 +// await userORM.save({ role: 'admin' }).where({ id: 1 }).select(); +// // 统计数量 +// const total = await userORM.where({ role: 'admin' }).count(); +type Model = Record; + +interface ORM { + create: (data: T) => Promise; + update: (id: any, data: Partial) => Promise; + save: (data: Partial) => ORMQueryBuilder; + select: () => Promise; + findById: (id: any) => Promise; + delete: (id: any) => Promise; + where: (conditions: Record) => ORMQueryBuilder; + count: () => Promise; + page: (page: number, pageSize: number) => ORMQueryBuilder; +} + +interface ORMQueryBuilder { + where: (conditions: Record) => ORMQueryBuilder; + count: () => Promise; + page: (page: number, pageSize: number) => ORMQueryBuilder; + select: () => Promise; +} + +function createORMQueryBuilder( + db: Database, + table: string +): ORMQueryBuilder { + let conditions: Record = {}; + let limit: number | null = null; + let offset: number | null = null; + + function buildWhereClause(): { clause: string; values: any[] } { + const clauses = []; + const values = []; + + for (const key in conditions) { + if (conditions.hasOwnProperty(key)) { + clauses.push(`${key} = $${values.length + 1}`); + values.push(conditions[key]); + } + } + + const whereClause = clauses.length > 0 ? `WHERE ${clauses.join(' AND ')}` : ''; + return { clause: whereClause, values }; + } + + const queryBuilder: ORMQueryBuilder = { + where: (newConditions: Record): ORMQueryBuilder => { + conditions = { ...conditions, ...newConditions }; + return queryBuilder; + }, + count: async (): Promise => { + const { clause, values } = buildWhereClause(); + const query = `SELECT COUNT(*) as count FROM ${table} ${clause}`; + const result: any = await db.select(query, values); + return result[0]?.count || 0; + }, + page: (page: number, pageSize: number): ORMQueryBuilder => { + const newLimit = pageSize; + const newOffset = (page - 1) * pageSize; + limit = newLimit; + offset = newOffset; + return queryBuilder; + }, + select: async (): Promise => { + const { clause, values } = buildWhereClause(); + + let limitClause = ''; + if (limit !== null && offset !== null) { + limitClause = `LIMIT ${limit} OFFSET ${offset}`; + } + + const query = `SELECT * FROM ${table} ${clause} ${limitClause}`; + const result = await db.select(query, values); + return result as T[]; + }, + }; + + return queryBuilder; +} + +function buildWhereClauseFromConditions( + conditions: Record +): { clause: string; values: any[] } { + const clauses = []; + const values = []; + + for (const key in conditions) { + if (conditions.hasOwnProperty(key)) { + clauses.push(`${key} = $${values.length + 1}`); + values.push(conditions[key]); + } + } + + const whereClause = clauses.length > 0 ? `WHERE ${clauses.join(' AND ')}` : ''; + return { clause: whereClause, values }; +} + +async function executeUpdate( + db: Database, + table: string, + data: Partial, + conditions: Record +): Promise { + const now = new Date().toISOString(); + const timestampedData = { ...data, updated_at: now }; + const setClause = Object.keys(timestampedData) + .map((key, i) => `${key} = $${i + 1}`) + .join(', '); + const values = Object.values(timestampedData); + + const { clause: whereClause, values: whereValues } = buildWhereClauseFromConditions(conditions); + + const query = `UPDATE ${table} SET ${setClause} ${whereClause}`; + await db.execute(query, [...values, ...whereValues]); +} + +export function createORM(table: string): ORM { + const db = getDatabase(); + + const ormInstance: ORM = { + create: async (data: T): Promise => { + const now = new Date().toISOString(); + const timestampedData = { + ...data, + created_at: now, + updated_at: now, + }; + + const columns = Object.keys(timestampedData).join(', '); + const placeholders = Object.keys(timestampedData) + .map((_, i) => `$${i + 1}`) + .join(', '); + const values = Object.values(timestampedData); + + const query = `INSERT INTO ${table} (${columns}) VALUES (${placeholders})`; + await db.execute(query, values); + }, + + update: async (id: any, data: Partial): Promise => { + const now = new Date().toISOString(); + const timestampedData = { + ...data, + updated_at: now, + }; + + const setClause = Object.keys(timestampedData) + .map((key, i) => `${key} = $${i + 1}`) + .join(', '); + + const values = Object.values(timestampedData); + const query = `UPDATE ${table} SET ${setClause} WHERE id = $${values.length + 1}`; + values.push(id); + + await db.execute(query, values); + }, + + save: (data: Partial): ORMQueryBuilder => { + const queryBuilder = createORMQueryBuilder(db, table); + + const originalWhere = queryBuilder.where; + queryBuilder.where = (conditions: Record): ORMQueryBuilder => { + const updatedQueryBuilder = originalWhere(conditions); + + updatedQueryBuilder.select = async (): Promise => { + await executeUpdate(db, table, data, conditions); + return []; + }; + + return updatedQueryBuilder; + }; + + return queryBuilder; + }, + + select: (): Promise => { + return createORMQueryBuilder(db, table).select(); + }, + + findById: async (id: any): Promise => { + const query = `SELECT * FROM ${table} WHERE id = $1`; + const result: any = await db.select(query, [id]); + return result.length > 0 ? (result[0] as T) : null; + }, + + delete: async (id: any): Promise => { + const query = `DELETE FROM ${table} WHERE id = $1`; + await db.execute(query, [id]); + }, + + where: (conditions: Record): ORMQueryBuilder => { + return createORMQueryBuilder(db, table).where(conditions); + }, + + count: (): Promise => { + return createORMQueryBuilder(db, table).count(); + }, + + page: (page: number, pageSize: number): ORMQueryBuilder => { + return createORMQueryBuilder(db, table).page(page, pageSize); + }, + }; + + return ormInstance; +} \ No newline at end of file diff --git a/os/src/api/local/service/auth.ts b/os/src/api/local/service/auth.ts new file mode 100644 index 0000000..e69de29 diff --git a/os/src/api/auth.ts b/os/src/api/member/auth.ts similarity index 100% rename from os/src/api/auth.ts rename to os/src/api/member/auth.ts diff --git a/os/src/api/files.ts b/os/src/api/member/files.ts similarity index 100% rename from os/src/api/files.ts rename to os/src/api/member/files.ts diff --git a/os/src/api/knowledge.ts b/os/src/api/member/knowledge.ts similarity index 100% rename from os/src/api/knowledge.ts rename to os/src/api/member/knowledge.ts diff --git a/os/src/api/share.ts b/os/src/api/member/share.ts similarity index 100% rename from os/src/api/share.ts rename to os/src/api/member/share.ts diff --git a/os/src/api/workflow.ts b/os/src/api/member/workflow.ts similarity index 100% rename from os/src/api/workflow.ts rename to os/src/api/member/workflow.ts diff --git a/os/src/api/net/auth.ts b/os/src/api/net/auth.ts new file mode 100644 index 0000000..81935f6 --- /dev/null +++ b/os/src/api/net/auth.ts @@ -0,0 +1,79 @@ +import { loadScript } from '@/utils/load' +import { get, getToken, setToken,post } from '@/utils/request' +import { getClientId } from '@/utils/uuid' + +export function loginIn(params: any) { + return fetch('/user/login', { + method: 'POST', + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify(params) + }).then(res => res.json()).then(res => { + if (res.success) { + setToken(res.data.token) + } + return res + }).catch(err => { throw new Error(err) }) +} +export async function logout() { + return post('user/logout', { + method: 'POST', + }) +} +export async function isLogin() { + const token = getToken() + if (!token) { + return false + } + const res = await get('user/islogin') + return res.success +} +export async function getDingConf() { + await loadScript( + "https://g.alicdn.com/dingding/h5-dingtalk-login/0.21.0/ddlogin.js" + ); + + const res = await fetch("user/ding/conf"); + return await res.json(); +} +export async function getThirdpartyList() { + const result = await fetch("/user/thirdparty/list" + ); + if (result.ok) { + const data = await result.json(); + if (data.success) return data.data.list; + } + return []; +}; +export async function getEmailCode(email: string) { + const data = { + email: email, + client_id: getClientId(), + } + const res = await fetch('/user/emailcode', { + method: 'POST', + body: JSON.stringify(data), + }) + return await res.json() +} +export async function getSmsCode(phone: string) { + const data = { + phone: phone, + client_id: getClientId(), + } + const res = await fetch('/user/smscode', { + method: 'POST', + body: JSON.stringify(data), + }) + return await res.json() +} +export async function register(params: any) { + return fetch('/user/register', { + method: 'POST', + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify(params) + }).then(res => res.json()) +} \ No newline at end of file diff --git a/os/src/api/net/files.ts b/os/src/api/net/files.ts new file mode 100644 index 0000000..932b16e --- /dev/null +++ b/os/src/api/net/files.ts @@ -0,0 +1,250 @@ +import { base64ToBuffer, isBase64 } from '@/utils/file' +import { get, post } from '@/utils/request' +export async function read(path: string, pwd?: string) { + const res = await get(`user/files/read`, { path, pwd }) + return res +} +export async function readFile(path: string, pwd?: string) { + const res = await get(`user/files/readfile`, { path, pwd }) + return res +} +export async function stat(path: string) { + const res = await get(`user/files/stat`, { path }) + return res.data +} +export async function desktop() { + const res = await get(`user/files/desktop`) + if (res && res.success) { + return res.data; + } + return false +} +export async function exists(path: string) { + const res = await get(`user/files/exists`, { path }) + return res.data + +} +export function mkdir(dirPath: string) { + if (dirPath.length < 2 || dirPath.charAt(1) == 'B') { + return false; + } + return post(`user/files/mkdir`, {}, { dirPath }).then(res => res.success) +} +export function rmdir(dirPath: string) { + if (dirPath.length < 3) { + return false; + } + const ext = dirPath.split('.').pop(); + if (ext == 'exe') { + return false; + } + return get(`user/files/rmdir`, { dirPath }).then(res => res.success) +} +export function restore(dirPath: string) { + if (dirPath.length < 2) { + return false; + } + + return get(`user/files/restore`, { dirPath }).then(res => res.success) +} +export function favorite(path: string) { + if (path.length < 2) { + return false; + } + return get(`user/files/favorite`, { path }).then(res => res.success) +} +export function pwd(path: string, pwd: string) { + if (path.length < 2) { + return false; + } + return get(`user/files/pwd`, { path, pwd }).then(res => res.success) +} +export function unpwd(path: string, pwd: string) { + if (path.length < 2) { + return false; + } + return get(`user/files/unpwd`, { path, pwd }).then(res => res.success) +} +export function rename(oldPath: string, newPath: string) { + if (oldPath.length < 2) { + return false; + } + return get(`user/files/rename`, { oldPath, newPath }).then(res => res.success) + +} +export function clear() { + return get(`user/files/clear`).then(res => res.success) +} +export function search(path: string, query: string) { + return get(`user/files/search`, { path, query }).then(res => res.data) +} +export function copy(srcPath: string, dstPath: string) { + if (dstPath.length < 2) { + return false; + } + return get(`user/files/copyfile`, { srcPath, dstPath }).then(res => res.success) +} + + +export function unlink(path: string) { + if (path.length < 2) { + return false; + } + const ext = path.split('.').pop(); + if (ext == 'exe') { + return false; + } + return get(`user/files/unlink`, { path }).then(res => res.success) +} +export function parserFormData(content: any, contentType: any) { + if (!content || content == '') { + return new Blob([], { type: 'text/plain;charset=utf-8' }); + } + if (contentType == 'text') { + return new Blob([content], { type: 'text/plain;charset=utf-8' }); + } + else if (contentType == 'base64') { + if (content.indexOf(";base64,") > -1) { + const parts = content.split(";base64,"); + content = parts[1]; + } + content = base64ToBuffer(content); + return new Blob([content]); + } + else if (typeof content === 'object' && content !== null && 'data' in content && Array.isArray(content.data)) { + return new Blob([new Uint8Array(content.data).buffer]); + } + else if (contentType == 'buffer') { + return new Blob([content]); + } +} +export function getFormData(content: any) { + let blobContent: Blob; + //console.log(content) + if (typeof content === 'string') { + if (content) { // 检查 content 是否为空 + if (isBase64(content)) { + if (content.indexOf(";base64,") > -1) { + const parts = content.split(";base64,"); + content = parts[1]; + } + content = base64ToBuffer(content); + blobContent = new Blob([content]); + } else { + //console.log(content) + blobContent = new Blob([content], { type: 'text/plain;charset=utf-8' }); + } + } else { + // 处理 content 为空的情况 + blobContent = new Blob([], { type: 'text/plain;charset=utf-8' }); + } + } + else if (content instanceof Blob) { + // 如果是Blob,直接使用 + blobContent = content; + } + else if ('data' in content && Array.isArray(content.data)) { + // 假设data属性是一个字节数组,将其转换为ArrayBuffer + const arrayBuffer = new Uint8Array(content.data).buffer; + //console.log(arrayBuffer) + blobContent = new Blob([arrayBuffer]); + } else if (content instanceof ArrayBuffer) { + // 如果已经是ArrayBuffer,直接使用 + blobContent = new Blob([content]); + } + else if (content instanceof Array || content instanceof Object) { + // 如果是数组 + blobContent = new Blob([JSON.stringify(content)], { type: 'text/plain;charset=utf-8' }); + } else { + throw new Error('Unsupported content format'); + } + + const formData = new FormData(); + formData.append('content', blobContent); + return formData +} +export function writeFile(path: string, data: any, pwd?: string) { + + if (path.length < 2) { + return false; + } + const formData = getFormData(data); + if (!formData) { + return false; + } + + return post(`user/files/writefile`, formData, { path, pwd }).then(res => { + //console.log(res) + return res.success + }) +} +export function appendFile(path: string, data: any) { + const formData = getFormData(data); + if (!formData) { + return false; + } + return post(`user/files/appendfile`, formData, { path }).then(res => res.success) +} +export function zip(path: string, ext: string) { + if (path.length < 2) { + return false; + } + return get(`user/files/zip`, { path, ext }).then(res => res.data) +} +export function unzip(path: string) { + if (path.length < 2) { + return false; + } + return get(`user/files/unzip`, { path }).then(res => res.data) +} +export function isDesktop(path: string) { + const sp = getSp(path) + const arr = path.split(sp) + return arr[1] === 'C' && arr[2] === 'Users' && arr[3] === 'Desktop' && arr.length === 4 +} +export function join(path: string, ...paths: string[]) { + const sp = getSp(path) + if (path.endsWith(sp)) { + return path + paths.join(sp) + } else { + return path + sp + paths.join(sp) + } +} +export function basename(path: string): string { + const sp = getSp(path) + return path.split(sp).pop() || path +} +export function dirname(path: string): string { + const sp = getSp(path) + if (path.indexOf(".") > -1) { + return path.split(sp).slice(0, -1).join(sp) + } else { + return path + } + //return path.split(sp).slice(0, -1).join(sp) +} +export function getSp(path: string): string { + if (path.indexOf("\\") > -1) { + return "\\" + } else { + return "/" + } +} +export function getParentPath(path: string): string { + const sp = getSp(path) + const arr = path.split(sp); + arr.pop(); + return arr.join(sp); +} +export function getTopPath(path: string) { + const sp = getSp(path) + const arr = path.split(sp); + if (arr[0] == "") { + return arr[1] + } else { + return arr[0] + } +} +export function getExt(path: string) { + return path.split('.').pop() || '' +} diff --git a/os/src/api/net/knowledge.ts b/os/src/api/net/knowledge.ts new file mode 100644 index 0000000..59cf5d1 --- /dev/null +++ b/os/src/api/net/knowledge.ts @@ -0,0 +1,8 @@ +import { get, post } from '@/utils/request' + +export function joinknowledge(path: string) { + return get(`user/files/knowledge`, { path }) +} +export function askknowledge(data: any) { + return post(`user/files/ask`, data).then((res) => res.data) +} diff --git a/os/src/api/net/share.ts b/os/src/api/net/share.ts new file mode 100644 index 0000000..9bef7ad --- /dev/null +++ b/os/src/api/net/share.ts @@ -0,0 +1,25 @@ +import { get, post } from '@/utils/request' +export function selectUserList(page: number, nickname: string = "") { + return get('/user/sharelist', { page, nickname }).then(res => res.data) +} +export function searchSelectUsers(ids: any) { + return post('/user/searchuser', { ids }).then(res => res.data) +} +export function shareCreate(data: any) { + return post('/user/files/share', data) +} + +// 获取分享用户列表 +export function getShareUserList(path: string) { + return get('user/files/collaboration/editusers', { path }).then(res => res.data) +} + +// 获取编辑历史记录 +export function getEditHistory(path: string, page: string, size: string) { + return get('user/files/collaboration/timeline', { path, page, size }).then(res => res.data) +} + +// 还原编辑数据 +export function restoreEditData(id: string) { + return post('user/files/collaboration/recover', { id }).then(res => res) +} \ No newline at end of file diff --git a/os/src/api/net/workflow.ts b/os/src/api/net/workflow.ts new file mode 100644 index 0000000..628f33b --- /dev/null +++ b/os/src/api/net/workflow.ts @@ -0,0 +1,53 @@ +import { get } from '@/utils/request' +export const getApplyList = (page: number, params?: any) => { + if (params) { + return get('/workflow/datalist?workType=0&knowId=0&limit=10', { + page, + param: 'flowId=' + params, + }).then((res) => res.data) + } else { + return get('/workflow/datalist?workType=0&knowId=0&limit=10', { + page, + }).then((res) => res.data) + } +} + +export const getMyApply = () => + get('/workflow/list?workType=0&knowId=0').then((res) => res.data) + +export const getMyTask = () => + get('/workflow/list?workType=1&knowId=0').then((res) => res.data) + +export const getTaskList = (page: number, params?: any) => { + if (params) { + return get('/workflow/datalist?workType=1&knowId=0&limit=10', { + page, + param: 'flowId=' + params, + }).then((res) => res.data) + } else { + return get('/workflow/datalist?workType=1&knowId=0&limit=10', { + page, + }).then((res) => res.data) + } +} + +export const getMyCheckList = (page: number) => + get('/workflow/mychecklist?knowId=0&limit=10', { page }).then( + (res) => res.data + ) + +// 我的抄送 +export const getMyCopyList = (page: number, params: any[]) => + get('/workflow/getcopytomelist?&limit=10&knowId=0', { + page, + start_date: params[0], + end_date: params[1], + }).then((res) => res.data) + +// 历史抄送 +export const getCopyFromMeList = (page: number, params: any[]) => + get('/workflow/getcopyfrommelist?&limit=10&knowId=0', { + page, + start_date: params[0], + end_date: params[1], + }).then((res) => res.data) diff --git a/os/src/components/auth/AuthLogin.vue b/os/src/components/auth/AuthLogin.vue index a4016a0..337c67f 100644 --- a/os/src/components/auth/AuthLogin.vue +++ b/os/src/components/auth/AuthLogin.vue @@ -1,7 +1,7 @@