nixparse 0.1.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.
package/dist/index.cjs ADDED
@@ -0,0 +1,556 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/index.ts
21
+ var index_exports = {};
22
+ __export(index_exports, {
23
+ CommandNotFoundError: () => CommandNotFoundError,
24
+ UnknownParserError: () => UnknownParserError,
25
+ parse: () => parse,
26
+ registerParser: () => registerParser,
27
+ run: () => run
28
+ });
29
+ module.exports = __toCommonJS(index_exports);
30
+
31
+ // src/parsers/ps.ts
32
+ var import_zod = require("zod");
33
+
34
+ // src/parsers/_table.ts
35
+ function splitNonEmptyLines(text) {
36
+ return text.split("\n").filter((l) => l.trim().length > 0);
37
+ }
38
+
39
+ // src/parsers/ps.ts
40
+ var ProcessInfoSchema = import_zod.z.object({
41
+ user: import_zod.z.string(),
42
+ pid: import_zod.z.number().int(),
43
+ cpu: import_zod.z.number(),
44
+ mem: import_zod.z.number(),
45
+ vsz: import_zod.z.number().int(),
46
+ rss: import_zod.z.number().int(),
47
+ tty: import_zod.z.string(),
48
+ stat: import_zod.z.string(),
49
+ start: import_zod.z.string(),
50
+ time: import_zod.z.string(),
51
+ command: import_zod.z.string()
52
+ });
53
+ var NUM_FIXED_COLUMNS = 10;
54
+ function parsePsAux(raw) {
55
+ const lines = splitNonEmptyLines(raw);
56
+ const dataLines = lines.slice(1);
57
+ return dataLines.map((line) => {
58
+ const parts = line.trim().split(/\s+/);
59
+ const fixed = parts.slice(0, NUM_FIXED_COLUMNS);
60
+ const command = parts.slice(NUM_FIXED_COLUMNS).join(" ");
61
+ const [user, pid, cpu, mem, vsz, rss, tty, stat, start, time] = fixed;
62
+ return {
63
+ user,
64
+ pid: Number(pid),
65
+ cpu: Number(cpu),
66
+ mem: Number(mem),
67
+ vsz: Number(vsz),
68
+ rss: Number(rss),
69
+ tty,
70
+ stat,
71
+ start,
72
+ time,
73
+ command
74
+ };
75
+ });
76
+ }
77
+ var psParser = {
78
+ schema: import_zod.z.array(ProcessInfoSchema),
79
+ parse: parsePsAux
80
+ };
81
+
82
+ // src/parsers/df.ts
83
+ var import_zod2 = require("zod");
84
+ var DiskUsageSchema = import_zod2.z.object({
85
+ filesystem: import_zod2.z.string(),
86
+ blocksKb: import_zod2.z.number().int(),
87
+ usedKb: import_zod2.z.number().int(),
88
+ availableKb: import_zod2.z.number().int(),
89
+ usePercent: import_zod2.z.number(),
90
+ mountedOn: import_zod2.z.string()
91
+ });
92
+ function parseDf(raw) {
93
+ const lines = splitNonEmptyLines(raw);
94
+ const dataLines = lines.slice(1);
95
+ return dataLines.map((line) => {
96
+ const parts = line.trim().split(/\s+/);
97
+ const filesystem = parts[0];
98
+ const blocksKb = parts[1];
99
+ const usedKb = parts[2];
100
+ const availableKb = parts[3];
101
+ const usePercent = parts[4];
102
+ const mountedOn = parts.slice(5).join(" ");
103
+ return {
104
+ filesystem,
105
+ blocksKb: Number(blocksKb),
106
+ usedKb: Number(usedKb),
107
+ availableKb: Number(availableKb),
108
+ usePercent: Number(String(usePercent).replace("%", "")),
109
+ mountedOn
110
+ };
111
+ });
112
+ }
113
+ var dfParser = {
114
+ schema: import_zod2.z.array(DiskUsageSchema),
115
+ parse: parseDf
116
+ };
117
+
118
+ // src/parsers/du.ts
119
+ var import_zod3 = require("zod");
120
+ var DirSizeSchema = import_zod3.z.object({
121
+ sizeKb: import_zod3.z.number().int(),
122
+ path: import_zod3.z.string()
123
+ });
124
+ function parseDu(raw) {
125
+ const lines = splitNonEmptyLines(raw);
126
+ return lines.map((line) => {
127
+ const match = line.match(/^(\d+)\s+(.+)$/);
128
+ if (!match) {
129
+ throw new Error(`Unrecognized du line: ${line}`);
130
+ }
131
+ const [, sizeKb, path] = match;
132
+ return { sizeKb: Number(sizeKb), path };
133
+ });
134
+ }
135
+ var duParser = {
136
+ schema: import_zod3.z.array(DirSizeSchema),
137
+ parse: parseDu
138
+ };
139
+
140
+ // src/parsers/free.ts
141
+ var import_zod4 = require("zod");
142
+ var MemoryInfoSchema = import_zod4.z.object({
143
+ mem: import_zod4.z.object({
144
+ total: import_zod4.z.number().int(),
145
+ used: import_zod4.z.number().int(),
146
+ free: import_zod4.z.number().int(),
147
+ shared: import_zod4.z.number().int(),
148
+ buffCache: import_zod4.z.number().int(),
149
+ available: import_zod4.z.number().int()
150
+ }),
151
+ swap: import_zod4.z.object({
152
+ total: import_zod4.z.number().int(),
153
+ used: import_zod4.z.number().int(),
154
+ free: import_zod4.z.number().int()
155
+ })
156
+ });
157
+ function parseFree(raw) {
158
+ const lines = splitNonEmptyLines(raw);
159
+ const memLine = lines.find((l) => l.startsWith("Mem:"));
160
+ const swapLine = lines.find((l) => l.startsWith("Swap:"));
161
+ if (!memLine || !swapLine) {
162
+ throw new Error("Could not find Mem: or Swap: line in free output");
163
+ }
164
+ const [, total, used, free, shared, buffCache, available] = memLine.trim().split(/\s+/);
165
+ const [, sTotal, sUsed, sFree] = swapLine.trim().split(/\s+/);
166
+ return {
167
+ mem: {
168
+ total: Number(total),
169
+ used: Number(used),
170
+ free: Number(free),
171
+ shared: Number(shared),
172
+ buffCache: Number(buffCache),
173
+ available: Number(available)
174
+ },
175
+ swap: {
176
+ total: Number(sTotal),
177
+ used: Number(sUsed),
178
+ free: Number(sFree)
179
+ }
180
+ };
181
+ }
182
+ var freeParser = {
183
+ schema: MemoryInfoSchema,
184
+ parse: parseFree
185
+ };
186
+
187
+ // src/parsers/lsof.ts
188
+ var import_zod5 = require("zod");
189
+ var OpenFileSchema = import_zod5.z.object({
190
+ pid: import_zod5.z.number().int(),
191
+ command: import_zod5.z.string(),
192
+ user: import_zod5.z.string(),
193
+ fd: import_zod5.z.string(),
194
+ type: import_zod5.z.string(),
195
+ name: import_zod5.z.string()
196
+ });
197
+ function parseLsof(raw) {
198
+ const lines = splitNonEmptyLines(raw);
199
+ const results = [];
200
+ let currentPid;
201
+ let currentCommand;
202
+ let currentUser;
203
+ let pendingFd;
204
+ let pendingType;
205
+ const flush = (name) => {
206
+ if (currentPid === void 0) return;
207
+ results.push({
208
+ pid: currentPid,
209
+ command: currentCommand ?? "",
210
+ user: currentUser ?? "",
211
+ fd: pendingFd ?? "",
212
+ type: pendingType ?? "",
213
+ name
214
+ });
215
+ };
216
+ for (const line of lines) {
217
+ const tag = line[0];
218
+ const value = line.slice(1);
219
+ switch (tag) {
220
+ case "p":
221
+ currentPid = Number(value);
222
+ break;
223
+ case "c":
224
+ currentCommand = value;
225
+ break;
226
+ case "u":
227
+ currentUser = value;
228
+ break;
229
+ case "f":
230
+ pendingFd = value;
231
+ break;
232
+ case "T":
233
+ break;
234
+ case "t":
235
+ pendingType = value;
236
+ break;
237
+ case "n":
238
+ flush(value);
239
+ break;
240
+ default:
241
+ break;
242
+ }
243
+ }
244
+ return results;
245
+ }
246
+ var lsofParser = {
247
+ schema: import_zod5.z.array(OpenFileSchema),
248
+ parse: parseLsof
249
+ };
250
+
251
+ // src/parsers/mount.ts
252
+ var import_zod6 = require("zod");
253
+ var MountPointSchema = import_zod6.z.object({
254
+ device: import_zod6.z.string(),
255
+ path: import_zod6.z.string(),
256
+ fsType: import_zod6.z.string(),
257
+ options: import_zod6.z.array(import_zod6.z.string())
258
+ });
259
+ var MOUNT_LINE_RE = /^(\S+) on (.+) type (\S+) \((.*)\)$/;
260
+ function parseMount(raw) {
261
+ const lines = splitNonEmptyLines(raw);
262
+ return lines.map((line) => {
263
+ const match = line.match(MOUNT_LINE_RE);
264
+ if (!match) {
265
+ throw new Error(`Unrecognized mount line: ${line}`);
266
+ }
267
+ const [, device, path, fsType, optionsStr] = match;
268
+ return {
269
+ device,
270
+ path,
271
+ fsType,
272
+ options: optionsStr ? optionsStr.split(",") : []
273
+ };
274
+ });
275
+ }
276
+ var mountParser = {
277
+ schema: import_zod6.z.array(MountPointSchema),
278
+ parse: parseMount
279
+ };
280
+
281
+ // src/parsers/who.ts
282
+ var import_zod7 = require("zod");
283
+ var LoggedInUserSchema = import_zod7.z.object({
284
+ user: import_zod7.z.string(),
285
+ tty: import_zod7.z.string(),
286
+ loginTime: import_zod7.z.string()
287
+ });
288
+ var WHO_LINE_RE = /^(\S+)\s+(\S+)\s+(.+)$/;
289
+ function parseWho(raw) {
290
+ const lines = splitNonEmptyLines(raw);
291
+ return lines.map((line) => {
292
+ const match = line.match(WHO_LINE_RE);
293
+ if (!match) {
294
+ throw new Error(`Unrecognized who line: ${line}`);
295
+ }
296
+ const [, user, tty, loginTime] = match;
297
+ return { user, tty, loginTime: loginTime?.trim() };
298
+ });
299
+ }
300
+ var whoParser = {
301
+ schema: import_zod7.z.array(LoggedInUserSchema),
302
+ parse: parseWho
303
+ };
304
+
305
+ // src/parsers/uptime.ts
306
+ var import_zod8 = require("zod");
307
+ var UptimeInfoSchema = import_zod8.z.object({
308
+ currentTime: import_zod8.z.string(),
309
+ upDays: import_zod8.z.number().int(),
310
+ upHours: import_zod8.z.number().int(),
311
+ upMinutes: import_zod8.z.number().int(),
312
+ users: import_zod8.z.number().int(),
313
+ loadAverage1m: import_zod8.z.number(),
314
+ loadAverage5m: import_zod8.z.number(),
315
+ loadAverage15m: import_zod8.z.number()
316
+ });
317
+ var UPTIME_RE = /^\s*(\S+)\s+up\s+(.+?),\s+(\d+)\s+users?,\s+load average:\s*([\d.]+),\s*([\d.]+),\s*([\d.]+)/;
318
+ function parseUpDuration(upStr) {
319
+ const dayMatch = upStr.match(/(\d+)\s+days?/);
320
+ const days = dayMatch ? Number(dayMatch[1]) : 0;
321
+ const hmMatch = upStr.match(/(\d+):(\d+)/);
322
+ if (hmMatch) {
323
+ return { days, hours: Number(hmMatch[1]), minutes: Number(hmMatch[2]) };
324
+ }
325
+ const minMatch = upStr.match(/(\d+)\s+min/);
326
+ if (minMatch) {
327
+ return { days, hours: 0, minutes: Number(minMatch[1]) };
328
+ }
329
+ return { days, hours: 0, minutes: 0 };
330
+ }
331
+ function parseUptime(raw) {
332
+ const line = raw.trim();
333
+ const match = line.match(UPTIME_RE);
334
+ if (!match) {
335
+ throw new Error(`Unrecognized uptime output: ${line}`);
336
+ }
337
+ const [, currentTime, upStr, users, l1, l5, l15] = match;
338
+ const { days, hours, minutes } = parseUpDuration(upStr ?? "");
339
+ return {
340
+ currentTime,
341
+ upDays: days,
342
+ upHours: hours,
343
+ upMinutes: minutes,
344
+ users: Number(users),
345
+ loadAverage1m: Number(l1),
346
+ loadAverage5m: Number(l5),
347
+ loadAverage15m: Number(l15)
348
+ };
349
+ }
350
+ var uptimeParser = {
351
+ schema: UptimeInfoSchema,
352
+ parse: parseUptime
353
+ };
354
+
355
+ // src/parsers/ip.ts
356
+ var import_zod9 = require("zod");
357
+ var AddrInfoSchema = import_zod9.z.object({
358
+ family: import_zod9.z.string(),
359
+ local: import_zod9.z.string(),
360
+ prefixlen: import_zod9.z.number().int(),
361
+ broadcast: import_zod9.z.string().optional(),
362
+ scope: import_zod9.z.string(),
363
+ label: import_zod9.z.string().optional(),
364
+ valid_life_time: import_zod9.z.number(),
365
+ preferred_life_time: import_zod9.z.number()
366
+ });
367
+ var NetworkInterfaceSchema = import_zod9.z.object({
368
+ ifindex: import_zod9.z.number().int(),
369
+ ifname: import_zod9.z.string(),
370
+ flags: import_zod9.z.array(import_zod9.z.string()),
371
+ mtu: import_zod9.z.number().int(),
372
+ qdisc: import_zod9.z.string(),
373
+ operstate: import_zod9.z.string(),
374
+ group: import_zod9.z.string(),
375
+ txqlen: import_zod9.z.number().int().optional(),
376
+ link_type: import_zod9.z.string(),
377
+ address: import_zod9.z.string(),
378
+ broadcast: import_zod9.z.string().optional(),
379
+ addr_info: import_zod9.z.array(AddrInfoSchema)
380
+ });
381
+ function parseIpAddr(raw) {
382
+ return JSON.parse(raw);
383
+ }
384
+ var ipAddrParser = {
385
+ schema: import_zod9.z.array(NetworkInterfaceSchema),
386
+ parse: parseIpAddr
387
+ };
388
+ var RouteEntrySchema = import_zod9.z.object({
389
+ dst: import_zod9.z.string(),
390
+ gateway: import_zod9.z.string().optional(),
391
+ dev: import_zod9.z.string().optional(),
392
+ protocol: import_zod9.z.string().optional(),
393
+ scope: import_zod9.z.string().optional(),
394
+ prefsrc: import_zod9.z.string().optional(),
395
+ flags: import_zod9.z.array(import_zod9.z.string())
396
+ });
397
+ function parseIpRoute(raw) {
398
+ return JSON.parse(raw);
399
+ }
400
+ var ipRouteParser = {
401
+ schema: import_zod9.z.array(RouteEntrySchema),
402
+ parse: parseIpRoute
403
+ };
404
+
405
+ // src/parsers/ss.ts
406
+ var import_zod10 = require("zod");
407
+ var SocketSchema = import_zod10.z.object({
408
+ state: import_zod10.z.string(),
409
+ recvQ: import_zod10.z.number().int(),
410
+ sendQ: import_zod10.z.number().int(),
411
+ localAddress: import_zod10.z.string(),
412
+ localPort: import_zod10.z.string(),
413
+ peerAddress: import_zod10.z.string(),
414
+ peerPort: import_zod10.z.string(),
415
+ process: import_zod10.z.string().optional()
416
+ });
417
+ function splitAddrPort(token) {
418
+ const lastColon = token.lastIndexOf(":");
419
+ if (lastColon === -1) {
420
+ return { address: token, port: "" };
421
+ }
422
+ return {
423
+ address: token.slice(0, lastColon),
424
+ port: token.slice(lastColon + 1)
425
+ };
426
+ }
427
+ function parseSs(raw) {
428
+ const lines = splitNonEmptyLines(raw);
429
+ const dataLines = lines.slice(1);
430
+ return dataLines.map((line) => {
431
+ const parts = line.trim().split(/\s+/);
432
+ const [state, recvQ, sendQ, localToken, peerAndRest] = parts;
433
+ const local = splitAddrPort(localToken ?? "");
434
+ const rest = parts.slice(4).join(" ");
435
+ const peerMatch = rest.match(/^(\S+)\s*(.*)$/);
436
+ const peerToken = peerMatch?.[1] ?? peerAndRest ?? "";
437
+ const processPart = peerMatch?.[2]?.trim();
438
+ const peer = splitAddrPort(peerToken);
439
+ return {
440
+ state,
441
+ recvQ: Number(recvQ),
442
+ sendQ: Number(sendQ),
443
+ localAddress: local.address,
444
+ localPort: local.port,
445
+ peerAddress: peer.address,
446
+ peerPort: peer.port,
447
+ process: processPart || void 0
448
+ };
449
+ });
450
+ }
451
+ var ssParser = {
452
+ schema: import_zod10.z.array(SocketSchema),
453
+ parse: parseSs
454
+ };
455
+
456
+ // src/registry.ts
457
+ var builtinParsers = {
458
+ ps: psParser,
459
+ df: dfParser,
460
+ du: duParser,
461
+ free: freeParser,
462
+ lsof: lsofParser,
463
+ mount: mountParser,
464
+ who: whoParser,
465
+ uptime: uptimeParser,
466
+ "ip-addr": ipAddrParser,
467
+ "ip-route": ipRouteParser,
468
+ ss: ssParser
469
+ };
470
+ var registry = new Map(
471
+ Object.entries(builtinParsers)
472
+ );
473
+ function registerParser(name, definition) {
474
+ registry.set(name, definition);
475
+ }
476
+
477
+ // src/exec.ts
478
+ var import_node_child_process = require("child_process");
479
+ var import_node_util = require("util");
480
+
481
+ // src/types.ts
482
+ var CommandNotFoundError = class extends Error {
483
+ constructor(command) {
484
+ super(`Command not found: "${command}". Is it installed and on PATH?`);
485
+ this.command = command;
486
+ this.name = "CommandNotFoundError";
487
+ }
488
+ command;
489
+ };
490
+ var UnknownParserError = class extends Error {
491
+ constructor(name) {
492
+ super(
493
+ `No parser registered for "${name}". Use registerParser() to add a custom one.`
494
+ );
495
+ this.name = name;
496
+ this.name = "UnknownParserError";
497
+ }
498
+ name;
499
+ };
500
+
501
+ // src/exec.ts
502
+ var execFileAsync = (0, import_node_util.promisify)(import_node_child_process.execFile);
503
+ async function runCommand(command, args) {
504
+ try {
505
+ const { stdout } = await execFileAsync(command, args, {
506
+ maxBuffer: 1024 * 1024 * 32
507
+ });
508
+ return stdout;
509
+ } catch (err) {
510
+ const nodeErr = err;
511
+ if (nodeErr.code === "ENOENT") {
512
+ throw new CommandNotFoundError(command);
513
+ }
514
+ throw err;
515
+ }
516
+ }
517
+
518
+ // src/index.ts
519
+ function parse(name, raw) {
520
+ const definition = registry.get(name);
521
+ if (!definition) {
522
+ throw new UnknownParserError(name);
523
+ }
524
+ const result = definition.parse(raw);
525
+ return definition.schema.parse(result);
526
+ }
527
+ var commandSpecs = /* @__PURE__ */ new Map([
528
+ ["ps", { binary: "ps", defaultArgs: ["aux"] }],
529
+ ["df", { binary: "df", defaultArgs: ["-k"] }],
530
+ ["du", { binary: "du", defaultArgs: ["-k"] }],
531
+ ["free", { binary: "free", defaultArgs: ["-b"] }],
532
+ ["lsof", { binary: "lsof", defaultArgs: ["-F", "pcufTtn"] }],
533
+ ["mount", { binary: "mount", defaultArgs: [] }],
534
+ ["who", { binary: "who", defaultArgs: [] }],
535
+ ["uptime", { binary: "uptime", defaultArgs: [] }],
536
+ ["ip-addr", { binary: "ip", defaultArgs: ["-j", "addr"] }],
537
+ ["ip-route", { binary: "ip", defaultArgs: ["-j", "route"] }],
538
+ ["ss", { binary: "ss", defaultArgs: ["-tln"] }]
539
+ ]);
540
+ async function run(name, args) {
541
+ const spec = commandSpecs.get(name);
542
+ if (!spec) {
543
+ throw new UnknownParserError(name);
544
+ }
545
+ const raw = await runCommand(spec.binary, args ?? spec.defaultArgs);
546
+ return parse(name, raw);
547
+ }
548
+ // Annotate the CommonJS export names for ESM import in node:
549
+ 0 && (module.exports = {
550
+ CommandNotFoundError,
551
+ UnknownParserError,
552
+ parse,
553
+ registerParser,
554
+ run
555
+ });
556
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts","../src/parsers/ps.ts","../src/parsers/_table.ts","../src/parsers/df.ts","../src/parsers/du.ts","../src/parsers/free.ts","../src/parsers/lsof.ts","../src/parsers/mount.ts","../src/parsers/who.ts","../src/parsers/uptime.ts","../src/parsers/ip.ts","../src/parsers/ss.ts","../src/registry.ts","../src/exec.ts","../src/types.ts"],"sourcesContent":["import { registry, registerParser, type BuiltinCommandName } from \"./registry.js\";\nimport { runCommand } from \"./exec.js\";\nimport { UnknownParserError } from \"./types.js\";\n\nexport { registerParser };\nexport type { BuiltinCommandName };\nexport {\n CommandNotFoundError,\n UnknownParserError,\n type ParserDefinition,\n} from \"./types.js\";\n\nexport type { ProcessInfo } from \"./parsers/ps.js\";\nexport type { DiskUsage } from \"./parsers/df.js\";\nexport type { DirSize } from \"./parsers/du.js\";\nexport type { MemoryInfo } from \"./parsers/free.js\";\nexport type { OpenFile } from \"./parsers/lsof.js\";\nexport type { MountPoint } from \"./parsers/mount.js\";\nexport type { LoggedInUser } from \"./parsers/who.js\";\nexport type { UptimeInfo } from \"./parsers/uptime.js\";\nexport type { NetworkInterface, RouteEntry } from \"./parsers/ip.js\";\nexport type { Socket } from \"./parsers/ss.js\";\n\n/**\n * 生のコマンド出力テキストをパースし、Zodで検証した結果を返す。\n * コマンドの実行は行わない(エージェント等が既に取得した出力を渡すケースを想定)。\n */\nexport function parse<T = unknown>(name: string, raw: string): T {\n const definition = registry.get(name);\n if (!definition) {\n throw new UnknownParserError(name);\n }\n const result = definition.parse(raw);\n return definition.schema.parse(result) as T;\n}\n\ninterface CommandSpec {\n binary: string;\n defaultArgs: string[];\n}\n\nconst commandSpecs = new Map<BuiltinCommandName, CommandSpec>([\n [\"ps\", { binary: \"ps\", defaultArgs: [\"aux\"] }],\n [\"df\", { binary: \"df\", defaultArgs: [\"-k\"] }],\n [\"du\", { binary: \"du\", defaultArgs: [\"-k\"] }],\n [\"free\", { binary: \"free\", defaultArgs: [\"-b\"] }],\n [\"lsof\", { binary: \"lsof\", defaultArgs: [\"-F\", \"pcufTtn\"] }],\n [\"mount\", { binary: \"mount\", defaultArgs: [] }],\n [\"who\", { binary: \"who\", defaultArgs: [] }],\n [\"uptime\", { binary: \"uptime\", defaultArgs: [] }],\n [\"ip-addr\", { binary: \"ip\", defaultArgs: [\"-j\", \"addr\"] }],\n [\"ip-route\", { binary: \"ip\", defaultArgs: [\"-j\", \"route\"] }],\n [\"ss\", { binary: \"ss\", defaultArgs: [\"-tln\"] }],\n]);\n\n/**\n * 組み込みコマンドを実行し、その出力をパースして返す。\n * 引数を省略すると各パーサーの想定するデフォルト引数(`ps aux`等)を使う。\n */\nexport async function run<T = unknown>(\n name: BuiltinCommandName,\n args?: string[],\n): Promise<T> {\n const spec = commandSpecs.get(name);\n if (!spec) {\n throw new UnknownParserError(name);\n }\n const raw = await runCommand(spec.binary, args ?? spec.defaultArgs);\n return parse<T>(name, raw);\n}\n","import { z } from \"zod\";\nimport type { ParserDefinition } from \"../types.js\";\nimport { splitNonEmptyLines } from \"./_table.js\";\n\nexport const ProcessInfoSchema = z.object({\n user: z.string(),\n pid: z.number().int(),\n cpu: z.number(),\n mem: z.number(),\n vsz: z.number().int(),\n rss: z.number().int(),\n tty: z.string(),\n stat: z.string(),\n start: z.string(),\n time: z.string(),\n command: z.string(),\n});\n\nexport type ProcessInfo = z.infer<typeof ProcessInfoSchema>;\n\nconst NUM_FIXED_COLUMNS = 10;\n\nfunction parsePsAux(raw: string): unknown {\n const lines = splitNonEmptyLines(raw);\n const dataLines = lines.slice(1);\n\n return dataLines.map((line) => {\n const parts = line.trim().split(/\\s+/);\n const fixed = parts.slice(0, NUM_FIXED_COLUMNS);\n const command = parts.slice(NUM_FIXED_COLUMNS).join(\" \");\n const [user, pid, cpu, mem, vsz, rss, tty, stat, start, time] = fixed;\n\n return {\n user,\n pid: Number(pid),\n cpu: Number(cpu),\n mem: Number(mem),\n vsz: Number(vsz),\n rss: Number(rss),\n tty,\n stat,\n start,\n time,\n command,\n };\n });\n}\n\nexport const psParser: ParserDefinition<ProcessInfo[]> = {\n schema: z.array(ProcessInfoSchema),\n parse: parsePsAux,\n};\n","/**\n * ヘッダー行から列の開始位置を検出し、各データ行を列名→値のオブジェクトに変換する。\n * 最後の列は値の中にスペースを含みうるため、末尾まで含めて切り出す。\n */\nexport function parseFixedColumnTable(\n lines: string[],\n headerNames: string[],\n): Record<string, string>[] {\n if (lines.length === 0) return [];\n const header = lines[0]!;\n const starts = headerNames.map((name) => {\n const idx = header.indexOf(name);\n if (idx === -1) {\n throw new Error(`Header column \"${name}\" not found in: ${header}`);\n }\n return idx;\n });\n\n const rows = lines.slice(1).filter((l) => l.trim().length > 0);\n\n return rows.map((line) => {\n const record: Record<string, string> = {};\n for (let i = 0; i < headerNames.length; i++) {\n const start = starts[i]!;\n const end = i + 1 < starts.length ? starts[i + 1]! : line.length;\n record[headerNames[i]!] = line.slice(start, end).trim();\n }\n return record;\n });\n}\n\nexport function splitNonEmptyLines(text: string): string[] {\n return text.split(\"\\n\").filter((l) => l.trim().length > 0);\n}\n","import { z } from \"zod\";\nimport type { ParserDefinition } from \"../types.js\";\nimport { splitNonEmptyLines } from \"./_table.js\";\n\nexport const DiskUsageSchema = z.object({\n filesystem: z.string(),\n blocksKb: z.number().int(),\n usedKb: z.number().int(),\n availableKb: z.number().int(),\n usePercent: z.number(),\n mountedOn: z.string(),\n});\n\nexport type DiskUsage = z.infer<typeof DiskUsageSchema>;\n\nfunction parseDf(raw: string): unknown {\n const lines = splitNonEmptyLines(raw);\n const dataLines = lines.slice(1);\n\n return dataLines.map((line) => {\n const parts = line.trim().split(/\\s+/);\n const filesystem = parts[0];\n const blocksKb = parts[1];\n const usedKb = parts[2];\n const availableKb = parts[3];\n const usePercent = parts[4];\n const mountedOn = parts.slice(5).join(\" \");\n\n return {\n filesystem,\n blocksKb: Number(blocksKb),\n usedKb: Number(usedKb),\n availableKb: Number(availableKb),\n usePercent: Number(String(usePercent).replace(\"%\", \"\")),\n mountedOn,\n };\n });\n}\n\nexport const dfParser: ParserDefinition<DiskUsage[]> = {\n schema: z.array(DiskUsageSchema),\n parse: parseDf,\n};\n","import { z } from \"zod\";\nimport type { ParserDefinition } from \"../types.js\";\nimport { splitNonEmptyLines } from \"./_table.js\";\n\nexport const DirSizeSchema = z.object({\n sizeKb: z.number().int(),\n path: z.string(),\n});\n\nexport type DirSize = z.infer<typeof DirSizeSchema>;\n\nfunction parseDu(raw: string): unknown {\n const lines = splitNonEmptyLines(raw);\n\n return lines.map((line) => {\n const match = line.match(/^(\\d+)\\s+(.+)$/);\n if (!match) {\n throw new Error(`Unrecognized du line: ${line}`);\n }\n const [, sizeKb, path] = match;\n return { sizeKb: Number(sizeKb), path };\n });\n}\n\nexport const duParser: ParserDefinition<DirSize[]> = {\n schema: z.array(DirSizeSchema),\n parse: parseDu,\n};\n","import { z } from \"zod\";\nimport type { ParserDefinition } from \"../types.js\";\nimport { splitNonEmptyLines } from \"./_table.js\";\n\nexport const MemoryInfoSchema = z.object({\n mem: z.object({\n total: z.number().int(),\n used: z.number().int(),\n free: z.number().int(),\n shared: z.number().int(),\n buffCache: z.number().int(),\n available: z.number().int(),\n }),\n swap: z.object({\n total: z.number().int(),\n used: z.number().int(),\n free: z.number().int(),\n }),\n});\n\nexport type MemoryInfo = z.infer<typeof MemoryInfoSchema>;\n\nfunction parseFree(raw: string): unknown {\n const lines = splitNonEmptyLines(raw);\n const memLine = lines.find((l) => l.startsWith(\"Mem:\"));\n const swapLine = lines.find((l) => l.startsWith(\"Swap:\"));\n if (!memLine || !swapLine) {\n throw new Error(\"Could not find Mem: or Swap: line in free output\");\n }\n\n const [, total, used, free, shared, buffCache, available] = memLine\n .trim()\n .split(/\\s+/);\n const [, sTotal, sUsed, sFree] = swapLine.trim().split(/\\s+/);\n\n return {\n mem: {\n total: Number(total),\n used: Number(used),\n free: Number(free),\n shared: Number(shared),\n buffCache: Number(buffCache),\n available: Number(available),\n },\n swap: {\n total: Number(sTotal),\n used: Number(sUsed),\n free: Number(sFree),\n },\n };\n}\n\nexport const freeParser: ParserDefinition<MemoryInfo> = {\n schema: MemoryInfoSchema,\n parse: parseFree,\n};\n","import { z } from \"zod\";\nimport type { ParserDefinition } from \"../types.js\";\nimport { splitNonEmptyLines } from \"./_table.js\";\n\nexport const OpenFileSchema = z.object({\n pid: z.number().int(),\n command: z.string(),\n user: z.string(),\n fd: z.string(),\n type: z.string(),\n name: z.string(),\n});\n\nexport type OpenFile = z.infer<typeof OpenFileSchema>;\n\n/**\n * lsof -F pcuTtn の出力をパースする。\n * `-F` モードは1フィールド1行で、行頭の1文字がフィールド識別子(p,c,u,T,t,n等)。\n * p(PID)行が新しいプロセスの開始を意味し、以降のレコードはそのPID/COMMAND/USERを継承する。\n */\nfunction parseLsof(raw: string): unknown {\n const lines = splitNonEmptyLines(raw);\n const results: Record<string, unknown>[] = [];\n\n let currentPid: number | undefined;\n let currentCommand: string | undefined;\n let currentUser: string | undefined;\n let pendingFd: string | undefined;\n let pendingType: string | undefined;\n\n const flush = (name: string) => {\n if (currentPid === undefined) return;\n results.push({\n pid: currentPid,\n command: currentCommand ?? \"\",\n user: currentUser ?? \"\",\n fd: pendingFd ?? \"\",\n type: pendingType ?? \"\",\n name,\n });\n };\n\n for (const line of lines) {\n const tag = line[0];\n const value = line.slice(1);\n switch (tag) {\n case \"p\":\n currentPid = Number(value);\n break;\n case \"c\":\n currentCommand = value;\n break;\n case \"u\":\n currentUser = value;\n break;\n case \"f\":\n pendingFd = value;\n break;\n case \"T\":\n // protocol state line (TCP state etc.) — TYPE行の前に来る場合があるため独立フィールドとして無視\n break;\n case \"t\":\n pendingType = value;\n break;\n case \"n\":\n flush(value);\n break;\n default:\n break;\n }\n }\n\n return results;\n}\n\nexport const lsofParser: ParserDefinition<OpenFile[]> = {\n schema: z.array(OpenFileSchema),\n parse: parseLsof,\n};\n","import { z } from \"zod\";\nimport type { ParserDefinition } from \"../types.js\";\nimport { splitNonEmptyLines } from \"./_table.js\";\n\nexport const MountPointSchema = z.object({\n device: z.string(),\n path: z.string(),\n fsType: z.string(),\n options: z.array(z.string()),\n});\n\nexport type MountPoint = z.infer<typeof MountPointSchema>;\n\nconst MOUNT_LINE_RE = /^(\\S+) on (.+) type (\\S+) \\((.*)\\)$/;\n\nfunction parseMount(raw: string): unknown {\n const lines = splitNonEmptyLines(raw);\n\n return lines.map((line) => {\n const match = line.match(MOUNT_LINE_RE);\n if (!match) {\n throw new Error(`Unrecognized mount line: ${line}`);\n }\n const [, device, path, fsType, optionsStr] = match;\n return {\n device,\n path,\n fsType,\n options: optionsStr ? optionsStr.split(\",\") : [],\n };\n });\n}\n\nexport const mountParser: ParserDefinition<MountPoint[]> = {\n schema: z.array(MountPointSchema),\n parse: parseMount,\n};\n","import { z } from \"zod\";\nimport type { ParserDefinition } from \"../types.js\";\nimport { splitNonEmptyLines } from \"./_table.js\";\n\nexport const LoggedInUserSchema = z.object({\n user: z.string(),\n tty: z.string(),\n loginTime: z.string(),\n});\n\nexport type LoggedInUser = z.infer<typeof LoggedInUserSchema>;\n\nconst WHO_LINE_RE = /^(\\S+)\\s+(\\S+)\\s+(.+)$/;\n\nfunction parseWho(raw: string): unknown {\n const lines = splitNonEmptyLines(raw);\n\n return lines.map((line) => {\n const match = line.match(WHO_LINE_RE);\n if (!match) {\n throw new Error(`Unrecognized who line: ${line}`);\n }\n const [, user, tty, loginTime] = match;\n return { user, tty, loginTime: loginTime?.trim() };\n });\n}\n\nexport const whoParser: ParserDefinition<LoggedInUser[]> = {\n schema: z.array(LoggedInUserSchema),\n parse: parseWho,\n};\n","import { z } from \"zod\";\nimport type { ParserDefinition } from \"../types.js\";\n\nexport const UptimeInfoSchema = z.object({\n currentTime: z.string(),\n upDays: z.number().int(),\n upHours: z.number().int(),\n upMinutes: z.number().int(),\n users: z.number().int(),\n loadAverage1m: z.number(),\n loadAverage5m: z.number(),\n loadAverage15m: z.number(),\n});\n\nexport type UptimeInfo = z.infer<typeof UptimeInfoSchema>;\n\nconst UPTIME_RE =\n /^\\s*(\\S+)\\s+up\\s+(.+?),\\s+(\\d+)\\s+users?,\\s+load average:\\s*([\\d.]+),\\s*([\\d.]+),\\s*([\\d.]+)/;\n\nfunction parseUpDuration(upStr: string): {\n days: number;\n hours: number;\n minutes: number;\n} {\n // 例: \"1:08\", \"1 day, 2:03\", \"5 min\"\n const dayMatch = upStr.match(/(\\d+)\\s+days?/);\n const days = dayMatch ? Number(dayMatch[1]) : 0;\n\n const hmMatch = upStr.match(/(\\d+):(\\d+)/);\n if (hmMatch) {\n return { days, hours: Number(hmMatch[1]), minutes: Number(hmMatch[2]) };\n }\n\n const minMatch = upStr.match(/(\\d+)\\s+min/);\n if (minMatch) {\n return { days, hours: 0, minutes: Number(minMatch[1]) };\n }\n\n return { days, hours: 0, minutes: 0 };\n}\n\nfunction parseUptime(raw: string): unknown {\n const line = raw.trim();\n const match = line.match(UPTIME_RE);\n if (!match) {\n throw new Error(`Unrecognized uptime output: ${line}`);\n }\n const [, currentTime, upStr, users, l1, l5, l15] = match;\n const { days, hours, minutes } = parseUpDuration(upStr ?? \"\");\n\n return {\n currentTime,\n upDays: days,\n upHours: hours,\n upMinutes: minutes,\n users: Number(users),\n loadAverage1m: Number(l1),\n loadAverage5m: Number(l5),\n loadAverage15m: Number(l15),\n };\n}\n\nexport const uptimeParser: ParserDefinition<UptimeInfo> = {\n schema: UptimeInfoSchema,\n parse: parseUptime,\n};\n","import { z } from \"zod\";\nimport type { ParserDefinition } from \"../types.js\";\n\nexport const AddrInfoSchema = z.object({\n family: z.string(),\n local: z.string(),\n prefixlen: z.number().int(),\n broadcast: z.string().optional(),\n scope: z.string(),\n label: z.string().optional(),\n valid_life_time: z.number(),\n preferred_life_time: z.number(),\n});\n\nexport const NetworkInterfaceSchema = z.object({\n ifindex: z.number().int(),\n ifname: z.string(),\n flags: z.array(z.string()),\n mtu: z.number().int(),\n qdisc: z.string(),\n operstate: z.string(),\n group: z.string(),\n txqlen: z.number().int().optional(),\n link_type: z.string(),\n address: z.string(),\n broadcast: z.string().optional(),\n addr_info: z.array(AddrInfoSchema),\n});\n\nexport type NetworkInterface = z.infer<typeof NetworkInterfaceSchema>;\n\n/**\n * `ip -j addr` はネイティブでJSONを出力するため、変換は不要。\n * JSON.parse + Zodスキーマ検証のみを行い、構造保証された型を返す。\n */\nfunction parseIpAddr(raw: string): unknown {\n return JSON.parse(raw);\n}\n\nexport const ipAddrParser: ParserDefinition<NetworkInterface[]> = {\n schema: z.array(NetworkInterfaceSchema),\n parse: parseIpAddr,\n};\n\nexport const RouteEntrySchema = z.object({\n dst: z.string(),\n gateway: z.string().optional(),\n dev: z.string().optional(),\n protocol: z.string().optional(),\n scope: z.string().optional(),\n prefsrc: z.string().optional(),\n flags: z.array(z.string()),\n});\n\nexport type RouteEntry = z.infer<typeof RouteEntrySchema>;\n\nfunction parseIpRoute(raw: string): unknown {\n return JSON.parse(raw);\n}\n\nexport const ipRouteParser: ParserDefinition<RouteEntry[]> = {\n schema: z.array(RouteEntrySchema),\n parse: parseIpRoute,\n};\n","import { z } from \"zod\";\nimport type { ParserDefinition } from \"../types.js\";\nimport { splitNonEmptyLines } from \"./_table.js\";\n\nexport const SocketSchema = z.object({\n state: z.string(),\n recvQ: z.number().int(),\n sendQ: z.number().int(),\n localAddress: z.string(),\n localPort: z.string(),\n peerAddress: z.string(),\n peerPort: z.string(),\n process: z.string().optional(),\n});\n\nexport type Socket = z.infer<typeof SocketSchema>;\n\n/**\n * \"host:port\" 形式からportを切り出す。IPv6は `[::1]:631` のように\n * 括弧で囲まれるため、最後の `:` で分割すれば host/port とも安全に取れる。\n */\nfunction splitAddrPort(token: string): { address: string; port: string } {\n const lastColon = token.lastIndexOf(\":\");\n if (lastColon === -1) {\n return { address: token, port: \"\" };\n }\n return {\n address: token.slice(0, lastColon),\n port: token.slice(lastColon + 1),\n };\n}\n\nfunction parseSs(raw: string): unknown {\n const lines = splitNonEmptyLines(raw);\n const dataLines = lines.slice(1);\n\n return dataLines.map((line) => {\n const parts = line.trim().split(/\\s+/);\n const [state, recvQ, sendQ, localToken, peerAndRest] = parts;\n const local = splitAddrPort(localToken ?? \"\");\n\n // peer列の直後にProcess列がスペースなしで連結されるケース(`*:* users:(...)`)があるため\n // 残りの文字列から最初の空白までをpeerトークンとし、それ以降をprocessとする\n const rest = parts.slice(4).join(\" \");\n const peerMatch = rest.match(/^(\\S+)\\s*(.*)$/);\n const peerToken = peerMatch?.[1] ?? peerAndRest ?? \"\";\n const processPart = peerMatch?.[2]?.trim();\n const peer = splitAddrPort(peerToken);\n\n return {\n state,\n recvQ: Number(recvQ),\n sendQ: Number(sendQ),\n localAddress: local.address,\n localPort: local.port,\n peerAddress: peer.address,\n peerPort: peer.port,\n process: processPart || undefined,\n };\n });\n}\n\nexport const ssParser: ParserDefinition<Socket[]> = {\n schema: z.array(SocketSchema),\n parse: parseSs,\n};\n","import type { AnyParserDefinition } from \"./types.js\";\nimport { psParser } from \"./parsers/ps.js\";\nimport { dfParser } from \"./parsers/df.js\";\nimport { duParser } from \"./parsers/du.js\";\nimport { freeParser } from \"./parsers/free.js\";\nimport { lsofParser } from \"./parsers/lsof.js\";\nimport { mountParser } from \"./parsers/mount.js\";\nimport { whoParser } from \"./parsers/who.js\";\nimport { uptimeParser } from \"./parsers/uptime.js\";\nimport { ipAddrParser, ipRouteParser } from \"./parsers/ip.js\";\nimport { ssParser } from \"./parsers/ss.js\";\n\nconst builtinParsers: Record<string, AnyParserDefinition> = {\n ps: psParser as AnyParserDefinition,\n df: dfParser as AnyParserDefinition,\n du: duParser as AnyParserDefinition,\n free: freeParser as AnyParserDefinition,\n lsof: lsofParser as AnyParserDefinition,\n mount: mountParser as AnyParserDefinition,\n who: whoParser as AnyParserDefinition,\n uptime: uptimeParser as AnyParserDefinition,\n \"ip-addr\": ipAddrParser as AnyParserDefinition,\n \"ip-route\": ipRouteParser as AnyParserDefinition,\n ss: ssParser as AnyParserDefinition,\n};\n\nexport const registry = new Map<string, AnyParserDefinition>(\n Object.entries(builtinParsers),\n);\n\nexport function registerParser<T>(\n name: string,\n definition: AnyParserDefinition,\n): void {\n registry.set(name, definition as AnyParserDefinition);\n}\n\nexport type BuiltinCommandName = keyof typeof builtinParsers;\n","import { execFile } from \"node:child_process\";\nimport { promisify } from \"node:util\";\nimport { CommandNotFoundError } from \"./types.js\";\n\nconst execFileAsync = promisify(execFile);\n\nexport async function runCommand(\n command: string,\n args: string[],\n): Promise<string> {\n try {\n const { stdout } = await execFileAsync(command, args, {\n maxBuffer: 1024 * 1024 * 32,\n });\n return stdout;\n } catch (err) {\n const nodeErr = err as NodeJS.ErrnoException;\n if (nodeErr.code === \"ENOENT\") {\n throw new CommandNotFoundError(command);\n }\n throw err;\n }\n}\n","import type { z } from \"zod\";\n\nexport interface ParserDefinition<T> {\n schema: z.ZodType<T>;\n parse: (raw: string) => unknown;\n}\n\nexport type AnyParserDefinition = ParserDefinition<unknown>;\n\nexport class CommandNotFoundError extends Error {\n constructor(public readonly command: string) {\n super(`Command not found: \"${command}\". Is it installed and on PATH?`);\n this.name = \"CommandNotFoundError\";\n }\n}\n\nexport class UnknownParserError extends Error {\n constructor(public readonly name: string) {\n super(\n `No parser registered for \"${name}\". Use registerParser() to add a custom one.`,\n );\n this.name = \"UnknownParserError\";\n }\n}\n"],"mappings":"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","names":["import_zod","import_zod","import_zod","import_zod","import_zod","import_zod","import_zod","import_zod","import_zod"]}