xonecode 0.21.0 → 0.22.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/apps/web/dist/assets/index-5rtynJV_.js +490 -0
- package/apps/web/dist/assets/index-Cq6c6WEF.css +1 -0
- package/apps/web/dist/assets/{php-UkjSyds-.js → php-BTFUgUDo.js} +1 -1
- package/apps/web/dist/assets/{ruby-e801JuzW.js → ruby-BKKiBtJK.js} +1 -1
- package/apps/web/dist/index.html +2 -2
- package/dist/agent/config/mudanzaEnDisco.js +237 -3
- package/dist/agent/config/mudanzaEnDisco.js.map +1 -1
- package/dist/agent/config/selectorEnMaquina.js +3 -2
- package/dist/agent/config/selectorEnMaquina.js.map +1 -1
- package/dist/agent/config/settingsEnDisco.js +76 -2
- package/dist/agent/config/settingsEnDisco.js.map +1 -1
- package/dist/agent/dispositivos/arranqueDeEmulador.js +27 -3
- package/dist/agent/dispositivos/arranqueDeEmulador.js.map +1 -1
- package/dist/agent/dispositivos/instalacionEnMaquina.js +240 -29
- package/dist/agent/dispositivos/instalacionEnMaquina.js.map +1 -1
- package/dist/agent/dispositivos/lanzamientoEnMaquina.js +12 -17
- package/dist/agent/dispositivos/lanzamientoEnMaquina.js.map +1 -1
- package/dist/core/copiaDeAvd.js +111 -0
- package/dist/core/copiaDeAvd.js.map +1 -0
- package/dist/core/mudanzaDeWorkspace.js +105 -15
- package/dist/core/mudanzaDeWorkspace.js.map +1 -1
- package/dist/core/puertosDeAvd.js +64 -0
- package/dist/core/puertosDeAvd.js.map +1 -0
- package/dist/core/selectorDeCarpeta.js +88 -9
- package/dist/core/selectorDeCarpeta.js.map +1 -1
- package/dist/core/settings.js +60 -1
- package/dist/core/settings.js.map +1 -1
- package/dist/core/shellDeAgente.js +11 -0
- package/dist/core/shellDeAgente.js.map +1 -1
- package/dist/web/servidor/arranque.js +476 -43
- package/dist/web/servidor/arranque.js.map +1 -1
- package/dist/web/servidor/transporte.js.map +1 -1
- package/dist/web/servidor/vestibulo.js +154 -48
- package/dist/web/servidor/vestibulo.js.map +1 -1
- package/package.json +1 -1
- package/skills/xone-hotswap/SKILL.md +26 -10
- package/skills/xone-hotswap/lib/dispositivo.mjs +97 -3
- package/skills/xone-hotswap/references/conexion-y-despliegue.md +27 -15
- package/skills/xone-hotswap/scripts/xone-arrancar-android +9 -2
- package/skills/xone-hotswap/scripts/xone-desplegar-android +12 -6
- package/skills/xone-hotswap/scripts/xone-hotswap +32 -10
- package/skills/xone-hotswap/scripts/xone-reiniciar-android +23 -7
- package/apps/web/dist/assets/index-CFoqpKRk.css +0 -1
- package/apps/web/dist/assets/index-DgvLb2SM.js +0 -486
|
@@ -49,12 +49,15 @@
|
|
|
49
49
|
* ventana. Mientras eso no se cablee, la salida es `brew`/`sdkmanager` acabando solos, que es
|
|
50
50
|
* lo que harían en un terminal.
|
|
51
51
|
*/
|
|
52
|
-
import { join } from "node:path";
|
|
53
|
-
import { existsSync } from "node:fs";
|
|
52
|
+
import { join, relative } from "node:path";
|
|
53
|
+
import { constants, existsSync, readFileSync, writeFileSync } from "node:fs";
|
|
54
|
+
import { cp, readdir, readFile, rm, stat, writeFile } from "node:fs/promises";
|
|
54
55
|
import { homedir } from "node:os";
|
|
55
56
|
import { jdkDeLaMaquina, localizadorDeAndroid, pathConCarpetas, unirRuta } from "./dispositivosEnMaquina.js";
|
|
56
57
|
import { crearEjecutor, lanzarReal, TOPE_DE_TRABAJO_MS, TOPE_SIN_SALIDA_MS, } from "./procesosEnMaquina.js";
|
|
57
58
|
import { descargarYDescomprimir } from "./descargaDeHerramientas.js";
|
|
59
|
+
import { motivoDeNombreDeAvdInaceptable } from "../../core/puertosDeAvd.js";
|
|
60
|
+
import { hardwareIniDeClon, iniDeClon, leerIni, paqueteDeImagen, perfilDeTelefono, seCopiaEnClon } from "../../core/copiaDeAvd.js";
|
|
58
61
|
/**
|
|
59
62
|
* Y esto se REEXPORTA: lo que este módulo exportaba antes de que existiera el ejecutor
|
|
60
63
|
* compartido lo sigue exportando, pero ahora hay UNA sola copia —el `spawn` con `detached`, los
|
|
@@ -67,6 +70,24 @@ export { lanzarReal, TOPE_DE_TRABAJO_MS, TOPE_SIN_SALIDA_MS };
|
|
|
67
70
|
const IMAGEN_DARWIN = "system-images;android-35;google_apis;arm64-v8a";
|
|
68
71
|
/** Y en Windows: el caso común es x86_64, no Apple Silicon. Mismo motivo que en `core/dispositivos.ts`. */
|
|
69
72
|
const IMAGEN_WIN32 = "system-images;android-35;google_apis;x86_64";
|
|
73
|
+
/**
|
|
74
|
+
* El paso que crea un AVD. Una función y no dos literales: la receta crea `pixel8`, Ajustes el
|
|
75
|
+
* que se le diga, y la invocación (imagen, perfil, respuesta por `stdin`) tiene que ser LA MISMA.
|
|
76
|
+
* El título de `pixel8` se conserva tal cual; con otro nombre lo lleva detrás.
|
|
77
|
+
*/
|
|
78
|
+
function pasoDeCrearAvd(nombre, imagen, perfil = "pixel_8") {
|
|
79
|
+
return {
|
|
80
|
+
tipo: "proceso",
|
|
81
|
+
binario: "avdmanager",
|
|
82
|
+
conSdk: true,
|
|
83
|
+
subcarpeta: join("cmdline-tools", "latest", "bin"),
|
|
84
|
+
invocaciones: [
|
|
85
|
+
// «Do you wish to create a custom hardware profile? [no]»: sin respuesta, cuelga.
|
|
86
|
+
{ args: ["create", "avd", "-n", nombre, "-k", imagen, "-d", perfil], teclear: ["no\n"] },
|
|
87
|
+
],
|
|
88
|
+
titulo: nombre === "pixel8" ? "Creando el dispositivo virtual" : `Creando el dispositivo virtual ${nombre}`,
|
|
89
|
+
};
|
|
90
|
+
}
|
|
70
91
|
/**
|
|
71
92
|
* Los pasos que xonecode lanza él. Tabla CERRADA y por `receta:plataforma:paso`: lo que
|
|
72
93
|
* llega del cliente es un número, y un número que no esté aquí no lanza nada.
|
|
@@ -135,17 +156,7 @@ export const PASOS_EJECUTABLES = new Map([
|
|
|
135
156
|
],
|
|
136
157
|
[
|
|
137
158
|
"android-emulador:darwin:3",
|
|
138
|
-
|
|
139
|
-
tipo: "proceso",
|
|
140
|
-
binario: "avdmanager",
|
|
141
|
-
conSdk: true,
|
|
142
|
-
subcarpeta: join("cmdline-tools", "latest", "bin"),
|
|
143
|
-
invocaciones: [
|
|
144
|
-
// «Do you wish to create a custom hardware profile? [no]»: sin respuesta, cuelga.
|
|
145
|
-
{ args: ["create", "avd", "-n", "pixel8", "-k", IMAGEN_DARWIN, "-d", "pixel_8"], teclear: ["no\n"] },
|
|
146
|
-
],
|
|
147
|
-
titulo: "Creando el dispositivo virtual",
|
|
148
|
-
},
|
|
159
|
+
pasoDeCrearAvd("pixel8", IMAGEN_DARWIN),
|
|
149
160
|
],
|
|
150
161
|
[
|
|
151
162
|
"android-emulador:win32:1",
|
|
@@ -211,16 +222,7 @@ export const PASOS_EJECUTABLES = new Map([
|
|
|
211
222
|
],
|
|
212
223
|
[
|
|
213
224
|
"android-emulador:win32:5",
|
|
214
|
-
|
|
215
|
-
tipo: "proceso",
|
|
216
|
-
binario: "avdmanager",
|
|
217
|
-
conSdk: true,
|
|
218
|
-
subcarpeta: join("cmdline-tools", "latest", "bin"),
|
|
219
|
-
invocaciones: [
|
|
220
|
-
{ args: ["create", "avd", "-n", "pixel8", "-k", IMAGEN_WIN32, "-d", "pixel_8"], teclear: ["no\n"] },
|
|
221
|
-
],
|
|
222
|
-
titulo: "Creando el dispositivo virtual",
|
|
223
|
-
},
|
|
225
|
+
pasoDeCrearAvd("pixel8", IMAGEN_WIN32),
|
|
224
226
|
],
|
|
225
227
|
]);
|
|
226
228
|
/**
|
|
@@ -233,12 +235,6 @@ export const PASOS_EJECUTABLES = new Map([
|
|
|
233
235
|
*/
|
|
234
236
|
export function correrPasoDeReceta(receta, numero, deps = {}) {
|
|
235
237
|
const plataforma = deps.plataforma ?? process.platform;
|
|
236
|
-
const entorno = deps.entorno ?? process.env;
|
|
237
|
-
const home = deps.home ?? homedir();
|
|
238
|
-
const existe = deps.existe ?? existsSync;
|
|
239
|
-
const ahora = deps.ahora ?? (() => Date.now());
|
|
240
|
-
const t0 = ahora();
|
|
241
|
-
const decir = (linea) => deps.alSalirLinea?.(linea);
|
|
242
238
|
const paso = PASOS_EJECUTABLES.get(`${receta}:${plataforma}:${numero}`);
|
|
243
239
|
if (paso === undefined) {
|
|
244
240
|
return {
|
|
@@ -247,6 +243,221 @@ export function correrPasoDeReceta(receta, numero, deps = {}) {
|
|
|
247
243
|
terminado: Promise.resolve({ estado: "fallo", motivo: "ese paso no se lanza desde aquí", ms: 0 }),
|
|
248
244
|
};
|
|
249
245
|
}
|
|
246
|
+
return correrPaso(paso, deps);
|
|
247
|
+
}
|
|
248
|
+
const IMAGEN_POR_PLATAFORMA = { darwin: IMAGEN_DARWIN, win32: IMAGEN_WIN32 };
|
|
249
|
+
/** La raíz de los AVD: `ANDROID_AVD_HOME` si está puesta, si no `<casa>/.android/avd` (como el emulador). */
|
|
250
|
+
function raizDeAvds(deps) {
|
|
251
|
+
const propia = (deps.entorno ?? process.env)["ANDROID_AVD_HOME"];
|
|
252
|
+
return propia !== undefined && propia !== "" ? propia : join(deps.home ?? homedir(), ".android", "avd");
|
|
253
|
+
}
|
|
254
|
+
function trabajoTerminado(motivo) {
|
|
255
|
+
return {
|
|
256
|
+
titulo: "",
|
|
257
|
+
cancelar: () => { },
|
|
258
|
+
terminado: Promise.resolve({ estado: "fallo", motivo, ms: 0 }),
|
|
259
|
+
};
|
|
260
|
+
}
|
|
261
|
+
/**
|
|
262
|
+
* Crear un AVD con nombre, por el mismo corredor que la receta (topes, stdin, SDK). Nunca lanza.
|
|
263
|
+
*
|
|
264
|
+
* Con `base` es el modo CONFIGURACIÓN: la imagen y el perfil salen del `config.ini` de la base
|
|
265
|
+
* (`avdmanager` los pide), y al acabar BIEN se le pone encima ese mismo `config.ini` para que
|
|
266
|
+
* herede RAM, disco y el resto. El AVD nuevo arranca vacío; vale con la base encendida.
|
|
267
|
+
*/
|
|
268
|
+
export function crearAvd(nombre, deps = {}, opciones = {}) {
|
|
269
|
+
const motivo = motivoDeNombreDeAvdInaceptable(nombre, []);
|
|
270
|
+
if (motivo !== undefined)
|
|
271
|
+
return trabajoTerminado(motivo);
|
|
272
|
+
// La misma guarda con base y sin ella: sin paso de crear en esta plataforma, no se lanza nada.
|
|
273
|
+
const imagenPorOmision = IMAGEN_POR_PLATAFORMA[deps.plataforma ?? process.platform];
|
|
274
|
+
if (imagenPorOmision === undefined)
|
|
275
|
+
return trabajoTerminado("crear emuladores no se lanza desde aquí en esta máquina");
|
|
276
|
+
if (opciones.base === undefined)
|
|
277
|
+
return correrPaso(pasoDeCrearAvd(nombre, imagenPorOmision), deps);
|
|
278
|
+
const base = opciones.base;
|
|
279
|
+
// La base acaba siendo una ruta: pasa por la misma regla de forma que el nombre (sin `..` ni barras).
|
|
280
|
+
const malaBase = motivoDeNombreDeAvdInaceptable(base, []);
|
|
281
|
+
if (malaBase !== undefined)
|
|
282
|
+
return trabajoTerminado(`la base no vale: ${malaBase}`);
|
|
283
|
+
const carpetaBase = join(raizDeAvds(deps), `${base}.avd`);
|
|
284
|
+
let configBase;
|
|
285
|
+
try {
|
|
286
|
+
configBase = readFileSync(join(carpetaBase, "config.ini"), "utf8");
|
|
287
|
+
}
|
|
288
|
+
catch (e) {
|
|
289
|
+
return trabajoTerminado(`no se pudo leer la configuración de ${base} (${codigoDe(e)})`);
|
|
290
|
+
}
|
|
291
|
+
const config = leerIni(configBase);
|
|
292
|
+
const imagen = paqueteDeImagen(config);
|
|
293
|
+
if (imagen === undefined)
|
|
294
|
+
return trabajoTerminado(`${base} no dice qué imagen de sistema usa (image.sysdir.1)`);
|
|
295
|
+
const perfil = perfilDeTelefono(config);
|
|
296
|
+
if (perfil === undefined)
|
|
297
|
+
return trabajoTerminado(`${base} no dice qué perfil de teléfono usa (hw.device.name)`);
|
|
298
|
+
const trabajo = correrPaso(pasoDeCrearAvd(nombre, imagen, perfil), deps);
|
|
299
|
+
return {
|
|
300
|
+
...trabajo,
|
|
301
|
+
terminado: trabajo.terminado.then((r) => {
|
|
302
|
+
if (r.estado !== "ok")
|
|
303
|
+
return r;
|
|
304
|
+
try {
|
|
305
|
+
deps.alSalirLinea?.(`Copiando la configuración de ${base}`);
|
|
306
|
+
writeFileSync(join(raizDeAvds(deps), `${nombre}.avd`, "config.ini"), configBase);
|
|
307
|
+
return r;
|
|
308
|
+
}
|
|
309
|
+
catch (e) {
|
|
310
|
+
return { estado: "fallo", motivo: `se creó ${nombre} pero no se le pudo copiar la configuración (${codigoDe(e)})`, ms: r.ms };
|
|
311
|
+
}
|
|
312
|
+
}),
|
|
313
|
+
};
|
|
314
|
+
}
|
|
315
|
+
/**
|
|
316
|
+
* Eliminar un AVD por su nombre, por el MISMO corredor que crear (topes, SDK, `JAVA_HOME`):
|
|
317
|
+
* `avdmanager delete avd -n <nombre>` borra la carpeta y el `.ini`, y no toca la imagen del sistema
|
|
318
|
+
* ni los demás. El nombre acaba en un argumento, así que pasa por la regla de forma de siempre
|
|
319
|
+
* (sin `..` ni barras). Nunca lanza. Que sea el último, o que esté en marcha, lo decide quien llama
|
|
320
|
+
* (la última medida): aquí solo se ve el disco.
|
|
321
|
+
*/
|
|
322
|
+
export function borrarAvd(nombre, deps = {}) {
|
|
323
|
+
const motivo = motivoDeNombreDeAvdInaceptable(nombre, []);
|
|
324
|
+
if (motivo !== undefined)
|
|
325
|
+
return trabajoTerminado(motivo);
|
|
326
|
+
return correrPaso({
|
|
327
|
+
tipo: "proceso",
|
|
328
|
+
binario: "avdmanager",
|
|
329
|
+
conSdk: true,
|
|
330
|
+
subcarpeta: join("cmdline-tools", "latest", "bin"),
|
|
331
|
+
invocaciones: [{ args: ["delete", "avd", "-n", nombre], teclear: [] }],
|
|
332
|
+
titulo: `Eliminando el dispositivo virtual ${nombre}`,
|
|
333
|
+
}, deps);
|
|
334
|
+
}
|
|
335
|
+
/** De un error de Node solo el `code`: su mensaje lleva la ruta absoluta (nada de rutas por el cable). */
|
|
336
|
+
function codigoDe(e) {
|
|
337
|
+
const c = e?.code;
|
|
338
|
+
return typeof c === "string" ? c : "error";
|
|
339
|
+
}
|
|
340
|
+
/** Bytes de lo que SÍ se copiaría, para decirlo antes de empezar (un AVD con datos son gigas). Asíncrono: no bloquea el servidor. */
|
|
341
|
+
async function tamanoDeLoQueSeCopia(carpeta, filtro) {
|
|
342
|
+
let total = 0;
|
|
343
|
+
const recorrer = async (dir) => {
|
|
344
|
+
for (const e of await readdir(dir, { withFileTypes: true })) {
|
|
345
|
+
const ruta = join(dir, e.name);
|
|
346
|
+
if (!filtro(ruta))
|
|
347
|
+
continue;
|
|
348
|
+
if (e.isDirectory())
|
|
349
|
+
await recorrer(ruta);
|
|
350
|
+
else if (e.isFile())
|
|
351
|
+
total += (await stat(ruta)).size;
|
|
352
|
+
}
|
|
353
|
+
};
|
|
354
|
+
await recorrer(carpeta);
|
|
355
|
+
return total;
|
|
356
|
+
}
|
|
357
|
+
function enTexto(bytes) {
|
|
358
|
+
const gb = bytes / 1024 ** 3;
|
|
359
|
+
return gb >= 1 ? `${gb.toFixed(1)} GB` : `${Math.max(1, Math.round(bytes / 1024 ** 2))} MB`;
|
|
360
|
+
}
|
|
361
|
+
/**
|
|
362
|
+
* Modo CLON: copia la carpeta del AVD `base` a `nombre` (lo instalado incluido), sin lo que
|
|
363
|
+
* `seCopiaEnClon` excluye, y SOLO al acabar bien escribe `<nombre>.ini` —un AVD sin `.ini` no
|
|
364
|
+
* existe para el emulador, así que una copia a medias nunca aparece en la lista—. Un fallo o una
|
|
365
|
+
* cancelación BORRAN la carpeta a medias. Nunca lanza. `snapshots/` viaja con la identidad reescrita
|
|
366
|
+
* (`core/copiaDeAvd.ts`): sin ella un clon pierde lo que el original aún no había volcado al disco. La base tiene que estar apagada: lo comprueba
|
|
367
|
+
* quien llama (la medida de dispositivos), aquí solo se ve el disco.
|
|
368
|
+
*/
|
|
369
|
+
export function clonarAvd(base, nombre, deps = {}) {
|
|
370
|
+
const titulo = `Clonando el dispositivo virtual ${base} como ${nombre}`;
|
|
371
|
+
const ahora = deps.ahora ?? (() => Date.now());
|
|
372
|
+
const t0 = ahora();
|
|
373
|
+
const decir = (linea) => deps.alSalirLinea?.(linea);
|
|
374
|
+
const termina = (estado, motivo) => ({
|
|
375
|
+
estado,
|
|
376
|
+
...(motivo === undefined ? {} : { motivo }),
|
|
377
|
+
ms: ahora() - t0,
|
|
378
|
+
});
|
|
379
|
+
const fallo = (motivo) => ({
|
|
380
|
+
titulo,
|
|
381
|
+
cancelar: () => { },
|
|
382
|
+
terminado: Promise.resolve(termina("fallo", motivo)),
|
|
383
|
+
});
|
|
384
|
+
const malNombre = motivoDeNombreDeAvdInaceptable(nombre, []);
|
|
385
|
+
if (malNombre !== undefined)
|
|
386
|
+
return fallo(malNombre);
|
|
387
|
+
const malaBase = motivoDeNombreDeAvdInaceptable(base, []);
|
|
388
|
+
if (malaBase !== undefined)
|
|
389
|
+
return fallo(`la base no vale: ${malaBase}`);
|
|
390
|
+
if (base === nombre)
|
|
391
|
+
return fallo("el clon no puede llamarse como su base");
|
|
392
|
+
const raiz = raizDeAvds(deps);
|
|
393
|
+
const origen = join(raiz, `${base}.avd`);
|
|
394
|
+
const destino = join(raiz, `${nombre}.avd`);
|
|
395
|
+
const iniOrigen = join(raiz, `${base}.ini`);
|
|
396
|
+
const iniDestino = join(raiz, `${nombre}.ini`);
|
|
397
|
+
const existe = deps.existe ?? existsSync;
|
|
398
|
+
if (!existe(origen) || !existe(iniOrigen))
|
|
399
|
+
return fallo(`${base} no existe en disco`);
|
|
400
|
+
if (existe(destino) || existe(iniDestino))
|
|
401
|
+
return fallo(`${nombre} ya existe`);
|
|
402
|
+
let cancelado = false;
|
|
403
|
+
// Cancelar corta por el filtro: `fs.cp` no admite señal, y lanzar desde el filtro lo aborta.
|
|
404
|
+
const CANCELADO = new Error("cancelado");
|
|
405
|
+
const filtro = (ruta) => {
|
|
406
|
+
if (cancelado)
|
|
407
|
+
throw CANCELADO;
|
|
408
|
+
return seCopiaEnClon(relative(origen, ruta));
|
|
409
|
+
};
|
|
410
|
+
const copiar = deps.copiarCarpeta ??
|
|
411
|
+
// COPYFILE_FICLONE: en APFS el clon es instantáneo y no gasta disco; donde no se puede, copia normal.
|
|
412
|
+
((o, d, f) => cp(o, d, { recursive: true, filter: f, mode: constants.COPYFILE_FICLONE }));
|
|
413
|
+
const terminado = (async () => {
|
|
414
|
+
try {
|
|
415
|
+
try {
|
|
416
|
+
decir(`Se copiarán ${enTexto(await tamanoDeLoQueSeCopia(origen, (r) => seCopiaEnClon(relative(origen, r))))} de ${base}`);
|
|
417
|
+
}
|
|
418
|
+
catch {
|
|
419
|
+
// El tamaño es un dato de cortesía: no poder medirlo no impide clonar.
|
|
420
|
+
}
|
|
421
|
+
decir("Copiando lo instalado, la configuración y la instantánea…");
|
|
422
|
+
await copiar(origen, destino, filtro);
|
|
423
|
+
if (cancelado)
|
|
424
|
+
throw CANCELADO;
|
|
425
|
+
// Las instantáneas llevan la identidad del original: sin reescribirla el emulador las rechaza.
|
|
426
|
+
const instantaneas = join(destino, "snapshots");
|
|
427
|
+
if (existe(instantaneas)) {
|
|
428
|
+
for (const e of await readdir(instantaneas, { withFileTypes: true })) {
|
|
429
|
+
if (!e.isDirectory())
|
|
430
|
+
continue;
|
|
431
|
+
const hw = join(instantaneas, e.name, "hardware.ini");
|
|
432
|
+
if (!existe(hw))
|
|
433
|
+
continue;
|
|
434
|
+
await writeFile(hw, hardwareIniDeClon(await readFile(hw, "utf8"), base, nombre));
|
|
435
|
+
}
|
|
436
|
+
}
|
|
437
|
+
decir("Registrando el dispositivo nuevo");
|
|
438
|
+
const ini = readFileSync(iniOrigen, "utf8");
|
|
439
|
+
await writeFile(iniDestino, iniDeClon(ini, nombre, destino), { flag: "wx" });
|
|
440
|
+
decir("Listo.");
|
|
441
|
+
return termina("ok");
|
|
442
|
+
}
|
|
443
|
+
catch (e) {
|
|
444
|
+
await rm(destino, { recursive: true, force: true }).catch(() => { });
|
|
445
|
+
if (cancelado || e === CANCELADO)
|
|
446
|
+
return termina("cancelada");
|
|
447
|
+
return termina("fallo", `no se pudo clonar ${base} (${codigoDe(e)})`);
|
|
448
|
+
}
|
|
449
|
+
})();
|
|
450
|
+
return { titulo, cancelar: () => void (cancelado = true), terminado };
|
|
451
|
+
}
|
|
452
|
+
/** El cuerpo común: resolver el entorno y correr las invocaciones de un paso ya elegido. */
|
|
453
|
+
function correrPaso(paso, deps) {
|
|
454
|
+
const plataforma = deps.plataforma ?? process.platform;
|
|
455
|
+
const entorno = deps.entorno ?? process.env;
|
|
456
|
+
const home = deps.home ?? homedir();
|
|
457
|
+
const existe = deps.existe ?? existsSync;
|
|
458
|
+
const ahora = deps.ahora ?? (() => Date.now());
|
|
459
|
+
const t0 = ahora();
|
|
460
|
+
const decir = (linea) => deps.alSalirLinea?.(linea);
|
|
250
461
|
// La DESCARGA es un camino aparte y mucho más corto: no hay binario que resolver ni SDK que
|
|
251
462
|
// exigir, solo dónde cae. `descargaDeHerramientas.ts` ya devuelve el MISMO vocabulario
|
|
252
463
|
// (`"ok"|"fallo"|"cancelada"|"colgada"`), así que de aquí para afuera esto es indistinguible
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instalacionEnMaquina.js","sourceRoot":"","sources":["../../../src/agent/dispositivos/instalacionEnMaquina.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"instalacionEnMaquina.js","sourceRoot":"","sources":["../../../src/agent/dispositivos/instalacionEnMaquina.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,8 +7,8 @@
|
|
|
7
7
|
*
|
|
8
8
|
* **Las fases, y por qué ese orden** (el de arriba abajo es el del código, y no es casual):
|
|
9
9
|
*
|
|
10
|
-
* 1. **`comprobando`.** El túnel PRIMERO, porque sin él
|
|
11
|
-
* parte: el servidor escucha en el `localhost` del aparato, y quien lo trae aquí es
|
|
10
|
+
* 1. **`comprobando`.** El túnel PRIMERO, porque sin él el puerto local del aparato
|
|
11
|
+
* (8443 por omisión, o el de su AVD) no lleva a ninguna parte: el servidor escucha en el `localhost` del aparato, y quien lo trae aquí es
|
|
12
12
|
* `adb forward`. **Se aplica siempre y NO se quita al terminar**: se reaplica tras cada
|
|
13
13
|
* reconexión del cable, así que quitarlo dejaría el SIGUIENTE lanzamiento hablando con
|
|
14
14
|
* nadie. Y va antes de la comprobación del framework porque un aparato al que no se llega
|
|
@@ -46,14 +46,15 @@
|
|
|
46
46
|
* dobles viven en el test. El único `node:https` de verdad es el que se usa cuando nadie pasa
|
|
47
47
|
* un doble.
|
|
48
48
|
*
|
|
49
|
-
* **Y el
|
|
49
|
+
* **Y el 8443 DENTRO del aparato es el de FÁBRICA, no una garantía**: si está ocupado, el
|
|
50
50
|
* servidor coge el siguiente libre y el real se ve en la pantalla del framework. Esto se
|
|
51
|
-
* implementa contra 8443 y se anota; leer el puerto real no está implementado.
|
|
51
|
+
* implementa contra 8443 dentro del aparato (el puerto LOCAL del túnel es el del AVD) y se anota; leer el puerto real no está implementado.
|
|
52
52
|
*/
|
|
53
53
|
import { request } from "node:https";
|
|
54
54
|
import { existsSync } from "node:fs";
|
|
55
55
|
import { homedir } from "node:os";
|
|
56
56
|
import { frameworkEnDispositivo, localizadorDeAndroid, } from "./dispositivosEnMaquina.js";
|
|
57
|
+
import { PUERTO_DEL_HOTSWAP } from "../../core/puertosDeAvd.js";
|
|
57
58
|
import { lanzarYComprobar } from "./hotswap.js";
|
|
58
59
|
import { crearEjecutor, TOPE_DE_TRABAJO_MS, TOPE_SIN_SALIDA_MS, unaLinea, } from "./procesosEnMaquina.js";
|
|
59
60
|
import { empaquetarProyecto, enMegas } from "./paqueteDelProyecto.js";
|
|
@@ -64,14 +65,6 @@ import { empaquetarProyecto, enMegas } from "./paqueteDelProyecto.js";
|
|
|
64
65
|
* que usan los dos módulos.
|
|
65
66
|
*/
|
|
66
67
|
export { TOPE_DE_TRABAJO_MS, TOPE_SIN_SALIDA_MS };
|
|
67
|
-
/**
|
|
68
|
-
* El puerto del servidor del framework. El de fábrica: ver el docstring del módulo.
|
|
69
|
-
*
|
|
70
|
-
* El mismo número para el `adb forward` y para la subida, y no dos constantes: son las dos
|
|
71
|
-
* puntas del MISMO túnel, y escribirlas por separado dejaría un lanzamiento hablando por un
|
|
72
|
-
* agujero y subiendo por otro.
|
|
73
|
-
*/
|
|
74
|
-
const PUERTO_DEL_SERVIDOR = 8443;
|
|
75
68
|
/**
|
|
76
69
|
* El nombre EXACTO del ZIP. La extracción automática se dispara **solo** con este nombre, y con
|
|
77
70
|
* él `appName` pasa a ser obligatorio (sin él: `400`). Se extrae en `app_<appName-en-minúsculas>`.
|
|
@@ -207,16 +200,17 @@ export function lanzarEnDispositivo(peticion, deps = {}) {
|
|
|
207
200
|
return acabar("comprobando", { estado: "fallo", motivo: "no está adb: sin él no se llega al dispositivo" });
|
|
208
201
|
}
|
|
209
202
|
const serial = peticion.dispositivo.id;
|
|
203
|
+
const local = peticion.puerto ?? PUERTO_DEL_HOTSWAP;
|
|
210
204
|
const tunel = await unProceso("comprobando", adb, [
|
|
211
205
|
"-s",
|
|
212
206
|
serial,
|
|
213
207
|
"forward",
|
|
214
|
-
`tcp:${
|
|
215
|
-
`tcp:${
|
|
208
|
+
`tcp:${local}`,
|
|
209
|
+
`tcp:${PUERTO_DEL_HOTSWAP}`,
|
|
216
210
|
]);
|
|
217
211
|
if (tunel.estado !== "ok")
|
|
218
212
|
return acabar("comprobando", tunel);
|
|
219
|
-
decir("comprobando", `túnel aplicado: 127.0.0.1:${
|
|
213
|
+
decir("comprobando", `túnel aplicado: 127.0.0.1:${local} es el aparato ${serial}`);
|
|
220
214
|
const instalado = await marco(peticion.dispositivo, { plataforma, entorno, home, existe });
|
|
221
215
|
if (!instalado.instalado || instalado.paquete === undefined) {
|
|
222
216
|
// El `detalle` es una línea que ya existe y dice qué se buscó y qué se encontró.
|
|
@@ -239,13 +233,13 @@ export function lanzarEnDispositivo(peticion, deps = {}) {
|
|
|
239
233
|
decir("empaquetando", `el paquete son ${enMegas(paquete.total)} en ${paquete.ficheros.length} ficheros`);
|
|
240
234
|
// ---- 3. subiendo --------------------------------------------------------------------
|
|
241
235
|
const bytes = paquete.bytes;
|
|
242
|
-
decir("subiendo", `subiendo ${NOMBRE_DEL_ZIP} (${enMegas(bytes.length)}) a 127.0.0.1:${
|
|
236
|
+
decir("subiendo", `subiendo ${NOMBRE_DEL_ZIP} (${enMegas(bytes.length)}) a 127.0.0.1:${local}`);
|
|
243
237
|
abortar = new AbortController();
|
|
244
238
|
let respuesta;
|
|
245
239
|
try {
|
|
246
240
|
respuesta = await subir({
|
|
247
241
|
host: "127.0.0.1",
|
|
248
|
-
puerto:
|
|
242
|
+
puerto: local,
|
|
249
243
|
ruta: rutaDeSubida(peticion.app),
|
|
250
244
|
metodo: "POST",
|
|
251
245
|
cabeceras: cabecerasDeSubida(bytes),
|
|
@@ -288,6 +282,7 @@ export function lanzarEnDispositivo(peticion, deps = {}) {
|
|
|
288
282
|
const veredicto = await Promise.race([
|
|
289
283
|
lanzarYComprobar(peticion.app, {
|
|
290
284
|
abrirSocket: deps.abrirSocket,
|
|
285
|
+
destino: `wss://127.0.0.1:${local}/hotswap`,
|
|
291
286
|
// Las líneas del canal se cuelgan de la fase del lanzamiento: son suyas, y el saludo
|
|
292
287
|
// del servidor con su `protocol_version` es parte de lo que hay que poder leer.
|
|
293
288
|
alLinea: (linea) => decir("lanzando", linea),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lanzamientoEnMaquina.js","sourceRoot":"","sources":["../../../src/agent/dispositivos/lanzamientoEnMaquina.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmDG;AACH,OAAO,EAAE,OAAO,EAAuB,MAAM,YAAY,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAElC,OAAO,EACL,sBAAsB,EACtB,oBAAoB,GAGrB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,gBAAgB,EAA2B,MAAM,cAAc,CAAC;AACzE,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,kBAAkB,EAClB,QAAQ,GAIT,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,kBAAkB,EAAE,OAAO,EAA2B,MAAM,yBAAyB,CAAC;AAE/F;;;;;GAKG;AACH,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,CAAC;AAElD
|
|
1
|
+
{"version":3,"file":"lanzamientoEnMaquina.js","sourceRoot":"","sources":["../../../src/agent/dispositivos/lanzamientoEnMaquina.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Las reglas PURAS de «Nuevo emulador a partir de uno existente»: qué se lee de un AVD base y qué
|
|
3
|
+
* se copia al nuevo. El disco y `avdmanager` viven en `agent/dispositivos/instalacionEnMaquina.ts`.
|
|
4
|
+
*
|
|
5
|
+
* Dos modos, y la diferencia es cuánto de la base viaja:
|
|
6
|
+
* - CONFIGURACIÓN: `avdmanager` crea un AVD vacío con la imagen y el perfil de la base, y se le
|
|
7
|
+
* pone encima el `config.ini` de la base (RAM, disco…). Vale con la base encendida.
|
|
8
|
+
* - CLON: se copia la carpeta entera (lo instalado), salvo lo que `seCopiaEnClon` excluye. La base
|
|
9
|
+
* tiene que estar apagada: sus discos están bloqueados mientras corre.
|
|
10
|
+
*/
|
|
11
|
+
/** Las líneas `clave=valor` de un `.ini` de AVD. Sin `=` o en blanco se ignoran; el valor va tal cual. */
|
|
12
|
+
export function leerIni(texto) {
|
|
13
|
+
const r = new Map();
|
|
14
|
+
for (const linea of texto.split(/\r?\n/)) {
|
|
15
|
+
const i = linea.indexOf("=");
|
|
16
|
+
if (i <= 0)
|
|
17
|
+
continue;
|
|
18
|
+
r.set(linea.slice(0, i).trim(), linea.slice(i + 1).trim());
|
|
19
|
+
}
|
|
20
|
+
return r;
|
|
21
|
+
}
|
|
22
|
+
const FORMA_DE_SYSDIR = /^system-images\/([^/;\s]+)\/([^/;\s]+)\/([^/;\s]+)\/?$/;
|
|
23
|
+
/**
|
|
24
|
+
* El paquete de imagen para `avdmanager -k`, de `image.sysdir.1`:
|
|
25
|
+
* `system-images/android-35/google_apis/arm64-v8a/` → `system-images;android-35;google_apis;arm64-v8a`.
|
|
26
|
+
* Sin esa forma no se adivina nada: `undefined`.
|
|
27
|
+
*/
|
|
28
|
+
export function paqueteDeImagen(config) {
|
|
29
|
+
const m = FORMA_DE_SYSDIR.exec(config.get("image.sysdir.1") ?? "");
|
|
30
|
+
return m === null ? undefined : `system-images;${m[1]};${m[2]};${m[3]}`;
|
|
31
|
+
}
|
|
32
|
+
const FORMA_DE_PERFIL = /^[A-Za-z0-9._-]+$/;
|
|
33
|
+
/** El perfil de teléfono (`-d`) de la base: `hw.device.name`, si tiene forma de un nombre de perfil. */
|
|
34
|
+
export function perfilDeTelefono(config) {
|
|
35
|
+
const p = config.get("hw.device.name");
|
|
36
|
+
return p !== undefined && FORMA_DE_PERFIL.test(p) ? p : undefined;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* El `<nombre>.ini` del clon: el de la base con `path` y `path.rel` apuntando a la carpeta nueva.
|
|
40
|
+
* Lo demás (`target`, codificación…) se conserva. Si la base no traía alguna de las dos claves se
|
|
41
|
+
* AÑADE: un `.ini` sin `path` no lo encuentra nadie.
|
|
42
|
+
*/
|
|
43
|
+
export function iniDeClon(iniBase, nombre, carpetaAvd) {
|
|
44
|
+
const nuevas = { path: carpetaAvd, "path.rel": `avd/${nombre}.avd` };
|
|
45
|
+
const puestas = new Set();
|
|
46
|
+
const lineas = iniBase.split(/\r?\n/).filter((l, i, todas) => !(l === "" && i === todas.length - 1));
|
|
47
|
+
const salida = lineas.map((linea) => {
|
|
48
|
+
const i = linea.indexOf("=");
|
|
49
|
+
const clave = i > 0 ? linea.slice(0, i).trim() : undefined;
|
|
50
|
+
if (clave !== undefined && clave in nuevas) {
|
|
51
|
+
puestas.add(clave);
|
|
52
|
+
return `${clave}=${nuevas[clave]}`;
|
|
53
|
+
}
|
|
54
|
+
return linea;
|
|
55
|
+
});
|
|
56
|
+
for (const [clave, valor] of Object.entries(nuevas))
|
|
57
|
+
if (!puestas.has(clave))
|
|
58
|
+
salida.push(`${clave}=${valor}`);
|
|
59
|
+
return `${salida.join("\n")}\n`;
|
|
60
|
+
}
|
|
61
|
+
/** Ficheros sueltos de la carpeta de un AVD que NO viajan al clon: son de la última ejecución del original. */
|
|
62
|
+
const FICHEROS_QUE_NO_SE_COPIAN = new Set([
|
|
63
|
+
"hardware-qemu.ini", // lleva la ruta absoluta del original, tres veces; el emulador lo regenera
|
|
64
|
+
"emu-launch-params.txt", // ídem
|
|
65
|
+
"read-snapshot.txt",
|
|
66
|
+
"snapshot.trace",
|
|
67
|
+
"tmpAdbCmds",
|
|
68
|
+
"bootcompleted.ini",
|
|
69
|
+
]);
|
|
70
|
+
/**
|
|
71
|
+
* ¿Entra en el clon esta ruta, relativa a la carpeta del AVD (separada por `/` o `\`)? Lista NEGRA:
|
|
72
|
+
* los `.lock` en cualquier nivel (el original los tiene cogidos) y los ficheros de la última
|
|
73
|
+
* ejecución. `snapshots/` SÍ viaja (medido): al parar, el emulador guarda la memoria en la
|
|
74
|
+
* instantánea, y lo que aún no se volcó al disco solo vive ahí; sin ella, el clon ve un disco a
|
|
75
|
+
* medias (un fichero escrito salía con 0 bytes). Hay que reescribirles la identidad
|
|
76
|
+
* (`hardwareIniDeClon`) o el emulador las rechaza.
|
|
77
|
+
*/
|
|
78
|
+
export function seCopiaEnClon(relativa) {
|
|
79
|
+
const partes = relativa.split(/[\\/]/).filter((p) => p !== "" && p !== ".");
|
|
80
|
+
if (partes.length === 0)
|
|
81
|
+
return true;
|
|
82
|
+
const ultimo = partes[partes.length - 1];
|
|
83
|
+
if (ultimo.endsWith(".lock"))
|
|
84
|
+
return false;
|
|
85
|
+
return !(partes.length === 1 && FICHEROS_QUE_NO_SE_COPIAN.has(ultimo));
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* El `hardware.ini` de una instantánea del clon, con la identidad del original cambiada por la del
|
|
89
|
+
* clon (medido: con solo las rutas el emulador rechaza la instantánea —«cannot load snapshot»—; con
|
|
90
|
+
* las dos cosas la carga). Formato `clave = valor`, con espacios. Solo se tocan:
|
|
91
|
+
* - `avd.name` y `avd.id`, si valen exactamente la base;
|
|
92
|
+
* - en cualquier otro valor, los segmentos de ruta `<base>.avd` EXACTOS (entre `/` o `\`, o al
|
|
93
|
+
* final), nunca el nombre suelto: la base podría aparecer dentro de otra palabra.
|
|
94
|
+
*/
|
|
95
|
+
export function hardwareIniDeClon(texto, base, nombre) {
|
|
96
|
+
const escapada = base.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
97
|
+
const segmento = new RegExp(`(^|[\\\\/])${escapada}\\.avd(?=[\\\\/]|$)`, "g");
|
|
98
|
+
return texto
|
|
99
|
+
.split("\n")
|
|
100
|
+
.map((linea) => {
|
|
101
|
+
const m = /^(\s*)([^=\s][^=]*?)(\s*=\s*)(.*?)(\r?)$/.exec(linea);
|
|
102
|
+
if (m === null)
|
|
103
|
+
return linea;
|
|
104
|
+
const [, sangria, clave, igual, valor, cr] = m;
|
|
105
|
+
if (clave === "avd.name" || clave === "avd.id")
|
|
106
|
+
return `${sangria}${clave}${igual}${valor === base ? nombre : valor}${cr}`;
|
|
107
|
+
return `${sangria}${clave}${igual}${valor.replace(segmento, `$1${nombre}.avd`)}${cr}`;
|
|
108
|
+
})
|
|
109
|
+
.join("\n");
|
|
110
|
+
}
|
|
111
|
+
//# sourceMappingURL=copiaDeAvd.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"copiaDeAvd.js","sourceRoot":"","sources":["../../src/core/copiaDeAvd.ts"],"names":[],"mappings":"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"}
|