@chriscode/devmux 1.2.0 → 1.3.1
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/dist/{chunk-JDD6USSA.js → chunk-32R7KDZB.js} +8 -0
- package/dist/chunk-66UOCF5R.js +36 -0
- package/dist/chunk-6EU6ODXX.js +372 -0
- package/dist/{chunk-FVUGZCQ3.js → chunk-ALENFKSX.js} +148 -357
- package/dist/chunk-T6I3CPOV.js +437 -0
- package/dist/cli.js +269 -15
- package/dist/dashboard-3GHLOSV3.js +8 -0
- package/dist/index.d.ts +68 -31
- package/dist/index.js +21 -8
- package/dist/{server-manager-DO25DFFW.js → server-manager-6EZWZK56.js} +7 -4
- package/dist/watch/watcher-cli.js +5 -2
- package/package.json +6 -2
- package/dist/chunk-MLKGABMK.js +0 -9
|
@@ -1,9 +1,15 @@
|
|
|
1
|
+
import {
|
|
2
|
+
init_esm_shims
|
|
3
|
+
} from "./chunk-66UOCF5R.js";
|
|
4
|
+
|
|
1
5
|
// src/watch/queue.ts
|
|
6
|
+
init_esm_shims();
|
|
2
7
|
import { appendFileSync, existsSync, mkdirSync, readFileSync, writeFileSync, unlinkSync, statSync } from "fs";
|
|
3
8
|
import { join } from "path";
|
|
4
9
|
import { randomUUID } from "crypto";
|
|
5
10
|
|
|
6
11
|
// src/watch/deduper.ts
|
|
12
|
+
init_esm_shims();
|
|
7
13
|
import { createHash } from "crypto";
|
|
8
14
|
function computeContentHash(service, patternName, content) {
|
|
9
15
|
const normalized = content.replace(/\d{4}-\d{2}-\d{2}T[\d:.]+Z?/g, "TIMESTAMP").replace(/\d{4}-\d{2}-\d{2}\s+\d{2}:\d{2}:\d{2}/g, "TIMESTAMP").replace(/:\d+:\d+/g, ":LINE:COL").replace(/0x[0-9a-f]+/gi, "0xADDR").replace(/\b\d{5,}\b/g, "NUM");
|
|
@@ -156,9 +162,11 @@ function updateEventStatus(eventId, status, outputDir = DEFAULT_OUTPUT_DIR) {
|
|
|
156
162
|
}
|
|
157
163
|
|
|
158
164
|
// src/watch/watcher.ts
|
|
165
|
+
init_esm_shims();
|
|
159
166
|
import { createInterface } from "readline";
|
|
160
167
|
|
|
161
168
|
// src/watch/patterns.ts
|
|
169
|
+
init_esm_shims();
|
|
162
170
|
var BUILTIN_PATTERN_SETS = {
|
|
163
171
|
node: [
|
|
164
172
|
{ name: "unhandled-rejection", regex: "UnhandledPromiseRejection|unhandledRejection", severity: "critical", extractStackTrace: true },
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __esm = (fn, res) => function __init() {
|
|
6
|
+
return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
|
|
7
|
+
};
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
21
|
+
|
|
22
|
+
// ../node_modules/.pnpm/tsup@8.5.1_postcss@8.5.6_typescript@5.9.3_yaml@2.8.2/node_modules/tsup/assets/esm_shims.js
|
|
23
|
+
import path from "path";
|
|
24
|
+
import { fileURLToPath } from "url";
|
|
25
|
+
var init_esm_shims = __esm({
|
|
26
|
+
"../node_modules/.pnpm/tsup@8.5.1_postcss@8.5.6_typescript@5.9.3_yaml@2.8.2/node_modules/tsup/assets/esm_shims.js"() {
|
|
27
|
+
"use strict";
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
export {
|
|
32
|
+
__esm,
|
|
33
|
+
__export,
|
|
34
|
+
__toCommonJS,
|
|
35
|
+
init_esm_shims
|
|
36
|
+
};
|
|
@@ -0,0 +1,372 @@
|
|
|
1
|
+
import {
|
|
2
|
+
BUILTIN_PATTERN_SETS,
|
|
3
|
+
DedupeCache,
|
|
4
|
+
clearQueue,
|
|
5
|
+
computeContentHash,
|
|
6
|
+
createRingBuffer,
|
|
7
|
+
ensureOutputDir,
|
|
8
|
+
getPendingEvents,
|
|
9
|
+
getQueuePath,
|
|
10
|
+
isStackTraceLine,
|
|
11
|
+
matchPatterns,
|
|
12
|
+
readQueue,
|
|
13
|
+
resolvePatterns,
|
|
14
|
+
startWatcher,
|
|
15
|
+
updateEventStatus,
|
|
16
|
+
writeEvent
|
|
17
|
+
} from "./chunk-32R7KDZB.js";
|
|
18
|
+
import {
|
|
19
|
+
checkHealth,
|
|
20
|
+
ensureService,
|
|
21
|
+
getSessionName,
|
|
22
|
+
hasSession,
|
|
23
|
+
init_loader,
|
|
24
|
+
stopService
|
|
25
|
+
} from "./chunk-ALENFKSX.js";
|
|
26
|
+
import {
|
|
27
|
+
__export,
|
|
28
|
+
init_esm_shims
|
|
29
|
+
} from "./chunk-66UOCF5R.js";
|
|
30
|
+
|
|
31
|
+
// src/core/run.ts
|
|
32
|
+
init_esm_shims();
|
|
33
|
+
init_loader();
|
|
34
|
+
import { spawn } from "child_process";
|
|
35
|
+
function resolveDashboardConfig(config, override) {
|
|
36
|
+
if (override === false) return { enabled: false, port: 9e3 };
|
|
37
|
+
const opt = config.defaults?.dashboard;
|
|
38
|
+
if (override === true || opt === true) return { enabled: true, port: 9e3 };
|
|
39
|
+
if (opt && typeof opt === "object") return { enabled: true, port: opt.port ?? 9e3 };
|
|
40
|
+
return { enabled: false, port: 9e3 };
|
|
41
|
+
}
|
|
42
|
+
async function runWithServices(config, command, options) {
|
|
43
|
+
const { services, stopOnExit = true, quiet = false } = options;
|
|
44
|
+
const log = quiet ? () => {
|
|
45
|
+
} : console.log;
|
|
46
|
+
const startedByUs = [];
|
|
47
|
+
let dashboardServer;
|
|
48
|
+
for (const serviceName of services) {
|
|
49
|
+
const service = config.services[serviceName];
|
|
50
|
+
if (!service) {
|
|
51
|
+
console.error(`\u274C Unknown service: ${serviceName}`);
|
|
52
|
+
process.exit(1);
|
|
53
|
+
}
|
|
54
|
+
const sessionName = getSessionName(config, serviceName);
|
|
55
|
+
const wasHealthy = await checkHealth(service.health, sessionName);
|
|
56
|
+
if (wasHealthy) {
|
|
57
|
+
log(`\u2705 ${serviceName} already running (will keep on exit)`);
|
|
58
|
+
} else {
|
|
59
|
+
const result = await ensureService(config, serviceName, { quiet });
|
|
60
|
+
if (result.startedByUs) {
|
|
61
|
+
startedByUs.push(result);
|
|
62
|
+
log(` (will stop on Ctrl+C)`);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
const dashboardConfig = resolveDashboardConfig(config, options.dashboard);
|
|
67
|
+
if (dashboardConfig.enabled) {
|
|
68
|
+
try {
|
|
69
|
+
const { startDashboard } = await import("./dashboard-3GHLOSV3.js");
|
|
70
|
+
dashboardServer = startDashboard({ port: dashboardConfig.port, open: true });
|
|
71
|
+
} catch (err) {
|
|
72
|
+
log(`\u26A0\uFE0F Dashboard failed to start: ${err instanceof Error ? err.message : err}`);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
log("");
|
|
76
|
+
const cleanup = () => {
|
|
77
|
+
if (dashboardServer) {
|
|
78
|
+
dashboardServer.close();
|
|
79
|
+
dashboardServer = void 0;
|
|
80
|
+
}
|
|
81
|
+
if (stopOnExit && startedByUs.length > 0) {
|
|
82
|
+
log("");
|
|
83
|
+
log("\u{1F9F9} Cleaning up services we started...");
|
|
84
|
+
for (const result of startedByUs) {
|
|
85
|
+
stopService(config, result.serviceName, { killPorts: true, quiet: true });
|
|
86
|
+
log(` \u2514\u2500 Stopped ${result.serviceName}`);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
};
|
|
90
|
+
process.on("SIGINT", () => {
|
|
91
|
+
cleanup();
|
|
92
|
+
process.exit(130);
|
|
93
|
+
});
|
|
94
|
+
process.on("SIGTERM", () => {
|
|
95
|
+
cleanup();
|
|
96
|
+
process.exit(143);
|
|
97
|
+
});
|
|
98
|
+
process.on("exit", cleanup);
|
|
99
|
+
const [cmd, ...args] = command;
|
|
100
|
+
const child = spawn(cmd, args, {
|
|
101
|
+
stdio: "inherit",
|
|
102
|
+
shell: true
|
|
103
|
+
});
|
|
104
|
+
return new Promise((resolve2) => {
|
|
105
|
+
child.on("close", (code) => {
|
|
106
|
+
resolve2(code ?? 0);
|
|
107
|
+
});
|
|
108
|
+
child.on("error", (err) => {
|
|
109
|
+
console.error(`Failed to run command: ${err.message}`);
|
|
110
|
+
resolve2(1);
|
|
111
|
+
});
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
// src/discovery/turbo.ts
|
|
116
|
+
init_esm_shims();
|
|
117
|
+
import { readFileSync, existsSync } from "fs";
|
|
118
|
+
import { resolve, relative } from "path";
|
|
119
|
+
function loadTurboConfig(root) {
|
|
120
|
+
const turboPath = resolve(root, "turbo.json");
|
|
121
|
+
if (!existsSync(turboPath)) return null;
|
|
122
|
+
try {
|
|
123
|
+
return JSON.parse(readFileSync(turboPath, "utf-8"));
|
|
124
|
+
} catch {
|
|
125
|
+
return null;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
function getPersistentTasks(turbo) {
|
|
129
|
+
const tasks = turbo.tasks ?? turbo.pipeline ?? {};
|
|
130
|
+
return Object.entries(tasks).filter(([_, task]) => task.persistent).map(([name]) => name.replace(/^\/\/#/, ""));
|
|
131
|
+
}
|
|
132
|
+
function findWorkspacePackages(root) {
|
|
133
|
+
const packages = [];
|
|
134
|
+
const rootPkg = resolve(root, "package.json");
|
|
135
|
+
if (!existsSync(rootPkg)) return packages;
|
|
136
|
+
try {
|
|
137
|
+
const pkg = JSON.parse(
|
|
138
|
+
readFileSync(rootPkg, "utf-8")
|
|
139
|
+
);
|
|
140
|
+
const workspaces = pkg.workspaces ?? [];
|
|
141
|
+
for (const pattern of workspaces) {
|
|
142
|
+
const cleanPattern = pattern.replace(/\/\*$/, "");
|
|
143
|
+
const pkgPath = resolve(root, cleanPattern, "package.json");
|
|
144
|
+
if (existsSync(pkgPath)) {
|
|
145
|
+
const subPkg = JSON.parse(readFileSync(pkgPath, "utf-8"));
|
|
146
|
+
packages.push({
|
|
147
|
+
name: subPkg.name ?? cleanPattern,
|
|
148
|
+
path: relative(root, resolve(root, cleanPattern)) || ".",
|
|
149
|
+
scripts: Object.keys(subPkg.scripts ?? {})
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
for (const subdir of ["app", "api", "web", "packages", "apps"]) {
|
|
154
|
+
const pkgPath = resolve(root, subdir, "package.json");
|
|
155
|
+
if (existsSync(pkgPath) && !packages.some((p) => p.path === subdir)) {
|
|
156
|
+
const subPkg = JSON.parse(readFileSync(pkgPath, "utf-8"));
|
|
157
|
+
packages.push({
|
|
158
|
+
name: subPkg.name ?? subdir,
|
|
159
|
+
path: subdir,
|
|
160
|
+
scripts: Object.keys(subPkg.scripts ?? {})
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
} catch {
|
|
165
|
+
}
|
|
166
|
+
return packages;
|
|
167
|
+
}
|
|
168
|
+
function discoverFromTurbo(root) {
|
|
169
|
+
const turbo = loadTurboConfig(root);
|
|
170
|
+
if (!turbo) return null;
|
|
171
|
+
const persistentTasks = getPersistentTasks(turbo);
|
|
172
|
+
if (persistentTasks.length === 0) return null;
|
|
173
|
+
const packages = findWorkspacePackages(root);
|
|
174
|
+
const services = {};
|
|
175
|
+
for (const pkg of packages) {
|
|
176
|
+
for (const task of persistentTasks) {
|
|
177
|
+
if (pkg.scripts.includes(task)) {
|
|
178
|
+
const serviceName = pkg.path === "." ? task : `${pkg.path.replace(/\//g, "-")}-${task}`;
|
|
179
|
+
services[serviceName] = {
|
|
180
|
+
cwd: pkg.path,
|
|
181
|
+
command: `pnpm ${task}`
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
if (Object.keys(services).length === 0) return null;
|
|
187
|
+
return {
|
|
188
|
+
version: 1,
|
|
189
|
+
project: "my-project",
|
|
190
|
+
services
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
function formatDiscoveredConfig(config) {
|
|
194
|
+
const lines = [
|
|
195
|
+
"# Discovered from turbo.json",
|
|
196
|
+
"# Review and update:",
|
|
197
|
+
"# 1. Set 'project' name",
|
|
198
|
+
"# 2. Add health checks (port or http) for each service",
|
|
199
|
+
"# 3. Remove services you don't want to manage",
|
|
200
|
+
"",
|
|
201
|
+
JSON.stringify(config, null, 2)
|
|
202
|
+
];
|
|
203
|
+
return lines.join("\n");
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
// src/watch/manager.ts
|
|
207
|
+
init_esm_shims();
|
|
208
|
+
init_loader();
|
|
209
|
+
import { execSync } from "child_process";
|
|
210
|
+
import { dirname, join as join2 } from "path";
|
|
211
|
+
import { fileURLToPath } from "url";
|
|
212
|
+
function getWatcherCliPath() {
|
|
213
|
+
const thisFileDir = dirname(fileURLToPath(import.meta.url));
|
|
214
|
+
if (thisFileDir.endsWith("watch")) {
|
|
215
|
+
return join2(thisFileDir, "watcher-cli.js");
|
|
216
|
+
}
|
|
217
|
+
return join2(thisFileDir, "watch", "watcher-cli.js");
|
|
218
|
+
}
|
|
219
|
+
function getWatchConfig(config) {
|
|
220
|
+
return config.watch;
|
|
221
|
+
}
|
|
222
|
+
function getServiceWatchConfig(config, serviceName) {
|
|
223
|
+
return config.services[serviceName]?.watch;
|
|
224
|
+
}
|
|
225
|
+
function isWatchEnabled(config, serviceName) {
|
|
226
|
+
const globalWatch = getWatchConfig(config);
|
|
227
|
+
const serviceWatch = getServiceWatchConfig(config, serviceName);
|
|
228
|
+
if (serviceWatch?.enabled !== void 0) {
|
|
229
|
+
return serviceWatch.enabled;
|
|
230
|
+
}
|
|
231
|
+
return globalWatch?.enabled ?? false;
|
|
232
|
+
}
|
|
233
|
+
function isPipeActive(sessionName) {
|
|
234
|
+
try {
|
|
235
|
+
const output = execSync(`tmux show-options -t "${sessionName}" -p pipe-command 2>/dev/null || true`, {
|
|
236
|
+
encoding: "utf-8"
|
|
237
|
+
});
|
|
238
|
+
return output.includes("watcher-cli");
|
|
239
|
+
} catch {
|
|
240
|
+
return false;
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
function getWatcherStatus(config, serviceName) {
|
|
244
|
+
const sessionName = getSessionName(config, serviceName);
|
|
245
|
+
const hasSession2 = hasSession(sessionName);
|
|
246
|
+
return {
|
|
247
|
+
service: serviceName,
|
|
248
|
+
sessionName,
|
|
249
|
+
pipeActive: hasSession2 && isPipeActive(sessionName)
|
|
250
|
+
};
|
|
251
|
+
}
|
|
252
|
+
function getAllWatcherStatuses(config) {
|
|
253
|
+
return Object.keys(config.services).map((serviceName) => getWatcherStatus(config, serviceName));
|
|
254
|
+
}
|
|
255
|
+
function startWatcher2(config, serviceName, options = {}) {
|
|
256
|
+
const sessionName = getSessionName(config, serviceName);
|
|
257
|
+
const log = options.quiet ? () => {
|
|
258
|
+
} : console.log;
|
|
259
|
+
if (!hasSession(sessionName)) {
|
|
260
|
+
log(`\u274C Service ${serviceName} is not running (no tmux session: ${sessionName})`);
|
|
261
|
+
return false;
|
|
262
|
+
}
|
|
263
|
+
if (isPipeActive(sessionName)) {
|
|
264
|
+
log(`\u2705 Watcher already active for ${serviceName}`);
|
|
265
|
+
return true;
|
|
266
|
+
}
|
|
267
|
+
const globalWatch = getWatchConfig(config);
|
|
268
|
+
const serviceWatch = getServiceWatchConfig(config, serviceName);
|
|
269
|
+
const patterns = resolvePatterns(globalWatch, serviceWatch);
|
|
270
|
+
if (patterns.length === 0) {
|
|
271
|
+
log(`\u26A0\uFE0F No patterns configured for ${serviceName}`);
|
|
272
|
+
return false;
|
|
273
|
+
}
|
|
274
|
+
const outputDir = globalWatch?.outputDir ?? `${process.env.HOME}/.opencode/triggers`;
|
|
275
|
+
const dedupeWindowMs = globalWatch?.dedupeWindowMs ?? 5e3;
|
|
276
|
+
const contextLines = globalWatch?.contextLines ?? 20;
|
|
277
|
+
const patternsJson = JSON.stringify(patterns).replace(/"/g, '\\"');
|
|
278
|
+
const watcherCliPath = getWatcherCliPath();
|
|
279
|
+
const cmd = [
|
|
280
|
+
`node "${watcherCliPath}"`,
|
|
281
|
+
`--service=${serviceName}`,
|
|
282
|
+
`--project=${config.project}`,
|
|
283
|
+
`--session=${sessionName}`,
|
|
284
|
+
`--output=${outputDir}`,
|
|
285
|
+
`--dedupe=${dedupeWindowMs}`,
|
|
286
|
+
`--context=${contextLines}`,
|
|
287
|
+
`--patterns="${patternsJson}"`
|
|
288
|
+
].join(" ");
|
|
289
|
+
try {
|
|
290
|
+
execSync(`tmux pipe-pane -t "${sessionName}" '${cmd}'`, { stdio: "pipe" });
|
|
291
|
+
log(`\u{1F441}\uFE0F Started watching ${serviceName}`);
|
|
292
|
+
return true;
|
|
293
|
+
} catch (e) {
|
|
294
|
+
log(`\u274C Failed to start watcher for ${serviceName}: ${e}`);
|
|
295
|
+
return false;
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
function stopWatcher(config, serviceName, options = {}) {
|
|
299
|
+
const sessionName = getSessionName(config, serviceName);
|
|
300
|
+
const log = options.quiet ? () => {
|
|
301
|
+
} : console.log;
|
|
302
|
+
if (!hasSession(sessionName)) {
|
|
303
|
+
log(`\u26A0\uFE0F Service ${serviceName} is not running`);
|
|
304
|
+
return false;
|
|
305
|
+
}
|
|
306
|
+
if (!isPipeActive(sessionName)) {
|
|
307
|
+
log(`\u26A0\uFE0F Watcher not active for ${serviceName}`);
|
|
308
|
+
return false;
|
|
309
|
+
}
|
|
310
|
+
try {
|
|
311
|
+
execSync(`tmux pipe-pane -t "${sessionName}"`, { stdio: "pipe" });
|
|
312
|
+
log(`\u{1F6D1} Stopped watching ${serviceName}`);
|
|
313
|
+
return true;
|
|
314
|
+
} catch (e) {
|
|
315
|
+
log(`\u274C Failed to stop watcher for ${serviceName}: ${e}`);
|
|
316
|
+
return false;
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
function startAllWatchers(config, options = {}) {
|
|
320
|
+
for (const serviceName of Object.keys(config.services)) {
|
|
321
|
+
if (isWatchEnabled(config, serviceName)) {
|
|
322
|
+
startWatcher2(config, serviceName, options);
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
function stopAllWatchers(config, options = {}) {
|
|
327
|
+
for (const serviceName of Object.keys(config.services)) {
|
|
328
|
+
const status = getWatcherStatus(config, serviceName);
|
|
329
|
+
if (status.pipeActive) {
|
|
330
|
+
stopWatcher(config, serviceName, options);
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
// src/watch/index.ts
|
|
336
|
+
var watch_exports = {};
|
|
337
|
+
__export(watch_exports, {
|
|
338
|
+
BUILTIN_PATTERN_SETS: () => BUILTIN_PATTERN_SETS,
|
|
339
|
+
DedupeCache: () => DedupeCache,
|
|
340
|
+
clearQueue: () => clearQueue,
|
|
341
|
+
computeContentHash: () => computeContentHash,
|
|
342
|
+
createRingBuffer: () => createRingBuffer,
|
|
343
|
+
ensureOutputDir: () => ensureOutputDir,
|
|
344
|
+
getAllWatcherStatuses: () => getAllWatcherStatuses,
|
|
345
|
+
getPendingEvents: () => getPendingEvents,
|
|
346
|
+
getQueuePath: () => getQueuePath,
|
|
347
|
+
getWatcherStatus: () => getWatcherStatus,
|
|
348
|
+
isStackTraceLine: () => isStackTraceLine,
|
|
349
|
+
matchPatterns: () => matchPatterns,
|
|
350
|
+
readQueue: () => readQueue,
|
|
351
|
+
resolvePatterns: () => resolvePatterns,
|
|
352
|
+
startAllWatchers: () => startAllWatchers,
|
|
353
|
+
startServiceWatcher: () => startWatcher2,
|
|
354
|
+
startWatcher: () => startWatcher,
|
|
355
|
+
stopAllWatchers: () => stopAllWatchers,
|
|
356
|
+
stopServiceWatcher: () => stopWatcher,
|
|
357
|
+
updateEventStatus: () => updateEventStatus,
|
|
358
|
+
writeEvent: () => writeEvent
|
|
359
|
+
});
|
|
360
|
+
init_esm_shims();
|
|
361
|
+
|
|
362
|
+
export {
|
|
363
|
+
runWithServices,
|
|
364
|
+
discoverFromTurbo,
|
|
365
|
+
formatDiscoveredConfig,
|
|
366
|
+
getAllWatcherStatuses,
|
|
367
|
+
startWatcher2 as startWatcher,
|
|
368
|
+
stopWatcher,
|
|
369
|
+
startAllWatchers,
|
|
370
|
+
stopAllWatchers,
|
|
371
|
+
watch_exports
|
|
372
|
+
};
|