transcribly 1.0.0

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.
@@ -0,0 +1,7 @@
1
+ export interface Config {
2
+ apiKey?: string;
3
+ }
4
+ export declare function getConfigFilePath(): string;
5
+ export declare function readConfig(): Config;
6
+ export declare function writeConfig(config: Config): void;
7
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,MAAM;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAED,wBAAgB,UAAU,IAAI,MAAM,CASnC;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAShD"}
package/dist/config.js ADDED
@@ -0,0 +1,68 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.getConfigFilePath = getConfigFilePath;
37
+ exports.readConfig = readConfig;
38
+ exports.writeConfig = writeConfig;
39
+ const fs = __importStar(require("fs"));
40
+ const os = __importStar(require("os"));
41
+ const path = __importStar(require("path"));
42
+ function getConfigFilePath() {
43
+ return path.join(os.homedir(), ".transcribly", "config.json");
44
+ }
45
+ function readConfig() {
46
+ const filePath = getConfigFilePath();
47
+ try {
48
+ if (!fs.existsSync(filePath))
49
+ return {};
50
+ const content = fs.readFileSync(filePath, "utf-8");
51
+ return JSON.parse(content);
52
+ }
53
+ catch {
54
+ return {};
55
+ }
56
+ }
57
+ function writeConfig(config) {
58
+ const filePath = getConfigFilePath();
59
+ const dir = path.dirname(filePath);
60
+ if (!fs.existsSync(dir)) {
61
+ fs.mkdirSync(dir, { recursive: true, mode: 0o700 });
62
+ }
63
+ else {
64
+ fs.chmodSync(dir, 0o700);
65
+ }
66
+ fs.writeFileSync(filePath, JSON.stringify(config, null, 2), { mode: 0o600 });
67
+ }
68
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAQA,8CAEC;AAED,gCASC;AAED,kCASC;AAhCD,uCAAyB;AACzB,uCAAyB;AACzB,2CAA6B;AAM7B,SAAgB,iBAAiB;IAC/B,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,cAAc,EAAE,aAAa,CAAC,CAAC;AAChE,CAAC;AAED,SAAgB,UAAU;IACxB,MAAM,QAAQ,GAAG,iBAAiB,EAAE,CAAC;IACrC,IAAI,CAAC;QACH,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC;YAAE,OAAO,EAAE,CAAC;QACxC,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACnD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAW,CAAC;IACvC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,SAAgB,WAAW,CAAC,MAAc;IACxC,MAAM,QAAQ,GAAG,iBAAiB,EAAE,CAAC;IACrC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACnC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACtD,CAAC;SAAM,CAAC;QACN,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC3B,CAAC;IACD,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;AAC/E,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=config.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.test.d.ts","sourceRoot":"","sources":["../src/config.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,86 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ const os = __importStar(require("os"));
37
+ const path = __importStar(require("path"));
38
+ jest.mock("fs");
39
+ const fs = require("fs");
40
+ const config_1 = require("./config");
41
+ describe("getConfigFilePath", () => {
42
+ it("returns path inside ~/.transcribly/", () => {
43
+ const filePath = (0, config_1.getConfigFilePath)();
44
+ expect(filePath).toBe(path.join(os.homedir(), ".transcribly", "config.json"));
45
+ });
46
+ });
47
+ describe("readConfig", () => {
48
+ beforeEach(() => {
49
+ jest.resetAllMocks();
50
+ });
51
+ it("returns empty object when config file does not exist", () => {
52
+ fs.existsSync.mockReturnValue(false);
53
+ expect((0, config_1.readConfig)()).toEqual({});
54
+ });
55
+ it("returns parsed config when file exists", () => {
56
+ fs.existsSync.mockReturnValue(true);
57
+ fs.readFileSync.mockReturnValue(JSON.stringify({ apiKey: "sk-test123" }));
58
+ expect((0, config_1.readConfig)()).toEqual({ apiKey: "sk-test123" });
59
+ });
60
+ it("returns empty object when config file contains invalid JSON", () => {
61
+ fs.existsSync.mockReturnValue(true);
62
+ fs.readFileSync.mockReturnValue("not-json");
63
+ expect((0, config_1.readConfig)()).toEqual({});
64
+ });
65
+ });
66
+ describe("writeConfig", () => {
67
+ beforeEach(() => {
68
+ jest.resetAllMocks();
69
+ });
70
+ it("creates config directory with mode 0o700 if it does not exist", () => {
71
+ fs.existsSync.mockReturnValue(false);
72
+ (0, config_1.writeConfig)({ apiKey: "sk-abc" });
73
+ expect(fs.mkdirSync).toHaveBeenCalledWith(path.join(os.homedir(), ".transcribly"), { recursive: true, mode: 0o700 });
74
+ });
75
+ it("chmods existing config directory to 0o700", () => {
76
+ fs.existsSync.mockReturnValue(true);
77
+ (0, config_1.writeConfig)({ apiKey: "sk-abc" });
78
+ expect(fs.chmodSync).toHaveBeenCalledWith(path.join(os.homedir(), ".transcribly"), 0o700);
79
+ });
80
+ it("writes JSON to config file with mode 0o600", () => {
81
+ fs.existsSync.mockReturnValue(true);
82
+ (0, config_1.writeConfig)({ apiKey: "sk-xyz" });
83
+ expect(fs.writeFileSync).toHaveBeenCalledWith(path.join(os.homedir(), ".transcribly", "config.json"), JSON.stringify({ apiKey: "sk-xyz" }, null, 2), { mode: 0o600 });
84
+ });
85
+ });
86
+ //# sourceMappingURL=config.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.test.js","sourceRoot":"","sources":["../src/config.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ export declare function checkFfmpeg(): Promise<boolean>;
2
+ export interface PythonCheckResult {
3
+ ok: boolean;
4
+ version?: string;
5
+ }
6
+ export declare function parsePythonVersion(output: string): {
7
+ major: number;
8
+ minor: number;
9
+ } | null;
10
+ export declare function checkPython(): Promise<PythonCheckResult>;
11
+ export declare function getFfmpegInstallMessage(): string;
12
+ export declare function getPythonInstallMessage(): string;
13
+ export declare function runDoctor(): Promise<void>;
14
+ //# sourceMappingURL=dependencies.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dependencies.d.ts","sourceRoot":"","sources":["../src/dependencies.ts"],"names":[],"mappings":"AAQA,wBAAgB,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC,CAM9C;AAED,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,OAAO,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAI1F;AAOD,wBAAgB,WAAW,IAAI,OAAO,CAAC,iBAAiB,CAAC,CAwBxD;AAED,wBAAgB,uBAAuB,IAAI,MAAM,CAYhD;AAED,wBAAgB,uBAAuB,IAAI,MAAM,CAYhD;AAED,wBAAsB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAoD/C"}
@@ -0,0 +1,178 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.checkFfmpeg = checkFfmpeg;
40
+ exports.parsePythonVersion = parsePythonVersion;
41
+ exports.checkPython = checkPython;
42
+ exports.getFfmpegInstallMessage = getFfmpegInstallMessage;
43
+ exports.getPythonInstallMessage = getPythonInstallMessage;
44
+ exports.runDoctor = runDoctor;
45
+ const child_process_1 = require("child_process");
46
+ const path = __importStar(require("path"));
47
+ const chalk_1 = __importDefault(require("chalk"));
48
+ const dotenv_1 = require("dotenv");
49
+ const MIN_PYTHON_MAJOR = 3;
50
+ const MIN_PYTHON_MINOR = 8;
51
+ function checkFfmpeg() {
52
+ return new Promise((resolve) => {
53
+ (0, child_process_1.exec)("ffmpeg -version", (error) => {
54
+ resolve(!error);
55
+ });
56
+ });
57
+ }
58
+ function parsePythonVersion(output) {
59
+ const match = output.match(/Python\s+(\d+)\.(\d+)/);
60
+ if (!match)
61
+ return null;
62
+ return { major: parseInt(match[1], 10), minor: parseInt(match[2], 10) };
63
+ }
64
+ function meetsMinVersion(ver) {
65
+ return ver.major > MIN_PYTHON_MAJOR ||
66
+ (ver.major === MIN_PYTHON_MAJOR && ver.minor >= MIN_PYTHON_MINOR);
67
+ }
68
+ function checkPython() {
69
+ return new Promise((resolve) => {
70
+ (0, child_process_1.exec)("python3 --version", (error, stdout, stderr) => {
71
+ const output = (stdout || "") + (stderr || "");
72
+ if (!error) {
73
+ const ver = parsePythonVersion(output);
74
+ if (ver && meetsMinVersion(ver)) {
75
+ return resolve({ ok: true, version: output.trim().replace(/^Python\s*/, "") });
76
+ }
77
+ return resolve({ ok: false, version: output.trim().replace(/^Python\s*/, "") });
78
+ }
79
+ (0, child_process_1.exec)("python --version", (error2, stdout2, stderr2) => {
80
+ const output2 = (stdout2 || "") + (stderr2 || "");
81
+ if (!error2) {
82
+ const ver = parsePythonVersion(output2);
83
+ if (ver && meetsMinVersion(ver)) {
84
+ return resolve({ ok: true, version: output2.trim().replace(/^Python\s*/, "") });
85
+ }
86
+ return resolve({ ok: false, version: output2.trim().replace(/^Python\s*/, "") });
87
+ }
88
+ resolve({ ok: false });
89
+ });
90
+ });
91
+ });
92
+ }
93
+ function getFfmpegInstallMessage() {
94
+ const platform = process.platform;
95
+ switch (platform) {
96
+ case "darwin":
97
+ return "Install FFmpeg: brew install ffmpeg";
98
+ case "linux":
99
+ return "Install FFmpeg: sudo apt install ffmpeg (Debian/Ubuntu) or sudo dnf install ffmpeg (Fedora)";
100
+ case "win32":
101
+ return "Install FFmpeg: choco install ffmpeg (Chocolatey) or winget install ffmpeg (winget)";
102
+ default:
103
+ return "Install FFmpeg: https://ffmpeg.org/download.html";
104
+ }
105
+ }
106
+ function getPythonInstallMessage() {
107
+ const platform = process.platform;
108
+ switch (platform) {
109
+ case "darwin":
110
+ return "Install Python: brew install python3";
111
+ case "linux":
112
+ return "Install Python: sudo apt install python3 (Debian/Ubuntu) or sudo dnf install python3 (Fedora)";
113
+ case "win32":
114
+ return "Install Python: https://www.python.org/downloads/ or winget install Python.Python.3";
115
+ default:
116
+ return "Install Python 3.8+: https://www.python.org/downloads/";
117
+ }
118
+ }
119
+ async function runDoctor() {
120
+ console.log(chalk_1.default.bold("\nTranscribly — Dependency Check\n"));
121
+ let allPassed = true;
122
+ // Check FFmpeg
123
+ const hasFfmpeg = await checkFfmpeg();
124
+ if (hasFfmpeg) {
125
+ console.log(chalk_1.default.green(" ✓ FFmpeg found"));
126
+ }
127
+ else {
128
+ console.log(chalk_1.default.red(" ✗ FFmpeg not found"));
129
+ console.log(chalk_1.default.yellow(` ${getFfmpegInstallMessage()}`));
130
+ allPassed = false;
131
+ }
132
+ // Check Python with version validation
133
+ const pythonResult = await checkPython();
134
+ if (pythonResult.ok) {
135
+ console.log(chalk_1.default.green(` ✓ Python ${pythonResult.version ?? ""} (${MIN_PYTHON_MAJOR}.${MIN_PYTHON_MINOR}+ required)`));
136
+ }
137
+ else if (pythonResult.version) {
138
+ console.log(chalk_1.default.red(` ✗ Python ${pythonResult.version} found, but ${MIN_PYTHON_MAJOR}.${MIN_PYTHON_MINOR}+ is required`));
139
+ console.log(chalk_1.default.yellow(` ${getPythonInstallMessage()}`));
140
+ allPassed = false;
141
+ }
142
+ else {
143
+ console.log(chalk_1.default.red(" ✗ Python not found"));
144
+ console.log(chalk_1.default.yellow(` ${getPythonInstallMessage()}`));
145
+ allPassed = false;
146
+ }
147
+ // Load .env files to match runtime key resolution order
148
+ (0, dotenv_1.config)({ path: path.resolve(process.cwd(), ".env"), override: false });
149
+ (0, dotenv_1.config)({ path: path.resolve(__dirname, "..", ".env"), override: false });
150
+ // Check OpenAI API key availability
151
+ const hasApiKey = !!(process.env.OPENAI_API_KEY ||
152
+ tryReadConfigApiKey());
153
+ if (hasApiKey) {
154
+ console.log(chalk_1.default.green(" ✓ OpenAI API key configured"));
155
+ }
156
+ else {
157
+ console.log(chalk_1.default.red(" ✗ OpenAI API key not configured"));
158
+ console.log(chalk_1.default.yellow(" Run: transcribly --setup"));
159
+ allPassed = false;
160
+ }
161
+ console.log();
162
+ if (allPassed) {
163
+ console.log(chalk_1.default.green("All dependencies satisfied. You're good to go!"));
164
+ }
165
+ else {
166
+ console.log(chalk_1.default.red("Some dependencies are missing. See above for install instructions."));
167
+ }
168
+ }
169
+ function tryReadConfigApiKey() {
170
+ try {
171
+ const { readConfig } = require("./config");
172
+ return readConfig().apiKey;
173
+ }
174
+ catch {
175
+ return undefined;
176
+ }
177
+ }
178
+ //# sourceMappingURL=dependencies.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dependencies.js","sourceRoot":"","sources":["../src/dependencies.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAQA,kCAMC;AAOD,gDAIC;AAOD,kCAwBC;AAED,0DAYC;AAED,0DAYC;AAED,8BAoDC;AA1ID,iDAAqC;AACrC,2CAA6B;AAC7B,kDAA0B;AAC1B,mCAAgC;AAEhC,MAAM,gBAAgB,GAAG,CAAC,CAAC;AAC3B,MAAM,gBAAgB,GAAG,CAAC,CAAC;AAE3B,SAAgB,WAAW;IACzB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,IAAA,oBAAI,EAAC,iBAAiB,EAAE,CAAC,KAAK,EAAE,EAAE;YAChC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAOD,SAAgB,kBAAkB,CAAC,MAAc;IAC/C,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;IACpD,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,OAAO,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;AAC1E,CAAC;AAED,SAAS,eAAe,CAAC,GAAqC;IAC5D,OAAO,GAAG,CAAC,KAAK,GAAG,gBAAgB;QACjC,CAAC,GAAG,CAAC,KAAK,KAAK,gBAAgB,IAAI,GAAG,CAAC,KAAK,IAAI,gBAAgB,CAAC,CAAC;AACtE,CAAC;AAED,SAAgB,WAAW;IACzB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,IAAA,oBAAI,EAAC,mBAAmB,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;YAClD,MAAM,MAAM,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;YAC/C,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,MAAM,GAAG,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;gBACvC,IAAI,GAAG,IAAI,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC;oBAChC,OAAO,OAAO,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;gBACjF,CAAC;gBACD,OAAO,OAAO,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;YAClF,CAAC;YACD,IAAA,oBAAI,EAAC,kBAAkB,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE;gBACpD,MAAM,OAAO,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;gBAClD,IAAI,CAAC,MAAM,EAAE,CAAC;oBACZ,MAAM,GAAG,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;oBACxC,IAAI,GAAG,IAAI,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC;wBAChC,OAAO,OAAO,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;oBAClF,CAAC;oBACD,OAAO,OAAO,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;gBACnF,CAAC;gBACD,OAAO,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;YACzB,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAgB,uBAAuB;IACrC,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;IAClC,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,QAAQ;YACX,OAAO,qCAAqC,CAAC;QAC/C,KAAK,OAAO;YACV,OAAO,6FAA6F,CAAC;QACvG,KAAK,OAAO;YACV,OAAO,qFAAqF,CAAC;QAC/F;YACE,OAAO,kDAAkD,CAAC;IAC9D,CAAC;AACH,CAAC;AAED,SAAgB,uBAAuB;IACrC,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;IAClC,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,QAAQ;YACX,OAAO,sCAAsC,CAAC;QAChD,KAAK,OAAO;YACV,OAAO,+FAA+F,CAAC;QACzG,KAAK,OAAO;YACV,OAAO,qFAAqF,CAAC;QAC/F;YACE,OAAO,wDAAwD,CAAC;IACpE,CAAC;AACH,CAAC;AAEM,KAAK,UAAU,SAAS;IAC7B,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC,CAAC;IAE9D,IAAI,SAAS,GAAG,IAAI,CAAC;IAErB,eAAe;IACf,MAAM,SAAS,GAAG,MAAM,WAAW,EAAE,CAAC;IACtC,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,CAAC;IAC/C,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC,CAAC;QAC/C,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,OAAO,uBAAuB,EAAE,EAAE,CAAC,CAAC,CAAC;QAC9D,SAAS,GAAG,KAAK,CAAC;IACpB,CAAC;IAED,uCAAuC;IACvC,MAAM,YAAY,GAAG,MAAM,WAAW,EAAE,CAAC;IACzC,IAAI,YAAY,CAAC,EAAE,EAAE,CAAC;QACpB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,cAAc,YAAY,CAAC,OAAO,IAAI,EAAE,KAAK,gBAAgB,IAAI,gBAAgB,aAAa,CAAC,CAAC,CAAC;IAC3H,CAAC;SAAM,IAAI,YAAY,CAAC,OAAO,EAAE,CAAC;QAChC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,cAAc,YAAY,CAAC,OAAO,eAAe,gBAAgB,IAAI,gBAAgB,eAAe,CAAC,CAAC,CAAC;QAC7H,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,OAAO,uBAAuB,EAAE,EAAE,CAAC,CAAC,CAAC;QAC9D,SAAS,GAAG,KAAK,CAAC;IACpB,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC,CAAC;QAC/C,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,OAAO,uBAAuB,EAAE,EAAE,CAAC,CAAC,CAAC;QAC9D,SAAS,GAAG,KAAK,CAAC;IACpB,CAAC;IAED,wDAAwD;IACxD,IAAA,eAAM,EAAC,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;IACvE,IAAA,eAAM,EAAC,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,MAAM,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;IAEzE,oCAAoC;IACpC,MAAM,SAAS,GAAG,CAAC,CAAC,CAClB,OAAO,CAAC,GAAG,CAAC,cAAc;QAC1B,mBAAmB,EAAE,CACtB,CAAC;IACF,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC,CAAC;IAC5D,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC,CAAC;QAC5D,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,8BAA8B,CAAC,CAAC,CAAC;QAC1D,SAAS,GAAG,KAAK,CAAC;IACpB,CAAC;IAED,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,gDAAgD,CAAC,CAAC,CAAC;IAC7E,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,oEAAoE,CAAC,CAAC,CAAC;IAC/F,CAAC;AACH,CAAC;AAED,SAAS,mBAAmB;IAC1B,IAAI,CAAC;QACH,MAAM,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;QAC3C,OAAO,UAAU,EAAE,CAAC,MAAM,CAAC;IAC7B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=dependencies.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dependencies.test.d.ts","sourceRoot":"","sources":["../src/dependencies.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,130 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const child_process_1 = require("child_process");
4
+ jest.mock("child_process", () => ({
5
+ exec: jest.fn(),
6
+ }));
7
+ const mockedExec = child_process_1.exec;
8
+ const dependencies_1 = require("./dependencies");
9
+ describe("checkFfmpeg", () => {
10
+ beforeEach(() => {
11
+ jest.resetAllMocks();
12
+ });
13
+ it("returns true when ffmpeg is available", async () => {
14
+ mockedExec.mockImplementation((_cmd, cb) => cb(null));
15
+ expect(await (0, dependencies_1.checkFfmpeg)()).toBe(true);
16
+ });
17
+ it("returns false when ffmpeg is not available", async () => {
18
+ mockedExec.mockImplementation((_cmd, cb) => cb(new Error("not found")));
19
+ expect(await (0, dependencies_1.checkFfmpeg)()).toBe(false);
20
+ });
21
+ });
22
+ describe("parsePythonVersion", () => {
23
+ it("parses standard version output", () => {
24
+ expect((0, dependencies_1.parsePythonVersion)("Python 3.11.4")).toEqual({ major: 3, minor: 11 });
25
+ });
26
+ it("parses version with extra text", () => {
27
+ expect((0, dependencies_1.parsePythonVersion)("Python 3.8.0\n")).toEqual({ major: 3, minor: 8 });
28
+ });
29
+ it("parses Python 2.x", () => {
30
+ expect((0, dependencies_1.parsePythonVersion)("Python 2.7.18")).toEqual({ major: 2, minor: 7 });
31
+ });
32
+ it("returns null for unparseable output", () => {
33
+ expect((0, dependencies_1.parsePythonVersion)("not python")).toBeNull();
34
+ });
35
+ });
36
+ describe("checkPython", () => {
37
+ beforeEach(() => {
38
+ jest.resetAllMocks();
39
+ });
40
+ it("returns ok when python3 version >= 3.8", async () => {
41
+ mockedExec.mockImplementation((cmd, cb) => {
42
+ if (cmd === "python3 --version")
43
+ return cb(null, "Python 3.11.4\n", "");
44
+ cb(new Error("not found"), "", "");
45
+ });
46
+ const result = await (0, dependencies_1.checkPython)();
47
+ expect(result.ok).toBe(true);
48
+ expect(result.version).toBe("3.11.4");
49
+ });
50
+ it("returns ok when only python (not python3) has version >= 3.8", async () => {
51
+ mockedExec.mockImplementation((cmd, cb) => {
52
+ if (cmd === "python --version")
53
+ return cb(null, "Python 3.9.1\n", "");
54
+ cb(new Error("not found"), "", "");
55
+ });
56
+ const result = await (0, dependencies_1.checkPython)();
57
+ expect(result.ok).toBe(true);
58
+ expect(result.version).toBe("3.9.1");
59
+ });
60
+ it("returns not ok when python version < 3.8", async () => {
61
+ mockedExec.mockImplementation((cmd, cb) => {
62
+ if (cmd === "python3 --version")
63
+ return cb(null, "Python 3.6.9\n", "");
64
+ cb(new Error("not found"), "", "");
65
+ });
66
+ const result = await (0, dependencies_1.checkPython)();
67
+ expect(result.ok).toBe(false);
68
+ expect(result.version).toBe("3.6.9");
69
+ });
70
+ it("returns not ok when python is 2.x", async () => {
71
+ mockedExec.mockImplementation((cmd, cb) => {
72
+ if (cmd === "python --version")
73
+ return cb(null, "", "Python 2.7.18\n");
74
+ cb(new Error("not found"), "", "");
75
+ });
76
+ const result = await (0, dependencies_1.checkPython)();
77
+ expect(result.ok).toBe(false);
78
+ expect(result.version).toBe("2.7.18");
79
+ });
80
+ it("returns not ok when neither python3 nor python is available", async () => {
81
+ mockedExec.mockImplementation((_cmd, cb) => cb(new Error("not found"), "", ""));
82
+ const result = await (0, dependencies_1.checkPython)();
83
+ expect(result.ok).toBe(false);
84
+ expect(result.version).toBeUndefined();
85
+ });
86
+ });
87
+ describe("getFfmpegInstallMessage", () => {
88
+ const originalPlatform = process.platform;
89
+ afterEach(() => {
90
+ Object.defineProperty(process, "platform", { value: originalPlatform });
91
+ });
92
+ it("returns brew command for macOS", () => {
93
+ Object.defineProperty(process, "platform", { value: "darwin" });
94
+ expect((0, dependencies_1.getFfmpegInstallMessage)()).toContain("brew install ffmpeg");
95
+ });
96
+ it("returns apt/dnf command for Linux", () => {
97
+ Object.defineProperty(process, "platform", { value: "linux" });
98
+ const msg = (0, dependencies_1.getFfmpegInstallMessage)();
99
+ expect(msg).toContain("apt install ffmpeg");
100
+ expect(msg).toContain("dnf install ffmpeg");
101
+ });
102
+ it("returns choco/winget command for Windows", () => {
103
+ Object.defineProperty(process, "platform", { value: "win32" });
104
+ const msg = (0, dependencies_1.getFfmpegInstallMessage)();
105
+ expect(msg).toContain("choco install ffmpeg");
106
+ expect(msg).toContain("winget install ffmpeg");
107
+ });
108
+ });
109
+ describe("getPythonInstallMessage", () => {
110
+ const originalPlatform = process.platform;
111
+ afterEach(() => {
112
+ Object.defineProperty(process, "platform", { value: originalPlatform });
113
+ });
114
+ it("returns brew command for macOS", () => {
115
+ Object.defineProperty(process, "platform", { value: "darwin" });
116
+ expect((0, dependencies_1.getPythonInstallMessage)()).toContain("brew install python3");
117
+ });
118
+ it("returns apt/dnf command for Linux", () => {
119
+ Object.defineProperty(process, "platform", { value: "linux" });
120
+ const msg = (0, dependencies_1.getPythonInstallMessage)();
121
+ expect(msg).toContain("apt install python3");
122
+ expect(msg).toContain("dnf install python3");
123
+ });
124
+ it("returns download link for Windows", () => {
125
+ Object.defineProperty(process, "platform", { value: "win32" });
126
+ const msg = (0, dependencies_1.getPythonInstallMessage)();
127
+ expect(msg).toContain("python.org/downloads");
128
+ });
129
+ });
130
+ //# sourceMappingURL=dependencies.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dependencies.test.js","sourceRoot":"","sources":["../src/dependencies.test.ts"],"names":[],"mappings":";;AAAA,iDAAqC;AAErC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,GAAG,EAAE,CAAC,CAAC;IAChC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE;CAChB,CAAC,CAAC,CAAC;AAEJ,MAAM,UAAU,GAAG,oBAA4B,CAAC;AAEhD,iDAMwB;AAExB,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;IAC3B,UAAU,CAAC,GAAG,EAAE;QACd,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,KAAK,IAAI,EAAE;QACrD,UAAU,CAAC,kBAAkB,CAAC,CAAC,IAAY,EAAE,EAAY,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;QACxE,MAAM,CAAC,MAAM,IAAA,0BAAW,GAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;QAC1D,UAAU,CAAC,kBAAkB,CAAC,CAAC,IAAY,EAAE,EAAY,EAAE,EAAE,CAC3D,EAAE,CAAC,IAAI,KAAK,CAAC,WAAW,CAAC,CAAC,CAC3B,CAAC;QACF,MAAM,CAAC,MAAM,IAAA,0BAAW,GAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IAClC,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACxC,MAAM,CAAC,IAAA,iCAAkB,EAAC,eAAe,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;IAC/E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACxC,MAAM,CAAC,IAAA,iCAAkB,EAAC,gBAAgB,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;IAC/E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mBAAmB,EAAE,GAAG,EAAE;QAC3B,MAAM,CAAC,IAAA,iCAAkB,EAAC,eAAe,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;IAC9E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAC7C,MAAM,CAAC,IAAA,iCAAkB,EAAC,YAAY,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;IACtD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;IAC3B,UAAU,CAAC,GAAG,EAAE;QACd,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;QACtD,UAAU,CAAC,kBAAkB,CAAC,CAAC,GAAW,EAAE,EAAY,EAAE,EAAE;YAC1D,IAAI,GAAG,KAAK,mBAAmB;gBAAE,OAAO,EAAE,CAAC,IAAI,EAAE,iBAAiB,EAAE,EAAE,CAAC,CAAC;YACxE,EAAE,CAAC,IAAI,KAAK,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,IAAA,0BAAW,GAAE,CAAC;QACnC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7B,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8DAA8D,EAAE,KAAK,IAAI,EAAE;QAC5E,UAAU,CAAC,kBAAkB,CAAC,CAAC,GAAW,EAAE,EAAY,EAAE,EAAE;YAC1D,IAAI,GAAG,KAAK,kBAAkB;gBAAE,OAAO,EAAE,CAAC,IAAI,EAAE,gBAAgB,EAAE,EAAE,CAAC,CAAC;YACtE,EAAE,CAAC,IAAI,KAAK,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,IAAA,0BAAW,GAAE,CAAC;QACnC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7B,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;QACxD,UAAU,CAAC,kBAAkB,CAAC,CAAC,GAAW,EAAE,EAAY,EAAE,EAAE;YAC1D,IAAI,GAAG,KAAK,mBAAmB;gBAAE,OAAO,EAAE,CAAC,IAAI,EAAE,gBAAgB,EAAE,EAAE,CAAC,CAAC;YACvE,EAAE,CAAC,IAAI,KAAK,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,IAAA,0BAAW,GAAE,CAAC;QACnC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC9B,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mCAAmC,EAAE,KAAK,IAAI,EAAE;QACjD,UAAU,CAAC,kBAAkB,CAAC,CAAC,GAAW,EAAE,EAAY,EAAE,EAAE;YAC1D,IAAI,GAAG,KAAK,kBAAkB;gBAAE,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,iBAAiB,CAAC,CAAC;YACvE,EAAE,CAAC,IAAI,KAAK,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,IAAA,0BAAW,GAAE,CAAC;QACnC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC9B,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6DAA6D,EAAE,KAAK,IAAI,EAAE;QAC3E,UAAU,CAAC,kBAAkB,CAAC,CAAC,IAAY,EAAE,EAAY,EAAE,EAAE,CAC3D,EAAE,CAAC,IAAI,KAAK,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CACnC,CAAC;QACF,MAAM,MAAM,GAAG,MAAM,IAAA,0BAAW,GAAE,CAAC;QACnC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC9B,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,aAAa,EAAE,CAAC;IACzC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;IACvC,MAAM,gBAAgB,GAAG,OAAO,CAAC,QAAQ,CAAC;IAE1C,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,UAAU,EAAE,EAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC,CAAC;IAC1E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACxC,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,UAAU,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QAChE,MAAM,CAAC,IAAA,sCAAuB,GAAE,CAAC,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAC;IACrE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAC3C,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,UAAU,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;QAC/D,MAAM,GAAG,GAAG,IAAA,sCAAuB,GAAE,CAAC;QACtC,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC;QAC5C,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAClD,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,UAAU,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;QAC/D,MAAM,GAAG,GAAG,IAAA,sCAAuB,GAAE,CAAC;QACtC,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAC;QAC9C,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,uBAAuB,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;IACvC,MAAM,gBAAgB,GAAG,OAAO,CAAC,QAAQ,CAAC;IAE1C,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,UAAU,EAAE,EAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC,CAAC;IAC1E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACxC,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,UAAU,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QAChE,MAAM,CAAC,IAAA,sCAAuB,GAAE,CAAC,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAC;IACtE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAC3C,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,UAAU,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;QAC/D,MAAM,GAAG,GAAG,IAAA,sCAAuB,GAAE,CAAC;QACtC,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAC;QAC7C,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAC3C,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,UAAU,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;QAC/D,MAAM,GAAG,GAAG,IAAA,sCAAuB,GAAE,CAAC;QACtC,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}