ai-sub-translator 1.0.0 → 1.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +96 -97
- package/dist/gemini-client.d.ts.map +1 -1
- package/dist/gemini-client.js.map +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/srt-parser.d.ts +1 -1
- package/dist/srt-parser.d.ts.map +1 -1
- package/dist/srt-parser.js.map +1 -1
- package/dist/translator.d.ts +1 -1
- package/dist/translator.d.ts.map +1 -1
- package/dist/translator.js +2 -2
- package/dist/translator.js.map +1 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +12 -60
package/README.md
CHANGED
|
@@ -1,135 +1,134 @@
|
|
|
1
|
-
#
|
|
1
|
+
# ai-sub-translator
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
AI-powered subtitle translator using Google Gemini. Translates SRT subtitle files to any language.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
## Installation
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
```bash
|
|
8
|
+
npm install ai-sub-translator
|
|
9
|
+
```
|
|
8
10
|
|
|
9
|
-
|
|
10
|
-
- Progress bar
|
|
11
|
-
- Modern React-based user interface (he-he)
|
|
12
|
-
- Grab subtitles directly from video source
|
|
13
|
-
- Support for both x64 and ARM64 Windows architectures
|
|
14
|
-
- **Headless server mode** for servers (JSON-RPC API)
|
|
11
|
+
## Quick Start
|
|
15
12
|
|
|
16
|
-
|
|
13
|
+
```typescript
|
|
14
|
+
import { translate } from 'ai-sub-translator';
|
|
15
|
+
import { readFileSync } from 'fs';
|
|
17
16
|
|
|
18
|
-
|
|
19
|
-
- Different AI models support
|
|
20
|
-
- Download / Upload subtitles to subtitle websites
|
|
21
|
-
- Proper UX/UI
|
|
17
|
+
const srtContent = readFileSync('movie.srt', 'utf-8');
|
|
22
18
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
19
|
+
const result = await translate({
|
|
20
|
+
text: srtContent,
|
|
21
|
+
targetLanguage: 'French',
|
|
22
|
+
apiKey: 'your-gemini-api-key',
|
|
23
|
+
context: 'Breaking Bad S01E01',
|
|
24
|
+
onProgress: (p) => console.log(`${Math.round(p * 100)}%`),
|
|
25
|
+
});
|
|
26
26
|
|
|
27
|
-
|
|
27
|
+
console.log(result.translatedText);
|
|
28
|
+
```
|
|
28
29
|
|
|
29
|
-
|
|
30
|
-
2. Obtain API key for Gemini AI [here](https://aistudio.google.com/app/apikey). **Free tier is enough**
|
|
31
|
-
3. Launch the app
|
|
32
|
-
4. Load source .srt file
|
|
33
|
-
5. Enter your API key, language to translate, name the piece of content that you want to translate (eg. Last of us season 2 episode 1)
|
|
34
|
-
6. Press Translate button. It should take couple of minutes (progress will be displayed)
|
|
30
|
+
## API
|
|
35
31
|
|
|
36
|
-
|
|
32
|
+
### `translate(options): Promise<TranslateResult>`
|
|
37
33
|
|
|
38
|
-
|
|
39
|
-
- npm (v6 or higher)
|
|
34
|
+
Translates SRT subtitle content to a target language using Google Gemini.
|
|
40
35
|
|
|
36
|
+
#### Options
|
|
41
37
|
|
|
42
|
-
|
|
38
|
+
| Parameter | Type | Required | Default | Description |
|
|
39
|
+
|-----------|------|----------|---------|-------------|
|
|
40
|
+
| `text` | `string` | Yes | - | SRT subtitle content |
|
|
41
|
+
| `targetLanguage` | `string` | Yes | - | Target language (e.g., "French", "Spanish") |
|
|
42
|
+
| `apiKey` | `string` | Yes | - | Google Gemini API key |
|
|
43
|
+
| `model` | `string` | No | `gemini-2.0-flash` | Gemini model to use |
|
|
44
|
+
| `batchSize` | `number` | No | `50` | Subtitles per translation batch |
|
|
45
|
+
| `context` | `string` | No | `''` | Movie/show name for better translation |
|
|
46
|
+
| `onProgress` | `(progress: number) => void` | No | - | Progress callback (0-1 range) |
|
|
47
|
+
| `signal` | `AbortSignal` | No | - | Cancellation signal |
|
|
43
48
|
|
|
44
|
-
|
|
45
|
-
```bash
|
|
46
|
-
git clone https://github.com/seeingred/ai-sub-translator.git
|
|
47
|
-
cd ai-sub-translator
|
|
48
|
-
```
|
|
49
|
+
#### Returns `TranslateResult`
|
|
49
50
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
51
|
+
```typescript
|
|
52
|
+
{
|
|
53
|
+
translatedText: string; // Full translated SRT content
|
|
54
|
+
totalBatches: number; // Total batches processed
|
|
55
|
+
completedBatches: number; // Completed batches
|
|
56
|
+
}
|
|
53
57
|
```
|
|
54
58
|
|
|
59
|
+
### `parseSrt(text): SrtEntry[]`
|
|
55
60
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
The app can run as a headless server on Linux servers without GUI, exposing a JSON-RPC API for subtitle translation.
|
|
61
|
+
Parses SRT content into structured entries.
|
|
59
62
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
# On Linux server (auto-detects no display)
|
|
63
|
-
./ai-sub-translator
|
|
64
|
-
|
|
65
|
-
# Force headless mode on any platform
|
|
66
|
-
./ai-sub-translator --headless
|
|
63
|
+
```typescript
|
|
64
|
+
import { parseSrt } from 'ai-sub-translator';
|
|
67
65
|
|
|
68
|
-
|
|
69
|
-
|
|
66
|
+
const entries = parseSrt(srtContent);
|
|
67
|
+
// [{ index: 1, timestamp: '00:00:01,000 --> 00:00:05,000', text: 'Hello' }, ...]
|
|
70
68
|
```
|
|
71
69
|
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
## Development
|
|
70
|
+
### `formatSrt(entries): string`
|
|
75
71
|
|
|
76
|
-
|
|
72
|
+
Formats structured entries back into SRT content.
|
|
77
73
|
|
|
78
|
-
```
|
|
79
|
-
|
|
74
|
+
```typescript
|
|
75
|
+
import { formatSrt } from 'ai-sub-translator';
|
|
80
76
|
|
|
81
|
-
|
|
82
|
-
npm start -- --headless
|
|
77
|
+
const srt = formatSrt(entries);
|
|
83
78
|
```
|
|
84
79
|
|
|
85
|
-
##
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
80
|
+
## Types
|
|
81
|
+
|
|
82
|
+
```typescript
|
|
83
|
+
interface SrtEntry {
|
|
84
|
+
index: number;
|
|
85
|
+
timestamp: string;
|
|
86
|
+
text: string;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
interface TranslateOptions {
|
|
90
|
+
text: string;
|
|
91
|
+
targetLanguage: string;
|
|
92
|
+
apiKey: string;
|
|
93
|
+
model?: string;
|
|
94
|
+
batchSize?: number;
|
|
95
|
+
context?: string;
|
|
96
|
+
onProgress?: (progress: number) => void;
|
|
97
|
+
signal?: AbortSignal;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
interface TranslateResult {
|
|
101
|
+
translatedText: string;
|
|
102
|
+
totalBatches: number;
|
|
103
|
+
completedBatches: number;
|
|
104
|
+
}
|
|
91
105
|
```
|
|
92
106
|
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
### Building for specific architectures
|
|
96
|
-
|
|
97
|
-
For Windows, you can build for specific architectures:
|
|
107
|
+
## Supported Models
|
|
98
108
|
|
|
99
|
-
|
|
100
|
-
# Build for Windows x64
|
|
101
|
-
npm run make:win:x64
|
|
102
|
-
|
|
103
|
-
# Build for Windows ARM64
|
|
104
|
-
npm run make:win:arm64
|
|
109
|
+
All models have a free tier available from [Google AI Studio](https://aistudio.google.com/app/apikey):
|
|
105
110
|
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
111
|
+
- `gemini-2.0-flash` (default, recommended)
|
|
112
|
+
- `gemini-2.5-flash`
|
|
113
|
+
- `gemini-1.5-flash`
|
|
114
|
+
- `gemini-1.5-flash-8b`
|
|
109
115
|
|
|
110
|
-
##
|
|
116
|
+
## Cancellation
|
|
111
117
|
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
- `npm run make:win:x64` - Build Windows x64 package
|
|
115
|
-
- `npm run make:win:arm64` - Build Windows ARM64 package
|
|
116
|
-
- `npm run make:win:all` - Build Windows packages for both architectures
|
|
117
|
-
- `npm run make:mac` - Build macOS package
|
|
118
|
-
- `npm run make:linux` - Build Linux package
|
|
119
|
-
- `npm run make:all` - Build packages for all platforms and architectures
|
|
118
|
+
```typescript
|
|
119
|
+
const controller = new AbortController();
|
|
120
120
|
|
|
121
|
-
|
|
121
|
+
const result = translate({
|
|
122
|
+
text: srtContent,
|
|
123
|
+
targetLanguage: 'French',
|
|
124
|
+
apiKey: 'key',
|
|
125
|
+
signal: controller.signal,
|
|
126
|
+
});
|
|
122
127
|
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
- Webpack
|
|
127
|
-
- Google Generative AI API
|
|
128
|
+
// Cancel after 30 seconds
|
|
129
|
+
setTimeout(() => controller.abort(), 30000);
|
|
130
|
+
```
|
|
128
131
|
|
|
129
132
|
## License
|
|
130
133
|
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
## Author
|
|
134
|
-
|
|
135
|
-
Alex
|
|
134
|
+
MIT
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gemini-client.d.ts","sourceRoot":"","sources":["../
|
|
1
|
+
{"version":3,"file":"gemini-client.d.ts","sourceRoot":"","sources":["../src/gemini-client.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAsB,UAAU,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC,CAwB5E"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gemini-client.js","sourceRoot":"","sources":["../
|
|
1
|
+
{"version":3,"file":"gemini-client.js","sourceRoot":"","sources":["../src/gemini-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAU5C,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,OAA0B;IACzD,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IAC3D,MAAM,EAAE,GAAG,IAAI,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;IAEvC,MAAM,MAAM,GAAG,6FAA6F,QAAQ;;;;;;;;;;WAU3G,OAAO;;EAEhB,IAAI,EAAE,CAAC;IAEP,MAAM,QAAQ,GAAG,MAAM,EAAE,CAAC,MAAM,CAAC,eAAe,CAAC;QAC/C,KAAK;QACL,QAAQ,EAAE,MAAM;KACjB,CAAC,CAAC;IAEH,OAAO,QAAQ,CAAC,IAAI,IAAI,EAAE,CAAC;AAC7B,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { translate } from './translator';
|
|
2
|
-
export { parseSrt, formatSrt } from './srt-parser';
|
|
3
|
-
export type { TranslateOptions, TranslateResult, SrtEntry } from './types';
|
|
1
|
+
export { translate } from './translator.js';
|
|
2
|
+
export { parseSrt, formatSrt } from './srt-parser.js';
|
|
3
|
+
export type { TranslateOptions, TranslateResult, SrtEntry } from './types.js';
|
|
4
4
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACtD,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export { translate } from './translator';
|
|
2
|
-
export { parseSrt, formatSrt } from './srt-parser';
|
|
1
|
+
export { translate } from './translator.js';
|
|
2
|
+
export { parseSrt, formatSrt } from './srt-parser.js';
|
|
3
3
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC"}
|
package/dist/srt-parser.d.ts
CHANGED
package/dist/srt-parser.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"srt-parser.d.ts","sourceRoot":"","sources":["../
|
|
1
|
+
{"version":3,"file":"srt-parser.d.ts","sourceRoot":"","sources":["../src/srt-parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,EAAE,CA0BjD;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,QAAQ,EAAE,GAAG,MAAM,CAIrD"}
|
package/dist/srt-parser.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"srt-parser.js","sourceRoot":"","sources":["../
|
|
1
|
+
{"version":3,"file":"srt-parser.js","sourceRoot":"","sources":["../src/srt-parser.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,QAAQ,CAAC,IAAY;IACnC,MAAM,OAAO,GAAe,EAAE,CAAC;IAC/B,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACpE,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAEzC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;QAC7B,IAAI,CAAC,OAAO;YAAE,SAAS;QAEvB,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAClC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;YAAE,SAAS;QAE/B,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAClC,MAAM,KAAK,GAAG,QAAQ,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;QACtC,IAAI,KAAK,CAAC,KAAK,CAAC;YAAE,SAAS;QAE3B,MAAM,aAAa,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACtC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC;YAAE,SAAS;QAE7C,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACjC,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAElC,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1D,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,OAAmB;IAC3C,OAAO,OAAO;SACX,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,KAAK,KAAK,KAAK,CAAC,SAAS,KAAK,KAAK,CAAC,IAAI,EAAE,CAAC;SACnE,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;AACzB,CAAC"}
|
package/dist/translator.d.ts
CHANGED
package/dist/translator.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"translator.d.ts","sourceRoot":"","sources":["../
|
|
1
|
+
{"version":3,"file":"translator.d.ts","sourceRoot":"","sources":["../src/translator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAY,MAAM,YAAY,CAAC;AA0BzE,wBAAsB,SAAS,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC,CA+CnF"}
|
package/dist/translator.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { parseSrt, formatSrt } from './srt-parser';
|
|
2
|
-
import { callGemini } from './gemini-client';
|
|
1
|
+
import { parseSrt, formatSrt } from './srt-parser.js';
|
|
2
|
+
import { callGemini } from './gemini-client.js';
|
|
3
3
|
const DEFAULT_MODEL = 'gemini-2.0-flash';
|
|
4
4
|
const DEFAULT_BATCH_SIZE = 50;
|
|
5
5
|
const wait = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
|
package/dist/translator.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"translator.js","sourceRoot":"","sources":["../
|
|
1
|
+
{"version":3,"file":"translator.js","sourceRoot":"","sources":["../src/translator.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED,MAAM,WAAW,eAAe;IAC9B,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;CAC1B"}
|
package/dist/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|
package/package.json
CHANGED
|
@@ -1,37 +1,24 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ai-sub-translator",
|
|
3
|
-
"
|
|
4
|
-
"version": "1.0.0",
|
|
3
|
+
"version": "1.0.2",
|
|
5
4
|
"description": "AI-powered subtitle translator using Google Gemini. Translates SRT subtitles to any language.",
|
|
6
|
-
"
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/index.js",
|
|
7
|
+
"types": "./dist/index.d.ts",
|
|
7
8
|
"exports": {
|
|
8
9
|
".": {
|
|
9
10
|
"import": "./dist/index.js",
|
|
10
11
|
"types": "./dist/index.d.ts"
|
|
11
12
|
}
|
|
12
13
|
},
|
|
13
|
-
"types": "./dist/index.d.ts",
|
|
14
|
-
"type": "module",
|
|
15
14
|
"files": [
|
|
16
15
|
"dist"
|
|
17
16
|
],
|
|
18
17
|
"scripts": {
|
|
19
|
-
"
|
|
20
|
-
"
|
|
21
|
-
"
|
|
22
|
-
"
|
|
23
|
-
"make:win:x64": "electron-forge make --platform win32 --arch x64",
|
|
24
|
-
"make:win:arm64": "electron-forge make --platform win32 --arch arm64",
|
|
25
|
-
"make:win": "npm run make:win:x64 && npm run make:win:arm64",
|
|
26
|
-
"make:linux": "npm run make:linux:x64 && npm run make:linux:arm64",
|
|
27
|
-
"make:linux:x64": "electron-forge make --platform linux --arch x64",
|
|
28
|
-
"make:linux:arm64": "electron-forge make --platform linux --arch arm64",
|
|
29
|
-
"make:all": "npm run make:mac && npm run make:win && npm run make:linux",
|
|
30
|
-
"publish": "electron-forge publish",
|
|
31
|
-
"lint": "eslint --ext .ts,.tsx .",
|
|
32
|
-
"build:lib": "tsc -p tsconfig.lib.json",
|
|
33
|
-
"test:lib": "node --experimental-vm-modules node_modules/.bin/jest --config jest.config.js",
|
|
34
|
-
"prepublishOnly": "npm run build:lib"
|
|
18
|
+
"build": "tsc",
|
|
19
|
+
"test": "vitest run",
|
|
20
|
+
"test:watch": "vitest",
|
|
21
|
+
"prepublishOnly": "npm run build"
|
|
35
22
|
},
|
|
36
23
|
"keywords": [
|
|
37
24
|
"subtitles",
|
|
@@ -46,46 +33,11 @@
|
|
|
46
33
|
"email": "aka@aka.aka"
|
|
47
34
|
},
|
|
48
35
|
"license": "MIT",
|
|
49
|
-
"devDependencies": {
|
|
50
|
-
"@aws-sdk/client-s3": "^3.787.0",
|
|
51
|
-
"@electron-forge/cli": "^7.8.0",
|
|
52
|
-
"@electron-forge/maker-deb": "^7.8.0",
|
|
53
|
-
"@electron-forge/maker-rpm": "^7.8.0",
|
|
54
|
-
"@electron-forge/maker-squirrel": "^7.8.0",
|
|
55
|
-
"@electron-forge/maker-zip": "^7.8.0",
|
|
56
|
-
"@electron-forge/plugin-auto-unpack-natives": "^7.8.0",
|
|
57
|
-
"@electron-forge/plugin-fuses": "^7.8.0",
|
|
58
|
-
"@electron-forge/plugin-webpack": "^7.8.0",
|
|
59
|
-
"@electron-forge/publisher-github": "^7.8.0",
|
|
60
|
-
"@electron/fuses": "^1.8.0",
|
|
61
|
-
"@types/jest": "^29.5.14",
|
|
62
|
-
"@types/react": "^19.1.2",
|
|
63
|
-
"@types/react-dom": "^19.1.2",
|
|
64
|
-
"@types/unzipper": "^0.10.11",
|
|
65
|
-
"@typescript-eslint/eslint-plugin": "^5.62.0",
|
|
66
|
-
"@typescript-eslint/parser": "^5.62.0",
|
|
67
|
-
"@vercel/webpack-asset-relocator-loader": "^1.7.3",
|
|
68
|
-
"css-loader": "^6.11.0",
|
|
69
|
-
"electron": "35.1.5",
|
|
70
|
-
"electron-squirrel-startup": "^1.0.1",
|
|
71
|
-
"eslint": "^8.57.1",
|
|
72
|
-
"eslint-plugin-import": "^2.31.0",
|
|
73
|
-
"fork-ts-checker-webpack-plugin": "^7.3.0",
|
|
74
|
-
"jayson": "^4.2.0",
|
|
75
|
-
"jest": "^29.7.0",
|
|
76
|
-
"node-loader": "^2.1.0",
|
|
77
|
-
"react": "^19.1.0",
|
|
78
|
-
"react-dom": "^19.1.0",
|
|
79
|
-
"style-loader": "^3.3.4",
|
|
80
|
-
"tar": "^7.4.3",
|
|
81
|
-
"ts-jest": "^29.4.6",
|
|
82
|
-
"ts-loader": "^9.5.2",
|
|
83
|
-
"ts-node": "^10.9.2",
|
|
84
|
-
"typescript": "^5.9.3",
|
|
85
|
-
"unzipper": "^0.12.3",
|
|
86
|
-
"xz-decompress": "^0.2.2"
|
|
87
|
-
},
|
|
88
36
|
"dependencies": {
|
|
89
37
|
"@google/genai": "^0.8.0"
|
|
38
|
+
},
|
|
39
|
+
"devDependencies": {
|
|
40
|
+
"typescript": "^5.7.2",
|
|
41
|
+
"vitest": "^2.1.8"
|
|
90
42
|
}
|
|
91
43
|
}
|