fullnative 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.
Files changed (72) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/LICENSE +21 -0
  3. package/README.md +161 -0
  4. package/dist/core/env/env.d.ts +34 -0
  5. package/dist/core/env/env.d.ts.map +1 -0
  6. package/dist/core/env/env.js +134 -0
  7. package/dist/core/env/env.js.map +1 -0
  8. package/dist/core/env/index.d.ts +10 -0
  9. package/dist/core/env/index.d.ts.map +1 -0
  10. package/dist/core/env/index.js +10 -0
  11. package/dist/core/env/index.js.map +1 -0
  12. package/dist/core/file/File.d.ts +246 -0
  13. package/dist/core/file/File.d.ts.map +1 -0
  14. package/dist/core/file/File.js +397 -0
  15. package/dist/core/file/File.js.map +1 -0
  16. package/dist/core/file/Folder.d.ts +235 -0
  17. package/dist/core/file/Folder.d.ts.map +1 -0
  18. package/dist/core/file/Folder.js +427 -0
  19. package/dist/core/file/Folder.js.map +1 -0
  20. package/dist/core/index.d.ts +6 -0
  21. package/dist/core/index.d.ts.map +1 -0
  22. package/dist/core/index.js +6 -0
  23. package/dist/core/index.js.map +1 -0
  24. package/dist/core/process/Command.d.ts +94 -0
  25. package/dist/core/process/Command.d.ts.map +1 -0
  26. package/dist/core/process/Command.js +143 -0
  27. package/dist/core/process/Command.js.map +1 -0
  28. package/dist/core/process/LiveProcess.d.ts +134 -0
  29. package/dist/core/process/LiveProcess.d.ts.map +1 -0
  30. package/dist/core/process/LiveProcess.js +214 -0
  31. package/dist/core/process/LiveProcess.js.map +1 -0
  32. package/dist/core/process/Process.d.ts +108 -0
  33. package/dist/core/process/Process.d.ts.map +1 -0
  34. package/dist/core/process/Process.js +138 -0
  35. package/dist/core/process/Process.js.map +1 -0
  36. package/dist/core/process/ProcessError.d.ts +50 -0
  37. package/dist/core/process/ProcessError.d.ts.map +1 -0
  38. package/dist/core/process/ProcessError.js +62 -0
  39. package/dist/core/process/ProcessError.js.map +1 -0
  40. package/dist/core/process/Result.d.ts +61 -0
  41. package/dist/core/process/Result.d.ts.map +1 -0
  42. package/dist/core/process/Result.js +89 -0
  43. package/dist/core/process/Result.js.map +1 -0
  44. package/dist/core/process/index.d.ts +7 -0
  45. package/dist/core/process/index.d.ts.map +1 -0
  46. package/dist/core/process/index.js +6 -0
  47. package/dist/core/process/index.js.map +1 -0
  48. package/dist/core/process/types.d.ts +17 -0
  49. package/dist/core/process/types.d.ts.map +1 -0
  50. package/dist/core/process/types.js +2 -0
  51. package/dist/core/process/types.js.map +1 -0
  52. package/dist/core/shell/Job.d.ts +149 -0
  53. package/dist/core/shell/Job.d.ts.map +1 -0
  54. package/dist/core/shell/Job.js +218 -0
  55. package/dist/core/shell/Job.js.map +1 -0
  56. package/dist/core/shell/Shell.d.ts +275 -0
  57. package/dist/core/shell/Shell.d.ts.map +1 -0
  58. package/dist/core/shell/Shell.js +461 -0
  59. package/dist/core/shell/Shell.js.map +1 -0
  60. package/dist/core/shell/index.d.ts +4 -0
  61. package/dist/core/shell/index.d.ts.map +1 -0
  62. package/dist/core/shell/index.js +3 -0
  63. package/dist/core/shell/index.js.map +1 -0
  64. package/dist/core/shell/types.d.ts +30 -0
  65. package/dist/core/shell/types.d.ts.map +1 -0
  66. package/dist/core/shell/types.js +2 -0
  67. package/dist/core/shell/types.js.map +1 -0
  68. package/dist/index.d.ts +2 -0
  69. package/dist/index.d.ts.map +1 -0
  70. package/dist/index.js +2 -0
  71. package/dist/index.js.map +1 -0
  72. package/package.json +64 -0
@@ -0,0 +1,143 @@
1
+ import { spawn } from "node:child_process";
2
+ import { LiveProcess } from "./LiveProcess.js";
3
+ /**
4
+ * Builder inmutable para construir un comando antes de ejecutarlo.
5
+ * Permite configurar opciones de forma fluida y luego ejecutar.
6
+ */
7
+ export class Command {
8
+ _command;
9
+ _args;
10
+ _options;
11
+ /**
12
+ * Crea un nuevo `Command`.
13
+ *
14
+ * @param command - Comando a ejecutar.
15
+ * @param args - Argumentos del comando (por defecto, vacío).
16
+ * @param options - Opciones de ejecución (por defecto, vacío).
17
+ */
18
+ constructor(command, args = [], options = {}) {
19
+ this._command = command;
20
+ this._args = args;
21
+ this._options = options;
22
+ }
23
+ /** Comando a ejecutar. */
24
+ get command() {
25
+ return this._command;
26
+ }
27
+ /** Argumentos del comando. */
28
+ get args() {
29
+ return this._args;
30
+ }
31
+ /**
32
+ * Crea una nueva instancia de `Command` con argumentos adicionales
33
+ * añadidos a los existentes.
34
+ *
35
+ * @param args - Argumentos a añadir.
36
+ * @returns Un nuevo `Command` inmutable con los argumentos combinados.
37
+ */
38
+ withArgs(...args) {
39
+ return new Command(this._command, [...this._args, ...args], this._options);
40
+ }
41
+ /**
42
+ * Crea una nueva instancia de `Command` cambiando el directorio de trabajo.
43
+ *
44
+ * @param cwd - Ruta del directorio de trabajo.
45
+ * @returns Un nuevo `Command` inmutable con el `cwd` actualizado.
46
+ */
47
+ in(cwd) {
48
+ return new Command(this._command, this._args, { ...this._options, cwd });
49
+ }
50
+ /**
51
+ * Crea una nueva instancia de `Command` con variables de entorno adicionales,
52
+ * fusionadas con las existentes (o con `process.env` si no se habían definido).
53
+ *
54
+ * @param env - Variables de entorno a añadir o sobrescribir.
55
+ * @returns Un nuevo `Command` inmutable con el entorno actualizado.
56
+ */
57
+ withEnv(env) {
58
+ const baseEnv = this._options.env ?? process.env;
59
+ return new Command(this._command, this._args, {
60
+ ...this._options,
61
+ env: { ...baseEnv, ...env },
62
+ });
63
+ }
64
+ /**
65
+ * Crea una nueva instancia de `Command` con un timeout en milisegundos.
66
+ * Al expirar, el proceso se matará con `SIGTERM`.
67
+ *
68
+ * @param ms - Tiempo máximo de ejecución en milisegundos.
69
+ * @returns Un nuevo `Command` inmutable con el timeout configurado.
70
+ */
71
+ withTimeout(ms) {
72
+ return new Command(this._command, this._args, { ...this._options, timeout: ms });
73
+ }
74
+ /**
75
+ * Crea una nueva instancia de `Command` que envía datos por stdin al iniciar.
76
+ *
77
+ * @param data - Datos a enviar por stdin (texto o buffer).
78
+ * @returns Un nuevo `Command` inmutable con la entrada configurada.
79
+ */
80
+ withInput(data) {
81
+ return new Command(this._command, this._args, { ...this._options, input: data });
82
+ }
83
+ /**
84
+ * Crea una nueva instancia de `Command` que lanza un `ProcessError` si el
85
+ * proceso termina con código de salida distinto de 0. Esto hace que
86
+ * `run()` rechace la promesa en lugar de devolver un `Result` fallido.
87
+ *
88
+ * @returns Un nuevo `Command` inmutable con `rejectOnNonZero` activado.
89
+ */
90
+ throwOnError() {
91
+ return new Command(this._command, this._args, {
92
+ ...this._options,
93
+ rejectOnNonZero: true,
94
+ });
95
+ }
96
+ /**
97
+ * Inicia el comando y devuelve un `LiveProcess` para interactuar en vivo
98
+ * con stdin/stdout/stderr.
99
+ *
100
+ * @returns Un `LiveProcess` que envuelve el proceso hijo recién iniciado.
101
+ */
102
+ spawn() {
103
+ const { timeout, input, rejectOnNonZero, ...spawnOpts } = this._options;
104
+ const child = spawn(this._command, [...this._args], spawnOpts);
105
+ const handle = new LiveProcess(this._command, this._args, child);
106
+ if (input !== undefined && child.stdin) {
107
+ child.stdin.write(input);
108
+ child.stdin.end();
109
+ }
110
+ if (timeout) {
111
+ setTimeout(() => {
112
+ if (handle.running)
113
+ handle.kill("SIGTERM");
114
+ }, timeout).unref();
115
+ }
116
+ return handle;
117
+ }
118
+ /**
119
+ * Ejecuta el comando, espera a que termine y devuelve el resultado.
120
+ * Si se configuró `throwOnError`, rechaza con `ProcessError` si el código
121
+ * de salida no es 0.
122
+ *
123
+ * @returns El `Result` de la ejecución.
124
+ * @throws {ProcessError} Si `rejectOnNonZero` está activo y el código de salida no es 0.
125
+ */
126
+ async run() {
127
+ const handle = this.spawn();
128
+ const result = await handle.wait();
129
+ if (this._options.rejectOnNonZero)
130
+ result.throwIfFailed();
131
+ return result;
132
+ }
133
+ /**
134
+ * Ejecuta el comando y devuelve solo stdout, con espacios en blanco
135
+ * eliminados de los extremos (trim).
136
+ *
137
+ * @returns El stdout del comando ya trimado.
138
+ */
139
+ async output() {
140
+ return (await this.run()).stdout.trim();
141
+ }
142
+ }
143
+ //# sourceMappingURL=Command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Command.js","sourceRoot":"","sources":["../../../src/core/process/Command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAI/C;;;GAGG;AACH,MAAM,OAAO,OAAO;IACD,QAAQ,CAAS;IACjB,KAAK,CAAoB;IACzB,QAAQ,CAAiB;IAE1C;;;;;;OAMG;IACH,YAAY,OAAe,EAAE,OAA0B,EAAE,EAAE,UAA0B,EAAE;QACrF,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;QACxB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;IAC1B,CAAC;IAED,0BAA0B;IAC1B,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED,8BAA8B;IAC9B,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED;;;;;;OAMG;IACH,QAAQ,CAAC,GAAG,IAAc;QACxB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC7E,CAAC;IAED;;;;;OAKG;IACH,EAAE,CAAC,GAAW;QACZ,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC;IAC3E,CAAC;IAED;;;;;;OAMG;IACH,OAAO,CAAC,GAA2B;QACjC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC;QACjD,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,EAAE;YAC5C,GAAG,IAAI,CAAC,QAAQ;YAChB,GAAG,EAAE,EAAE,GAAG,OAAO,EAAE,GAAG,GAAG,EAAE;SAC5B,CAAC,CAAC;IACL,CAAC;IAED;;;;;;OAMG;IACH,WAAW,CAAC,EAAU;QACpB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;IACnF,CAAC;IAED;;;;;OAKG;IACH,SAAS,CAAC,IAAqB;QAC7B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACnF,CAAC;IAED;;;;;;OAMG;IACH,YAAY;QACV,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,EAAE;YAC5C,GAAG,IAAI,CAAC,QAAQ;YAChB,eAAe,EAAE,IAAI;SACtB,CAAC,CAAC;IACL,CAAC;IAED;;;;;OAKG;IACH,KAAK;QACH,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,GAAG,SAAS,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC;QACxE,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,SAAS,CAAC,CAAC;QAC/D,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAEjE,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;YACvC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACzB,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QACpB,CAAC;QAED,IAAI,OAAO,EAAE,CAAC;YACZ,UAAU,CAAC,GAAG,EAAE;gBACd,IAAI,MAAM,CAAC,OAAO;oBAAE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC7C,CAAC,EAAE,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC;QACtB,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,GAAG;QACP,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;QACnC,IAAI,IAAI,CAAC,QAAQ,CAAC,eAAe;YAAE,MAAM,CAAC,aAAa,EAAE,CAAC;QAC1D,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,MAAM;QACV,OAAO,CAAC,MAAM,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IAC1C,CAAC;CACF"}
@@ -0,0 +1,134 @@
1
+ import { type ChildProcess } from "node:child_process";
2
+ import { Readable, Writable } from "node:stream";
3
+ import { Result } from "./Result.js";
4
+ /**
5
+ * Representa un proceso en ejecución (o ya finalizado).
6
+ * Permite interactuar con su stdin/stdout/stderr en vivo.
7
+ */
8
+ export declare class LiveProcess {
9
+ /** Proceso hijo nativo de `child_process`. */
10
+ readonly child: ChildProcess;
11
+ /** Comando ejecutado. */
12
+ readonly command: string;
13
+ /** Argumentos pasados al comando. */
14
+ readonly args: readonly string[];
15
+ /** Fecha de inicio de la ejecución. */
16
+ readonly startedAt: Date;
17
+ private readonly _stdoutChunks;
18
+ private readonly _stderrChunks;
19
+ private _exitCode;
20
+ private _signal;
21
+ private _ended;
22
+ private _killed;
23
+ /**
24
+ * Promesa que se resuelve con un `Result` cuando el proceso termina,
25
+ * o se rechaza con un `ProcessError` si el proceso no pudo iniciarse.
26
+ */
27
+ readonly onExitPromise: Promise<Result>;
28
+ /**
29
+ * Crea un `LiveProcess` a partir de un `ChildProcess` ya iniciado.
30
+ *
31
+ * No se debe usar directamente; usar `Command.spawn()` o `Process.spawn()`.
32
+ *
33
+ * @param command - Comando ejecutado.
34
+ * @param args - Argumentos pasados al comando.
35
+ * @param child - Proceso hijo nativo de `child_process`.
36
+ */
37
+ constructor(command: string, args: readonly string[], child: ChildProcess);
38
+ /** Identificador del proceso asignado por el sistema operativo, o `undefined` si no se inició. */
39
+ get pid(): number | undefined;
40
+ /** `true` mientras el proceso sigue en ejecución. */
41
+ get running(): boolean;
42
+ /** `true` si el proceso ya terminó (naturalmente o por señal). */
43
+ get ended(): boolean;
44
+ /** Código de salida del proceso, o `null` si aún no termina o fue terminado por señal. */
45
+ get exitCode(): number | null;
46
+ /** Señal que terminó el proceso, o `null` si no fue por señal. */
47
+ get signal(): NodeJS.Signals | null;
48
+ /**
49
+ * `true` si el proceso fue matado explícitamente vía `kill()` o `forceKill()`.
50
+ *
51
+ * Se distingue de una terminación natural: este valor solo se vuelve
52
+ * `true` cuando el usuario llamó manualmente a un método de terminación.
53
+ */
54
+ get stopped(): boolean;
55
+ /** Milisegundos transcurridos desde el inicio del proceso hasta ahora (en vivo). */
56
+ get elapsed(): number;
57
+ /** Stream legible de stdout del proceso, o `null` si no está disponible. */
58
+ get stdout(): Readable | null;
59
+ /** Stream legible de stderr del proceso, o `null` si no está disponible. */
60
+ get stderr(): Readable | null;
61
+ /** Stream escribible de stdin del proceso, o `null` si no está disponible. */
62
+ get stdin(): Writable | null;
63
+ /**
64
+ * Stream legible que combina los chunks de stdout y stderr ya capturados
65
+ * en orden: primero todos los de stdout, luego los de stderr.
66
+ */
67
+ get combinedOutput(): Readable;
68
+ /**
69
+ * Escribe datos en stdin del proceso.
70
+ *
71
+ * @param data - Texto o buffer a escribir.
72
+ * @returns `true` si la escritura fue exitosa, `false` si no hay stdin disponible.
73
+ */
74
+ write(data: string | Buffer): boolean;
75
+ /**
76
+ * Envía una línea a stdin del proceso, añadiendo un salto de línea al final.
77
+ *
78
+ * @param line - Línea de texto a enviar.
79
+ * @returns `true` si la escritura fue exitosa, `false` si no hay stdin disponible.
80
+ */
81
+ sendLine(line: string): boolean;
82
+ /** Cierra stdin del proceso señalizando fin de entrada (EOF). */
83
+ endInput(): void;
84
+ /**
85
+ * Espera a que el proceso termine y devuelve el resultado.
86
+ *
87
+ * @returns El `Result` de la ejecución cuando el proceso termina.
88
+ * @throws {ProcessError} Si el proceso no pudo iniciarse (fallo de spawn).
89
+ */
90
+ wait(): Promise<Result>;
91
+ /**
92
+ * Envía una señal al proceso para terminarlo.
93
+ *
94
+ * @param signal - Señal a enviar (por defecto `SIGTERM`).
95
+ * @returns `true` si la señal se envió correctamente.
96
+ */
97
+ kill(signal?: NodeJS.Signals): boolean;
98
+ /**
99
+ * Fuerza la terminación inmediata del proceso enviando `SIGKILL`.
100
+ *
101
+ * @returns `true` si la señal se envió correctamente.
102
+ */
103
+ forceKill(): boolean;
104
+ /**
105
+ * Registra un callback que se ejecuta cuando el proceso termina.
106
+ *
107
+ * @param callback - Función que recibe el `Result` al finalizar.
108
+ * @returns `this` para encadenamiento.
109
+ */
110
+ onExit(callback: (result: Result) => void): this;
111
+ /**
112
+ * Registra un callback que se ejecuta por cada chunk de datos de stdout.
113
+ *
114
+ * @param callback - Función que recibe cada `Buffer` de stdout.
115
+ * @returns `this` para encadenamiento.
116
+ */
117
+ onStdout(callback: (chunk: Buffer) => void): this;
118
+ /**
119
+ * Registra un callback que se ejecuta por cada chunk de datos de stderr.
120
+ *
121
+ * @param callback - Función que recibe cada `Buffer` de stderr.
122
+ * @returns `this` para encadenamiento.
123
+ */
124
+ onStderr(callback: (chunk: Buffer) => void): this;
125
+ /**
126
+ * Registra un callback unificado que se ejecuta por cada chunk de stdout
127
+ * **o** stderr, sin distinguir el origen.
128
+ *
129
+ * @param callback - Función que recibe cada `Buffer` de stdout o stderr.
130
+ * @returns `this` para encadenamiento.
131
+ */
132
+ onOutput(callback: (chunk: Buffer) => void): this;
133
+ }
134
+ //# sourceMappingURL=LiveProcess.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LiveProcess.d.ts","sourceRoot":"","sources":["../../../src/core/process/LiveProcess.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAGrC;;;GAGG;AACH,qBAAa,WAAW;IACtB,8CAA8C;IAC9C,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;IAC7B,yBAAyB;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,qCAAqC;IACrC,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,uCAAuC;IACvC,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC;IACzB,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgB;IAC9C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgB;IAC9C,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,OAAO,CAA+B;IAC9C,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAS;IACxB;;;OAGG;IACH,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAExC;;;;;;;;OAQG;gBACS,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,KAAK,EAAE,YAAY;IAwCzE,kGAAkG;IAClG,IAAI,GAAG,IAAI,MAAM,GAAG,SAAS,CAE5B;IAED,qDAAqD;IACrD,IAAI,OAAO,IAAI,OAAO,CAErB;IAED,kEAAkE;IAClE,IAAI,KAAK,IAAI,OAAO,CAEnB;IAED,0FAA0F;IAC1F,IAAI,QAAQ,IAAI,MAAM,GAAG,IAAI,CAE5B;IAED,kEAAkE;IAClE,IAAI,MAAM,IAAI,MAAM,CAAC,OAAO,GAAG,IAAI,CAElC;IAED;;;;;OAKG;IACH,IAAI,OAAO,IAAI,OAAO,CAErB;IAED,oFAAoF;IACpF,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED,4EAA4E;IAC5E,IAAI,MAAM,IAAI,QAAQ,GAAG,IAAI,CAE5B;IAED,4EAA4E;IAC5E,IAAI,MAAM,IAAI,QAAQ,GAAG,IAAI,CAE5B;IAED,8EAA8E;IAC9E,IAAI,KAAK,IAAI,QAAQ,GAAG,IAAI,CAE3B;IAED;;;OAGG;IACH,IAAI,cAAc,IAAI,QAAQ,CAO7B;IAED;;;;;OAKG;IACH,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO;IAKrC;;;;;OAKG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI/B,iEAAiE;IACjE,QAAQ,IAAI,IAAI;IAIhB;;;;;OAKG;IACG,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC;IAI7B;;;;;OAKG;IACH,IAAI,CAAC,MAAM,GAAE,MAAM,CAAC,OAAmB,GAAG,OAAO;IAKjD;;;;OAIG;IACH,SAAS,IAAI,OAAO;IAKpB;;;;;OAKG;IACH,MAAM,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI;IAKhD;;;;;OAKG;IACH,QAAQ,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI;IAKjD;;;;;OAKG;IACH,QAAQ,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI;IAKjD;;;;;;OAMG;IACH,QAAQ,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI;CAKlD"}
@@ -0,0 +1,214 @@
1
+ import { Readable } from "node:stream";
2
+ import { Result } from "./Result.js";
3
+ import { ProcessError } from "./ProcessError.js";
4
+ /**
5
+ * Representa un proceso en ejecución (o ya finalizado).
6
+ * Permite interactuar con su stdin/stdout/stderr en vivo.
7
+ */
8
+ export class LiveProcess {
9
+ /** Proceso hijo nativo de `child_process`. */
10
+ child;
11
+ /** Comando ejecutado. */
12
+ command;
13
+ /** Argumentos pasados al comando. */
14
+ args;
15
+ /** Fecha de inicio de la ejecución. */
16
+ startedAt;
17
+ _stdoutChunks = [];
18
+ _stderrChunks = [];
19
+ _exitCode = null;
20
+ _signal = null;
21
+ _ended = false;
22
+ _killed = false;
23
+ /**
24
+ * Promesa que se resuelve con un `Result` cuando el proceso termina,
25
+ * o se rechaza con un `ProcessError` si el proceso no pudo iniciarse.
26
+ */
27
+ onExitPromise;
28
+ /**
29
+ * Crea un `LiveProcess` a partir de un `ChildProcess` ya iniciado.
30
+ *
31
+ * No se debe usar directamente; usar `Command.spawn()` o `Process.spawn()`.
32
+ *
33
+ * @param command - Comando ejecutado.
34
+ * @param args - Argumentos pasados al comando.
35
+ * @param child - Proceso hijo nativo de `child_process`.
36
+ */
37
+ constructor(command, args, child) {
38
+ this.command = command;
39
+ this.args = args;
40
+ this.child = child;
41
+ this.startedAt = new Date();
42
+ if (child.stdout) {
43
+ child.stdout.on("data", (chunk) => this._stdoutChunks.push(chunk));
44
+ }
45
+ if (child.stderr) {
46
+ child.stderr.on("data", (chunk) => this._stderrChunks.push(chunk));
47
+ }
48
+ this.onExitPromise = new Promise((resolve, reject) => {
49
+ child.on("error", (err) => {
50
+ this._ended = true;
51
+ reject(new ProcessError(this.command, this.args, "spawn", { cause: err }));
52
+ });
53
+ child.on("exit", (code, signal) => {
54
+ this._exitCode = code;
55
+ this._signal = signal;
56
+ this._ended = true;
57
+ const durationMs = Date.now() - this.startedAt.getTime();
58
+ resolve(new Result(this.command, this.args, Buffer.concat(this._stdoutChunks).toString("utf8"), Buffer.concat(this._stderrChunks).toString("utf8"), code, signal, durationMs));
59
+ });
60
+ });
61
+ }
62
+ /** Identificador del proceso asignado por el sistema operativo, o `undefined` si no se inició. */
63
+ get pid() {
64
+ return this.child.pid;
65
+ }
66
+ /** `true` mientras el proceso sigue en ejecución. */
67
+ get running() {
68
+ return !this._ended;
69
+ }
70
+ /** `true` si el proceso ya terminó (naturalmente o por señal). */
71
+ get ended() {
72
+ return this._ended;
73
+ }
74
+ /** Código de salida del proceso, o `null` si aún no termina o fue terminado por señal. */
75
+ get exitCode() {
76
+ return this._exitCode;
77
+ }
78
+ /** Señal que terminó el proceso, o `null` si no fue por señal. */
79
+ get signal() {
80
+ return this._signal;
81
+ }
82
+ /**
83
+ * `true` si el proceso fue matado explícitamente vía `kill()` o `forceKill()`.
84
+ *
85
+ * Se distingue de una terminación natural: este valor solo se vuelve
86
+ * `true` cuando el usuario llamó manualmente a un método de terminación.
87
+ */
88
+ get stopped() {
89
+ return this._killed;
90
+ }
91
+ /** Milisegundos transcurridos desde el inicio del proceso hasta ahora (en vivo). */
92
+ get elapsed() {
93
+ return Date.now() - this.startedAt.getTime();
94
+ }
95
+ /** Stream legible de stdout del proceso, o `null` si no está disponible. */
96
+ get stdout() {
97
+ return this.child.stdout;
98
+ }
99
+ /** Stream legible de stderr del proceso, o `null` si no está disponible. */
100
+ get stderr() {
101
+ return this.child.stderr;
102
+ }
103
+ /** Stream escribible de stdin del proceso, o `null` si no está disponible. */
104
+ get stdin() {
105
+ return this.child.stdin;
106
+ }
107
+ /**
108
+ * Stream legible que combina los chunks de stdout y stderr ya capturados
109
+ * en orden: primero todos los de stdout, luego los de stderr.
110
+ */
111
+ get combinedOutput() {
112
+ return Readable.from((async function* (self) {
113
+ for (const chunk of self._stdoutChunks)
114
+ yield chunk;
115
+ for (const chunk of self._stderrChunks)
116
+ yield chunk;
117
+ })(this));
118
+ }
119
+ /**
120
+ * Escribe datos en stdin del proceso.
121
+ *
122
+ * @param data - Texto o buffer a escribir.
123
+ * @returns `true` si la escritura fue exitosa, `false` si no hay stdin disponible.
124
+ */
125
+ write(data) {
126
+ if (!this.child.stdin)
127
+ return false;
128
+ return this.child.stdin.write(data);
129
+ }
130
+ /**
131
+ * Envía una línea a stdin del proceso, añadiendo un salto de línea al final.
132
+ *
133
+ * @param line - Línea de texto a enviar.
134
+ * @returns `true` si la escritura fue exitosa, `false` si no hay stdin disponible.
135
+ */
136
+ sendLine(line) {
137
+ return this.write(line + "\n");
138
+ }
139
+ /** Cierra stdin del proceso señalizando fin de entrada (EOF). */
140
+ endInput() {
141
+ this.child.stdin?.end();
142
+ }
143
+ /**
144
+ * Espera a que el proceso termine y devuelve el resultado.
145
+ *
146
+ * @returns El `Result` de la ejecución cuando el proceso termina.
147
+ * @throws {ProcessError} Si el proceso no pudo iniciarse (fallo de spawn).
148
+ */
149
+ async wait() {
150
+ return this.onExitPromise;
151
+ }
152
+ /**
153
+ * Envía una señal al proceso para terminarlo.
154
+ *
155
+ * @param signal - Señal a enviar (por defecto `SIGTERM`).
156
+ * @returns `true` si la señal se envió correctamente.
157
+ */
158
+ kill(signal = "SIGTERM") {
159
+ this._killed = true;
160
+ return this.child.kill(signal);
161
+ }
162
+ /**
163
+ * Fuerza la terminación inmediata del proceso enviando `SIGKILL`.
164
+ *
165
+ * @returns `true` si la señal se envió correctamente.
166
+ */
167
+ forceKill() {
168
+ this._killed = true;
169
+ return this.child.kill("SIGKILL");
170
+ }
171
+ /**
172
+ * Registra un callback que se ejecuta cuando el proceso termina.
173
+ *
174
+ * @param callback - Función que recibe el `Result` al finalizar.
175
+ * @returns `this` para encadenamiento.
176
+ */
177
+ onExit(callback) {
178
+ this.onExitPromise.then(callback);
179
+ return this;
180
+ }
181
+ /**
182
+ * Registra un callback que se ejecuta por cada chunk de datos de stdout.
183
+ *
184
+ * @param callback - Función que recibe cada `Buffer` de stdout.
185
+ * @returns `this` para encadenamiento.
186
+ */
187
+ onStdout(callback) {
188
+ this.child.stdout?.on("data", callback);
189
+ return this;
190
+ }
191
+ /**
192
+ * Registra un callback que se ejecuta por cada chunk de datos de stderr.
193
+ *
194
+ * @param callback - Función que recibe cada `Buffer` de stderr.
195
+ * @returns `this` para encadenamiento.
196
+ */
197
+ onStderr(callback) {
198
+ this.child.stderr?.on("data", callback);
199
+ return this;
200
+ }
201
+ /**
202
+ * Registra un callback unificado que se ejecuta por cada chunk de stdout
203
+ * **o** stderr, sin distinguir el origen.
204
+ *
205
+ * @param callback - Función que recibe cada `Buffer` de stdout o stderr.
206
+ * @returns `this` para encadenamiento.
207
+ */
208
+ onOutput(callback) {
209
+ this.child.stdout?.on("data", callback);
210
+ this.child.stderr?.on("data", callback);
211
+ return this;
212
+ }
213
+ }
214
+ //# sourceMappingURL=LiveProcess.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LiveProcess.js","sourceRoot":"","sources":["../../../src/core/process/LiveProcess.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,108 @@
1
+ import { Command } from "./Command.js";
2
+ import { LiveProcess } from "./LiveProcess.js";
3
+ import { Result } from "./Result.js";
4
+ import type { ProcessOptions } from "./types.js";
5
+ /**
6
+ * Facade para ejecutar y manejar procesos nativos con una API cómoda.
7
+ *
8
+ * @example
9
+ * const proc = new Process();
10
+ *
11
+ * // Ejecución simple
12
+ * const result = await proc.run("echo", "hola");
13
+ * console.log(result.stdout); // "hola\n"
14
+ *
15
+ * // Builder fluido
16
+ * const out = await proc.cmd("git")
17
+ * .withArgs("log", "--oneline")
18
+ * .in("/my/repo")
19
+ * .output();
20
+ *
21
+ * // Proceso interactivo
22
+ * const p = proc.spawn("node", "-i");
23
+ * p.sendLine("1 + 1");
24
+ * p.endInput();
25
+ * await p.wait();
26
+ */
27
+ export declare class Process {
28
+ /**
29
+ * Crea un builder de comando (`Command`) sin ejecutarlo.
30
+ *
31
+ * @param command - Comando a ejecutar.
32
+ * @param args - Argumentos del comando.
33
+ * @returns Un nuevo `Command` listo para configurar y ejecutar.
34
+ */
35
+ cmd(command: string, ...args: string[]): Command;
36
+ /**
37
+ * Ejecuta un comando, espera a que termine y devuelve el resultado.
38
+ *
39
+ * @param command - Comando a ejecutar.
40
+ * @param args - Argumentos del comando.
41
+ * @returns El `Result` de la ejecución.
42
+ */
43
+ run(command: string, ...args: string[]): Promise<Result>;
44
+ /**
45
+ * Ejecuta un comando y devuelve solo stdout, con espacios en blanco
46
+ * eliminados de los extremos (trim).
47
+ *
48
+ * @param command - Comando a ejecutar.
49
+ * @param args - Argumentos del comando.
50
+ * @returns El stdout del comando ya trimado.
51
+ */
52
+ output(command: string, ...args: string[]): Promise<string>;
53
+ /**
54
+ * Ejecuta un script de shell interpretado por el shell del sistema
55
+ * (`/bin/sh` en Unix, `cmd.exe` en Windows) y espera a que termine.
56
+ *
57
+ * @param script - Script de shell a ejecutar.
58
+ * @param options - Opciones de ejecución del proceso.
59
+ * @returns El `Result` de la ejecución.
60
+ */
61
+ shell(script: string, options?: Omit<ProcessOptions, never>): Promise<Result>;
62
+ /**
63
+ * Inicia un proceso y devuelve un `LiveProcess` para interactuar en vivo.
64
+ *
65
+ * @param command - Comando a ejecutar.
66
+ * @param args - Argumentos del comando.
67
+ * @returns Un `LiveProcess` que envuelve el proceso hijo recién iniciado.
68
+ */
69
+ spawn(command: string, ...args: string[]): LiveProcess;
70
+ /**
71
+ * Inicia un proceso con opciones de ejecución y devuelve un `LiveProcess`.
72
+ * La firma es *options-first*: las opciones se pasan antes que el comando.
73
+ *
74
+ * @param options - Opciones de ejecución del proceso.
75
+ * @param command - Comando a ejecutar.
76
+ * @param args - Argumentos del comando.
77
+ * @returns Un `LiveProcess` que envuelve el proceso hijo recién iniciado.
78
+ */
79
+ spawnWith(options: ProcessOptions, command: string, ...args: string[]): LiveProcess;
80
+ /**
81
+ * Ejecuta un script de shell interpretado por el shell del sistema
82
+ * (`/bin/sh` en Unix, `cmd.exe` en Windows) y devuelve un `LiveProcess`
83
+ * interactivo para comunicarse en vivo con el proceso.
84
+ *
85
+ * @param script - Script de shell a ejecutar.
86
+ * @param options - Opciones de ejecución del proceso.
87
+ * @returns Un `LiveProcess` que envuelve el proceso hijo recién iniciado.
88
+ */
89
+ spawnScript(script: string, options?: ProcessOptions): LiveProcess;
90
+ /**
91
+ * Comprueba si un comando existe en el PATH del sistema.
92
+ * Usa `where` en Windows y `which` en Unix.
93
+ *
94
+ * @param command - Nombre del comando a buscar.
95
+ * @returns `true` si el comando existe y es ejecutable, `false` en caso contrario.
96
+ */
97
+ exists(command: string): Promise<boolean>;
98
+ /**
99
+ * Devuelve la ruta completa del comando encontrado en el PATH, o `null`
100
+ * si no existe. Usa `where` en Windows y `which` en Unix; si hay múltiples
101
+ * resultados, devuelve el primero.
102
+ *
103
+ * @param command - Nombre del comando a buscar.
104
+ * @returns La ruta completa del comando, o `null` si no se encuentra.
105
+ */
106
+ which(command: string): Promise<string | null>;
107
+ }
108
+ //# sourceMappingURL=Process.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Process.d.ts","sourceRoot":"","sources":["../../../src/core/process/Process.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,qBAAa,OAAO;IAClB;;;;;;OAMG;IACH,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO;IAIhD;;;;;;OAMG;IACG,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAI9D;;;;;;;OAOG;IACG,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAIjE;;;;;;;OAOG;IACG,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,IAAI,CAAC,cAAc,EAAE,KAAK,CAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAOvF;;;;;;OAMG;IACH,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,GAAG,WAAW;IAItD;;;;;;;;OAQG;IACH,SAAS,CAAC,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,GAAG,WAAW;IAInF;;;;;;;;OAQG;IACH,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,cAAmB,GAAG,WAAW;IAOtE;;;;;;OAMG;IACG,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAO/C;;;;;;;OAOG;IACG,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;CAQrD"}