mirror of
https://github.com/ksyasuda/SubMiner.git
synced 2026-05-25 12:55:18 -07:00
b1bdeabca8
* fix(jellyfin): show overlay, inject plugin, and fix stats title on playb - Show visible overlay automatically during Jellyfin playback so subtitleStyle applies - Inject bundled mpv plugin on auto-launch so keybindings work without overlay focus - Group Jellyfin playback stats under item metadata (jellyfin://host/item/id) instead of stream URLs so episodes merge with matching local titles - Mark ffsubsync unavailable in subsync modal for remote media paths - Drain queued second-instance commands even when onReady throws * fix(overlay): stabilize macOS focus handoff and sidebar Yomitan pause - Keep overlay visible during macOS foreground probe after overlay blur - Hold sidebar hover-pause while a Yomitan lookup popup remains open * fix(jellyfin): fix discovery loop, device identity, tray state, and Disc - Derive device identity from OS hostname; remove legacy configurable client/device fields - Prevent discovery playback from reloading active item, misreporting pause state, and duplicate overlay restores - Restart stale tray discovery sessions without re-login when server drops SubMiner cast target - Sync tray discovery checkbox state on Linux after CLI/startup/remote-session changes - Stop Discord presence falling back to stream URLs; prime title before tokenized stream loads - Fix picker library discovery when log level is above info - Fix config.example.jsonc trailing commas and array formatting * docs(release): trim and consolidate prerelease notes for 0.15.0 - Remove breaking changes section and several redundant bullet points - Consolidate per-platform updater notes into a single entry - Normalize em-dash separators to hyphens in section headers * fix(config): remove trailing commas from config.example.jsonc - Strip trailing commas throughout both config.example.jsonc copies - Reformat inline arrays to multi-line for JSON strictness - Update Jellyfin subtitle preload and playback launch tests and impl * fix(tokenizer): preserve known-word highlight when POS filters suppress - Known-word cache matches now set isKnown=true even for tokens excluded by POS filters - POS exclusion gate suppresses N+1, frequency, and JLPT only; known status is computed before the gate - Jellyfin subtitle preload continues after cleanup failures instead of aborting - Update config docs and option description to document the known-word bypass behavior * fix(jellyfin): send explicit hide/show overlay instead of toggle - Track overlay visibility in plugin state; y-t uses explicit hide/show commands when state is known - Prevent paused Jellyfin playback from resuming on overlay hide - Fix subtitle cache cleanup to only remove dirs after successful cleanup * fix(jellyfin): fix remote progress sync, seek reporting, and startup sto - arm active playback before loadfile with loadedMediaPath: null to suppress premature stop events - force immediate progress report on seek-like position jumps at the mpv time-pos level - send positionTicks and failed=false in reportStopped payload - remove EventName from HTTP timeline payloads (websocket-only field) - add startup grace window to drop stop events before media finishes loading * fix(jellyfin): fix overlay toggle sync, redirect reload, and AppImage bi - Sync visible-overlay state back to plugin via script messages to avoid toggle/hide drift - Collapse duplicate toggle events within 250ms to prevent hide-then-show on single keypress - Preserve manual hide across Jellyfin path-changing redirects even when media-title drops - Rearm managed subtitle defaults on path-changing redirects - Route toggleVisibleOverlay session binding through plugin toggle instead of app-side IPC - Show Linux/Hyprland overlay passively (showInactive) to avoid stealing mpv keyboard focus - Fix AppImage binary resolution to prefer $APPIMAGE env over mounted inner binary - Add stats window layer management so delete/update dialogs appear above stats window - Fix Jellyfin remote progress sync during Linux websocket reconnect windows * Fix CodeRabbit review feedback * fix(jellyfin): subtitle timing, resume progress, and overlay sync - Add per-stream subtitle delay persistence and auto timeline-offset correction - Strip server-selected subtitle stream from mpv load URL; suppress plugin subtitle rearm and auto-start during app-managed preload - Fix resume position lost when mpv resets on stop; use last known position for final progress/stopped reports - Keep Play vs Resume distinct to avoid early seek race on normal play - Fix discovery resume when remote play sends StartPositionTicks=0 despite saved progress - Deduplicate show/hide overlay commands using recorded visibility state - Rewrite docs-site Jellyfin page around cast-to-device UX * test: update lifecycle cleanup assertion * fix: clear aborted playback state, fix overlay passthrough, and guard du - Reset app_managed_playback_pending on lifecycle cleanup to prevent state leak into next item - Record visible overlay action only after command succeeds, not before - Non-native passive overlay now always click-through on re-show (fix isNonNativePassiveOverlay ordering) - Defer activeParsedSubtitleMediaPath assignment until after prefetch completes - Move autoplay gate release into the hide branch of toggleVisibleOverlay - Clear active Jellyfin playback when stopping media that never loaded - Reset managed subtitle delay and delay key when no external tracks are available - Await async removeDir in subtitle cache cleanup - Guard duplicate delete clicks in MediaDetailView and SessionsTab with refs - Escape key in DeleteConfirmDialog now calls stopPropagation and stopImmediatePropagation
262 lines
20 KiB
JSON
262 lines
20 KiB
JSON
{
|
|
"name": "subminer",
|
|
"productName": "SubMiner",
|
|
"desktopName": "SubMiner.desktop",
|
|
"version": "0.15.0-beta.4",
|
|
"description": "All-in-one sentence mining overlay with AnkiConnect and dictionary integration",
|
|
"packageManager": "bun@1.3.5",
|
|
"main": "dist/main-entry.js",
|
|
"scripts": {
|
|
"typecheck": "tsc --noEmit -p tsconfig.typecheck.json",
|
|
"typecheck:watch": "tsc --watch --preserveWatchOutput -p tsconfig.typecheck.json",
|
|
"get-frequency": "bun run scripts/get_frequency.ts --pretty --color-top-x 10000 --yomitan-user-data ~/.config/SubMiner --colorized-line",
|
|
"get-frequency:electron": "bun run build:yomitan && bun build scripts/get_frequency.ts --format=cjs --target=node --outfile dist/scripts/get_frequency.js --external electron && env -u ELECTRON_RUN_AS_NODE 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 run build:yomitan && bun build scripts/test-yomitan-parser.ts --format=cjs --target=node --outfile dist/scripts/test-yomitan-parser.js --external electron && env -u ELECTRON_RUN_AS_NODE electron dist/scripts/test-yomitan-parser.js",
|
|
"build:yomitan": "bun scripts/build-yomitan.mjs",
|
|
"build:assets": "bun scripts/prepare-build-assets.mjs",
|
|
"build:launcher": "bun build ./launcher/main.ts --target=bun --packages=bundle --banner='#!/usr/bin/env bun' --outfile=dist/launcher/subminer",
|
|
"build:stats": "cd stats && bun run build",
|
|
"dev:stats": "cd stats && bun run dev",
|
|
"build": "bun run build:yomitan && bun run build:stats && tsc -p tsconfig.json && bun run build:renderer && bun run build:settings && bun run build:launcher && bun run build:assets",
|
|
"build:renderer": "esbuild src/renderer/renderer.ts --bundle --platform=browser --format=esm --target=es2022 --outfile=dist/renderer/renderer.js --sourcemap",
|
|
"build:settings": "esbuild src/settings/settings.ts --bundle --platform=browser --format=esm --target=es2022 --outfile=dist/settings/settings.js --sourcemap",
|
|
"changelog:build": "bun run scripts/build-changelog.ts build-release",
|
|
"changelog:check": "bun run scripts/build-changelog.ts check",
|
|
"changelog:docs": "bun run scripts/build-changelog.ts docs",
|
|
"changelog:lint": "bun run scripts/build-changelog.ts lint",
|
|
"changelog:pr-check": "bun run scripts/build-changelog.ts pr-check",
|
|
"changelog:release-notes": "bun run scripts/build-changelog.ts release-notes",
|
|
"changelog:prerelease-notes": "bun run scripts/build-changelog.ts prerelease-notes",
|
|
"format": "prettier --write .",
|
|
"format:check": "prettier --check .",
|
|
"format:src": "bash scripts/prettier-scope.sh --write",
|
|
"format:check:src": "bash scripts/prettier-scope.sh --check",
|
|
"format:stats": "bun x prettier --write stats/index.html stats/package.json stats/src stats/tsconfig.json stats/vite.config.ts",
|
|
"format:check:stats": "bun x prettier --check stats/index.html stats/package.json stats/src stats/tsconfig.json stats/vite.config.ts",
|
|
"typecheck:stats": "cd stats && bun x tsc --noEmit -p tsconfig.json",
|
|
"lint:stats": "bun run format:check:stats",
|
|
"lint:stats:typecheck": "bun run typecheck:stats",
|
|
"lint": "bun run lint:stats",
|
|
"docs:dev": "bun run --cwd docs-site docs:dev",
|
|
"docs:build": "bun run --cwd docs-site docs:build",
|
|
"docs:build:versioned": "bun run scripts/build-versioned-docs.ts",
|
|
"docs:preview": "bun run --cwd docs-site docs:preview",
|
|
"docs:test": "bun run --cwd docs-site test",
|
|
"test:docs:kb": "bun test scripts/docs-knowledge-base.test.ts",
|
|
"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/integrations.test.ts src/config/resolve/subtitle-style.test.ts src/config/resolve/jellyfin.test.ts src/config/definitions/domain-registry.test.ts src/generate-config-example.test.ts src/verify-config-example.test.ts",
|
|
"test:config:dist": "bun test dist/config/config.test.js dist/config/path-resolution.test.js dist/config/resolve/anki-connect.test.js dist/config/resolve/integrations.test.js dist/config/resolve/subtitle-style.test.js dist/config/resolve/jellyfin.test.js dist/config/definitions/domain-registry.test.js dist/generate-config-example.test.js dist/verify-config-example.test.js",
|
|
"test:config:smoke:dist": "bun test dist/config/path-resolution.test.js",
|
|
"test:plugin:src": "lua scripts/test-plugin-lua-compat.lua && lua scripts/test-plugin-start-gate.lua && lua scripts/test-plugin-session-bindings.lua && lua scripts/test-plugin-binary-windows.lua",
|
|
"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/config/cli-parser-builder.test.ts launcher/config/args-normalizer.test.ts launcher/mpv.test.ts launcher/picker.test.ts launcher/parse-args.test.ts launcher/main.test.ts launcher/commands/command-modules.test.ts launcher/commands/update-command.test.ts launcher/smoke.e2e.test.ts && bun run test:plugin:src",
|
|
"test:core:src": "bun test src/preload-settings.test.ts src/settings/settings-anki-controls.test.ts src/settings/settings-model.test.ts src/settings/settings-field-layout.test.ts src/cli/args.test.ts src/cli/help.test.ts src/shared/setup-state.test.ts src/core/services/cli-command.test.ts src/core/services/ipc.test.ts src/core/services/anki-jimaku-ipc.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/yomitan-extension-paths.test.ts src/core/services/yomitan-extension-loader.test.ts src/core/services/yomitan-settings.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/stats-window.test.ts src/core/services/stats-window-lifecycle.test.ts src/core/services/__tests__/stats-server.test.ts src/main/runtime/stats-server-routing.test.ts src/core/services/mining.test.ts src/core/services/anki-jimaku.test.ts src/core/services/jimaku-download-path.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/overlay-runtime-init.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/main/runtime/current-subtitle-snapshot.test.ts src/main/runtime/autoplay-tokenization-warm-release.test.ts src/main/runtime/autoplay-subtitle-primer.test.ts src/core/services/anilist/anilist-update-queue.test.ts src/core/services/anilist/rate-limiter.test.ts src/core/services/jlpt-token-filter.test.ts src/core/services/subtitle-position.test.ts src/core/utils/shortcut-config.test.ts src/main/runtime/startup-mode-flags.test.ts src/main/runtime/first-run-setup-plugin.test.ts src/main/runtime/first-run-setup-service.test.ts src/main/runtime/first-run-setup-window.test.ts src/main/runtime/command-line-launcher.test.ts src/main/runtime/tray-runtime.test.ts src/main/runtime/tray-main-actions.test.ts src/main/runtime/tray-main-deps.test.ts src/main/runtime/tray-runtime-handlers.test.ts src/main/runtime/cli-command-context-main-deps.test.ts src/main/runtime/app-ready-main-deps.test.ts src/main/runtime/update/appimage-updater.test.ts src/main/runtime/update/fetch-adapter.test.ts src/main/runtime/update/release-metadata-policy.test.ts src/main/runtime/update/update-dialogs.test.ts src/main/runtime/update/support-assets.test.ts src/renderer/error-recovery.test.ts src/renderer/subtitle-render.test.ts src/renderer/subtitle-render-word-class.test.ts src/renderer/handlers/mouse.test.ts src/renderer/handlers/keyboard.test.ts src/renderer/modals/jimaku.test.ts src/subsync/utils.test.ts src/main/anilist-url-guard.test.ts src/window-trackers/hyprland-tracker.test.ts src/window-trackers/x11-tracker.test.ts src/window-trackers/windows-helper.test.ts src/window-trackers/windows-tracker.test.ts launcher/config.test.ts launcher/config-domain-parsers.test.ts launcher/config/cli-parser-builder.test.ts launcher/config/args-normalizer.test.ts launcher/parse-args.test.ts launcher/main.test.ts launcher/commands/command-modules.test.ts launcher/commands/update-command.test.ts launcher/setup-gate.test.ts stats/src/lib/api-client.test.ts stats/src/hooks/useExcludedWords.test.ts",
|
|
"test:core:dist": "bun test dist/preload-settings.test.js dist/settings/settings-anki-controls.test.js dist/settings/settings-model.test.js dist/settings/settings-field-layout.test.js 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/yomitan-extension-paths.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/stats-window-lifecycle.test.js dist/core/services/mining.test.js dist/core/services/anki-jimaku.test.js dist/core/services/jimaku-download-path.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/overlay-runtime-init.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/main/runtime/current-subtitle-snapshot.test.js dist/main/runtime/autoplay-tokenization-warm-release.test.js dist/main/runtime/autoplay-subtitle-primer.test.js dist/core/services/anilist/anilist-token-store.test.js dist/core/services/anilist/anilist-update-queue.test.js dist/core/services/anilist/rate-limiter.test.js dist/core/services/jlpt-token-filter.test.js dist/core/services/subtitle-position.test.js dist/renderer/error-recovery.test.js dist/renderer/subtitle-render.test.js dist/renderer/subtitle-render-word-class.test.js dist/renderer/handlers/mouse.test.js dist/renderer/handlers/keyboard.test.js dist/renderer/modals/jimaku.test.js dist/subsync/utils.test.js dist/main/anilist-url-guard.test.js dist/window-trackers/hyprland-tracker.test.js dist/window-trackers/x11-tracker.test.js dist/window-trackers/windows-helper.test.js dist/window-trackers/windows-tracker.test.js",
|
|
"test:core:smoke:dist": "bun 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:src": "bun test src/core/services/subsync.test.ts src/subsync/utils.test.ts",
|
|
"test:immersion:sqlite:src": "bun test src/core/services/immersion-tracker-service.test.ts src/core/services/immersion-tracker/storage-session.test.ts",
|
|
"test:immersion:sqlite:dist": "bun test dist/core/services/immersion-tracker-service.test.js dist/core/services/immersion-tracker/storage-session.test.js",
|
|
"test:immersion:sqlite": "bun run tsc && bun run test:immersion:sqlite:dist",
|
|
"test:src": "bun scripts/run-test-lane.mjs bun-src-full",
|
|
"test:coverage:src": "bun run build:yomitan && bun run scripts/run-coverage-lane.ts bun-src-full --coverage-dir coverage/test-src",
|
|
"test:coverage:subtitle:src": "bun test --coverage --coverage-reporter=text --coverage-reporter=lcov --coverage-dir coverage/test-subtitle src/core/services/subsync.test.ts src/subsync/utils.test.ts",
|
|
"test:launcher:unit:src": "bun scripts/run-test-lane.mjs bun-launcher-unit",
|
|
"test:launcher:env:src": "bun run test:launcher:smoke:src && bun run test:plugin:src",
|
|
"test:env": "bun run test:launcher:env:src && bun run test:immersion:sqlite:src",
|
|
"test:runtime:compat": "bun run tsc && bun test dist/core/services/ipc.test.js dist/core/services/anki-jimaku-ipc.test.js dist/core/services/overlay-manager.test.js dist/main/config-validation.test.js dist/main/runtime/registry.test.js dist/main/runtime/startup-config.test.js",
|
|
"test:node:compat": "bun run test:runtime:compat",
|
|
"test:full": "bun run test:src && bun run test:launcher:unit:src && bun run test:node:compat",
|
|
"test": "bun run test:fast",
|
|
"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 test:subtitle:src",
|
|
"test:fast": "bun run test:config:src && bun run test:core:src && bun run test:docs:kb && bun test src/main-entry-runtime.test.ts src/anki-integration.test.ts src/anki-integration/card-creation-manual-update.test.ts src/anki-integration/anki-connect-proxy.test.ts src/anki-integration/field-grouping-workflow.test.ts src/anki-integration/field-grouping.test.ts src/anki-integration/field-grouping-merge.test.ts src/release-workflow.test.ts src/prerelease-workflow.test.ts src/ci-workflow.test.ts scripts/docs-versioning.test.ts scripts/docs-versioned-assets.test.ts scripts/build-changelog.test.ts scripts/electron-builder-after-pack.test.ts scripts/get-mpv-window-macos.test.ts scripts/mkv-to-readme-video.test.ts scripts/run-coverage-lane.test.ts scripts/update-aur-package.test.ts && bun test src/core/services/immersion-tracker/__tests__/query.test.ts src/core/services/immersion-tracker/__tests__/query-split-modules.test.ts && bun run tsc && bun test dist/main/runtime/registry.test.js",
|
|
"generate:config-example": "bun run src/generate-config-example.ts",
|
|
"verify:config-example": "bun run src/verify-config-example.ts",
|
|
"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 --publish never",
|
|
"build:mac": "bun run build && electron-builder --mac dmg zip --publish never",
|
|
"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 --publish never",
|
|
"build:mac:zip": "bun run build && electron-builder --mac zip --publish never",
|
|
"build:win": "bun run build && electron-builder --win nsis zip --publish never",
|
|
"build:win:unsigned": "bun run build && node scripts/build-win-unsigned.mjs"
|
|
},
|
|
"overrides": {
|
|
"@xmldom/xmldom": "0.8.12",
|
|
"app-builder-lib": "26.8.2",
|
|
"electron-builder-squirrel-windows": "26.8.2",
|
|
"lodash": "4.18.0",
|
|
"minimatch": "10.2.3",
|
|
"picomatch": "4.0.4",
|
|
"tar": "7.5.11"
|
|
},
|
|
"keywords": [
|
|
"anki",
|
|
"ankiconnect",
|
|
"sentence-mining",
|
|
"japanese",
|
|
"subtitles",
|
|
"overlay",
|
|
"mpv",
|
|
"yomitan"
|
|
],
|
|
"author": "",
|
|
"license": "GPL-3.0-or-later",
|
|
"dependencies": {
|
|
"@fontsource-variable/geist": "^5.2.8",
|
|
"@fontsource-variable/geist-mono": "^5.2.7",
|
|
"@xhayper/discord-rpc": "^1.3.3",
|
|
"axios": "^1.13.5",
|
|
"commander": "^14.0.3",
|
|
"electron-updater": "^6.8.3",
|
|
"hono": "^4.12.7",
|
|
"jsonc-parser": "^3.3.1",
|
|
"koffi": "^2.15.6",
|
|
"libsql": "^0.5.22",
|
|
"ws": "^8.19.0"
|
|
},
|
|
"devDependencies": {
|
|
"@types/node": "^24.10.0",
|
|
"@types/ws": "^8.18.1",
|
|
"electron": "42.2.0",
|
|
"electron-builder": "26.8.2",
|
|
"esbuild": "^0.25.12",
|
|
"eslint": "^10.4.0",
|
|
"prettier": "^3.8.1",
|
|
"typescript": "^5.9.3"
|
|
},
|
|
"build": {
|
|
"appId": "com.sudacode.SubMiner",
|
|
"productName": "SubMiner",
|
|
"executableName": "SubMiner",
|
|
"artifactName": "SubMiner-${version}.${ext}",
|
|
"afterPack": "scripts/electron-builder-after-pack.cjs",
|
|
"icon": "assets/SubMiner-square.png",
|
|
"directories": {
|
|
"output": "release"
|
|
},
|
|
"publish": [
|
|
{
|
|
"provider": "github",
|
|
"owner": "ksyasuda",
|
|
"repo": "SubMiner"
|
|
}
|
|
],
|
|
"electronUpdaterCompatibility": ">=2.16",
|
|
"linux": {
|
|
"target": [
|
|
"AppImage"
|
|
],
|
|
"category": "AudioVideo",
|
|
"executableArgs": [
|
|
"--background"
|
|
]
|
|
},
|
|
"mac": {
|
|
"target": [
|
|
"dmg",
|
|
"zip"
|
|
],
|
|
"category": "public.app-category.video",
|
|
"icon": "assets/SubMiner-square.png",
|
|
"hardenedRuntime": true,
|
|
"entitlements": "build/entitlements.mac.plist",
|
|
"entitlementsInherit": "build/entitlements.mac.plist",
|
|
"extraResources": [
|
|
{
|
|
"from": "dist/scripts/get-mpv-window-macos",
|
|
"to": "scripts/get-mpv-window-macos"
|
|
}
|
|
]
|
|
},
|
|
"win": {
|
|
"target": [
|
|
"nsis",
|
|
"zip"
|
|
],
|
|
"icon": "assets/SubMiner.ico"
|
|
},
|
|
"nsis": {
|
|
"oneClick": false,
|
|
"perMachine": false,
|
|
"allowToChangeInstallationDirectory": true,
|
|
"include": "build/installer.nsh"
|
|
},
|
|
"files": [
|
|
"**/*",
|
|
"!assets{,/**/*}",
|
|
"!src{,/**/*}",
|
|
"!launcher{,/**/*}",
|
|
"!docs{,/**/*}",
|
|
"!tests{,/**/*}",
|
|
"!packaging{,/**/*}",
|
|
"!README.md",
|
|
"!CHANGELOG.md",
|
|
"!AGENTS.md",
|
|
"!CLAUDE.md",
|
|
"!stats/src{,/**/*}",
|
|
"!stats/index.html",
|
|
"!stats/public{,/**/*}",
|
|
"!stats/package.json",
|
|
"!stats/tsconfig.json",
|
|
"!stats/vite.config.ts",
|
|
"!docs-site{,/**/*}",
|
|
"!changes{,/**/*}",
|
|
"!.tmp{,/**/*}",
|
|
"!release-*{,/**/*}",
|
|
"!dist/**/*.map",
|
|
"!dist/**/*.test.*",
|
|
"!dist/**/__tests__{,/**/*}",
|
|
"!scripts/**/*.test.*",
|
|
"!plugin{,/**/*}",
|
|
"!vendor/subminer-yomitan{,/**/*}",
|
|
"!vendor/yomitan-jlpt-vocab{,/**/*}",
|
|
"!vendor/texthooker-ui/src{,/**/*}",
|
|
"!vendor/texthooker-ui/node_modules{,/**/*}",
|
|
"!vendor/texthooker-ui/.svelte-kit{,/**/*}",
|
|
"!vendor/texthooker-ui/.vscode{,/**/*}",
|
|
"!vendor/texthooker-ui/public{,/**/*}",
|
|
"!vendor/texthooker-ui/README.md",
|
|
"!vendor/texthooker-ui/package.json",
|
|
"!vendor/texthooker-ui/package-lock.json",
|
|
"!vendor/texthooker-ui/tsconfig*.json",
|
|
"!node_modules/@libsql/linux-x64-musl{,/**/*}"
|
|
],
|
|
"extraResources": [
|
|
{
|
|
"from": "build/yomitan",
|
|
"to": "yomitan"
|
|
},
|
|
{
|
|
"from": "vendor/yomitan-jlpt-vocab",
|
|
"to": "yomitan-jlpt-vocab"
|
|
},
|
|
{
|
|
"from": "assets",
|
|
"to": "assets"
|
|
},
|
|
{
|
|
"from": "plugin/subminer",
|
|
"to": "plugin/subminer"
|
|
},
|
|
{
|
|
"from": "plugin/subminer.conf",
|
|
"to": "plugin/subminer.conf"
|
|
},
|
|
{
|
|
"from": "dist/launcher/subminer",
|
|
"to": "launcher/subminer"
|
|
},
|
|
{
|
|
"from": "dist/scripts/get-mpv-window-windows.ps1",
|
|
"to": "scripts/get-mpv-window-windows.ps1"
|
|
}
|
|
]
|
|
}
|
|
}
|