mirror of
https://github.com/ksyasuda/SubMiner.git
synced 2026-02-27 18:22:41 -08:00
Introduce Discord presence runtime support and continue composition-root decomposition by moving Jellyfin wiring into dedicated composer modules. This keeps main runtime orchestration thinner while preserving behavior and test coverage across config, runtime, and docs updates.
140 lines
9.6 KiB
JSON
140 lines
9.6 KiB
JSON
{
|
|
"name": "subminer",
|
|
"version": "0.1.0",
|
|
"description": "All-in-one sentence mining overlay with AnkiConnect and dictionary integration",
|
|
"packageManager": "bun@1.3.5",
|
|
"main": "dist/main-entry.js",
|
|
"scripts": {
|
|
"get-frequency": "bun run scripts/get_frequency.ts --pretty --color-top-x 10000 --yomitan-user-data ~/.config/SubMiner --colorized-line",
|
|
"get-frequency:electron": "bun build scripts/get_frequency.ts --format=cjs --target=node --outfile dist/scripts/get_frequency.js --external electron && electron dist/scripts/get_frequency.js --pretty --color-top-x 10000 --yomitan-user-data ~/.config/SubMiner --colorized-line",
|
|
"test-yomitan-parser": "bun run scripts/test-yomitan-parser.ts",
|
|
"test-yomitan-parser:electron": "bun build scripts/test-yomitan-parser.ts --format=cjs --target=node --outfile dist/scripts/test-yomitan-parser.js --external electron && electron dist/scripts/test-yomitan-parser.js",
|
|
"build": "tsc && bun run build:renderer && cp src/renderer/index.html src/renderer/style.css dist/renderer/ && cp -r src/renderer/fonts dist/renderer/ && bash scripts/build-macos-helper.sh",
|
|
"build:renderer": "esbuild src/renderer/renderer.ts --bundle --platform=browser --format=esm --target=es2022 --outfile=dist/renderer/renderer.js --sourcemap",
|
|
"docs:dev": "VITE_EXTRA_EXTENSIONS=jsonc vitepress dev docs --host 0.0.0.0 --port 5173 --strictPort",
|
|
"docs:build": "VITE_EXTRA_EXTENSIONS=jsonc vitepress build docs",
|
|
"docs:preview": "VITE_EXTRA_EXTENSIONS=jsonc vitepress preview docs --host 0.0.0.0 --port 4173 --strictPort",
|
|
"format": "prettier --write .",
|
|
"format:check": "prettier --check .",
|
|
"check:main-fanin": "bun run scripts/check-main-runtime-fanin.ts",
|
|
"check:main-fanin:strict": "bun run scripts/check-main-runtime-fanin.ts --strict",
|
|
"check:runtime-cycles": "bun run scripts/check-runtime-cycles.ts",
|
|
"check:runtime-cycles:strict": "bun run scripts/check-runtime-cycles.ts --strict",
|
|
"test:config:src": "bun test src/config/config.test.ts src/config/path-resolution.test.ts src/config/resolve/anki-connect.test.ts src/config/resolve/subtitle-style.test.ts src/config/resolve/jellyfin.test.ts src/config/definitions/domain-registry.test.ts",
|
|
"test:config:dist": "node --test dist/config/config.test.js dist/config/path-resolution.test.js dist/config/resolve/anki-connect.test.js dist/config/resolve/subtitle-style.test.js dist/config/resolve/jellyfin.test.js dist/config/definitions/domain-registry.test.js",
|
|
"test:config:smoke:dist": "node --test dist/config/path-resolution.test.js",
|
|
"test:launcher:smoke:src": "bun test launcher/smoke.e2e.test.ts",
|
|
"test:launcher:src": "bun test launcher/config.test.ts launcher/config-domain-parsers.test.ts launcher/parse-args.test.ts launcher/main.test.ts launcher/commands/command-modules.test.ts launcher/smoke.e2e.test.ts",
|
|
"test:core:src": "bun test src/cli/args.test.ts src/cli/help.test.ts src/core/services/cli-command.test.ts src/core/services/field-grouping-overlay.test.ts src/core/services/numeric-shortcut-session.test.ts src/core/services/secondary-subtitle.test.ts src/core/services/mpv-render-metrics.test.ts src/core/services/overlay-content-measurement.test.ts src/core/services/mpv-control.test.ts src/core/services/mpv.test.ts src/core/services/runtime-options-ipc.test.ts src/core/services/runtime-config.test.ts src/core/services/config-hot-reload.test.ts src/core/services/discord-presence.test.ts src/core/services/tokenizer.test.ts src/core/services/tokenizer/annotation-stage.test.ts src/core/services/tokenizer/parser-selection-stage.test.ts src/core/services/tokenizer/parser-enrichment-stage.test.ts src/core/services/subsync.test.ts src/core/services/overlay-bridge.test.ts src/core/services/overlay-shortcut-handler.test.ts src/core/services/mining.test.ts src/core/services/anki-jimaku.test.ts src/core/services/jellyfin.test.ts src/core/services/jellyfin-remote.test.ts src/core/services/immersion-tracker-service.test.ts src/core/services/app-ready.test.ts src/core/services/startup-bootstrap.test.ts src/core/services/subtitle-processing-controller.test.ts src/core/services/anilist/anilist-update-queue.test.ts src/core/utils/shortcut-config.test.ts src/renderer/error-recovery.test.ts src/subsync/utils.test.ts src/main/anilist-url-guard.test.ts src/window-trackers/x11-tracker.test.ts launcher/config.test.ts launcher/config-domain-parsers.test.ts launcher/parse-args.test.ts launcher/main.test.ts launcher/commands/command-modules.test.ts",
|
|
"test:core:dist": "node --test dist/cli/args.test.js dist/cli/help.test.js dist/core/services/cli-command.test.js dist/core/services/ipc.test.js dist/core/services/anki-jimaku-ipc.test.js dist/core/services/field-grouping-overlay.test.js dist/core/services/numeric-shortcut-session.test.js dist/core/services/secondary-subtitle.test.js dist/core/services/mpv-render-metrics.test.js dist/core/services/overlay-content-measurement.test.js dist/core/services/mpv-control.test.js dist/core/services/mpv.test.js dist/core/services/runtime-options-ipc.test.js dist/core/services/runtime-config.test.js dist/core/services/config-hot-reload.test.js dist/core/services/discord-presence.test.js dist/core/services/tokenizer.test.js dist/core/services/tokenizer/annotation-stage.test.js dist/core/services/tokenizer/parser-selection-stage.test.js dist/core/services/tokenizer/parser-enrichment-stage.test.js dist/core/services/subsync.test.js dist/core/services/overlay-bridge.test.js dist/core/services/overlay-manager.test.js dist/core/services/overlay-shortcut-handler.test.js dist/core/services/mining.test.js dist/core/services/anki-jimaku.test.js dist/core/services/jellyfin.test.js dist/core/services/jellyfin-remote.test.js dist/core/services/immersion-tracker-service.test.js dist/core/services/app-ready.test.js dist/core/services/startup-bootstrap.test.js dist/core/services/subtitle-processing-controller.test.js dist/core/services/anilist/anilist-token-store.test.js dist/core/services/anilist/anilist-update-queue.test.js dist/renderer/error-recovery.test.js dist/subsync/utils.test.js dist/main/anilist-url-guard.test.js dist/window-trackers/x11-tracker.test.js",
|
|
"test:core:smoke:dist": "node --test dist/cli/help.test.js dist/core/services/runtime-config.test.js dist/core/services/ipc.test.js dist/core/services/overlay-manager.test.js dist/core/services/anilist/anilist-token-store.test.js dist/core/services/startup-bootstrap.test.js dist/renderer/error-recovery.test.js dist/main/anilist-url-guard.test.js dist/window-trackers/x11-tracker.test.js",
|
|
"test:smoke:dist": "bun run test:config:smoke:dist && bun run test:core:smoke:dist",
|
|
"test:subtitle:dist": "echo \"Subtitle tests are currently not configured\"",
|
|
"test": "bun run test:config && bun run test:core",
|
|
"test:config": "bun run test:config:src",
|
|
"test:launcher": "bun run test:launcher:src",
|
|
"test:core": "bun run test:core:src",
|
|
"test:subtitle": "bun run build && bun run test:subtitle:dist",
|
|
"test:fast": "bun run test:config:src && bun run test:core:src",
|
|
"generate:config-example": "bun run build && node dist/generate-config-example.js",
|
|
"start": "bun run build && electron . --start",
|
|
"dev": "bun run build && electron . --start --dev",
|
|
"stop": "electron . --stop",
|
|
"toggle": "electron . --toggle",
|
|
"build:appimage": "bun run build && electron-builder --linux AppImage",
|
|
"build:mac": "bun run build && electron-builder --mac dmg zip",
|
|
"build:mac:unsigned": "bun run build && env -u APPLE_ID -u APPLE_APP_SPECIFIC_PASSWORD -u APPLE_TEAM_ID -u CSC_LINK -u CSC_KEY_PASSWORD CSC_IDENTITY_AUTO_DISCOVERY=false electron-builder --mac dmg zip",
|
|
"build:mac:zip": "bun run build && electron-builder --mac zip"
|
|
},
|
|
"keywords": [
|
|
"anki",
|
|
"ankiconnect",
|
|
"sentence-mining",
|
|
"japanese",
|
|
"subtitles",
|
|
"overlay",
|
|
"mpv",
|
|
"yomitan"
|
|
],
|
|
"author": "",
|
|
"license": "GPL-3.0-or-later",
|
|
"dependencies": {
|
|
"@catppuccin/vitepress": "^0.1.2",
|
|
"axios": "^1.13.5",
|
|
"commander": "^14.0.3",
|
|
"discord-rpc": "^4.0.1",
|
|
"jsonc-parser": "^3.3.1",
|
|
"mermaid": "^11.12.3",
|
|
"ws": "^8.19.0"
|
|
},
|
|
"devDependencies": {
|
|
"@types/node": "^25.3.0",
|
|
"@types/ws": "^8.18.1",
|
|
"electron": "^37.10.3",
|
|
"electron-builder": "^26.8.1",
|
|
"esbuild": "^0.25.12",
|
|
"prettier": "^3.8.1",
|
|
"typescript": "^5.9.3",
|
|
"vitepress": "^1.6.4"
|
|
},
|
|
"build": {
|
|
"appId": "com.sudacode.SubMiner",
|
|
"productName": "SubMiner",
|
|
"executableName": "SubMiner",
|
|
"artifactName": "SubMiner-${version}.${ext}",
|
|
"icon": "assets/SubMiner.png",
|
|
"directories": {
|
|
"output": "release"
|
|
},
|
|
"linux": {
|
|
"target": [
|
|
"AppImage"
|
|
],
|
|
"category": "AudioVideo",
|
|
"executableArgs": [
|
|
"--background"
|
|
]
|
|
},
|
|
"mac": {
|
|
"target": [
|
|
"dmg",
|
|
"zip"
|
|
],
|
|
"category": "public.app-category.video",
|
|
"icon": "assets/SubMiner.png",
|
|
"hardenedRuntime": true,
|
|
"entitlements": "build/entitlements.mac.plist",
|
|
"entitlementsInherit": "build/entitlements.mac.plist"
|
|
},
|
|
"files": [
|
|
"dist/**/*",
|
|
"vendor/texthooker-ui/docs/**/*",
|
|
"vendor/texthooker-ui/package.json",
|
|
"package.json",
|
|
"scripts/get-mpv-window-macos.swift"
|
|
],
|
|
"extraResources": [
|
|
{
|
|
"from": "vendor/yomitan",
|
|
"to": "yomitan"
|
|
},
|
|
{
|
|
"from": "vendor/yomitan-jlpt-vocab",
|
|
"to": "yomitan-jlpt-vocab"
|
|
},
|
|
{
|
|
"from": "vendor/jiten_freq_global",
|
|
"to": "jiten_freq_global"
|
|
},
|
|
{
|
|
"from": "assets",
|
|
"to": "assets"
|
|
},
|
|
{
|
|
"from": "dist/scripts/get-mpv-window-macos",
|
|
"to": "scripts/get-mpv-window-macos"
|
|
}
|
|
]
|
|
}
|
|
}
|