xonecode 0.28.0 → 0.29.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.
@@ -15,9 +15,10 @@
15
15
  * reintento de un minuto de `lanzarYComprobar` es para un framework que ARRANCA, no para uno que
16
16
  * no está.
17
17
  * - **`result:true` no es «aplicado»**: lo que se afirma es que la app CONTESTA su árbol después.
18
- * - **Relanzar es `lanzarYComprobar`, y solo a petición**: un `launchApplication` suelto sobre una
19
- * app viva la TUMBA (medido), y `lanzarYComprobar` solo reenvía detrás de una lectura que dice
20
- * «no está».
18
+ * - **Lo que solo se lee al cargar la app (CSS, `app.ini`, `app.xml`) RELANZA la app**, por
19
+ * `lanzarYComprobar`: un `launchApplication` suelto sobre una app viva la TUMBA (medido), y
20
+ * `lanzarYComprobar` solo reenvía detrás de una lectura que dice «no está». Se probó todo lo del
21
+ * canal para hacerlo sin relanzar y nada cambia el estilo (ver `docs/DECISIONES.md`).
21
22
  */
22
23
  import { execFile } from "node:child_process";
23
24
  import { existsSync } from "node:fs";
@@ -53,8 +54,48 @@ export async function recargarEnAparato(peticion, deps = {}) {
53
54
  });
54
55
  if (subida.result !== true)
55
56
  return { estado: "fallo", clase, motivo: `uploadFile: ${decirDe(subida)}` };
56
- if (clase === "relanzar")
57
- return { estado: "relanzar", clase };
57
+ if (clase === "css") {
58
+ // Un CSS se recarga en caliente, sin relanzar. Dos caminos, los dos MEDIDOS en el emulador:
59
+ // - el comando `loadCssFile` del canal (framework 5.0.5.7dev en adelante): sustituye la hoja en
60
+ // su sitio de la cascada y relayouta solo;
61
+ // - en un framework anterior, que contesta `Unknown command`, las funciones de XOne por
62
+ // `runScript` (`appData.unloadCssFile` + `loadCssFile`) y un `refresh`, sin el cual no se ve.
63
+ // Lo que NO funciona, también medido: `setCssAttribute`, `relayout`, `refresh` o
64
+ // `loadCollection` solos. Si nada aplica (un nombre que no encaja), se cae a relanzar.
65
+ const nombre = peticion.ruta.replace(/^\/+/, "");
66
+ const tabla = codificacionParaElAparato(peticion.bytes);
67
+ const nativo = await pedir("loadCssFile", { fileName: nombre, encoding: tabla });
68
+ let recargado = nativo.result === true;
69
+ if (!recargado && /Unknown command/i.test(decirDe(nativo))) {
70
+ const script = `appData.unloadCssFile(${JSON.stringify(nombre)}); appData.loadCssFile(${JSON.stringify(nombre)}, ${JSON.stringify(tabla)}); return "ok";`;
71
+ const porScript = await pedir("runScript", {
72
+ scriptLanguage: "javascript",
73
+ scriptText: Buffer.from(script, "utf8").toString("base64"),
74
+ });
75
+ if (porScript.result === true) {
76
+ await pedir("refresh");
77
+ recargado = true;
78
+ }
79
+ }
80
+ if (recargado) {
81
+ const despues = await pedir("getAllElements", { format: "xone" });
82
+ if (estaViva(despues))
83
+ return { estado: "aplicada", clase };
84
+ }
85
+ }
86
+ if (clase === "relanzar" || clase === "css") {
87
+ // `app.ini`, `app.xml` y los mappings solo se leen al CARGAR la app; y un CSS cuyo script falló.
88
+ // Se relanza, por el camino que no tumba una app viva.
89
+ cliente.cerrar();
90
+ cliente = undefined;
91
+ const arranque = await lanzarYComprobar(peticion.app, {
92
+ destino: destinoDe(peticion.puerto),
93
+ ...(deps.abrirSocket === undefined ? {} : { abrirSocket: deps.abrirSocket }),
94
+ });
95
+ return arranque.viva
96
+ ? { estado: "relanzada", clase }
97
+ : { estado: "fallo", clase, motivo: `se relanzó y no volvió: ${arranque.motivo ?? "sin motivo"}` };
98
+ }
58
99
  // 2. Aplicar. Una colección va a memoria en UTF-8 con su prólogo diciéndolo (medido: con los
59
100
  // bytes Latin-1 cada tilde salía doble); un include se lee del DISCO, en la tabla de sus bytes.
60
101
  const aplicado = clase === "coleccion"
@@ -1 +1 @@
1
- {"version":3,"file":"recargaEnAparato.js","sourceRoot":"","sources":["../../../src/agent/dispositivos/recargaEnAparato.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"recargaEnAparato.js","sourceRoot":"","sources":["../../../src/agent/dispositivos/recargaEnAparato.ts"],"names":[],"mappings":"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"}
@@ -9,14 +9,16 @@
9
9
  * en memoria, y por eso se sube también a disco — sin eso,
10
10
  * relanzar la app la devuelve a la versión anterior.
11
11
  * JavaScript (`.js`) → `uploadFile` + `loadIncludeFile` con `compile: true`.
12
- * CSS, `.ini`, `app.xml`, un `.xne` sin colección (mappings)
13
- * → `uploadFile`, y hace falta RELANZAR la app. Medido:
14
- * `setCssAttribute`, `relayout` y `refresh` contestan
15
- * `result:true` y no cambian nada.
12
+ * CSS (`.css`) → `uploadFile` + `runScript` con `appData.unloadCssFile` y
13
+ * `appData.loadCssFile` + `refresh` (idea suya, medido: el
14
+ * color cambia sin relanzar). Si el script falla, se relanza.
15
+ * `.ini`, `app.xml`, un `.xne` sin colección (mappings)
16
+ * → `uploadFile` y se RELANZA la app, que es lo único que los
17
+ * relee.
16
18
  * todo lo demás (iconos, `bd/`, `files/`) → no se recarga: lo lleva el despliegue entero.
17
19
  *
18
- * **Relanzar no se hace solo**: se pierde el estado de la pantalla en que está la persona, así
19
- * que lo que se devuelve es «hace falta relanzar» y la pantalla lo OFRECE.
20
+ * **Relanzar SÍ se hace solo** (lo pidió así: lo guardado tiene que verse): el precio, que la app
21
+ * vuelve a su pantalla de inicio, lo dice la frase.
20
22
  */
21
23
  import { decodificarComoTexto, esUtf8Valido, tablaDeLosBytes } from "./codificacion.js";
22
24
  /** Las extensiones que el aparato sabe tomar sueltas. Las mismas del script. */
@@ -43,6 +45,8 @@ export function claseDeRecarga(ruta, bytes) {
43
45
  return "no-aplica";
44
46
  if (ext === ".js")
45
47
  return "js";
48
+ if (ext === ".css")
49
+ return "css";
46
50
  if (ext === ".xne") {
47
51
  let cabeza = "";
48
52
  for (const b of bytes)
@@ -88,11 +92,15 @@ export function textoDeRecarga(r) {
88
92
  case "aplicada":
89
93
  return r.clase === "js"
90
94
  ? "Aparato: JavaScript recargado; la app sigue viva"
91
- : "Aparato: pantalla recargada en caliente; la app sigue viva";
95
+ : r.clase === "css"
96
+ ? "Aparato: estilos recargados en caliente; la app sigue viva"
97
+ : "Aparato: pantalla recargada en caliente; la app sigue viva";
92
98
  case "relanzar":
93
99
  return "Aparato: subido; para verlo hay que relanzar la app";
94
100
  case "relanzada":
95
- return "Aparato: app relanzada y viva";
101
+ return r.clase === "relanzar" || r.clase === "css"
102
+ ? "Aparato: cambios aplicados relanzando la app (vuelve a su pantalla de inicio)"
103
+ : "Aparato: app relanzada y viva";
96
104
  case "sin-app":
97
105
  // El motivo, si se sabe: «no hay aparato elegido» y «no está en la medida» no se arreglan
98
106
  // en el mismo sitio que «la app no corre».
@@ -1 +1 @@
1
- {"version":3,"file":"recargaEnCaliente.js","sourceRoot":"","sources":["../../src/core/recargaEnCaliente.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"recargaEnCaliente.js","sourceRoot":"","sources":["../../src/core/recargaEnCaliente.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "xonecode",
3
- "version": "0.28.0",
3
+ "version": "0.29.0",
4
4
  "description": "Consola CLI y harness de agente para desarrollar aplicaciones XOne",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -107,7 +107,8 @@ xone-desplegar-android --app MiApp --serie emulator-5554
107
107
  # «cambié un botón / una función / un color»: NO despliegues entero. Compara el proyecto con el
108
108
  # aparato, sube SOLO lo que difiere y lo aplica por la vía más barata (1-2 s si es una colección):
109
109
  # colección (.xne) → recarga en caliente JavaScript (.js) → recarga del include
110
- # CSS, app.xml, app.ini, mappings → relanza la app (unos 6 s)
110
+ # CSS (.css) → recarga en caliente (loadCssFile; en frameworks viejos, por runScript)
111
+ # app.xml, app.ini, mappings → relanza la app (unos 6 s)
111
112
  # Necesita la app YA desplegada. Lo que no sabe aplicar (iconos, bd) lo dice y manda a desplegar.
112
113
  xone-recargar-android
113
114
  xone-recargar-android MenuPrincipal.xne functions.js # solo esos, sin comparar
@@ -246,7 +247,7 @@ Detalle de despliegue, relanzado y endpoints de fichero: [conexión y despliegue
246
247
  | Tocar (`click`, `tap`, `doubleTap`, `longPress`, `openSelector`, `fill`, `clear`, `scroll`, `pressKey`) | sí | **sí**, con desviaciones (abajo) |
247
248
  | Ciclo de app (`launchApplication`, `exitApplication`, `directdownload`) | sí | `launchApplication` y `directdownload` sí; `exitApplication` no |
248
249
  | Atributos y colecciones (`setAttribute`, `deleteAttribute`, `loadCollection`) | sí | sí |
249
- | CSS, `replaceProperty`, `refresh`, `relayout`, `loadIncludeFile` | sí | **no** |
250
+ | CSS (`setCssAttribute`, `loadCssFile`/`unloadCssFile`), `replaceProperty`, `refresh`, `relayout`, `loadIncludeFile` | sí | **no** |
250
251
  | Ficheros (`/file_upload`, `/file_download`, `uploadFile`, `getFileChecksum`) | sí | **no** (`listappfiles` sí) |
251
252
  | Scripts y SQL (`runScript`, `runSql`, `getDatabaseTableNames`, `queryDatabaseTable`) | sí | **no** |
252
253
  | Logs (`getLog`, `*DeviceLogging`, `setLog*`) | sí | **no** |
@@ -81,6 +81,7 @@ por los dos canales.
81
81
  | `deleteAttribute` | sí | sí | **solo WS** |
82
82
  | `replaceProperty` | sí | — | — |
83
83
  | `setCssAttribute` / `deleteCssAttribute` | sí | — | — |
84
+ | `loadCssFile` / `unloadCssFile` (desde 5.0.5.7dev) | sí | — | — |
84
85
  | `refresh` / `relayout` | sí | — | — |
85
86
  | `status` / `state` | sí | sí | **solo WS** |
86
87
  | `uploadFile` | sí | — | — |
@@ -542,7 +543,8 @@ Carga o recarga una colección XML en caliente. **Entrada:** `xmlNode` (XML en *
542
543
  |---|---|---|
543
544
  | Colección `.xne` | `loadCollection` con el fichero entero en Base64 y `encoding=UTF-8` | Se repinta en ~2 s, **solo en memoria**: al relanzar la app vuelve la versión de disco. Para que persista, subir también el fichero con `uploadFile`. |
544
545
  | JavaScript | `uploadFile` y luego `loadIncludeFile` con `compile=true` | Se aplica al instante. Solo subirlo, o `loadCollection`, **no** lo recarga. |
545
- | CSS | `uploadFile` y luego `launchApplication` | Se aplica al relanzar. `setCssAttribute`, `relayout`, `refresh` y `loadCollection` contestan `result:true` y el color **no cambia**; `loadIncludeFile` no admite css (`Unknown script language css`). |
546
+ | CSS (5.0.5.7dev en adelante) | `uploadFile` y luego `loadCssFile` con `fileName` | Se aplica al instante (medido: ~50 ms), **sin relanzar ni `refresh`**: sustituye la hoja en su sitio de la cascada y relayouta. |
547
+ | CSS (antes de 5.0.5.7dev, donde `loadCssFile` es `Unknown command`) | `uploadFile`, `runScript` con `appData.unloadCssFile(n); appData.loadCssFile(n, enc); return "ok";` y luego `refresh` | Se aplica sin relanzar. **Sin el `refresh` no se ve**: el cambio entra en el siguiente pintado. `setCssAttribute`, `relayout`, `refresh` y `loadCollection` solos contestan `result:true` y el color **no cambia**; `loadIncludeFile` no admite css (`Unknown script language css`). |
546
548
 
547
549
  `uploadFile`: `destinationPath` cuelga del directorio de datos del framework, no del de la app.
548
550
  La app vive en `app_<nombre en minúsculas>/`, así que hay que dar `app_holamundo/functions.js`; con
@@ -567,6 +569,20 @@ relayout o refresh según el atributo. **(iOS)** también es legado: solo WebSoc
567
569
  ### `setCssAttribute` / `deleteCssAttribute` — solo Android
568
570
  `fileName`, `className`, `attributeName` (+ `attributeValue` en el set).
569
571
 
572
+ ### `loadCssFile` / `unloadCssFile` — solo Android, desde 5.0.5.7dev
573
+ `loadCssFile`: `fileName` (sí), `encoding` (no, `UTF-8`), `conditions` (no, vacío = siempre),
574
+ `strictMode` (no, `false`). Carga una hoja que **ya está en el dispositivo** (súbela antes con
575
+ `uploadFile`), como un `<style>` del `<app>`, y relayouta las ventanas visibles. Si ya estaba cargada
576
+ con las mismas `conditions`, la **sustituye** en su sitio: así se aplica una hoja recién subida, sin
577
+ `unloadCssFile` antes. `unloadCssFile`: `fileName` (sí); quita la hoja y relayouta; una que no está
578
+ cargada responde éxito.
579
+
580
+ **Medido (5.0.5.7dev, emulador):** `uploadFile` + `loadCssFile fileName=default-colors.css` cambia el
581
+ color de un botón en ~50 ms, sin relanzar. Un nombre que no existe: `result:false` con
582
+ `FileNotFoundException`. Sin app cargada contestan `App is not running` en `status`. En 5.0.5.5dev el
583
+ comando no existe (`Unknown command: loadCssFile`): ahí, las funciones de XOne por `runScript` + `refresh`
584
+ (tabla de arriba).
585
+
570
586
  ### `refresh` / `relayout` — solo Android
571
587
  En iOS las ramas existen en el dispatcher pero están **vacías**: no hacen nada.
572
588
 
@@ -13,9 +13,13 @@
13
13
  * devuelve a la versión anterior.
14
14
  * JavaScript (.js) → `loadIncludeFile` con compile=true. Subir el fichero NO basta,
15
15
  * y `loadCollection` tampoco lo recarga.
16
- * CSS, .ini, app.xml, mappings → relanzar la app (`launchApplication`). Medido: `setCssAttribute`,
17
- * `relayout`, `refresh` y `loadCollection` contestan `result:true`
18
- * y el color NO cambia; `loadIncludeFile` no admite css.
16
+ * CSS (.css) → el comando `loadCssFile` (framework 5.0.5.7dev en adelante): la
17
+ * sustituye y relayouta solo. En uno anterior, que contesta
18
+ * `Unknown command`, `runScript` con `appData.unloadCssFile` +
19
+ * `appData.loadCssFile` y un `refresh`. Medidos los dos: el color
20
+ * cambia SIN relanzar. Lo que no sirve, también medido:
21
+ * `setCssAttribute`, `relayout`, `refresh` o `loadCollection` solos.
22
+ * .ini, app.xml, mappings → relanzar la app (`launchApplication`): solo se leen al cargarla.
19
23
  *
20
24
  * **`result:true` es «aceptado», no «aplicado».** Lo que dice si funcionó es el árbol de
21
25
  * controles, y por eso el script lo pide al acabar. Un atributo que XOne no conoce tampoco da
@@ -202,6 +206,7 @@ if (cambiados.length === 0) {
202
206
  function clase(rel) {
203
207
  const ext = extname(rel).toLowerCase();
204
208
  if (ext === ".js") return "js";
209
+ if (ext === ".css") return "css";
205
210
  if (ext === ".xne") return /<coll[\s>]/.test(readFileSync(rel, "latin1")) ? "coleccion" : "relanzar";
206
211
  return "relanzar";
207
212
  }
@@ -248,6 +253,7 @@ for (const rel of cambiados) {
248
253
  const clases = new Map(subidos.map((f) => [f, clase(f)]));
249
254
  const hayQueRelanzar = [...clases.values()].includes("relanzar");
250
255
  const fallos = [];
256
+ let necesitaRefresh = false;
251
257
 
252
258
  if (hayQueRelanzar) {
253
259
  const r = mandar("launchApplication", { appName: app });
@@ -263,12 +269,39 @@ if (hayQueRelanzar) {
263
269
  const r = mandar("loadCollection", { xmlNode: xmlEnUtf8(readFileSync(f)).toString("base64"), encoding: "UTF-8" });
264
270
  if (r.result !== true) fallos.push(`${f}: loadCollection ${r.exceptionMessage ?? r.status ?? "sin motivo"}`);
265
271
  else console.log(` ${f} → colección recargada en caliente`);
272
+ } else if (c === "css") {
273
+ // La codificación de SUS bytes: `loadCssFile` asume UTF-8 si no se le dice.
274
+ let tabla = "UTF-8";
275
+ try {
276
+ new TextDecoder("utf-8", { fatal: true }).decode(readFileSync(f));
277
+ } catch {
278
+ tabla = "windows-1252";
279
+ }
280
+ const nativo = mandar("loadCssFile", { fileName: f, encoding: tabla });
281
+ if (nativo.result === true) {
282
+ console.log(` ${f} → estilos recargados en caliente`);
283
+ } else if (/Unknown command/i.test(String(nativo.exceptionMessage ?? nativo.status ?? ""))) {
284
+ // Framework anterior a 5.0.5.7dev: las mismas funciones de XOne, por `runScript`, y un
285
+ // `refresh` (abajo) para que se pinte.
286
+ const script = `appData.unloadCssFile(${JSON.stringify(f)}); appData.loadCssFile(${JSON.stringify(f)}, ${JSON.stringify(tabla)}); return "ok";`;
287
+ const r = mandar("runScript", { scriptLanguage: "javascript", scriptText: Buffer.from(script, "utf8").toString("base64") });
288
+ if (r.result !== true) fallos.push(`${f}: loadCssFile ${r.exceptionMessage ?? r.status ?? "sin motivo"}`);
289
+ else {
290
+ necesitaRefresh = true;
291
+ console.log(` ${f} → estilos recargados en caliente (por runScript)`);
292
+ }
293
+ } else {
294
+ fallos.push(`${f}: loadCssFile ${nativo.exceptionMessage ?? nativo.status ?? "sin motivo"}`);
295
+ }
266
296
  } else {
267
297
  const r = mandar("loadIncludeFile", { file: f, language: "javascript", encoding: "UTF-8", compile: true });
268
298
  if (r.result !== true) fallos.push(`${f}: loadIncludeFile ${r.exceptionMessage ?? r.status ?? "sin motivo"}`);
269
299
  else console.log(` ${f} → JavaScript recargado`);
270
300
  }
271
301
  }
302
+ // Por `runScript` los estilos se ven en el SIGUIENTE pintado: sin este `refresh`, no cambia nada
303
+ // (medido). El comando `loadCssFile` relayouta él solo.
304
+ if (necesitaRefresh) mandar("refresh");
272
305
  dormir(1);
273
306
  }
274
307