From d2c4e293fe310c7b36e6ead15710dee506d0dc34 Mon Sep 17 00:00:00 2001 From: PiscesXD Date: Sun, 7 Dec 2025 21:07:16 +0800 Subject: [PATCH 01/10] fix: CVE-2025-66478 --- bun.lock | 22 +++++++++++----------- package.json | 2 +- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/bun.lock b/bun.lock index 56a202e..903f914 100644 --- a/bun.lock +++ b/bun.lock @@ -28,7 +28,7 @@ "electronmon": "^2.0.3", "lucide-react": "^0.546.0", "maplibre-gl": "^5.9.0", - "next": "^15.5.5", + "next": "15.5.7", "next-themes": "^0.4.6", "postcss": "^8.5.6", "react": "^19.2.0", @@ -190,23 +190,23 @@ "@maplibre/vt-pbf": ["@maplibre/vt-pbf@4.0.3", "", { "dependencies": { "@mapbox/point-geometry": "^1.1.0", "@mapbox/vector-tile": "^2.0.4", "@types/geojson-vt": "3.2.5", "@types/supercluster": "^7.1.3", "geojson-vt": "^4.0.2", "pbf": "^4.0.1", "supercluster": "^8.0.1" } }, "sha512-YsW99BwnT+ukJRkseBcLuZHfITB4puJoxnqPVjo72rhW/TaawVYsgQHcqWLzTxqknttYoDpgyERzWSa/XrETdA=="], - "@next/env": ["@next/env@15.5.6", "", {}, "sha512-3qBGRW+sCGzgbpc5TS1a0p7eNxnOarGVQhZxfvTdnV0gFI61lX7QNtQ4V1TSREctXzYn5NetbUsLvyqwLFJM6Q=="], + "@next/env": ["@next/env@15.5.7", "", {}, "sha512-4h6Y2NyEkIEN7Z8YxkA27pq6zTkS09bUSYC0xjd0NpwFxjnIKeZEeH591o5WECSmjpUhLn3H2QLJcDye3Uzcvg=="], - "@next/swc-darwin-arm64": ["@next/swc-darwin-arm64@15.5.6", "", { "os": "darwin", "cpu": "arm64" }, "sha512-ES3nRz7N+L5Umz4KoGfZ4XX6gwHplwPhioVRc25+QNsDa7RtUF/z8wJcbuQ2Tffm5RZwuN2A063eapoJ1u4nPg=="], + "@next/swc-darwin-arm64": ["@next/swc-darwin-arm64@15.5.7", "", { "os": "darwin", "cpu": "arm64" }, "sha512-IZwtxCEpI91HVU/rAUOOobWSZv4P2DeTtNaCdHqLcTJU4wdNXgAySvKa/qJCgR5m6KI8UsKDXtO2B31jcaw1Yw=="], - "@next/swc-darwin-x64": ["@next/swc-darwin-x64@15.5.6", "", { "os": "darwin", "cpu": "x64" }, "sha512-JIGcytAyk9LQp2/nuVZPAtj8uaJ/zZhsKOASTjxDug0SPU9LAM3wy6nPU735M1OqacR4U20LHVF5v5Wnl9ptTA=="], + "@next/swc-darwin-x64": ["@next/swc-darwin-x64@15.5.7", "", { "os": "darwin", "cpu": "x64" }, "sha512-UP6CaDBcqaCBuiq/gfCEJw7sPEoX1aIjZHnBWN9v9qYHQdMKvCKcAVs4OX1vIjeE+tC5EIuwDTVIoXpUes29lg=="], - "@next/swc-linux-arm64-gnu": ["@next/swc-linux-arm64-gnu@15.5.6", "", { "os": "linux", "cpu": "arm64" }, "sha512-qvz4SVKQ0P3/Im9zcS2RmfFL/UCQnsJKJwQSkissbngnB/12c6bZTCB0gHTexz1s6d/mD0+egPKXAIRFVS7hQg=="], + "@next/swc-linux-arm64-gnu": ["@next/swc-linux-arm64-gnu@15.5.7", "", { "os": "linux", "cpu": "arm64" }, "sha512-NCslw3GrNIw7OgmRBxHtdWFQYhexoUCq+0oS2ccjyYLtcn1SzGzeM54jpTFonIMUjNbHmpKpziXnpxhSWLcmBA=="], - "@next/swc-linux-arm64-musl": ["@next/swc-linux-arm64-musl@15.5.6", "", { "os": "linux", "cpu": "arm64" }, "sha512-FsbGVw3SJz1hZlvnWD+T6GFgV9/NYDeLTNQB2MXoPN5u9VA9OEDy6fJEfePfsUKAhJufFbZLgp0cPxMuV6SV0w=="], + "@next/swc-linux-arm64-musl": ["@next/swc-linux-arm64-musl@15.5.7", "", { "os": "linux", "cpu": "arm64" }, "sha512-nfymt+SE5cvtTrG9u1wdoxBr9bVB7mtKTcj0ltRn6gkP/2Nu1zM5ei8rwP9qKQP0Y//umK+TtkKgNtfboBxRrw=="], - "@next/swc-linux-x64-gnu": ["@next/swc-linux-x64-gnu@15.5.6", "", { "os": "linux", "cpu": "x64" }, "sha512-3QnHGFWlnvAgyxFxt2Ny8PTpXtQD7kVEeaFat5oPAHHI192WKYB+VIKZijtHLGdBBvc16tiAkPTDmQNOQ0dyrA=="], + "@next/swc-linux-x64-gnu": ["@next/swc-linux-x64-gnu@15.5.7", "", { "os": "linux", "cpu": "x64" }, "sha512-hvXcZvCaaEbCZcVzcY7E1uXN9xWZfFvkNHwbe/n4OkRhFWrs1J1QV+4U1BN06tXLdaS4DazEGXwgqnu/VMcmqw=="], - "@next/swc-linux-x64-musl": ["@next/swc-linux-x64-musl@15.5.6", "", { "os": "linux", "cpu": "x64" }, "sha512-OsGX148sL+TqMK9YFaPFPoIaJKbFJJxFzkXZljIgA9hjMjdruKht6xDCEv1HLtlLNfkx3c5w2GLKhj7veBQizQ=="], + "@next/swc-linux-x64-musl": ["@next/swc-linux-x64-musl@15.5.7", "", { "os": "linux", "cpu": "x64" }, "sha512-4IUO539b8FmF0odY6/SqANJdgwn1xs1GkPO5doZugwZ3ETF6JUdckk7RGmsfSf7ws8Qb2YB5It33mvNL/0acqA=="], - "@next/swc-win32-arm64-msvc": ["@next/swc-win32-arm64-msvc@15.5.6", "", { "os": "win32", "cpu": "arm64" }, "sha512-ONOMrqWxdzXDJNh2n60H6gGyKed42Ieu6UTVPZteXpuKbLZTH4G4eBMsr5qWgOBA+s7F+uB4OJbZnrkEDnZ5Fg=="], + "@next/swc-win32-arm64-msvc": ["@next/swc-win32-arm64-msvc@15.5.7", "", { "os": "win32", "cpu": "arm64" }, "sha512-CpJVTkYI3ZajQkC5vajM7/ApKJUOlm6uP4BknM3XKvJ7VXAvCqSjSLmM0LKdYzn6nBJVSjdclx8nYJSa3xlTgQ=="], - "@next/swc-win32-x64-msvc": ["@next/swc-win32-x64-msvc@15.5.6", "", { "os": "win32", "cpu": "x64" }, "sha512-pxK4VIjFRx1MY92UycLOOw7dTdvccWsNETQ0kDHkBlcFH1GrTLUjSiHU1ohrznnux6TqRHgv5oflhfIWZwVROQ=="], + "@next/swc-win32-x64-msvc": ["@next/swc-win32-x64-msvc@15.5.7", "", { "os": "win32", "cpu": "x64" }, "sha512-gMzgBX164I6DN+9/PGA+9dQiwmTkE4TloBNx8Kv9UiGARsr9Nba7IpcBRA1iTV9vwlYnrE3Uy6I7Aj6qLjQuqw=="], "@npmcli/fs": ["@npmcli/fs@2.1.2", "", { "dependencies": { "@gar/promisify": "^1.1.3", "semver": "^7.3.5" } }, "sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ=="], @@ -912,7 +912,7 @@ "neo-async": ["neo-async@2.6.2", "", {}, "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw=="], - "next": ["next@15.5.6", "", { "dependencies": { "@next/env": "15.5.6", "@swc/helpers": "0.5.15", "caniuse-lite": "^1.0.30001579", "postcss": "8.4.31", "styled-jsx": "5.1.6" }, "optionalDependencies": { "@next/swc-darwin-arm64": "15.5.6", "@next/swc-darwin-x64": "15.5.6", "@next/swc-linux-arm64-gnu": "15.5.6", "@next/swc-linux-arm64-musl": "15.5.6", "@next/swc-linux-x64-gnu": "15.5.6", "@next/swc-linux-x64-musl": "15.5.6", "@next/swc-win32-arm64-msvc": "15.5.6", "@next/swc-win32-x64-msvc": "15.5.6", "sharp": "^0.34.3" }, "peerDependencies": { "@opentelemetry/api": "^1.1.0", "@playwright/test": "^1.51.1", "babel-plugin-react-compiler": "*", "react": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", "react-dom": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", "sass": "^1.3.0" }, "optionalPeers": ["@opentelemetry/api", "@playwright/test", "babel-plugin-react-compiler", "sass"], "bin": { "next": "dist/bin/next" } }, "sha512-zTxsnI3LQo3c9HSdSf91O1jMNsEzIXDShXd4wVdg9y5shwLqBXi4ZtUUJyB86KGVSJLZx0PFONvO54aheGX8QQ=="], + "next": ["next@15.5.7", "", { "dependencies": { "@next/env": "15.5.7", "@swc/helpers": "0.5.15", "caniuse-lite": "^1.0.30001579", "postcss": "8.4.31", "styled-jsx": "5.1.6" }, "optionalDependencies": { "@next/swc-darwin-arm64": "15.5.7", "@next/swc-darwin-x64": "15.5.7", "@next/swc-linux-arm64-gnu": "15.5.7", "@next/swc-linux-arm64-musl": "15.5.7", "@next/swc-linux-x64-gnu": "15.5.7", "@next/swc-linux-x64-musl": "15.5.7", "@next/swc-win32-arm64-msvc": "15.5.7", "@next/swc-win32-x64-msvc": "15.5.7", "sharp": "^0.34.3" }, "peerDependencies": { "@opentelemetry/api": "^1.1.0", "@playwright/test": "^1.51.1", "babel-plugin-react-compiler": "*", "react": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", "react-dom": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", "sass": "^1.3.0" }, "optionalPeers": ["@opentelemetry/api", "@playwright/test", "babel-plugin-react-compiler", "sass"], "bin": { "next": "dist/bin/next" } }, "sha512-+t2/0jIJ48kUpGKkdlhgkv+zPTEOoXyr60qXe68eB/pl3CMJaLeIGjzp5D6Oqt25hCBiBTt8wEeeAzfJvUKnPQ=="], "next-themes": ["next-themes@0.4.6", "", { "peerDependencies": { "react": "^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc", "react-dom": "^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc" } }, "sha512-pZvgD5L0IEvX5/9GWyHMf3m8BKiVQwsCMHfoFosXtXBMnaS0ZnIJ9ST4b4NqLVKDEm8QBxoNNGNaBv2JNF6XNA=="], diff --git a/package.json b/package.json index fa82646..c6da5df 100644 --- a/package.json +++ b/package.json @@ -42,7 +42,7 @@ "electron-builder": "^26.0.12", "lucide-react": "^0.546.0", "maplibre-gl": "^5.9.0", - "next": "^15.5.5", + "next": "15.5.7", "next-themes": "^0.4.6", "postcss": "^8.5.6", "react": "^19.2.0", From e46398af6c7538fb71d813bc643b42fb4e4d4f83 Mon Sep 17 00:00:00 2001 From: YuYu1015 Date: Mon, 8 Dec 2025 19:09:41 +0800 Subject: [PATCH 02/10] bump: 1.0.0-pre.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index fa82646..a3aa9c0 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "eq-rts-map", - "version": "1.0.0-beta.13", + "version": "1.0.0-pre.1", "description": "EQ RTS Map", "author": "ExpTech Studio ", "type": "module", From 4d9317f61c190e8e5bef185d316783e4a51ba1ad Mon Sep 17 00:00:00 2001 From: YuYu1015 Date: Wed, 10 Dec 2025 02:03:23 +0800 Subject: [PATCH 03/10] fix: HPF LPF --- src/lib/bpf-filter.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/lib/bpf-filter.ts b/src/lib/bpf-filter.ts index e24463d..b32a100 100644 --- a/src/lib/bpf-filter.ts +++ b/src/lib/bpf-filter.ts @@ -133,6 +133,8 @@ export function createBPFFilter(): { hpf: BPFFilter; lpf: BPFFilter } { } export function applyBPF(data: number[], hpf: BPFFilter, lpf: BPFFilter): number[] { + hpf.reset(); + lpf.reset(); let filtered = hpf.applyBuffer(data); filtered = lpf.applyBuffer(filtered); return filtered; From 4284af1849f0da09a22a0822b2d743b60d824a4c Mon Sep 17 00:00:00 2001 From: YuYu1015 Date: Wed, 10 Dec 2025 02:27:19 +0800 Subject: [PATCH 04/10] bump: 1.0.0-pre.2 --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index a3aa9c0..1e484d4 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "eq-rts-map", - "version": "1.0.0-pre.1", + "version": "1.0.0-pre.2", "description": "EQ RTS Map", "author": "ExpTech Studio ", "type": "module", @@ -62,4 +62,4 @@ "webpack-merge": "^6.0.1", "webpack-node-externals": "^3.0.0" } -} +} \ No newline at end of file From 7df255a737b8e032a538643490d20c31d0210802 Mon Sep 17 00:00:00 2001 From: YuYu1015 Date: Wed, 24 Dec 2025 07:07:15 +0800 Subject: [PATCH 05/10] feat: Spectrogram --- package.json | 9 +- src/app/home/page.tsx | 12 +- src/app/layout.tsx | 2 - src/components/ChartSection.tsx | 280 ++++++------------- src/components/SpectrogramSection.tsx | 186 ++++++++++++ src/components/footer.tsx | 76 +++-- src/lib/spectrogram/core/DataChunk.ts | 122 ++++++++ src/lib/spectrogram/core/SpectrogramModel.ts | 47 ++++ src/lib/spectrogram/dsp/fft.ts | 66 +++++ src/lib/spectrogram/dsp/window.ts | 33 +++ src/lib/spectrogram/index.ts | 3 + src/lib/spectrogram/render/CanvasRenderer.ts | 138 +++++++++ src/lib/spectrogram/render/ColorMap.ts | 162 +++++++++++ src/lib/spectrogram/spectrogram.ts | 65 +++++ 14 files changed, 978 insertions(+), 223 deletions(-) create mode 100644 src/components/SpectrogramSection.tsx create mode 100644 src/lib/spectrogram/core/DataChunk.ts create mode 100644 src/lib/spectrogram/core/SpectrogramModel.ts create mode 100644 src/lib/spectrogram/dsp/fft.ts create mode 100644 src/lib/spectrogram/dsp/window.ts create mode 100644 src/lib/spectrogram/index.ts create mode 100644 src/lib/spectrogram/render/CanvasRenderer.ts create mode 100644 src/lib/spectrogram/render/ColorMap.ts create mode 100644 src/lib/spectrogram/spectrogram.ts diff --git a/package.json b/package.json index 1e484d4..a64d3c4 100644 --- a/package.json +++ b/package.json @@ -20,12 +20,11 @@ "dependencies": { "@electron/remote": "^2.1.3", "electron-serve": "^3.0.0", - "electron-updater": "^6.6.2" + "electron-updater": "^6.6.2", + "webfft": "^1.0.3" }, "devDependencies": { "@radix-ui/react-slot": "^1.2.3", - "electronmon": "^2.0.3", - "wait-on": "^9.0.1", "@tailwindcss/postcss": "^4.1.14", "@types/bun": "latest", "@types/node": "^24.8.1", @@ -40,6 +39,7 @@ "cross-env": "^10.1.0", "electron": "^38.3.0", "electron-builder": "^26.0.12", + "electronmon": "^2.0.3", "lucide-react": "^0.546.0", "maplibre-gl": "^5.9.0", "next": "^15.5.5", @@ -56,10 +56,11 @@ "ts-node": "^10.9.2", "tsconfig-paths-webpack-plugin": "^4.2.0", "typescript": "^5.9.3", + "wait-on": "^9.0.1", "webpack": "^5.102.1", "webpack-bundle-analyzer": "^4.10.2", "webpack-cli": "^6.0.1", "webpack-merge": "^6.0.1", "webpack-node-externals": "^3.0.0" } -} \ No newline at end of file +} diff --git a/src/app/home/page.tsx b/src/app/home/page.tsx index f36bf4f..e12ca88 100644 --- a/src/app/home/page.tsx +++ b/src/app/home/page.tsx @@ -1,19 +1,25 @@ 'use client'; -import React from 'react'; +import React, { useState } from 'react'; import MapSection from '@/components/MapSection'; import ChartSection from '@/components/ChartSection'; import AlertManager from '@/components/AlertManager'; +import Footer from '@/components/footer'; import { RTSProvider } from '@/contexts/RTSContext'; +type DisplayMode = 'waveform' | 'spectrogram'; + export default function Home() { + const [displayMode, setDisplayMode] = useState('waveform'); + return (
- + +
); -} \ No newline at end of file +} diff --git a/src/app/layout.tsx b/src/app/layout.tsx index f7fc3ce..548e43e 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -1,7 +1,6 @@ import type { Metadata } from 'next' import './globals.css' import { ThemeProvider } from '@/components/ThemeProvider'; -import Footer from '@/components/footer'; export const metadata: Metadata = { title: 'EQ RTS MAP', @@ -23,7 +22,6 @@ export default function RootLayout({ disableTransitionOnChange > {children} -