xonecode 0.1.0 → 0.3.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/cli/panel.js +61 -0
- package/dist/cli/panel.js.map +1 -0
- package/dist/cli/stdio.js +51 -2
- package/dist/cli/stdio.js.map +1 -1
- package/dist/cli/tema.js +9 -2
- package/dist/cli/tema.js.map +1 -1
- package/dist/core/turno.js +27 -3
- package/dist/core/turno.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* El panel de avisos: el recinto de hasta `tope` líneas grises donde viven las
|
|
3
|
+
* notificaciones de sistema (pausas, avisos deterministas, el tiempo final) MIENTRAS
|
|
4
|
+
* dura, en vez de ir dejando un rastro en el scrollback.
|
|
5
|
+
*
|
|
6
|
+
* La regla que hereda del append-only de la consola, y su excepción a la vez: el panel
|
|
7
|
+
* vive POR ENCIMA del punto de escritura y se repinta en sitio — la única cosa de la
|
|
8
|
+
* piel que escribe por encima de la última línea, acotada a `tope` líneas. Cualquier
|
|
9
|
+
* contenido real la solidifica antes de escribir (la cascada de `stdio.ts`), y del
|
|
10
|
+
* panel solo queda entonces la última línea, como línea gris de siempre.
|
|
11
|
+
*
|
|
12
|
+
* La mecánica es de borrado EXACTO, nunca «borrar hasta el fin de pantalla»: tanto el
|
|
13
|
+
* repintado como el colapso limpian una a una las líneas que sobran, porque debajo del
|
|
14
|
+
* panel puede haber una línea viva (el spinner de fase) que no es suya y no puede
|
|
15
|
+
* comerse. Por lo mismo, cada línea pintada termina en `\n`: el cursor descansa en el
|
|
16
|
+
* punto de escritura, que siempre está DEBAJO del panel.
|
|
17
|
+
*/
|
|
18
|
+
/** Cuántas líneas grises vive el panel como máximo antes de reciclar al más viejo. */
|
|
19
|
+
export const TOPE_DEL_PANEL = 5;
|
|
20
|
+
export class PanelDeAvisos {
|
|
21
|
+
escribir;
|
|
22
|
+
tema;
|
|
23
|
+
tope;
|
|
24
|
+
lineas = [];
|
|
25
|
+
pintadas = 0;
|
|
26
|
+
constructor(escribir, tema, tope = TOPE_DEL_PANEL) {
|
|
27
|
+
this.escribir = escribir;
|
|
28
|
+
this.tema = tema;
|
|
29
|
+
this.tope = tope;
|
|
30
|
+
}
|
|
31
|
+
/** Añade un aviso (reciclando al más viejo si se pasa del tope) y repinta el panel. */
|
|
32
|
+
avisa(texto) {
|
|
33
|
+
this.lineas.push(texto);
|
|
34
|
+
while (this.lineas.length > this.tope)
|
|
35
|
+
this.lineas.shift();
|
|
36
|
+
const subida = this.pintadas > 0 ? `${this.tema.arriba(this.pintadas)}\r` : "";
|
|
37
|
+
this.pintadas = this.lineas.length;
|
|
38
|
+
this.escribir(subida + this.lineas.map((l) => this.pintar(l)).join(""));
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Colapsa el panel: deja SOLO la última línea en el historial — colocada donde
|
|
42
|
+
* empezaba el panel— y limpia las demás. Con el panel vacío no escribe nada.
|
|
43
|
+
*/
|
|
44
|
+
solidifica() {
|
|
45
|
+
if (this.pintadas === 0)
|
|
46
|
+
return;
|
|
47
|
+
const ultima = this.lineas[this.lineas.length - 1];
|
|
48
|
+
const total = this.pintadas;
|
|
49
|
+
this.pintadas = 0;
|
|
50
|
+
this.lineas.length = 0;
|
|
51
|
+
// Cada línea que sobra se limpia y se salta: el cursor acaba en el punto de
|
|
52
|
+
// escritura, debajo de donde estaba el panel.
|
|
53
|
+
const sobran = `${this.tema.limpiarLinea}\n`.repeat(total - 1);
|
|
54
|
+
this.escribir(`${this.tema.arriba(total)}\r` + this.pintar(ultima) + sobran);
|
|
55
|
+
}
|
|
56
|
+
/** Una línea del panel: limpia, texto en mudo, y el salto que baja al punto de escritura. */
|
|
57
|
+
pintar(texto) {
|
|
58
|
+
return `${this.tema.limpiarLinea}${this.tema.mudo}${texto}${this.tema.reset}\n`;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=panel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"panel.js","sourceRoot":"","sources":["../../src/cli/panel.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAKH,sFAAsF;AACtF,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC;AAEhC,MAAM,OAAO,aAAa;IAKL;IACA;IACA;IANF,MAAM,GAAa,EAAE,CAAC;IAC/B,QAAQ,GAAG,CAAC,CAAC;IAErB,YACmB,QAAkB,EAClB,IAAU,EACV,OAAe,cAAc;QAF7B,aAAQ,GAAR,QAAQ,CAAU;QAClB,SAAI,GAAJ,IAAI,CAAM;QACV,SAAI,GAAJ,IAAI,CAAyB;IAC7C,CAAC;IAEJ,uFAAuF;IACvF,KAAK,CAAC,KAAa;QACjB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACxB,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI;YAAE,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAC3D,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/E,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;QACnC,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IAC1E,CAAC;IAED;;;OAGG;IACH,UAAU;QACR,IAAI,IAAI,CAAC,QAAQ,KAAK,CAAC;YAAE,OAAO;QAChC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACnD,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC5B,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;QAClB,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;QACvB,4EAA4E;QAC5E,8CAA8C;QAC9C,MAAM,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QAC/D,IAAI,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC;IAC/E,CAAC;IAED,6FAA6F;IACrF,MAAM,CAAC,KAAa;QAC1B,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC;IAClF,CAAC;CACF"}
|
package/dist/cli/stdio.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { crearTema } from "./tema.js";
|
|
2
2
|
import { RenderizadorDeMarkdown, puntoSeguro } from "./markdown.js";
|
|
3
3
|
import { AnimadorDeFase } from "./spinner.js";
|
|
4
|
+
import { PanelDeAvisos } from "./panel.js";
|
|
4
5
|
/**
|
|
5
6
|
* Por debajo de esto, un párrafo que aún no ha visto su `\n` puede esperar: fluye al
|
|
6
7
|
* confirmarse la línea. Por encima, se corta por un punto seguro (`puntoSeguro`) para
|
|
@@ -30,11 +31,25 @@ export function crearPielStdio(escribir, tema = crearTema(process.stdout.isTTY =
|
|
|
30
31
|
const render = new RenderizadorDeMarkdown(tema);
|
|
31
32
|
let colchon = "";
|
|
32
33
|
let inicioDeLinea = true;
|
|
34
|
+
// El panel de avisos: las notificaciones de sistema viven en un recinto de hasta 5
|
|
35
|
+
// líneas grises que se recicla en sitio, y solo la última queda en el historial. Sin
|
|
36
|
+
// color (pipe, CI) no se instala: el motor cae en las líneas estáticas de siempre y
|
|
37
|
+
// la salida es la de siempre. El disparador de su colapso es esta `firme` — la misma
|
|
38
|
+
// cascada del spinner, por la misma razón: solo una cosa viva al fondo.
|
|
39
|
+
const conPanel = tema.mudo !== "";
|
|
40
|
+
const panel = new PanelDeAvisos(escribir, tema);
|
|
41
|
+
const avisosDelCierre = [];
|
|
33
42
|
// El spinner de fase: anima la ÚLTIMA línea mientras una fase dura. La cascada es
|
|
34
43
|
// esta `firme`: CUALQUIER otra escritura termina el spinner primero — así solo hay
|
|
35
44
|
// una línea viva al fondo, y el historial queda con la fase como línea estática.
|
|
36
45
|
const animador = new AnimadorDeFase(escribir, tema);
|
|
37
46
|
const firme = (t) => {
|
|
47
|
+
if (conPanel) {
|
|
48
|
+
panel.solidifica();
|
|
49
|
+
// Lo que el panel ya solidificó con contenido real queda en el historial; no
|
|
50
|
+
// vuelve a salir en la fusión del fin.
|
|
51
|
+
avisosDelCierre.length = 0;
|
|
52
|
+
}
|
|
38
53
|
animador.termina();
|
|
39
54
|
escribir(t);
|
|
40
55
|
};
|
|
@@ -79,6 +94,11 @@ export function crearPielStdio(escribir, tema = crearTema(process.stdout.isTTY =
|
|
|
79
94
|
* siempre y no arranca nada.
|
|
80
95
|
*/
|
|
81
96
|
fase: (texto) => animador.empieza(texto),
|
|
97
|
+
/**
|
|
98
|
+
* Con panel, la pausa entra en él y se solidifica EN EL ACTO: lo que sigue no es
|
|
99
|
+
* salida de la piel, es el bloque de aprobación (`pedirDecisiones` escribe por su
|
|
100
|
+
* lado), y el panel no puede quedar colgando encima de una decisión.
|
|
101
|
+
*/
|
|
82
102
|
pausa: (pendientes) => {
|
|
83
103
|
// Quien pinta el detalle de cada pendiente (origen, descripción, fichero) es
|
|
84
104
|
// `pedirDecisiones`, al preguntar una a una. Aquí sería redundante, y el viejo
|
|
@@ -87,9 +107,38 @@ export function crearPielStdio(escribir, tema = crearTema(process.stdout.isTTY =
|
|
|
87
107
|
// En el modo de un disparo lo que sigue a la pausa NO es la respuesta del usuario:
|
|
88
108
|
// es la aprobación, que conduce `pedirDecisiones`. Decir «lo siguiente que escribas
|
|
89
109
|
// es la respuesta» sería mentira y despistaría justo en el paso delicado.
|
|
90
|
-
|
|
110
|
+
const texto = `(turno pausado: ${pendientes.length} aprobación(es) pendiente(s))`;
|
|
111
|
+
if (conPanel) {
|
|
112
|
+
panel.avisa(texto);
|
|
113
|
+
panel.solidifica();
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
firme(`\n${texto}\n`);
|
|
117
|
+
}
|
|
91
118
|
},
|
|
92
|
-
|
|
119
|
+
/**
|
|
120
|
+
* Con panel, el fin FUSIONA los avisos pendientes y el tiempo en UNA línea: es la
|
|
121
|
+
* «última» que solidifica, y así el aviso de honestidad no se lo lleva por delante
|
|
122
|
+
* el tiempo final. Sin panel, la línea de siempre.
|
|
123
|
+
*/
|
|
124
|
+
fin: (ms) => {
|
|
125
|
+
if (conPanel) {
|
|
126
|
+
panel.avisa([...avisosDelCierre, `(${(ms / 1000).toFixed(1)}s)`].join(" · "));
|
|
127
|
+
avisosDelCierre.length = 0;
|
|
128
|
+
panel.solidifica();
|
|
129
|
+
}
|
|
130
|
+
else {
|
|
131
|
+
firme(`\n(${(ms / 1000).toFixed(1)}s)\n`);
|
|
132
|
+
}
|
|
133
|
+
},
|
|
134
|
+
...(conPanel
|
|
135
|
+
? {
|
|
136
|
+
notificacion: (texto) => {
|
|
137
|
+
panel.avisa(texto);
|
|
138
|
+
avisosDelCierre.push(texto);
|
|
139
|
+
},
|
|
140
|
+
}
|
|
141
|
+
: {}),
|
|
93
142
|
};
|
|
94
143
|
}
|
|
95
144
|
/**
|
package/dist/cli/stdio.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stdio.js","sourceRoot":"","sources":["../../src/cli/stdio.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAAa,MAAM,WAAW,CAAC;AACjD,OAAO,EAAE,sBAAsB,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"stdio.js","sourceRoot":"","sources":["../../src/cli/stdio.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/tema.js
CHANGED
|
@@ -27,13 +27,20 @@ const CON_COLOR = {
|
|
|
27
27
|
prompt: "\x1b[36m",
|
|
28
28
|
reset: "\x1b[0m",
|
|
29
29
|
borrar: "\x1b[K",
|
|
30
|
+
limpiarLinea: "\x1b[2K",
|
|
31
|
+
arriba: (lineas) => (lineas > 0 ? `\x1b[${lineas}A` : ""),
|
|
30
32
|
};
|
|
33
|
+
/** El no-op para los tokens-función del tema apagado: se llama, y no escribe nada. */
|
|
34
|
+
const SIN_ACCION = () => "";
|
|
31
35
|
/**
|
|
32
36
|
* El tema apagado se DERIVA del encendido, no se escribe aparte: un token nuevo que
|
|
33
37
|
* se olvide de apagarse falla en el test que recorre `Object.entries`, no en un pipe
|
|
34
|
-
* de CI a las tantas.
|
|
38
|
+
* de CI a las tantas. Los tokens-función se derivan al no-op.
|
|
35
39
|
*/
|
|
36
|
-
const SIN_COLOR = Object.fromEntries(Object.keys(CON_COLOR).map((nombre) => [
|
|
40
|
+
const SIN_COLOR = Object.fromEntries(Object.keys(CON_COLOR).map((nombre) => [
|
|
41
|
+
nombre,
|
|
42
|
+
typeof CON_COLOR[nombre] === "function" ? SIN_ACCION : "",
|
|
43
|
+
]));
|
|
37
44
|
export function crearTema(conColor) {
|
|
38
45
|
return conColor ? CON_COLOR : SIN_COLOR;
|
|
39
46
|
}
|
package/dist/cli/tema.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tema.js","sourceRoot":"","sources":["../../src/cli/tema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;
|
|
1
|
+
{"version":3,"file":"tema.js","sourceRoot":"","sources":["../../src/cli/tema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAgCH,MAAM,SAAS,GAAS;IACtB,KAAK,EAAE,EAAE;IACT,IAAI,EAAE,SAAS;IACf,OAAO,EAAE,SAAS;IAClB,KAAK,EAAE,UAAU;IACjB,KAAK,EAAE,UAAU;IACjB,KAAK,EAAE,UAAU;IACjB,mFAAmF;IACnF,4EAA4E;IAC5E,OAAO,EAAE,UAAU;IACnB,OAAO,EAAE,UAAU;IACnB,MAAM,EAAE,UAAU;IAClB,KAAK,EAAE,SAAS;IAChB,MAAM,EAAE,QAAQ;IAChB,YAAY,EAAE,SAAS;IACvB,MAAM,EAAE,CAAC,MAAc,EAAU,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;CAC1E,CAAC;AAEF,sFAAsF;AACtF,MAAM,UAAU,GAAG,GAAW,EAAE,CAAC,EAAE,CAAC;AAEpC;;;;GAIG;AACH,MAAM,SAAS,GAAS,MAAM,CAAC,WAAW,CACxC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;IACrC,MAAM;IACN,OAAO,SAAS,CAAC,MAAoB,CAAC,KAAK,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE;CACxE,CAAC,CACgB,CAAC;AAErB,MAAM,UAAU,SAAS,CAAC,QAAiB;IACzC,OAAO,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;AAC1C,CAAC"}
|
package/dist/core/turno.js
CHANGED
|
@@ -102,7 +102,19 @@ export async function correrTurno(eventos, piel, opciones = {}) {
|
|
|
102
102
|
break;
|
|
103
103
|
case "aviso":
|
|
104
104
|
bitacora.anota("aviso", ev.texto);
|
|
105
|
-
|
|
105
|
+
// La piel que recicla avisos recibe el aviso delegado (la línea de tokens
|
|
106
|
+
// cerrada primero, para que el repintado del panel caiga en línea propia);
|
|
107
|
+
// la que no, lo pinta como la línea estática de siempre.
|
|
108
|
+
if (piel.notificacion) {
|
|
109
|
+
if (abierta) {
|
|
110
|
+
piel.cerrarLinea();
|
|
111
|
+
abierta = false;
|
|
112
|
+
}
|
|
113
|
+
piel.notificacion(ev.texto);
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
escribirLinea(ev.texto);
|
|
117
|
+
}
|
|
106
118
|
break;
|
|
107
119
|
case "fin":
|
|
108
120
|
break;
|
|
@@ -116,8 +128,20 @@ export async function correrTurno(eventos, piel, opciones = {}) {
|
|
|
116
128
|
if (cierre)
|
|
117
129
|
escribirLinea(cierre);
|
|
118
130
|
// Los avisos deterministas van DESPUÉS de todo, y también si hubo excepción.
|
|
119
|
-
|
|
120
|
-
|
|
131
|
+
// Por el MISMO camino que los eventos `aviso`: la piel que recicla los recibe
|
|
132
|
+
// delegados, la que no los pinta como líneas estáticas.
|
|
133
|
+
for (const aviso of opciones.avisos?.(bitacora) ?? []) {
|
|
134
|
+
if (piel.notificacion) {
|
|
135
|
+
if (abierta) {
|
|
136
|
+
piel.cerrarLinea();
|
|
137
|
+
abierta = false;
|
|
138
|
+
}
|
|
139
|
+
piel.notificacion(aviso);
|
|
140
|
+
}
|
|
141
|
+
else {
|
|
142
|
+
escribirLinea(aviso);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
121
145
|
if (abierta)
|
|
122
146
|
piel.cerrarLinea();
|
|
123
147
|
piel.fin(Date.now() - t0);
|
package/dist/core/turno.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"turno.js","sourceRoot":"","sources":["../../src/core/turno.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"turno.js","sourceRoot":"","sources":["../../src/core/turno.ts"],"names":[],"mappings":"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"}
|