codexivo 0.2.0 → 0.2.3
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/CHANGELOG.md +1 -1
- package/README.md +26 -25
- package/dist/index.js +151 -9
- package/dist/index.js.map +22 -12
- package/dist/worker.js +153 -0
- package/dist/worker.js.map +25 -0
- package/docs/README.md +2 -0
- package/docs/arquitectura.md +86 -4
- package/docs/especificacion-v1.md +192 -86
- package/docs/guia-aprender-desde-el-codigo.md +5 -5
- package/docs/integracion.md +104 -0
- package/docs/lenguaje.md +435 -60
- package/docs/modo-mundo.md +128 -0
- package/docs/recetario.md +63 -63
- package/package.json +11 -20
- package/src/catalog.ts +256 -0
- package/src/challenge.ts +138 -0
- package/src/engine.ts +7 -0
- package/src/error-codes.ts +427 -0
- package/src/flow.ts +385 -0
- package/src/index.ts +53 -1
- package/src/printer.ts +133 -0
- package/src/runtime/builtins.ts +1358 -65
- package/src/runtime/compiler.ts +278 -31
- package/src/runtime/costs.ts +96 -0
- package/src/runtime/machine.ts +722 -48
- package/src/runtime/prelude.ts +230 -0
- package/src/runtime/values.ts +119 -18
- package/src/sandbox-host.ts +310 -0
- package/src/sandbox.ts +95 -0
- package/src/syntax/ast.ts +120 -6
- package/src/syntax/lexer.ts +39 -5
- package/src/syntax/parser.ts +496 -72
- package/src/syntax/token.ts +49 -1
- package/src/worker.ts +18 -0
- package/src/world.ts +518 -0
- package/bin/codexivo.exe +0 -1
- package/postinstall.mjs +0 -38
package/CHANGELOG.md
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
- Núcleo reescrito como lexer, parser, compilador y máquina reanudable (#23).
|
|
6
6
|
- Ejecución paso a paso, eventos, snapshots, límites deterministas y entrada interactiva.
|
|
7
7
|
- API de biblioteca para navegador y Bun, con tipos publicados como fuentes TypeScript.
|
|
8
|
-
- Comando `codexivo` instalable desde npm
|
|
8
|
+
- Comando `codexivo` instalable desde npm como `@codexivo/cli`, separado de la biblioteca web `codexivo`, que ejecuta el binario nativo del sistema sin depender de Node.js ni Bun durante la ejecución.
|
|
9
9
|
- Ejecutables autónomos para Linux (glibc y musl), macOS y Windows, en x64 y ARM64.
|
|
10
10
|
- Publicación desde tags `v*` mediante GitHub Actions, con OIDC, provenance y artefactos en GitHub Releases.
|
|
11
11
|
- Formato integrado con `bun fmt` y configuración en `bunfig.toml`.
|
package/README.md
CHANGED
|
@@ -16,24 +16,24 @@ Inspirado por esta idea, me embarqué en este proyecto con la determinación de
|
|
|
16
16
|
|
|
17
17
|
```codexivo
|
|
18
18
|
// La suma de los números del 1 al 10
|
|
19
|
-
variable suma = 0
|
|
20
|
-
para
|
|
21
|
-
suma
|
|
19
|
+
variable suma = 0
|
|
20
|
+
para i desde 1 hasta 10 {
|
|
21
|
+
suma = suma + i
|
|
22
22
|
}
|
|
23
|
-
imprimir("La suma es", suma)
|
|
23
|
+
imprimir("La suma es", suma)
|
|
24
24
|
```
|
|
25
25
|
|
|
26
26
|
```codexivo
|
|
27
|
-
|
|
28
|
-
si (edad
|
|
29
|
-
regresa "adulto"
|
|
30
|
-
} pero_si (edad
|
|
31
|
-
regresa "adolescente"
|
|
27
|
+
procedimiento clasificar(edad) {
|
|
28
|
+
si (edad es_mayor_o_igual_a 18) {
|
|
29
|
+
regresa "adulto"
|
|
30
|
+
} pero_si (edad es_mayor_o_igual_a 13) {
|
|
31
|
+
regresa "adolescente"
|
|
32
32
|
} si_no {
|
|
33
|
-
regresa "niño"
|
|
33
|
+
regresa "niño"
|
|
34
34
|
}
|
|
35
|
-
}
|
|
36
|
-
imprimir(clasificar(16))
|
|
35
|
+
}
|
|
36
|
+
imprimir(clasificar(16))
|
|
37
37
|
```
|
|
38
38
|
|
|
39
39
|
Lo que funciona hoy está en [`docs/lenguaje.md`](./docs/lenguaje.md), y todos sus ejemplos se ejecutan tal cual. Hacia dónde va
|
|
@@ -63,22 +63,24 @@ console.log(resultado.output); // "Hola desde Codexivo\n"
|
|
|
63
63
|
```
|
|
64
64
|
|
|
65
65
|
El paquete incluye un bundle ESM compatible con navegador y los tipos como fuentes TypeScript. Importar la biblioteca no
|
|
66
|
-
inicia el REPL
|
|
66
|
+
inicia el REPL, no necesita Bun y no instala binarios ni ejecuta scripts de instalación.
|
|
67
|
+
|
|
68
|
+
El CLI se instala por separado como `@codexivo/cli`. Este paquete declara `bin` y las variantes nativas en `optionalDependencies`; cada variante
|
|
67
69
|
incluye los campos `os`, `cpu` y, en Linux, `libc`. El gestor instala la variante compatible y `postinstall` verifica su versión
|
|
68
|
-
y enlaza o copia el ejecutable a `bin/codexivo.exe` del
|
|
70
|
+
y enlaza o copia el ejecutable a `bin/codexivo.exe` del CLI. El nombre interno también funciona en Linux y macOS.
|
|
69
71
|
|
|
70
72
|
```sh
|
|
71
|
-
npm install --global codexivo@0.2.0
|
|
73
|
+
npm install --global @codexivo/cli@0.2.0
|
|
72
74
|
codexivo # REPL
|
|
73
75
|
codexivo programa.cdx # ejecutar un archivo
|
|
74
76
|
```
|
|
75
77
|
|
|
76
|
-
Con Bun, usa `bun add --global --trust codexivo@0.2.0` para permitir el script de instalación. Node se usa únicamente durante
|
|
78
|
+
Con Bun, usa `bun add --global --trust @codexivo/cli@0.2.0` para permitir el script de instalación. Node se usa únicamente durante
|
|
77
79
|
la instalación con npm; el comando resultante es el ejecutable nativo y funciona sin Node.js ni Bun en el `PATH`.
|
|
78
80
|
|
|
79
|
-
Si bloqueas scripts
|
|
80
|
-
`node node_modules
|
|
81
|
-
que su versión coincida con la del
|
|
81
|
+
Si bloqueas scripts al instalar el CLI, para preparar el comando tras una instalación local ejecuta
|
|
82
|
+
`node node_modules/@codexivo/cli/postinstall.mjs` una vez. El instalador toma el paquete opcional ya instalado por el gestor y exige
|
|
83
|
+
que su versión coincida con la del CLI; no descarga ni compila binarios.
|
|
82
84
|
|
|
83
85
|
Las variantes publicadas son:
|
|
84
86
|
|
|
@@ -126,8 +128,7 @@ dispara otra publicación. El workflow toma el estado más reciente de `main`, p
|
|
|
126
128
|
Desde **Actions → Publicar → Run workflow**, en `main`, se puede elegir `patch`, `minor` o `major` para una publicación manual.
|
|
127
129
|
|
|
128
130
|
También se admiten tags `v*` creados manualmente: deben coincidir con `package.json` y no incrementan la versión otra vez.
|
|
129
|
-
Todas las compilaciones usan el SHA del commit de la versión. Los paquetes nativos se publican
|
|
130
|
-
principal y sus versiones se sincronizan con `bun pm version`. El principal declara `bin` y su `postinstall` coloca allí el ejecutable del paquete nativo compatible. Las versiones preliminares se publican con el dist-tag `next`;
|
|
131
|
+
Todas las compilaciones usan el SHA del commit de la versión. Los paquetes nativos se publican primero, después `@codexivo/cli` y finalmente `codexivo`. Las diez versiones se sincronizan con `bun pm version`. Solo el CLI declara `bin` y su `postinstall` coloca allí el ejecutable del paquete nativo compatible. Las versiones preliminares se publican con el dist-tag `next`;
|
|
131
132
|
las estables, con `latest`. Los ejecutables y sus sumas SHA-256 se adjuntan a la release. Los binarios no están firmados ni
|
|
132
133
|
notarizados.
|
|
133
134
|
|
|
@@ -136,10 +137,10 @@ notarizados.
|
|
|
136
137
|
- [x] Lexer, parser y máquina con posiciones exactas, errores con pistas y límites deterministas
|
|
137
138
|
- [x] Ejecución paso a paso, eventos y fotografías del estado para visualización
|
|
138
139
|
- [x] `imprimir`, `leer`, `leer_número`, comentarios, `nulo`
|
|
139
|
-
- [
|
|
140
|
-
- [
|
|
141
|
-
- [
|
|
142
|
-
- [
|
|
140
|
+
- [x] Nivel principiante de la v1: `repetir … veces`, `++`/`--`, `mod`/`div`, operadores en palabras, `constante`
|
|
141
|
+
- [x] Nivel intermedio: procedimientos con nombre, `para_cada`, `romper`/`continuar`, diccionarios, más biblioteca
|
|
142
|
+
- [x] Nivel avanzado: procedimientos como valores en la biblioteca, pilas y colas
|
|
143
|
+
- [x] Modo mundo (Karel)
|
|
143
144
|
- [ ] Sitio con documentación y sandbox: `codexivo.urielcuriel.dev`
|
|
144
145
|
|
|
145
146
|
## Cómo contribuir
|