xonecode 0.24.1 → 0.26.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/apps/web/dist/assets/{EditorDeFichero-DP2FWRar.js → EditorDeFichero-BW6i19HW.js} +1 -1
- package/apps/web/dist/assets/index-CJycg35E.js +499 -0
- package/apps/web/dist/assets/index-DICdq4UC.css +1 -0
- package/apps/web/dist/assets/{php-fWJ9hMOH.js → php-DxWUQTjM.js} +1 -1
- package/apps/web/dist/assets/{ruby-CpEKEsYx.js → ruby-gCKsUWxP.js} +1 -1
- package/apps/web/dist/index.html +2 -2
- package/dist/agent/cloudstudio/subida.js +108 -20
- package/dist/agent/cloudstudio/subida.js.map +1 -1
- package/dist/agent/grafo/arbolDeProyecto.js +68 -1
- package/dist/agent/grafo/arbolDeProyecto.js.map +1 -1
- package/dist/agent/sesiones/gitSync.js +166 -1
- package/dist/agent/sesiones/gitSync.js.map +1 -1
- package/dist/cli/aprobar.js.map +1 -1
- package/dist/cli/consola.js +58 -9
- package/dist/cli/consola.js.map +1 -1
- package/dist/cli/main.js +19 -2
- package/dist/cli/main.js.map +1 -1
- package/dist/core/actos.js.map +1 -1
- package/dist/core/cloudstudio.js +15 -1
- package/dist/core/cloudstudio.js.map +1 -1
- package/dist/core/descriptoresDeApp.js +27 -1
- package/dist/core/descriptoresDeApp.js.map +1 -1
- package/dist/core/imagenesDeDocumento.js +7 -0
- package/dist/core/imagenesDeDocumento.js.map +1 -1
- package/dist/core/ports.js +22 -2
- package/dist/core/ports.js.map +1 -1
- package/dist/core/verificacionDeSubida.js +58 -0
- package/dist/core/verificacionDeSubida.js.map +1 -0
- package/dist/web/servidor/arranque.js +185 -5
- package/dist/web/servidor/arranque.js.map +1 -1
- package/dist/web/servidor/consolaWeb.js +32 -0
- package/dist/web/servidor/consolaWeb.js.map +1 -1
- package/dist/web/servidor/transporte.js.map +1 -1
- package/package.json +1 -1
- package/apps/web/dist/assets/index-C-U_ay7l.css +0 -1
- package/apps/web/dist/assets/index-DT_LY-_I.js +0 -495
package/apps/web/dist/index.html
CHANGED
|
@@ -7,8 +7,8 @@
|
|
|
7
7
|
<!-- El icono oficial, servido por Vite desde `iconos/`. Es el mismo fichero que la
|
|
8
8
|
marca de la barra superior: dos copias del logo acaban siendo dos logos. -->
|
|
9
9
|
<link rel="icon" type="image/png" href="./iconos/xonecode.png" />
|
|
10
|
-
<script type="module" crossorigin src="./assets/index-
|
|
11
|
-
<link rel="stylesheet" crossorigin href="./assets/index-
|
|
10
|
+
<script type="module" crossorigin src="./assets/index-CJycg35E.js"></script>
|
|
11
|
+
<link rel="stylesheet" crossorigin href="./assets/index-DICdq4UC.css">
|
|
12
12
|
</head>
|
|
13
13
|
<!-- Sin el atributo aquí: el oscuro es SOLO del splash (el registro de entorno y
|
|
14
14
|
modelo), no de la consola entera — `App.tsx` lo pone y lo quita él mismo, en el
|
|
@@ -8,14 +8,19 @@
|
|
|
8
8
|
* —un proyecto cuyo `config.rama` nombra una rama que aún no está en el servidor—, pero con
|
|
9
9
|
* su propio nombre.
|
|
10
10
|
*
|
|
11
|
-
*
|
|
12
|
-
* - La ref se mueve SOLO
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
11
|
+
* Tres propiedades que no son negociables:
|
|
12
|
+
* - La ref se mueve SOLO por lo que se autorizó Y se subió COMPROBADO: con todo bien, a HEAD;
|
|
13
|
+
* con una selección o con fallos, con `marcarSubidoParcial` y solo por `ok`. Lo que falló
|
|
14
|
+
* —también lo que llegó distinto a Studio o no se pudo releer— no avanza, y el siguiente
|
|
15
|
+
* `/sync` lo vuelve a intentar. Reintentar es seguro únicamente si escribir dos veces la
|
|
16
|
+
* misma ruta en CloudStudio no tiene efecto observable la segunda vez; esta función no lo
|
|
17
|
+
* garantiza, lo asume del servidor.
|
|
18
|
+
* - Nada se da por subido sin COMPROBARLO: hay ficheros que se cortan al subirlos y la causa
|
|
19
|
+
* no se ha encontrado. Cada texto se RELEE y se compara exacto (`core/verificacionDeSubida.ts`);
|
|
20
|
+
* un binario NO se verifica: Studio no deja releerlo (`studio_get_file` solo sirve texto), y
|
|
21
|
+
* el modo troceado con hash del servidor está pendiente del lado de CloudStudio.
|
|
22
|
+
* Y antes de tocar un fichero se mira que Studio esté de verdad en la rama del proyecto: si
|
|
23
|
+
* dice otra, no se sube nada; si no se puede leer, se sube con un AVISO (`avisoDeRama`).
|
|
19
24
|
* - La rama activa del servidor se restaura al terminar (incluso si falló al posicionar
|
|
20
25
|
* la rama, antes de tocar un solo fichero): `switch` le mueve el suelo a quien tenga
|
|
21
26
|
* Studio abierto en el navegador. Salvo que no se haya podido LEER cuál era —medido:
|
|
@@ -25,12 +30,27 @@
|
|
|
25
30
|
*/
|
|
26
31
|
import { appendFileSync, mkdirSync, readFileSync, statSync, existsSync, readdirSync } from "node:fs";
|
|
27
32
|
import { dirname, join } from "node:path";
|
|
33
|
+
import { planAutorizado } from "../../core/cloudstudio.js";
|
|
28
34
|
import { planDeSubida } from "../../core/planDeSubida.js";
|
|
35
|
+
import { diferenciaDeTexto, motivoSinComprobar } from "../../core/verificacionDeSubida.js";
|
|
29
36
|
import { NOMBRE_CARPETA } from "../config/configEnDisco.js";
|
|
30
|
-
import { cambiosPendientes, marcarSubido } from "../sesiones/gitSync.js";
|
|
37
|
+
import { cambiosPendientes, marcarSubido, marcarSubidoParcial } from "../sesiones/gitSync.js";
|
|
31
38
|
import { rutaSyncJson } from "./descarga.js";
|
|
32
39
|
import { ramaActiva } from "./ramaActiva.js";
|
|
33
40
|
import { validarTrasDescarga } from "./validarTrasDescarga.js";
|
|
41
|
+
/** El aviso cuando la rama activa de Studio no se pudo leer justo antes de subir. */
|
|
42
|
+
export const AVISO_RAMA_SIN_CONFIRMAR = "no se pudo confirmar la rama activa de Studio antes de subir";
|
|
43
|
+
/**
|
|
44
|
+
* El motivo de un fallo, apto para el diálogo y `sync.log`. Un error de Node (`readFileSync`
|
|
45
|
+
* de un fichero que desapareció o no se deja leer) lleva la ruta ABSOLUTA en el mensaje, y una
|
|
46
|
+
* ruta de la máquina no viaja: de él solo su `code`. Un error del servidor sí se dice entero.
|
|
47
|
+
*/
|
|
48
|
+
function motivoDeFallo(error) {
|
|
49
|
+
const code = error?.code;
|
|
50
|
+
if (typeof code === "string")
|
|
51
|
+
return `no se pudo leer el fichero en local (${code})`;
|
|
52
|
+
return error instanceof Error ? error.message : String(error);
|
|
53
|
+
}
|
|
34
54
|
export function rutaSyncLog(raiz) {
|
|
35
55
|
return join(raiz, NOMBRE_CARPETA, "cloudstudio", "sync.log");
|
|
36
56
|
}
|
|
@@ -122,6 +142,7 @@ export async function subir(opciones) {
|
|
|
122
142
|
rama: ramaOrigen,
|
|
123
143
|
ok: informe.ok,
|
|
124
144
|
fallos: informe.fallos,
|
|
145
|
+
...(informe.avisoDeRama === undefined ? {} : { avisoDeRama: informe.avisoDeRama }),
|
|
125
146
|
// Lo IMPOSIBLE queda por escrito igual que lo fallido: el usuario tiene que poder
|
|
126
147
|
// volver mañana y saber qué se quedó sin subir y por qué, no solo verlo pasar.
|
|
127
148
|
omitidas: informe.omitidas,
|
|
@@ -167,11 +188,16 @@ export async function subir(opciones) {
|
|
|
167
188
|
// La política decide ANTES de tocar el puerto: ni `abrir` ni `contexto` ni una sola
|
|
168
189
|
// escritura corren sin su autorización. Que no autorice deja el disco, el puerto y la
|
|
169
190
|
// ref exactamente como estaban — sea cual sea la política que haya detrás.
|
|
170
|
-
|
|
191
|
+
//
|
|
192
|
+
// Lo que se ejecuta lo dice `planAutorizado`, nunca la veracidad de la respuesta: una
|
|
193
|
+
// selección vacía es un objeto —«verdadero»— y aun así no autoriza nada.
|
|
194
|
+
const autorizado = planAutorizado(plan, await politicaDeAprobacion(plan));
|
|
195
|
+
if (autorizado.length === 0) {
|
|
171
196
|
informar("subida cancelada: no se ha aplicado nada\n");
|
|
172
197
|
registrar();
|
|
173
198
|
return informe;
|
|
174
199
|
}
|
|
200
|
+
const parcial = autorizado.length < plan.length;
|
|
175
201
|
await puerto.abrir(proyecto.nombre);
|
|
176
202
|
// `undefined` = no se pudo leer (`ramaActiva.ts`). Aquí el posicionamiento ya era
|
|
177
203
|
// incondicional, así que lo único que depende de esta lectura es la restauración del
|
|
@@ -186,20 +212,61 @@ export async function subir(opciones) {
|
|
|
186
212
|
// falla, queda en `sync.log` y se relanza: inventarse una rama desde sí misma no
|
|
187
213
|
// arreglaría nada y firmaría un linaje falso.
|
|
188
214
|
await puerto.cambiarRama(ramaOrigen);
|
|
189
|
-
|
|
215
|
+
// Y COMPROBAR que el `switch` surtió efecto antes de tocar un solo fichero: un `switch`
|
|
216
|
+
// que contesta bien no prueba en qué rama acaba escribiendo `studio_edit_file`. Si Studio
|
|
217
|
+
// dice OTRA rama, no se sube nada (error estructural, el camino de hoy: `sync.log` y el
|
|
218
|
+
// `finally` restaura). Si no se puede leer —la tool se cae en algunos proyectos, y una
|
|
219
|
+
// rama vacía es «el servidor no la dijo», no «está en la rama ''»—, se sube con AVISO:
|
|
220
|
+
// tumbar toda subida de esos proyectos por una lectura rota sería peor que decirlo.
|
|
221
|
+
let activa;
|
|
222
|
+
try {
|
|
223
|
+
activa = (await puerto.contexto()).rama;
|
|
224
|
+
}
|
|
225
|
+
catch {
|
|
226
|
+
activa = undefined;
|
|
227
|
+
}
|
|
228
|
+
if (activa === undefined || activa === "") {
|
|
229
|
+
informe.avisoDeRama = AVISO_RAMA_SIN_CONFIRMAR;
|
|
230
|
+
informar(`aviso: ${AVISO_RAMA_SIN_CONFIRMAR}\n`);
|
|
231
|
+
}
|
|
232
|
+
else if (activa !== ramaOrigen) {
|
|
233
|
+
throw new Error(`Studio está en la rama «${activa}» y el proyecto es de la rama «${ramaOrigen}»: no se ha subido nada`);
|
|
234
|
+
}
|
|
235
|
+
for (const operacion of autorizado) {
|
|
190
236
|
try {
|
|
191
237
|
if (operacion.tipo === "borrado")
|
|
192
238
|
await puerto.borrarTexto(operacion.ruta);
|
|
193
239
|
else if (operacion.tipo === "texto") {
|
|
194
|
-
|
|
240
|
+
const contenido = readFileSync(join(raiz, operacion.ruta), "utf8");
|
|
241
|
+
await puerto.escribirTexto(operacion.ruta, contenido);
|
|
242
|
+
// Releer lo escrito: es la única prueba de que llegó entero. Una relectura que
|
|
243
|
+
// falla NO es un «ok»: el fichero puede estar cortado y no lo sabríamos.
|
|
244
|
+
let enStudio;
|
|
245
|
+
try {
|
|
246
|
+
enStudio = await puerto.leerTexto(operacion.ruta);
|
|
247
|
+
}
|
|
248
|
+
catch (error) {
|
|
249
|
+
throw new Error(motivoSinComprobar(error.message));
|
|
250
|
+
}
|
|
251
|
+
const diferencia = diferenciaDeTexto(contenido, enStudio);
|
|
252
|
+
if (diferencia !== undefined) {
|
|
253
|
+
informe.fallos.push({ ruta: operacion.ruta, ...diferencia });
|
|
254
|
+
informar(`${operacion.ruta}: ${diferencia.motivo}\n`);
|
|
255
|
+
continue;
|
|
256
|
+
}
|
|
195
257
|
}
|
|
196
258
|
else {
|
|
259
|
+
// Sin verificación: Studio no deja releer un binario (ver la cabecera).
|
|
197
260
|
await puerto.subirBinario(operacion.ruta, readFileSync(join(raiz, operacion.ruta)));
|
|
198
261
|
}
|
|
199
262
|
informe.ok.push(operacion.ruta);
|
|
200
263
|
}
|
|
201
264
|
catch (error) {
|
|
202
|
-
|
|
265
|
+
const motivo = motivoDeFallo(error);
|
|
266
|
+
informe.fallos.push({ ruta: operacion.ruta, motivo });
|
|
267
|
+
// Dicho, no solo contado: el diálogo de la subida enseña las últimas líneas del
|
|
268
|
+
// recorrido, y «fallaron 1» sin el porqué no deja ver un corte.
|
|
269
|
+
informar(`${operacion.ruta}: ${motivo}\n`);
|
|
203
270
|
}
|
|
204
271
|
}
|
|
205
272
|
}
|
|
@@ -210,7 +277,8 @@ export async function subir(opciones) {
|
|
|
210
277
|
// posicionando la rama no puede dejar el suelo movido bajo quien tenga Studio
|
|
211
278
|
// abierto en el navegador. Y sin `antes` no hay a dónde volver: adivinar una rama
|
|
212
279
|
// movería ese suelo con más seguridad de la que hay.
|
|
213
|
-
|
|
280
|
+
// Una rama VACÍA es «el servidor no la dijo», no una rama a la que volver.
|
|
281
|
+
if (antes !== undefined && antes !== "")
|
|
214
282
|
await puerto.cambiarRama(antes);
|
|
215
283
|
}
|
|
216
284
|
}
|
|
@@ -222,13 +290,33 @@ export async function subir(opciones) {
|
|
|
222
290
|
registrar(error.message);
|
|
223
291
|
throw error;
|
|
224
292
|
}
|
|
225
|
-
|
|
226
|
-
|
|
293
|
+
// Si mover la ref revienta, la operación sigue constando en `sync.log`: lo subido YA está en
|
|
294
|
+
// Studio, y perder su rastro sería peor que el error.
|
|
295
|
+
try {
|
|
296
|
+
if (informe.fallos.length === 0 && !parcial) {
|
|
297
|
+
await marcarSubido(raiz, ramaOrigen, `sync: ${informe.ok.length} ficheros a ${ramaOrigen}`);
|
|
298
|
+
}
|
|
299
|
+
else if (informe.fallos.length === 0 || informe.ok.length > 0) {
|
|
300
|
+
// Solo lo ELEGIDO y COMPROBADO avanza: la ref no puede ir a HEAD, o afirmaría que está arriba lo que
|
|
301
|
+
// la persona dejó sin marcar. Lo omitido tampoco avanza: se sigue declarando.
|
|
302
|
+
await marcarSubidoParcial(raiz, ramaOrigen, informe.ok, `sync: ${informe.ok.length} de ${plan.length} ficheros a ${ramaOrigen}`);
|
|
303
|
+
// Lo que FALLÓ no avanza: el próximo `/sync` lo vuelve a calcular y a intentar.
|
|
304
|
+
const resto = plan.length - informe.ok.length;
|
|
305
|
+
if (informe.fallos.length > 0) {
|
|
306
|
+
informar(`${informe.fallos.length} ficheros no subieron bien; siguen pendientes y el próximo /sync los reintenta\n`);
|
|
307
|
+
}
|
|
308
|
+
else {
|
|
309
|
+
informar(`subidos ${informe.ok.length} de ${plan.length}; ${resto === 1 ? "el otro sigue" : `los otros ${resto} siguen`} pendiente${resto === 1 ? "" : "s"}\n`);
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
else {
|
|
313
|
+
// Nada subió bien: la ref no se mueve y el siguiente `/sync` lo reintenta todo.
|
|
314
|
+
informar(`${informe.fallos.length} ficheros no subieron; la ref no se mueve y el próximo /sync reintenta\n`);
|
|
315
|
+
}
|
|
227
316
|
}
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
informar(`${informe.fallos.length} ficheros no subieron; la ref no se mueve y el próximo /sync reintenta\n`);
|
|
317
|
+
catch (error) {
|
|
318
|
+
registrar(`subido, pero no se pudo mover la ref: ${motivoDeFallo(error)}`);
|
|
319
|
+
throw error;
|
|
232
320
|
}
|
|
233
321
|
registrar();
|
|
234
322
|
return informe;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"subida.js","sourceRoot":"","sources":["../../../src/agent/cloudstudio/subida.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"subida.js","sourceRoot":"","sources":["../../../src/agent/cloudstudio/subida.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { existsSync } from "node:fs";
|
|
2
2
|
import { createHash, randomUUID } from "node:crypto";
|
|
3
|
-
import { open, readFile, realpath, stat, unlink } from "node:fs/promises";
|
|
3
|
+
import { lstat, open, readFile, realpath, stat, unlink } from "node:fs/promises";
|
|
4
4
|
import { basename, dirname, isAbsolute, join, relative, resolve, sep } from "node:path";
|
|
5
5
|
import { ficherosDelProyecto } from "../turno/ficherosDelProyecto.js";
|
|
6
6
|
import { puedeLeerRuta } from "./perfiles.js";
|
|
7
7
|
import { esVistaAplanada } from "./proyecto.js";
|
|
8
8
|
import { conImagenesIncrustadas, enlacesDeImagen, imagenEnProyecto, RUTA_IMAGEN_DEL_PROYECTO } from "../../core/imagenesDeDocumento.js";
|
|
9
9
|
import { renombrarSobre } from "../renombrarSobre.js";
|
|
10
|
+
import { candidatosDeIcono } from "../../core/descriptoresDeApp.js";
|
|
10
11
|
/**
|
|
11
12
|
* El proyecto tal como lo enseña la pestaña Ficheros de la consola web: el árbol, el
|
|
12
13
|
* contenido de un fichero y, desde el editor de la pestaña, GUARDARLO (`escribirFicheroDeProyecto`): la
|
|
@@ -116,6 +117,72 @@ export function motivoDeRutaInaceptable(ruta) {
|
|
|
116
117
|
return "esa ruta no se enseña";
|
|
117
118
|
return undefined;
|
|
118
119
|
}
|
|
120
|
+
/**
|
|
121
|
+
* ¿Se puede ENSEÑAR esta ruta? La MISMA regla que `leerFicheroDeProyecto`, para quien enseña
|
|
122
|
+
* algo de un fichero que no es su contenido tal cual —el diff de lo pendiente de subir—:
|
|
123
|
+
* criba de texto, vista aplanada, y la segunda pasada sobre el camino REAL cuando el fichero
|
|
124
|
+
* existe (mayúsculas en un disco que no las distingue, enlaces a un fichero denegado). Un
|
|
125
|
+
* fichero que ya no existe —un borrado— solo pasa la criba de texto: no hay camino que resolver,
|
|
126
|
+
* y su contenido sale de git, no del disco.
|
|
127
|
+
*/
|
|
128
|
+
export async function motivoParaNoEnsenar(raiz, ruta) {
|
|
129
|
+
const motivo = motivoDeRutaInaceptable(ruta);
|
|
130
|
+
if (motivo !== undefined)
|
|
131
|
+
return motivo;
|
|
132
|
+
const normal = ruta.split(/[\\/]/).join("/");
|
|
133
|
+
if (normal.endsWith(".xml") && existsSync(resolve(raiz, `${normal.slice(0, -4)}.xne`)))
|
|
134
|
+
return MOTIVO_APLANADA;
|
|
135
|
+
// `lstat` y no `existsSync`: este último sigue los enlaces, y un enlace COLGANTE se tomaría por
|
|
136
|
+
// un borrado —solo criba de texto— y el diff enseñaría su destino. Con `lstat` el enlace existe
|
|
137
|
+
// y pasa por la cadena entera, que falla cerrado al no poder resolverlo.
|
|
138
|
+
try {
|
|
139
|
+
await lstat(resolve(raiz, normal));
|
|
140
|
+
}
|
|
141
|
+
catch {
|
|
142
|
+
return undefined;
|
|
143
|
+
}
|
|
144
|
+
// Si existe, la cadena ENTERA de guardas es la de leer y guardar (`resolverEnProyecto`): una
|
|
145
|
+
// segunda copia de la recomprobación sobre `realpath` divergiría el primer día.
|
|
146
|
+
const resuelta = await resolverEnProyecto(raiz, ruta);
|
|
147
|
+
if (!("error" in resuelta))
|
|
148
|
+
return undefined;
|
|
149
|
+
return resuelta.error === "no existe" ? "no se puede comprobar" : resuelta.error;
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* La ruta RELATIVA del icono de la app de un proyecto bajado, o `undefined` si no tiene uno que se
|
|
153
|
+
* pueda enseñar.
|
|
154
|
+
*
|
|
155
|
+
* El nombre sale de `app.ini` (`core/descriptoresDeApp.ts#candidatosDeIcono`) y cada candidato pasa
|
|
156
|
+
* la MISMA barrera que la pestaña Ficheros (`motivoParaNoEnsenar`: texto y `realpath`), además de
|
|
157
|
+
* ser una imagen que sabemos pintar, un fichero de verdad y caber en `TOPE_DE_IMAGEN`. Un
|
|
158
|
+
* `icon=../.env` o un `icon.png` enlazado a un fichero denegado se quedan en «sin icono», que en la
|
|
159
|
+
* barra es la carpeta de siempre. Nunca lanza: un icono es decoración y no puede tumbar un anuncio.
|
|
160
|
+
*/
|
|
161
|
+
export async function iconoDelProyecto(raiz) {
|
|
162
|
+
try {
|
|
163
|
+
const ini = await readFile(resolve(raiz, "app.ini"), "utf-8");
|
|
164
|
+
for (const candidato of candidatosDeIcono(ini)) {
|
|
165
|
+
if (mimeDeImagen(candidato) === undefined)
|
|
166
|
+
continue;
|
|
167
|
+
const motivo = motivoDeRutaInaceptable(candidato);
|
|
168
|
+
if (motivo !== undefined)
|
|
169
|
+
continue;
|
|
170
|
+
const enDisco = resolve(raiz, candidato.split(/[\\/]/).join("/"));
|
|
171
|
+
if (!existsSync(enDisco))
|
|
172
|
+
continue;
|
|
173
|
+
const datos = await stat(enDisco);
|
|
174
|
+
if (!datos.isFile() || datos.size > TOPE_DE_IMAGEN)
|
|
175
|
+
continue;
|
|
176
|
+
if ((await motivoParaNoEnsenar(raiz, candidato)) !== undefined)
|
|
177
|
+
continue;
|
|
178
|
+
return candidato;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
catch {
|
|
182
|
+
// Sin `app.ini`, o ilegible: sin icono.
|
|
183
|
+
}
|
|
184
|
+
return undefined;
|
|
185
|
+
}
|
|
119
186
|
/**
|
|
120
187
|
* La cadena ENTERA de guardas de una ruta del cable, en UN sitio: la usan leer, guardar y la base
|
|
121
188
|
* de las marcas del editor (`agent/sesiones/baseDeFichero.ts`). Se extrajo de la lectura cuando
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"arbolDeProyecto.js","sourceRoot":"","sources":["../../../src/agent/grafo/arbolDeProyecto.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAmB,MAAM,kBAAkB,CAAC;AAC3F,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AACxF,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,sBAAsB,EAAE,eAAe,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,MAAM,mCAAmC,CAAC;AACxI,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD;;;;;;;;;GASG;AAEH,4EAA4E;AAC5E,MAAM,CAAC,MAAM,qBAAqB,GAAG,EAAE,CAAC;AACxC,qEAAqE;AACrE,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,CAAC;AACtC,yFAAyF;AACzF,MAAM,CAAC,MAAM,eAAe,GAAG,OAAO,CAAC;AACvC,kDAAkD;AAClD,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,CAAC;AACxC;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,SAAS,CAAC;AAExC;;;;;;;;;;GAUG;AACH,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAiB;IACvC,CAAC,KAAK,EAAE,WAAW,CAAC;IACpB,CAAC,KAAK,EAAE,YAAY,CAAC;IACrB,CAAC,MAAM,EAAE,YAAY,CAAC;IACtB,CAAC,KAAK,EAAE,WAAW,CAAC;IACpB,CAAC,MAAM,EAAE,YAAY,CAAC;IACtB,CAAC,KAAK,EAAE,WAAW,CAAC;IACpB,CAAC,KAAK,EAAE,cAAc,CAAC;IACvB,CAAC,MAAM,EAAE,YAAY,CAAC;IACtB,CAAC,KAAK,EAAE,eAAe,CAAC;CACzB,CAAC,CAAC;AAEH,8EAA8E;AAC9E,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IACrD,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IACtC,IAAI,KAAK,IAAI,CAAC;QAAE,OAAO,SAAS,CAAC;IACjC,OAAO,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;AAC7D,CAAC;AAED,4FAA4F;AAC5F,MAAM,eAAe,GAAG,qFAAqF,CAAC;AA0C9G,MAAM,UAAU,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,CAAC;AAEpE;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,KAAwB;IACnD,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QAC9B,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACxB,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACxB,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC;QACzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3B,MAAM,KAAK,GAAG,CAAC,KAAK,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;YAClC,MAAM,KAAK,GAAG,CAAC,KAAK,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;YAClC,IAAI,KAAK,KAAK,KAAK;gBAAE,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3C,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;gBAAE,OAAO,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAE,EAAE,EAAE,CAAC,CAAC,CAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAE,GAAG,EAAE,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/F,CAAC;QACD,OAAO,EAAE,CAAC,MAAM,GAAG,EAAE,CAAC,MAAM,CAAC;IAC/B,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,MAAM,KAAK,GAAG,mBAAmB,CAAC,IAAI,EAAE,CAAC,EAAE,qBAAqB,CAAC,CAAC;IAClE,MAAM,QAAQ,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACjH,MAAM,SAAS,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;IACzC,IAAI,SAAS,CAAC,MAAM,GAAG,gBAAgB;QAAE,OAAO,EAAE,KAAK,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,gBAAgB,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IACjH,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AAChD,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,uBAAuB,CAAC,IAAY;IAClD,IAAI,IAAI,KAAK,EAAE;QAAE,OAAO,oBAAoB,CAAC;IAC7C,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACjG,OAAO,4CAA4C,CAAC;IACtD,CAAC;IACD,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACtC,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,CAAC,EAAE,CAAC;QAC/D,OAAO,uDAAuD,CAAC;IACjE,CAAC;IACD,IAAI,CAAC,aAAa,CAAC,IAAI,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QAAE,OAAO,uBAAuB,CAAC;IAC9E,OAAO,SAAS,CAAC;AACnB,CAAC;AAYD;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,IAAY,EAAE,IAAY;IACjE,MAAM,MAAM,GAAG,uBAAuB,CAAC,IAAI,CAAC,CAAC;IAC7C,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IAEnD,wFAAwF;IACxF,iFAAiF;IACjF,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC7C,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;QACvF,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC;IACpC,CAAC;IAED,IAAI,IAAY,CAAC;IACjB,IAAI,QAAgB,CAAC;IACrB,IAAI,CAAC;QACH,QAAQ,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC;QAChC,kFAAkF;QAClF,oFAAoF;QACpF,oFAAoF;QACpF,mFAAmF;QACnF,IAAI,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;IAC/C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC;IAChC,CAAC;IACD,yFAAyF;IACzF,oEAAoE;IACpE,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,GAAG,GAAG,CAAC;QAAE,OAAO,EAAE,KAAK,EAAE,yBAAyB,EAAE,CAAC;IAElF,yFAAyF;IACzF,oFAAoF;IACpF,sFAAsF;IACtF,+DAA+D;IAC/D,qFAAqF;IACrF,uFAAuF;IACvF,4EAA4E;IAC5E,gFAAgF;IAChF,uFAAuF;IACvF,+DAA+D;IAC/D,uFAAuF;IACvF,oEAAoE;IACpE,wFAAwF;IACxF,oFAAoF;IACpF,yFAAyF;IACzF,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC/D,IAAI,CAAC,aAAa,CAAC,IAAI,QAAQ,EAAE,CAAC;QAAE,OAAO,EAAE,KAAK,EAAE,uBAAuB,EAAE,CAAC;IAC9E,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;QAAE,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC;IAC3G,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;AACpC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,IAAY,EAAE,IAAY;IACpE,MAAM,OAAO,GAAG,CAAC,KAAa,EAAgB,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IAC/G,MAAM,QAAQ,GAAG,MAAM,kBAAkB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACtD,IAAI,OAAO,IAAI,QAAQ;QAAE,OAAO,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAExD,MAAM,KAAK,GAAG,MAAM,sBAAsB,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;IAC/F,mGAAmG;IACnG,8DAA8D;IAC9D,IAAI,mBAAmB,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;QAC/F,MAAM,KAAK,GAAG,eAAe,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;QAC5D,IAAI,KAAK,KAAK,SAAS;YAAE,OAAO,EAAE,GAAG,KAAK,EAAE,KAAK,EAAE,CAAC;IACtD,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,eAAe,CAAC,SAAiB,EAAE,KAAa;IAC9D,MAAM,UAAU,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC7C,KAAK,MAAM,MAAM,IAAI,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5C,MAAM,IAAI,GAAG,gBAAgB,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QACjD,IAAI,IAAI,KAAK,SAAS,IAAI,YAAY,CAAC,IAAI,CAAC,KAAK,SAAS,IAAI,uBAAuB,CAAC,IAAI,CAAC,KAAK,SAAS;YAAE,SAAS;QACpH,UAAU,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,wBAAwB,SAAS,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACzF,CAAC;IACD,OAAO,UAAU,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,sBAAsB,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;AACvF,CAAC;AAED,gFAAgF;AAChF,MAAM,CAAC,MAAM,4BAA4B,GAAG,EAAE,CAAC;AAC/C,MAAM,CAAC,MAAM,yBAAyB,GAAG,UAAU,CAAC;AAEpD;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,IAAY,EACZ,SAAiB,EACjB,KAAa,EACb,OAA8D,qBAAqB;IAEnF,MAAM,WAAW,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC9C,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,KAAK,MAAM,MAAM,IAAI,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5C,MAAM,IAAI,GAAG,gBAAgB,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QACjD,sFAAsF;QACtF,IAAI,IAAI,KAAK,SAAS;YAAE,SAAS;QACjC,IAAI,WAAW,CAAC,IAAI,IAAI,4BAA4B,EAAE,CAAC;YACrD,WAAW,IAAI,CAAC,CAAC;YACjB,SAAS;QACX,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACtC,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,IAAI,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,yBAAyB,EAAE,CAAC;YACzH,WAAW,IAAI,CAAC,CAAC;YACjB,SAAS;QACX,CAAC;QACD,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;QAC9B,WAAW,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,MAAM,CAAC,IAAI,WAAW,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IACzE,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,sBAAsB,CAAC,KAAK,EAAE,WAAW,CAAC,EAAE,WAAW,EAAE,WAAW,CAAC,IAAI,EAAE,WAAW,EAAE,CAAC;AAC3G,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,IAAY,EACZ,IAAY,EACZ,IAAwB;IAExB,MAAM,OAAO,GAAG,CAAC,KAAa,EAAgB,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IAE/G,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC;IAC9B,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;QAAE,OAAO,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACvD,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC;IAExB,uFAAuF;IACvF,yFAAyF;IACzF,0FAA0F;IAC1F,uFAAuF;IACvF,yFAAyF;IACzF,qFAAqF;IACrF,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,eAAe,EAAE,CAAC;QACnD,wFAAwF;QACxF,kFAAkF;QAClF,uFAAuF;QACvF,iEAAiE;QACjE,IAAI,KAAK,GAAG,cAAc;YAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;QAC1F,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC;QACnC,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;IAClG,CAAC;IAED,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IACjC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,eAAe,GAAG,CAAC,CAAC,CAAC,CAAC;QACtE,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACjE,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;QAC5C,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,kBAAkB,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;YACtD,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;QAC1D,CAAC;QACD,MAAM,SAAS,GAAG,SAAS,GAAG,eAAe,CAAC;QAC9C,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QACtE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,WAAW,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QAC/D,2FAA2F;QAC3F,wFAAwF;QACxF,oDAAoD;QACpD,MAAM,SAAS,GAAG,CAAC,SAAS,IAAI,YAAY,KAAK,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,iBAAiB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACtG,oFAAoF;QACpF,wFAAwF;QACxF,gEAAgE;QAChE,IAAI,IAAI,KAAK,eAAe,IAAI,CAAC,SAAS,EAAE,CAAC;YAC3C,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,GAAG,SAAS,EAAE,CAAC;QAC7I,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,SAAS,EAAE,CAAC;IACvF,CAAC;YAAS,CAAC;QACT,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC;IACnB,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,SAAS,WAAW,CAAC,MAAkB,EAAE,SAAkB;IACzD,MAAM,QAAQ,GAAG,IAAI,WAAW,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3D,MAAM,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAChD,KAAK,MAAM,MAAM,IAAI,QAAQ,EAAE,CAAC;QAC9B,IAAI,CAAC;YACH,OAAO,EAAE,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC;QACvG,CAAC;QAAC,MAAM,CAAC;YACP,oBAAoB;QACtB,CAAC;IACH,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,IAAI,WAAW,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,YAAY,EAAE,QAAQ,EAAE,CAAC;AACrF,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAAiB;IACjD,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC1D,CAAC;AASD,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;AAE5C;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAAC,IAAY,EAAE,IAAY,EAAE,KAAa,EAAE,MAAc;IACvG,MAAM,OAAO,GAAG,CAAC,KAAa,EAAmB,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACtE,MAAM,QAAQ,GAAG,MAAM,kBAAkB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACtD,IAAI,OAAO,IAAI,QAAQ;QAAE,OAAO,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACxD,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACvC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YAAE,OAAO,OAAO,CAAC,kBAAkB,CAAC,CAAC;QACvD,IAAI,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,SAAS;YAAE,OAAO,OAAO,CAAC,mCAAmC,CAAC,CAAC;QACrG,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC7C,IAAI,iBAAiB,CAAC,MAAM,CAAC,KAAK,MAAM,EAAE,CAAC;YACzC,OAAO,OAAO,CAAC,oEAAoE,CAAC,CAAC;QACvF,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QACpF,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;QAC1F,IAAI,KAAK,CAAC,MAAM,GAAG,eAAe,EAAE,CAAC;YACnC,OAAO,OAAO,CAAC,oBAAoB,IAAI,CAAC,KAAK,CAAC,eAAe,GAAG,IAAI,CAAC,6BAA6B,CAAC,CAAC;QACtG,CAAC;QACD,MAAM,eAAe,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,CAAC;QAChE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,iBAAiB,CAAC,KAAK,CAAC,EAAE,CAAC;IACpD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,uFAAuF;QACvF,MAAM,IAAI,GAAI,KAA+B,CAAC,IAAI,CAAC;QACnD,OAAO,OAAO,CAAC,iCAAiC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,EAAE,CAAC,CAAC;IAC5F,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,KAAK,UAAU,eAAe,CAAC,OAAe,EAAE,KAAa,EAAE,IAAY;IACzE,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,IAAI,QAAQ,CAAC,OAAO,CAAC,IAAI,UAAU,EAAE,eAAe,CAAC,CAAC;IAC9F,IAAI,EAA0B,CAAC;IAC/B,IAAI,CAAC;QACH,EAAE,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QACtC,MAAM,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAC1B,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACrB,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC;QAChB,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC;QACjB,EAAE,GAAG,SAAS,CAAC;QACf,MAAM,cAAc,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC1C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAClC,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QACvC,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC"}
|
|
1
|
+
{"version":3,"file":"arbolDeProyecto.js","sourceRoot":"","sources":["../../../src/agent/grafo/arbolDeProyecto.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
*/
|
|
9
9
|
import { execFile } from "node:child_process";
|
|
10
10
|
import { promisify } from "node:util";
|
|
11
|
-
import { appendFileSync, existsSync, mkdirSync, readFileSync, readdirSync, realpathSync, rmSync } from "node:fs";
|
|
11
|
+
import { appendFileSync, existsSync, mkdirSync, readFileSync, readdirSync, realpathSync, rmSync, statSync } from "node:fs";
|
|
12
12
|
import { basename, dirname, join, resolve } from "node:path";
|
|
13
13
|
import { dentroDelWorkspace } from "../../core/settings.js";
|
|
14
14
|
import { indicePrivado, claseDeCambio } from "./git.js";
|
|
@@ -313,6 +313,111 @@ export async function cambiosPendientes(raiz, rama) {
|
|
|
313
313
|
})
|
|
314
314
|
.sort((a, b) => a.ruta.localeCompare(b.ruta));
|
|
315
315
|
}
|
|
316
|
+
/**
|
|
317
|
+
* Los ficheros del proyecto que git todavía NO sigue (ni en el índice ni ignorados), con su
|
|
318
|
+
* ruta relativa al PROYECTO.
|
|
319
|
+
*
|
|
320
|
+
* Es la otra mitad de «¿falta por subir?» para quien ENSEÑA, no para quien sube:
|
|
321
|
+
* `cambiosPendientes` es `git diff <ref>` y no ve lo que nadie ha añadido, así que a mitad de
|
|
322
|
+
* turno —antes del commit del turno— lo que el agente acaba de crear no saldría como pendiente.
|
|
323
|
+
* `git ls-files` contesta relativo al directorio desde el que se lanza, que es la raíz del
|
|
324
|
+
* proyecto: no hace falta recortar prefijo. `-z` evita las comillas de rutas con bytes raros.
|
|
325
|
+
*/
|
|
326
|
+
export async function sinSeguir(raiz) {
|
|
327
|
+
const { stdout } = await git(raiz, ["ls-files", "--others", "--exclude-standard", "-z", "--", "."]);
|
|
328
|
+
return stdout.split("\0").filter((ruta) => ruta !== "");
|
|
329
|
+
}
|
|
330
|
+
/** Por encima de esto no se cuentan las líneas de un fichero que git no sigue: se lee entero. */
|
|
331
|
+
const TOPE_PARA_CONTAR_LINEAS = 400_000;
|
|
332
|
+
/** El mismo tope que el parche de una sesión (`sesionGit.ts`). */
|
|
333
|
+
const TOPE_DE_PARCHE_DE_SUBIDA = 400_000;
|
|
334
|
+
/** Lo que dice `git` relativo al proyecto, para una ruta que no sigue: líneas o nada si es binario. */
|
|
335
|
+
function lineasDeFicheroSinSeguir(raiz, ruta) {
|
|
336
|
+
try {
|
|
337
|
+
const camino = join(raiz, ruta);
|
|
338
|
+
if (statSync(camino).size > TOPE_PARA_CONTAR_LINEAS)
|
|
339
|
+
return undefined;
|
|
340
|
+
const contenido = readFileSync(camino);
|
|
341
|
+
if (contenido.includes(0))
|
|
342
|
+
return undefined;
|
|
343
|
+
const texto = contenido.toString("utf8");
|
|
344
|
+
if (texto === "")
|
|
345
|
+
return 0;
|
|
346
|
+
return texto.split("\n").length - (texto.endsWith("\n") ? 1 : 0);
|
|
347
|
+
}
|
|
348
|
+
catch {
|
|
349
|
+
return undefined;
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
/**
|
|
353
|
+
* TODO lo que falta por subir a CloudStudio, como LISTA que enseñar (la pestaña Sincronización
|
|
354
|
+
* del panel del proyecto): lo que difiere de la ref de la bajada (`cambiosPendientes`, con sus
|
|
355
|
+
* líneas por `--numstat`) más lo que git aún no sigue (`sinSeguir`), MARCADO `sinCommitear`
|
|
356
|
+
* porque no se puede subir sin commitearlo y la cifra de la banda no lo cuenta. Esconderlo sería
|
|
357
|
+
* esconder trabajo nuevo.
|
|
358
|
+
*/
|
|
359
|
+
export async function pendientesDeSubida(raiz, rama) {
|
|
360
|
+
const ref = `refs/remotes/${REMOTO}/${rama}`;
|
|
361
|
+
const [cambios, nuevos, { stdout: numstat }] = await Promise.all([
|
|
362
|
+
cambiosPendientes(raiz, rama),
|
|
363
|
+
sinSeguir(raiz),
|
|
364
|
+
git(raiz, ["-c", "core.quotePath=false", "diff", "--no-renames", "--numstat", "--relative", ref, "--", "."]),
|
|
365
|
+
]);
|
|
366
|
+
const cifras = new Map();
|
|
367
|
+
for (const linea of numstat.split("\n")) {
|
|
368
|
+
const [mas, menos, ruta] = linea.split("\t");
|
|
369
|
+
// Un binario sale con «-»: sin cifra, que poner cero diría que no cambió nada.
|
|
370
|
+
if (ruta === undefined || mas === "-" || menos === "-")
|
|
371
|
+
continue;
|
|
372
|
+
cifras.set(ruta, { mas: Number(mas), menos: Number(menos) });
|
|
373
|
+
}
|
|
374
|
+
const seguidos = cambios.map((cambio) => ({
|
|
375
|
+
ruta: cambio.ruta,
|
|
376
|
+
clase: cambio.clase,
|
|
377
|
+
...(cifras.get(cambio.ruta) ?? {}),
|
|
378
|
+
}));
|
|
379
|
+
const yaListados = new Set(seguidos.map((f) => f.ruta));
|
|
380
|
+
const sinSeguirAun = nuevos
|
|
381
|
+
.filter((ruta) => !yaListados.has(ruta) && ruta.split("/")[0] !== NOMBRE_CARPETA)
|
|
382
|
+
.map((ruta) => {
|
|
383
|
+
const lineas = lineasDeFicheroSinSeguir(raiz, ruta);
|
|
384
|
+
return { ruta, clase: "nuevo", sinCommitear: true, ...(lineas === undefined ? {} : { mas: lineas, menos: 0 }) };
|
|
385
|
+
});
|
|
386
|
+
return [...seguidos, ...sinSeguirAun].sort((a, b) => a.ruta.localeCompare(b.ruta));
|
|
387
|
+
}
|
|
388
|
+
/**
|
|
389
|
+
* El diff de UN fichero pendiente contra lo que consta en CloudStudio (la ref de la bajada), o
|
|
390
|
+
* contra NADA si git aún no lo sigue. Quien lo llama comprueba antes que la ruta está en la
|
|
391
|
+
* lista pendiente y que se puede enseñar: aquí solo se pide a git.
|
|
392
|
+
*/
|
|
393
|
+
export async function parcheDeSubida(raiz, rama, ruta, sinCommitear) {
|
|
394
|
+
let texto;
|
|
395
|
+
try {
|
|
396
|
+
if (sinCommitear) {
|
|
397
|
+
// `--no-index` sale con código 1 cuando HAY diferencias: el diff viene en el error.
|
|
398
|
+
texto = await git(raiz, ["--literal-pathspecs", "diff", "--no-index", "--", "/dev/null", ruta])
|
|
399
|
+
.then((r) => r.stdout)
|
|
400
|
+
.catch((error) => {
|
|
401
|
+
if (error.code === 1 && typeof error.stdout === "string")
|
|
402
|
+
return error.stdout;
|
|
403
|
+
throw error;
|
|
404
|
+
});
|
|
405
|
+
}
|
|
406
|
+
else {
|
|
407
|
+
const { stdout } = await git(raiz, [
|
|
408
|
+
"--literal-pathspecs", "-c", "core.quotePath=false",
|
|
409
|
+
"diff", "--no-renames", "--relative", `refs/remotes/${REMOTO}/${rama}`, "--", ruta,
|
|
410
|
+
]);
|
|
411
|
+
texto = stdout;
|
|
412
|
+
}
|
|
413
|
+
}
|
|
414
|
+
catch {
|
|
415
|
+
return undefined;
|
|
416
|
+
}
|
|
417
|
+
if (texto.length <= TOPE_DE_PARCHE_DE_SUBIDA)
|
|
418
|
+
return { texto, recortado: false };
|
|
419
|
+
return { texto: texto.slice(0, TOPE_DE_PARCHE_DE_SUBIDA), recortado: true };
|
|
420
|
+
}
|
|
316
421
|
/**
|
|
317
422
|
* «Simular el push»: mover la ref. Solo se llama cuando la subida terminó ENTERA.
|
|
318
423
|
*
|
|
@@ -325,6 +430,66 @@ export async function marcarSubido(raiz, rama, mensaje) {
|
|
|
325
430
|
const { stdout } = await git(raiz, ["rev-parse", "HEAD"]);
|
|
326
431
|
await git(raiz, ["update-ref", "-m", mensaje, `refs/remotes/${REMOTO}/${rama}`, stdout.trim()]);
|
|
327
432
|
}
|
|
433
|
+
/**
|
|
434
|
+
* Mover la ref SOLO por lo que subió: la subida parcial, cuando la persona eligió qué ficheros
|
|
435
|
+
* subían.
|
|
436
|
+
*
|
|
437
|
+
* `marcarSubido` lleva la ref a `HEAD`, y eso afirma «todo lo de esta copia está arriba»: con
|
|
438
|
+
* una selección sería mentira, y lo que se dejó sin marcar desaparecería de los pendientes sin
|
|
439
|
+
* haber viajado. Aquí se compone un commit NUEVO cuyo árbol es el de la ref con las rutas
|
|
440
|
+
* subidas tomadas de `HEAD` (o quitadas, si lo subido era un borrado), y la ref pasa a él. Así
|
|
441
|
+
* `cambiosPendientes` —que compara la ref contra el árbol— sigue diciendo la verdad: lo no
|
|
442
|
+
* elegido sigue pendiente.
|
|
443
|
+
*
|
|
444
|
+
* Se hace en un índice PRIVADO (`indicePrivado`), como las fotos de `instantanea.ts`: el índice
|
|
445
|
+
* del usuario no se toca. El commit es hijo de la ref anterior, no de `HEAD`, así que la ref
|
|
446
|
+
* deja de ser antepasada de `HEAD`; nada lo necesita —la ref solo se usa en `git diff <ref>`,
|
|
447
|
+
* árbol contra árbol—. Identidad NUESTRA por `-c`, como `commitDeTurno`: sin `user.email`
|
|
448
|
+
* configurado, `commit-tree` se niega.
|
|
449
|
+
*
|
|
450
|
+
* `rutas` son relativas al PROYECTO; git habla desde la raíz del repo, así que se les pone el
|
|
451
|
+
* prefijo y los comandos corren en la raíz del repo.
|
|
452
|
+
*/
|
|
453
|
+
export async function marcarSubidoParcial(raiz, rama, rutas, mensaje) {
|
|
454
|
+
const ref = `refs/remotes/${REMOTO}/${rama}`;
|
|
455
|
+
const prefijo = await prefijoDelProyecto(raiz);
|
|
456
|
+
const { stdout: superior } = await git(raiz, ["rev-parse", "--show-toplevel"]);
|
|
457
|
+
const repo = superior.trim();
|
|
458
|
+
const { stdout: anterior } = await git(repo, ["rev-parse", "--verify", `${ref}^{commit}`]);
|
|
459
|
+
const padre = anterior.trim();
|
|
460
|
+
const indice = indicePrivado("subida-parcial");
|
|
461
|
+
try {
|
|
462
|
+
const env = { ...process.env, GIT_INDEX_FILE: indice.ruta };
|
|
463
|
+
await git(repo, ["read-tree", padre], env);
|
|
464
|
+
for (const ruta of rutas) {
|
|
465
|
+
const completa = `${prefijo}${ruta}`;
|
|
466
|
+
const { stdout: entrada } = await git(repo, [
|
|
467
|
+
// Literal: una ruta con corchetes (`MaterialSymbols…[FILL,GRAD,opsz,wght].ttf`) es un
|
|
468
|
+
// comodín de pathspec, y no encontrarla en HEAD la apuntaría como BORRADO.
|
|
469
|
+
"--literal-pathspecs", "-c", "core.quotePath=false", "ls-tree", "--full-tree", "HEAD", "--", completa,
|
|
470
|
+
]);
|
|
471
|
+
const linea = entrada.split("\n").find((l) => l.endsWith(`\t${completa}`));
|
|
472
|
+
if (linea === undefined) {
|
|
473
|
+
// No está en HEAD: lo subido era un borrado.
|
|
474
|
+
await git(repo, ["update-index", "--force-remove", "--", completa], env);
|
|
475
|
+
}
|
|
476
|
+
else {
|
|
477
|
+
const [cabeza] = linea.split("\t");
|
|
478
|
+
const [modo, , sha] = cabeza.split(" ");
|
|
479
|
+
await git(repo, ["update-index", "--add", "--cacheinfo", `${modo},${sha},${completa}`], env);
|
|
480
|
+
}
|
|
481
|
+
}
|
|
482
|
+
const { stdout: arbol } = await git(repo, ["write-tree"], env);
|
|
483
|
+
const { stdout: commit } = await git(repo, [
|
|
484
|
+
"-c", "user.email=xonecode@local", "-c", "user.name=xonecode",
|
|
485
|
+
"commit-tree", arbol.trim(), "-p", padre, "-m", mensaje,
|
|
486
|
+
]);
|
|
487
|
+
await git(repo, ["update-ref", "-m", mensaje, ref, commit.trim(), padre]);
|
|
488
|
+
}
|
|
489
|
+
finally {
|
|
490
|
+
indice.limpiar();
|
|
491
|
+
}
|
|
492
|
+
}
|
|
328
493
|
/**
|
|
329
494
|
* ¿Hay cambios sin commitear?
|
|
330
495
|
*
|