soul v4.2.0

CLI

Generadores: proyectos, modulos, paginas y migraciones.

Comandos#

soul create <kebab-name>
Proyecto completo desde la plantilla.
soul sync-migrations [--dir]
Copia las migraciones del core. Nunca sobreescribe una existente.
soul g module <kebab-name> [--api]
Modulo de negocio con CRUD, tabla, permisos y rutas.
soul g page <kebab-name> [--public|--static]
Pagina de portal, publica cache-first o estatica.
soul g migration <name>
Migracion vacia, numerada.
soul build [--out public]
Prerenderiza src/static.ts.

Generar un modulo#

Terminal
npx soul g module facturas

Hace cinco cosas de una vez:

  1. Crea migrations/NNNN_facturas.sql con la tabla scopeada por organizacion y su indice.
  2. Inserta "facturas.read/write/delete" en src/config.ts.
  3. Escribe src/modules/facturas.ts con el CRUD completo.
  4. Inserta el import y el app.route() en src/index.ts.
  5. Imprime el fragmento de createResource para activar el chequeo de IDOR.

Con --api el modulo responde JSON en vez de HTML, y usa GET/POST/DELETE en vez de POST /:id/delete.

Generar una pagina#

Terminal
npx soul g page ajustes            # portal (tras requireSessionWithOrg)
npx soul g page perfil --public    # publica cache-first
npx soul g page landing --static   # prerenderizada, 0 requests

Los marcadores#

Los generadores escriben en puntos concretos de tus archivos, señalados por comentarios:

MarcadorArchivoPara que
// soul:importssrc/index.tsDonde se agregan los imports
// soul:routessrc/index.tsDonde se agregan los app.route()
// soul:permissionssrc/config.tsDonde se agregan los permisos

Por que existe core.ts#

Las instancias compartidas (auth, tenancy, admin, shell, errorPage) viven en src/core.ts y no en index.ts. Los modulos generados importan de core; si vivieran en index.ts —que a su vez monta esos modulos— habria un ciclo de imports.

Ejecutar desde el repo remoto#

Terminal
npx --package=git+ssh://git@github/jun-studio/soul.git#v4.2.0 soul create mi-saas