From 3cda8aa60bdb3f69f4c105760497cc1495066e13 Mon Sep 17 00:00:00 2001 From: "pakintada@gmail.com" Date: Wed, 1 Jul 2026 17:08:46 +0700 Subject: [PATCH] fix: slow get recipe memo - fix: cannot adb command from blocking suspicious cmd - change: logging to logtape lib - change: adb payload handler format to send payload size as header for exact match payload Signed-off-by: pakintada@gmail.com --- bun.lockb | Bin 199988 -> 200694 bytes package.json | 2 + src/lib/components/dashboard-quick-adb.svelte | 11 +- src/lib/core/adb/adb.ts | 106 ++++--- src/lib/core/handlers/adbPayloadHandler.ts | 67 ++++- src/lib/core/handlers/messageHandler.ts | 2 +- src/lib/core/utils/logger.ts | 277 +++++++++++++----- src/lib/core/utils/vite-logger.ts | 70 +++++ src/lib/workers/androidPayload.worker.ts | 63 ++++ src/routes/(authed)/tools/brew/+page.svelte | 65 +--- tsconfig.json | 3 +- vite.config.ts | 2 + 12 files changed, 494 insertions(+), 174 deletions(-) create mode 100644 src/lib/core/utils/vite-logger.ts create mode 100644 src/lib/workers/androidPayload.worker.ts diff --git a/bun.lockb b/bun.lockb index 73c25fe62467b27a4ea7bd1772a47f42c49b42eb..600a8f821c967045e00a9631d379f77889f1107c 100755 GIT binary patch delta 35380 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 delta 34869 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 F{{c>FgQWlf diff --git a/package.json b/package.json index 570a1ee..e0eb61d 100644 --- a/package.json +++ b/package.json @@ -65,6 +65,7 @@ "@dnd-kit-svelte/svelte": "0.1.3", "@dnd-kit/abstract": "^0.2.4", "@dnd-kit/helpers": "^0.2.4", + "@logtape/logtape": "^2.2.2", "@tanstack/match-sorter-utils": "^8.19.4", "@types/semver": "^7.7.1", "@xterm/xterm": "^5.5.0", @@ -77,6 +78,7 @@ "animejs": "^4.3.6", "firebase": "^12.14.0", "idb": "^8.0.3", + "logtape": "https://github.com/dahlia/logtape.git", "mode-watcher": "^1.1.0", "semver": "^7.8.4", "usb": "^2.17.0", diff --git a/src/lib/components/dashboard-quick-adb.svelte b/src/lib/components/dashboard-quick-adb.svelte index 3ae6e09..914bb52 100644 --- a/src/lib/components/dashboard-quick-adb.svelte +++ b/src/lib/components/dashboard-quick-adb.svelte @@ -1,4 +1,5 @@ -

diff --git a/tsconfig.json b/tsconfig.json index 5f1994a..bf6a383 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -10,7 +10,8 @@ "skipLibCheck": true, "sourceMap": true, "strict": true, - "moduleResolution": "bundler" + "moduleResolution": "bundler", + "lib": ["ESNext", "DOM", "WebWorker"] } // Path aliases are handled by https://svelte.dev/docs/kit/configuration#alias // except $lib which is handled by https://svelte.dev/docs/kit/configuration#files diff --git a/vite.config.ts b/vite.config.ts index 7f3223c..1db02ae 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -2,8 +2,10 @@ import devtoolsJson from 'vite-plugin-devtools-json'; import tailwindcss from '@tailwindcss/vite'; import { defineConfig } from 'vitest/config'; import { sveltekit } from '@sveltejs/kit/vite'; +import { createViteLogger } from './src/lib/core/utils/vite-logger'; export default defineConfig({ + customLogger: createViteLogger(), plugins: [tailwindcss(), sveltekit(), devtoolsJson()], ssr: { noExternal: ['@dnd-kit/core', '@dnd-kit/sortable']