Resumen
Dos mejoras detectadas durante la review de #33 que conviene resolver antes del release de 0.3.2:
- Round-trip de
types export → types create no funciona sin un paso manual de jq. El export produce un DocumentType completo, pero --schema de create espera el JSON Schema crudo.
- Cast obsoleto en
types create que existía como workaround del bug de SDK ya corregido en docutray@0.1.3.
Problema 1: Round-trip de export/create
docutray types export factura > factura.json ahora (post-#33) produce JSON con esta forma:
{
"id": "...",
"codeType": "factura",
"name": "Factura Electrónica",
"description": "...",
"isPublic": true,
"isDraft": false,
"status": "PUBLISHED",
"jsonSchema": { "type": "object", "properties": {}, "required": [] },
"createdAt": "...",
"updatedAt": "..."
}
Pero docutray types create --schema factura.json falla o produce un tipo inválido, porque parseSchema() (src/parse-schema.ts) trata el archivo entero como JSON Schema. El --help de export promete "migrating types between environments" — y técnicamente sí está toda la información, pero el round-trip exige jq .jsonSchema factura.json | docutray types create --schema -, que no está documentado.
Fix propuesto
Hacer parseSchema más inteligente: si el JSON parseado tiene una propiedad jsonSchema que es un objeto, usar esa; si no, tratar el contenido como schema directo (comportamiento actual).
export function parseSchema(input: string): Record<string, unknown> {
const parsed = readAndParse(input)
if (parsed && typeof parsed === 'object' && 'jsonSchema' in parsed && typeof parsed.jsonSchema === 'object') {
return parsed.jsonSchema as Record<string, unknown>
}
return parsed as Record<string, unknown>
}
Con esto el flujo natural funciona:
docutray types export factura -o factura.json
docutray types create --name "Factura Copy" --code factura_copy \
--description "..." --schema factura.json
Alternativa considerada y descartada: agregar --schema-only a types export. Es explícito pero rompe el caso de uso "backup completo" del export y obliga al usuario a elegir antes de saber qué necesita. La heurística en parseSchema permite que un mismo archivo sirva para backup y para reimport.
Problema 2: Cast obsoleto en types create
src/commands/types/create.ts:55 tiene:
{key: 'Mode', value: (() => {
const mode = (result as unknown as Record<string, unknown>).conversionMode
return typeof mode === 'string' && mode.trim() !== '' ? mode : 'json'
})()},
Este cast existía cuando el SDK devolvía {data: ...} y los campos no estaban en el tipo DocumentType. En docutray@0.1.3 el DocumentType está actualizado y result.conversionMode es accesible directamente — pero hoy el tipo declarado en docutray-node (src/types/document-type.ts) no incluye conversionMode. Verificar:
- Si SDK 0.1.3 incluye
conversionMode en DocumentType: limpiar el cast usando acceso directo.
- Si no lo incluye: dejar nota en el SDK (issue separado en
docutray-node) y mantener el cast con un comentario que explique por qué.
Criterios de aceptación
Prioridad
Bloquea el release 0.3.2. La idea es mergear este fix antes de hacer el tag v0.3.2.
Referencias
Resumen
Dos mejoras detectadas durante la review de #33 que conviene resolver antes del release de
0.3.2:types export→types createno funciona sin un paso manual dejq. El export produce unDocumentTypecompleto, pero--schemade create espera el JSON Schema crudo.types createque existía como workaround del bug de SDK ya corregido endocutray@0.1.3.Problema 1: Round-trip de export/create
docutray types export factura > factura.jsonahora (post-#33) produce JSON con esta forma:{ "id": "...", "codeType": "factura", "name": "Factura Electrónica", "description": "...", "isPublic": true, "isDraft": false, "status": "PUBLISHED", "jsonSchema": { "type": "object", "properties": {}, "required": [] }, "createdAt": "...", "updatedAt": "..." }Pero
docutray types create --schema factura.jsonfalla o produce un tipo inválido, porqueparseSchema()(src/parse-schema.ts) trata el archivo entero como JSON Schema. El--helpde export promete "migrating types between environments" — y técnicamente sí está toda la información, pero el round-trip exigejq .jsonSchema factura.json | docutray types create --schema -, que no está documentado.Fix propuesto
Hacer
parseSchemamás inteligente: si el JSON parseado tiene una propiedadjsonSchemaque es un objeto, usar esa; si no, tratar el contenido como schema directo (comportamiento actual).Con esto el flujo natural funciona:
Alternativa considerada y descartada: agregar
--schema-onlyatypes export. Es explícito pero rompe el caso de uso "backup completo" del export y obliga al usuario a elegir antes de saber qué necesita. La heurística enparseSchemapermite que un mismo archivo sirva para backup y para reimport.Problema 2: Cast obsoleto en
types createsrc/commands/types/create.ts:55tiene:Este cast existía cuando el SDK devolvía
{data: ...}y los campos no estaban en el tipoDocumentType. Endocutray@0.1.3elDocumentTypeestá actualizado yresult.conversionModees accesible directamente — pero hoy el tipo declarado endocutray-node(src/types/document-type.ts) no incluyeconversionMode. Verificar:conversionModeenDocumentType: limpiar el cast usando acceso directo.docutray-node) y mantener el cast con un comentario que explique por qué.Criterios de aceptación
parseSchemadetecta payloads{jsonSchema: {...}, ...}y extraejsonSchema. Si no existe esa key, mantiene comportamiento actual.types get(forma completa deDocumentType) y pasarla aparseSchema, debe devolver eljsonSchemainterno.{type: 'object', properties: {}}) sigue parseándose como antes.--helpdetypes createactualizados para mostrar el flujoexport → createcon el archivo completo.types create.ts:55removido si SDK 0.1.3 exponeconversionModeenDocumentType; o issue documentado endocutray-nodesi no.Prioridad
Bloquea el release
0.3.2. La idea es mergear este fix antes de hacer el tagv0.3.2.Referencias
docutray@0.1.3(ya enpackage.jsonpost-fix: types get/export now return jsonSchema (closes #32) #33).