@mohitkumawat/warmup-cli 1.1.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/LICENSE +21 -0
- package/README.md +107 -0
- package/dist/commands/execute.d.ts +6 -0
- package/dist/commands/execute.d.ts.map +1 -0
- package/dist/commands/execute.js +52 -0
- package/dist/commands/execute.js.map +1 -0
- package/dist/commands/pause.d.ts +2 -0
- package/dist/commands/pause.d.ts.map +1 -0
- package/dist/commands/pause.js +18 -0
- package/dist/commands/pause.js.map +1 -0
- package/dist/commands/resume.d.ts +2 -0
- package/dist/commands/resume.d.ts.map +1 -0
- package/dist/commands/resume.js +18 -0
- package/dist/commands/resume.js.map +1 -0
- package/dist/commands/setup.d.ts +2 -0
- package/dist/commands/setup.d.ts.map +1 -0
- package/dist/commands/setup.js +173 -0
- package/dist/commands/setup.js.map +1 -0
- package/dist/commands/status.d.ts +2 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +14 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/test.d.ts +2 -0
- package/dist/commands/test.d.ts.map +1 -0
- package/dist/commands/test.js +27 -0
- package/dist/commands/test.js.map +1 -0
- package/dist/commands/uninstall.d.ts +2 -0
- package/dist/commands/uninstall.d.ts.map +1 -0
- package/dist/commands/uninstall.js +38 -0
- package/dist/commands/uninstall.js.map +1 -0
- package/dist/commands/update.d.ts +2 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +112 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/config.d.ts +51 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +320 -0
- package/dist/config.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +113 -0
- package/dist/index.js.map +1 -0
- package/dist/runtime.d.ts +9 -0
- package/dist/runtime.d.ts.map +1 -0
- package/dist/runtime.js +91 -0
- package/dist/runtime.js.map +1 -0
- package/dist/scheduler/index.d.ts +15 -0
- package/dist/scheduler/index.d.ts.map +1 -0
- package/dist/scheduler/index.js +103 -0
- package/dist/scheduler/index.js.map +1 -0
- package/dist/scheduler/linux.d.ts +12 -0
- package/dist/scheduler/linux.d.ts.map +1 -0
- package/dist/scheduler/linux.js +301 -0
- package/dist/scheduler/linux.js.map +1 -0
- package/dist/scheduler/macos.d.ts +16 -0
- package/dist/scheduler/macos.d.ts.map +1 -0
- package/dist/scheduler/macos.js +170 -0
- package/dist/scheduler/macos.js.map +1 -0
- package/dist/scheduler/windows.d.ts +14 -0
- package/dist/scheduler/windows.d.ts.map +1 -0
- package/dist/scheduler/windows.js +139 -0
- package/dist/scheduler/windows.js.map +1 -0
- package/dist/ui.d.ts +19 -0
- package/dist/ui.d.ts.map +1 -0
- package/dist/ui.js +329 -0
- package/dist/ui.js.map +1 -0
- package/dist/warmup.d.ts +32 -0
- package/dist/warmup.d.ts.map +1 -0
- package/dist/warmup.js +154 -0
- package/dist/warmup.js.map +1 -0
- package/package.json +60 -0
|
@@ -0,0 +1,170 @@
|
|
|
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.buildMacWarmupScript = buildMacWarmupScript;
|
|
37
|
+
exports.installMacSchedule = installMacSchedule;
|
|
38
|
+
exports.uninstallMacSchedule = uninstallMacSchedule;
|
|
39
|
+
exports.isMacScheduleInstalled = isMacScheduleInstalled;
|
|
40
|
+
exports.pauseMacSchedule = pauseMacSchedule;
|
|
41
|
+
exports.resumeMacSchedule = resumeMacSchedule;
|
|
42
|
+
const fs = __importStar(require("fs"));
|
|
43
|
+
const path = __importStar(require("path"));
|
|
44
|
+
const os = __importStar(require("os"));
|
|
45
|
+
const child_process_1 = require("child_process");
|
|
46
|
+
const PLIST_NAME = 'com.warmup.prewarm';
|
|
47
|
+
const PLIST_DIR = path.join(os.homedir(), 'Library', 'LaunchAgents');
|
|
48
|
+
const PLIST_PATH = path.join(PLIST_DIR, `${PLIST_NAME}.plist`);
|
|
49
|
+
/**
|
|
50
|
+
* Get the path to the warmup script.
|
|
51
|
+
* We generate a small shell script that warmup's launchd plist will execute.
|
|
52
|
+
*/
|
|
53
|
+
function getWarmupScriptPath() {
|
|
54
|
+
return path.join(os.homedir(), '.warmup', 'warmup.sh');
|
|
55
|
+
}
|
|
56
|
+
function shellQuote(value) {
|
|
57
|
+
return `'${value.replace(/'/g, `'\\''`)}'`;
|
|
58
|
+
}
|
|
59
|
+
function buildMacWarmupScript(runtime) {
|
|
60
|
+
return `#!/bin/bash
|
|
61
|
+
set -euo pipefail
|
|
62
|
+
|
|
63
|
+
mkdir -p "$HOME/.warmup/logs"
|
|
64
|
+
|
|
65
|
+
${shellQuote(runtime.nodePath)} ${shellQuote(runtime.cliEntry)} _execute-warmup >> "$HOME/.warmup/logs/launchd.log" 2>&1
|
|
66
|
+
`;
|
|
67
|
+
}
|
|
68
|
+
/** Create the warmup shell script that launchd will execute */
|
|
69
|
+
function createWarmupScript(runtime) {
|
|
70
|
+
const scriptPath = getWarmupScriptPath();
|
|
71
|
+
const script = buildMacWarmupScript(runtime);
|
|
72
|
+
fs.writeFileSync(scriptPath, script, { mode: 0o755 });
|
|
73
|
+
return scriptPath;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Install a launchd plist for macOS.
|
|
77
|
+
* Key feature: RunAtLoad=true ensures boot-recovery.
|
|
78
|
+
*/
|
|
79
|
+
function installMacSchedule(options) {
|
|
80
|
+
// Ensure LaunchAgents directory exists
|
|
81
|
+
if (!fs.existsSync(PLIST_DIR)) {
|
|
82
|
+
fs.mkdirSync(PLIST_DIR, { recursive: true });
|
|
83
|
+
}
|
|
84
|
+
const scriptPath = createWarmupScript(options.runtime);
|
|
85
|
+
const { hour, minute } = options;
|
|
86
|
+
const plist = `<?xml version="1.0" encoding="UTF-8"?>
|
|
87
|
+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
88
|
+
<plist version="1.0">
|
|
89
|
+
<dict>
|
|
90
|
+
<key>Label</key>
|
|
91
|
+
<string>${PLIST_NAME}</string>
|
|
92
|
+
|
|
93
|
+
<key>ProgramArguments</key>
|
|
94
|
+
<array>
|
|
95
|
+
<string>/bin/bash</string>
|
|
96
|
+
<string>${scriptPath}</string>
|
|
97
|
+
</array>
|
|
98
|
+
|
|
99
|
+
<!-- Schedule: fire at specified time daily -->
|
|
100
|
+
<key>StartCalendarInterval</key>
|
|
101
|
+
<dict>
|
|
102
|
+
<key>Hour</key>
|
|
103
|
+
<integer>${hour}</integer>
|
|
104
|
+
<key>Minute</key>
|
|
105
|
+
<integer>${minute}</integer>
|
|
106
|
+
</dict>
|
|
107
|
+
|
|
108
|
+
<!-- BOOT RECOVERY: Run immediately on load if scheduled time was missed -->
|
|
109
|
+
<key>RunAtLoad</key>
|
|
110
|
+
<true/>
|
|
111
|
+
|
|
112
|
+
<!-- Don't run if already running -->
|
|
113
|
+
<key>KeepAlive</key>
|
|
114
|
+
<false/>
|
|
115
|
+
|
|
116
|
+
<!-- Working directory -->
|
|
117
|
+
<key>WorkingDirectory</key>
|
|
118
|
+
<string>${os.homedir()}</string>
|
|
119
|
+
|
|
120
|
+
<!-- Logging -->
|
|
121
|
+
<key>StandardOutPath</key>
|
|
122
|
+
<string>${path.join(os.homedir(), '.warmup', 'logs', 'launchd-stdout.log')}</string>
|
|
123
|
+
<key>StandardErrorPath</key>
|
|
124
|
+
<string>${path.join(os.homedir(), '.warmup', 'logs', 'launchd-stderr.log')}</string>
|
|
125
|
+
</dict>
|
|
126
|
+
</plist>`;
|
|
127
|
+
fs.writeFileSync(PLIST_PATH, plist);
|
|
128
|
+
// Unload first if already loaded (ignore errors)
|
|
129
|
+
try {
|
|
130
|
+
(0, child_process_1.execSync)(`launchctl unload ${PLIST_PATH} 2>/dev/null`, { stdio: 'pipe' });
|
|
131
|
+
}
|
|
132
|
+
catch { }
|
|
133
|
+
// Load the plist
|
|
134
|
+
(0, child_process_1.execSync)(`launchctl load ${PLIST_PATH}`);
|
|
135
|
+
}
|
|
136
|
+
/** Remove the launchd plist */
|
|
137
|
+
function uninstallMacSchedule() {
|
|
138
|
+
try {
|
|
139
|
+
(0, child_process_1.execSync)(`launchctl unload ${PLIST_PATH} 2>/dev/null`, { stdio: 'pipe' });
|
|
140
|
+
}
|
|
141
|
+
catch { }
|
|
142
|
+
if (fs.existsSync(PLIST_PATH)) {
|
|
143
|
+
fs.unlinkSync(PLIST_PATH);
|
|
144
|
+
}
|
|
145
|
+
const scriptPath = getWarmupScriptPath();
|
|
146
|
+
if (fs.existsSync(scriptPath)) {
|
|
147
|
+
fs.unlinkSync(scriptPath);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
/** Check if macOS schedule is installed */
|
|
151
|
+
function isMacScheduleInstalled() {
|
|
152
|
+
return fs.existsSync(PLIST_PATH);
|
|
153
|
+
}
|
|
154
|
+
/** Temporarily disable by unloading (don't delete) */
|
|
155
|
+
function pauseMacSchedule() {
|
|
156
|
+
try {
|
|
157
|
+
(0, child_process_1.execSync)(`launchctl unload ${PLIST_PATH} 2>/dev/null`, { stdio: 'pipe' });
|
|
158
|
+
}
|
|
159
|
+
catch { }
|
|
160
|
+
}
|
|
161
|
+
/** Re-enable by loading */
|
|
162
|
+
function resumeMacSchedule() {
|
|
163
|
+
if (fs.existsSync(PLIST_PATH)) {
|
|
164
|
+
try {
|
|
165
|
+
(0, child_process_1.execSync)(`launchctl load ${PLIST_PATH}`, { stdio: 'pipe' });
|
|
166
|
+
}
|
|
167
|
+
catch { }
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
//# sourceMappingURL=macos.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"macos.js","sourceRoot":"","sources":["../../src/scheduler/macos.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { ScheduleInstallOptions } from './index';
|
|
2
|
+
export declare function buildWindowsWarmupScript(runtime: ScheduleInstallOptions['runtime']): string;
|
|
3
|
+
/**
|
|
4
|
+
* Install Windows Task Scheduler task.
|
|
5
|
+
* Key: StartWhenAvailable enables "run ASAP if missed" for boot-recovery.
|
|
6
|
+
*/
|
|
7
|
+
export declare function installWindowsSchedule(options: ScheduleInstallOptions): void;
|
|
8
|
+
/** Remove Windows scheduled task */
|
|
9
|
+
export declare function uninstallWindowsSchedule(): void;
|
|
10
|
+
/** Check if Windows schedule is installed */
|
|
11
|
+
export declare function isWindowsScheduleInstalled(): boolean;
|
|
12
|
+
export declare function pauseWindowsSchedule(): void;
|
|
13
|
+
export declare function resumeWindowsSchedule(): void;
|
|
14
|
+
//# sourceMappingURL=windows.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"windows.d.ts","sourceRoot":"","sources":["../../src/scheduler/windows.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAC;AAYtD,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,sBAAsB,CAAC,SAAS,CAAC,GAAG,MAAM,CAQ3F;AAUD;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,sBAAsB,GAAG,IAAI,CAqC5E;AAED,oCAAoC;AACpC,wBAAgB,wBAAwB,IAAI,IAAI,CAS/C;AAED,6CAA6C;AAC7C,wBAAgB,0BAA0B,IAAI,OAAO,CAOpD;AAED,wBAAgB,oBAAoB,IAAI,IAAI,CAI3C;AAED,wBAAgB,qBAAqB,IAAI,IAAI,CAI5C"}
|
|
@@ -0,0 +1,139 @@
|
|
|
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.buildWindowsWarmupScript = buildWindowsWarmupScript;
|
|
37
|
+
exports.installWindowsSchedule = installWindowsSchedule;
|
|
38
|
+
exports.uninstallWindowsSchedule = uninstallWindowsSchedule;
|
|
39
|
+
exports.isWindowsScheduleInstalled = isWindowsScheduleInstalled;
|
|
40
|
+
exports.pauseWindowsSchedule = pauseWindowsSchedule;
|
|
41
|
+
exports.resumeWindowsSchedule = resumeWindowsSchedule;
|
|
42
|
+
const fs = __importStar(require("fs"));
|
|
43
|
+
const path = __importStar(require("path"));
|
|
44
|
+
const os = __importStar(require("os"));
|
|
45
|
+
const child_process_1 = require("child_process");
|
|
46
|
+
const TASK_NAME = 'warmup';
|
|
47
|
+
function getWarmupScriptPath() {
|
|
48
|
+
return path.join(os.homedir(), '.warmup', 'warmup.bat');
|
|
49
|
+
}
|
|
50
|
+
function windowsQuote(value) {
|
|
51
|
+
return value.replace(/"/g, '""');
|
|
52
|
+
}
|
|
53
|
+
function buildWindowsWarmupScript(runtime) {
|
|
54
|
+
return `@echo off
|
|
55
|
+
setlocal
|
|
56
|
+
|
|
57
|
+
if not exist "%USERPROFILE%\\.warmup\\logs" mkdir "%USERPROFILE%\\.warmup\\logs"
|
|
58
|
+
|
|
59
|
+
"${windowsQuote(runtime.nodePath)}" "${windowsQuote(runtime.cliEntry)}" _execute-warmup >> "%USERPROFILE%\\.warmup\\logs\\schtasks.log" 2>&1
|
|
60
|
+
`;
|
|
61
|
+
}
|
|
62
|
+
/** Create the warmup batch script for Windows */
|
|
63
|
+
function createWarmupScript(runtime) {
|
|
64
|
+
const scriptPath = getWarmupScriptPath();
|
|
65
|
+
const script = buildWindowsWarmupScript(runtime);
|
|
66
|
+
fs.writeFileSync(scriptPath, script);
|
|
67
|
+
return scriptPath;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Install Windows Task Scheduler task.
|
|
71
|
+
* Key: StartWhenAvailable enables "run ASAP if missed" for boot-recovery.
|
|
72
|
+
*/
|
|
73
|
+
function installWindowsSchedule(options) {
|
|
74
|
+
const scriptPath = createWarmupScript(options.runtime);
|
|
75
|
+
const hStr = options.hour.toString().padStart(2, '0');
|
|
76
|
+
const mStr = options.minute.toString().padStart(2, '0');
|
|
77
|
+
const timeStr = `${hStr}:${mStr}`;
|
|
78
|
+
// Remove existing task first
|
|
79
|
+
try {
|
|
80
|
+
(0, child_process_1.execSync)(`schtasks /Delete /TN "${TASK_NAME}" /F 2>nul`, { stdio: 'pipe' });
|
|
81
|
+
}
|
|
82
|
+
catch { }
|
|
83
|
+
// Create scheduled task
|
|
84
|
+
// /SC DAILY = run daily
|
|
85
|
+
// /ST = start time
|
|
86
|
+
// /RI 1 = repeat interval (enables missed-run recovery)
|
|
87
|
+
// /DU 0000:05 = duration window for repeat
|
|
88
|
+
(0, child_process_1.execSync)(`schtasks /Create /TN "${TASK_NAME}" /TR "${scriptPath}" /SC DAILY /ST ${timeStr} /F`, { stdio: 'pipe' });
|
|
89
|
+
// Enable "run as soon as possible after a scheduled start is missed"
|
|
90
|
+
// This requires modifying the task XML — use PowerShell
|
|
91
|
+
try {
|
|
92
|
+
const psCommand = `
|
|
93
|
+
$task = Get-ScheduledTask -TaskName '${TASK_NAME}'
|
|
94
|
+
$task.Settings.StartWhenAvailable = $true
|
|
95
|
+
$task.Settings.WakeToRun = $false
|
|
96
|
+
$task.Settings.DisallowStartIfOnBatteries = $false
|
|
97
|
+
$task.Settings.StopIfGoingOnBatteries = $false
|
|
98
|
+
Set-ScheduledTask -InputObject $task
|
|
99
|
+
`.replace(/\n/g, '; ');
|
|
100
|
+
(0, child_process_1.execSync)(`powershell -Command "${psCommand}"`, { stdio: 'pipe' });
|
|
101
|
+
}
|
|
102
|
+
catch {
|
|
103
|
+
// StartWhenAvailable is the key feature; if PowerShell fails, the basic task still works
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
/** Remove Windows scheduled task */
|
|
107
|
+
function uninstallWindowsSchedule() {
|
|
108
|
+
try {
|
|
109
|
+
(0, child_process_1.execSync)(`schtasks /Delete /TN "${TASK_NAME}" /F 2>nul`, { stdio: 'pipe' });
|
|
110
|
+
}
|
|
111
|
+
catch { }
|
|
112
|
+
const scriptPath = getWarmupScriptPath();
|
|
113
|
+
if (fs.existsSync(scriptPath)) {
|
|
114
|
+
fs.unlinkSync(scriptPath);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
/** Check if Windows schedule is installed */
|
|
118
|
+
function isWindowsScheduleInstalled() {
|
|
119
|
+
try {
|
|
120
|
+
(0, child_process_1.execSync)(`schtasks /Query /TN "${TASK_NAME}" 2>nul`, { stdio: 'pipe' });
|
|
121
|
+
return true;
|
|
122
|
+
}
|
|
123
|
+
catch {
|
|
124
|
+
return false;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
function pauseWindowsSchedule() {
|
|
128
|
+
try {
|
|
129
|
+
(0, child_process_1.execSync)(`schtasks /Change /TN "${TASK_NAME}" /DISABLE`, { stdio: 'pipe' });
|
|
130
|
+
}
|
|
131
|
+
catch { }
|
|
132
|
+
}
|
|
133
|
+
function resumeWindowsSchedule() {
|
|
134
|
+
try {
|
|
135
|
+
(0, child_process_1.execSync)(`schtasks /Change /TN "${TASK_NAME}" /ENABLE`, { stdio: 'pipe' });
|
|
136
|
+
}
|
|
137
|
+
catch { }
|
|
138
|
+
}
|
|
139
|
+
//# sourceMappingURL=windows.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"windows.js","sourceRoot":"","sources":["../../src/scheduler/windows.ts"],"names":[],"mappings":"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"}
|
package/dist/ui.d.ts
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { WarmupConfig } from './config';
|
|
2
|
+
export declare function printLogo(): void;
|
|
3
|
+
export declare function printMiniLogo(): void;
|
|
4
|
+
export declare function animateSetupComplete(config: WarmupConfig): Promise<void>;
|
|
5
|
+
export declare function displayStatus(config: WarmupConfig, options?: {
|
|
6
|
+
needsRuntimeRefresh?: boolean;
|
|
7
|
+
}): Promise<void>;
|
|
8
|
+
export declare function animateBootRecovery(scheduledTime: string, actualTime: string): Promise<void>;
|
|
9
|
+
export declare function animateBootRecoverySuccess(resetTime: string): Promise<void>;
|
|
10
|
+
export declare function animateTestWarmup(): Promise<void>;
|
|
11
|
+
export declare function animateTestSuccess(duration: number): Promise<void>;
|
|
12
|
+
export declare function animateTestFailure(message: string): Promise<void>;
|
|
13
|
+
export declare function printPaused(): void;
|
|
14
|
+
export declare function printResumed(config: WarmupConfig): void;
|
|
15
|
+
export declare function printUninstalled(): void;
|
|
16
|
+
export declare function printNoClaudeCode(): void;
|
|
17
|
+
export declare function printNotSetup(): void;
|
|
18
|
+
export declare function printAlreadySetup(config: WarmupConfig): void;
|
|
19
|
+
//# sourceMappingURL=ui.d.ts.map
|
package/dist/ui.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ui.d.ts","sourceRoot":"","sources":["../src/ui.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,YAAY,EAAuD,MAAM,UAAU,CAAC;AAqB7F,wBAAgB,SAAS,IAAI,IAAI,CAahC;AAED,wBAAgB,aAAa,IAAI,IAAI,CAEpC;AAGD,wBAAsB,oBAAoB,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAuG9E;AAGD,wBAAsB,aAAa,CACjC,MAAM,EAAE,YAAY,EACpB,OAAO,GAAE;IAAE,mBAAmB,CAAC,EAAE,OAAO,CAAA;CAAO,GAC9C,OAAO,CAAC,IAAI,CAAC,CA+Gf;AAGD,wBAAsB,mBAAmB,CAAC,aAAa,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAMlG;AAED,wBAAsB,0BAA0B,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAQjF;AAGD,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CAIvD;AAED,wBAAsB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAIxE;AAED,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAIvE;AAGD,wBAAgB,WAAW,IAAI,IAAI,CAKlC;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,CAQvD;AAGD,wBAAgB,gBAAgB,IAAI,IAAI,CAMvC;AAGD,wBAAgB,iBAAiB,IAAI,IAAI,CAcxC;AAED,wBAAgB,aAAa,IAAI,IAAI,CAKpC;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,CAS5D"}
|