Estructura de proyectos
Web
joss new web mi_app y joss new mi_app crean la plantilla web real del paquete pkg/template/files.
Las cuatro variantes de joss new se validan en CI: web y consola deben parsear y analizar sin errores; consola además debe ejecutar; package y plugin deben compilar a un JP v2 firmado, verificable, con bytecode decodificable e índice de símbolos.
mi_app/
├── main.joss
├── env.joss
├── routes.joss
├── api.joss
├── joss.yaml
├── AGENTS.md # Guía y sintaxis para asistentes de IA
├── config/
├── app/
│ ├── controllers/ # Subcarpetas por dominio (web/, auth/, api/)
│ │ ├── web/
│ │ ├── auth/
│ │ └── api/
│ ├── models/ # Modelos GranDB (auth/, etc.)
│ │ └── auth/
│ ├── services/ # Servicios en segundo plano e integraciones
│ ├── middleware/ # Middleware de peticiones
│ ├── libs/ # Librerías y utilidades del proyecto
│ └── database/migrations/
├── assets/
├── public/
├── storage/
├── package.json
└── README.md
La plantilla también puede incluir rutas, archivos de autenticación, recursos frontend y colecciones de API. La lista exacta puede crecer; el generador y sus pruebas son la referencia ejecutable.
main.joss es obligatorio para joss server start. env.joss contiene la configuración de entorno del proyecto (PORT="80" por defecto en la plantilla web) y no es código ejecutable con joss run.
Descubrimiento unificado del proyecto (PreparedProgram)
Tanto joss analyze, joss check, joss run, joss server como joss build utilizan el cargador unificado semanticanalyzer.LoadProject("main.joss", "app"), que descubre e integra en un único PreparedProgram:
- El punto de entrada (main.joss).
- Los archivos de rutas en la raíz (routes.joss y api.joss, si existen).
- Todos los archivos .joss recursivamente bajo app/ (incluyendo controllers/, models/, services/, middleware/, libs/ y database/).
El intérprete (Runtime.ExecutePrepared), el servidor HTTP y el compilador nativo registran todas las clases, interfaces, enums y funciones directamente desde ese PreparedProgram canónico sin re-escanear ni omitir subdirectorios de app/.
Consola
joss new console mi_cli crea main.joss, configuración, controladores, modelos, librerías y migraciones; no crea rutas, vistas, public/ ni assets web.
cd mi_cli
joss run main.joss
Paquete / Plugin
joss new package mi_plugin (o joss new plugin mi_plugin) crea:
mi_plugin/
├── joss.yaml
├── README.md
└── src/plugin.joss
Compílalo con joss build package .. Consulta Plugins.
Convenciones efectivas y generadores (joss make:*)
- Controladores:
app/controllers/NameController.joss(o subcarpetasweb/,auth/,api/), generados conjoss make:controller NameController(ojoss make:controller web/NameController). - Modelos:
app/models/Name.joss(extends Model), generados conjoss make:model Name. - Vistas:
app/views/name.joss.htmlo.html, generadas conjoss make:view name(ojoss make:view carpeta/vista). - Middlewares:
app/middleware/Name.joss, generados conjoss make:middleware Name. - Tríada MVC completa:
joss make:mvc Namegenera simultáneamente el modelo (app/models/Name.joss), el controlador (app/controllers/NameController.joss) y la vista (app/views/name/index.joss.html). - Migraciones: timestamp, nombre descriptivo y extensión
.jossenapp/database/migrations/, generadas conjoss make:migration create_tabla. - Módulo CRUD relacional:
joss make:crud tablainspecciona la tabla existente y genera modelo, controlador, vistas y rutas;joss remove:crud tablarevierte esos artefactos. - Sintaxis generada:
func,::para estáticos y->para instancias.
flowchart TD
MAKE["CLI: joss make:<componente>"] --> C["joss make:controller → app/controllers/*.joss"]
MAKE --> M["joss make:model → app/models/*.joss"]
MAKE --> V["joss make:view → app/views/*.joss.html"]
MAKE --> MW["joss make:middleware → app/middleware/*.joss"]
MAKE --> MG["joss make:migration → app/database/migrations/*.joss"]
MAKE --> MVC["joss make:mvc → Modelo + Controlador + Vista"]
MAKE --> CRUD["joss make:crud → CRUD completo desde esquema DB"]
Los generadores se validan con una prueba que crea proyectos web y consola y pasa todos sus archivos .joss por el parser y el analizador semántico.