@microverse.ts/lua-defs
v0.3.0
Published
Generate LuaCATS (.d.lua) stubs for LuaLS from a LuaDefManifest—the IDE contract aligned with your host surface.
Readme
@microverse.ts/lua-defs
Biblioteca TypeScript para generar ficheros .d.lua (anotaciones LuaCATS) a partir de un manifiesto (LuaDefManifest), sin pasar por el binario microverse.
Úsala cuando quieras integrar la generación en un script de build, un plugin de Vite/Rollup, o cualquier herramienta Node que ya tenga TypeScript. Para construir el manifiesto desde TypeScript (Zod + capabilities), usa @microverse.ts/host-surface.
Instalación
pnpm add -D @microverse.ts/lua-defsArquitectura (clean / capas)
El código bajo src/ sigue el mismo criterio que el resto del monorepo (eslint-plugin-boundaries):
| Capa | Ruta | Contenido |
|------|------|-------------|
| Dominio | src/domain/ | Tipos del manifiesto, parseManifestJson, generación pura buildLuaCatsDocument. |
| Aplicación | src/application/ | Puertos (ports/) y caso de uso generateLuaDefinitionsFile (useCases/). |
| Infraestructura | src/infrastructure/ | Adaptador Node (createNodeFileSystemPort), generateDefs y el barrel público publicApi.ts. |
El entry del paquete (src/index.ts) solo re-exporta infrastructure/publicApi.ts: ahí están las funciones que usará el consumidor (más tipos y el caso de uso si quieres inyectar dependencias en tests).
API
parseManifestJson(raw: string)— parsea y valida mínimamente el JSON del manifiesto.buildLuaCatsDocument(manifest)/emitLuaCatsFromManifest(manifest)(alias) — devuelve el contenido.d.luacomostring.generateDefs({ cwd, manifestPath, outPath? })— lee el fichero del manifiesto, escribe el.d.lua(crea directorios si hace falta).outPathopcional sustituye amanifest.output.loadLuaDefinitionsFromManifestFile({ cwd, manifestPath })— lee el manifiesto desde disco y devuelve el contenido.d.luacomostring(no escribe fichero).generateLuaDefinitionsFile(ports, input)/loadLuaDefinitionsDocumentFromManifestFile(ports, input)— casos de uso alineados conAsyncUseCasede@microverse.ts/shared(tipos explícitosGenerateLuaDefinitionsFileUseCaseyLoadLuaDefinitionsDocumentFromManifestFileUseCase). El tuple de puertos es[fs, parseManifest, buildLuaCatsDocument](verLuaDefinitionsFromManifestFilePortsycreateDefaultLuaDefinitionsFromManifestFilePorts()).
import { readFile } from 'node:fs/promises';
import { emitLuaCatsFromManifest, generateDefs, parseManifestJson } from '@microverse.ts/lua-defs';
await generateDefs({
cwd: process.cwd(),
manifestPath: 'lua/microverse.def.json',
});
const manifest = parseManifestJson(await readFile('lua/microverse.def.json', 'utf8'));
const lua = emitLuaCatsFromManifest(manifest);Esquema y ejemplo
For the command line, use @microverse.ts/cli (microverse generate-lua-defs).
