arckode-framework 1.0.6 → 1.0.8

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.
@@ -518,11 +518,28 @@ export class ORM {
518
518
 
519
519
  private deserializeFromDb(def: ModelDefinition, row: ModelResult): ModelResult {
520
520
  const result = { ...row } as Record<string, unknown>
521
+
522
+ // Deserializar campos JSON almacenados como string
521
523
  for (const [k, field] of Object.entries(def.fields)) {
522
524
  if (field.type === 'json' && typeof result[k] === 'string') {
523
525
  try { result[k] = JSON.parse(result[k] as string) } catch { /* no es JSON válido */ }
524
526
  }
525
527
  }
528
+
529
+ // Normalizar timestamps que PostgreSQL devuelve en minúscula
530
+ // PostgreSQL baja el case de identificadores no-quoted: createdAt → createdat
531
+ const tsMap: Record<string, string> = {
532
+ createdat: 'createdAt',
533
+ updatedat: 'updatedAt',
534
+ deletedat: 'deletedAt',
535
+ }
536
+ for (const [lower, camel] of Object.entries(tsMap)) {
537
+ if (lower in result && !(camel in result)) {
538
+ result[camel] = result[lower]
539
+ delete result[lower]
540
+ }
541
+ }
542
+
526
543
  return result as ModelResult
527
544
  }
528
545
 
@@ -1062,12 +1079,26 @@ export class Router {
1062
1079
  })
1063
1080
  }
1064
1081
 
1065
- get(path: string, handler: RouteHandler, mw?: MiddlewareHandler[]): void { this.add('GET', path, handler, mw) }
1066
- post(path: string, handler: RouteHandler, mw?: MiddlewareHandler[]): void { this.add('POST', path, handler, mw) }
1067
- put(path: string, handler: RouteHandler, mw?: MiddlewareHandler[]): void { this.add('PUT', path, handler, mw) }
1068
- patch(path: string, handler: RouteHandler, mw?: MiddlewareHandler[]): void { this.add('PATCH', path, handler, mw) }
1069
- delete(path: string, handler: RouteHandler, mw?: MiddlewareHandler[]): void { this.add('DELETE', path, handler, mw) }
1070
- options(path: string, handler: RouteHandler, mw?: MiddlewareHandler[]): void { this.add('OPTIONS', path, handler, mw) }
1082
+ // Acepta ambas convenciones:
1083
+ // (path, handler) sin middlewares
1084
+ // (path, handler, mw[]) handler primero (legado)
1085
+ // (path, mw[], handler) middlewares primero (Express-like, convención del framework)
1086
+ private resolve2(
1087
+ handlerOrMw: RouteHandler | MiddlewareHandler[],
1088
+ handlerOrUndefined?: RouteHandler | MiddlewareHandler[],
1089
+ ): { handler: RouteHandler; mw: MiddlewareHandler[] } {
1090
+ if (Array.isArray(handlerOrMw)) {
1091
+ return { handler: handlerOrUndefined as RouteHandler, mw: handlerOrMw }
1092
+ }
1093
+ return { handler: handlerOrMw, mw: (handlerOrUndefined as MiddlewareHandler[] | undefined) ?? [] }
1094
+ }
1095
+
1096
+ get(path: string, handlerOrMw: RouteHandler | MiddlewareHandler[], h?: RouteHandler | MiddlewareHandler[]): void { const { handler, mw } = this.resolve2(handlerOrMw, h); this.add('GET', path, handler, mw) }
1097
+ post(path: string, handlerOrMw: RouteHandler | MiddlewareHandler[], h?: RouteHandler | MiddlewareHandler[]): void { const { handler, mw } = this.resolve2(handlerOrMw, h); this.add('POST', path, handler, mw) }
1098
+ put(path: string, handlerOrMw: RouteHandler | MiddlewareHandler[], h?: RouteHandler | MiddlewareHandler[]): void { const { handler, mw } = this.resolve2(handlerOrMw, h); this.add('PUT', path, handler, mw) }
1099
+ patch(path: string, handlerOrMw: RouteHandler | MiddlewareHandler[], h?: RouteHandler | MiddlewareHandler[]): void { const { handler, mw } = this.resolve2(handlerOrMw, h); this.add('PATCH', path, handler, mw) }
1100
+ delete(path: string, handlerOrMw: RouteHandler | MiddlewareHandler[], h?: RouteHandler | MiddlewareHandler[]): void { const { handler, mw } = this.resolve2(handlerOrMw, h); this.add('DELETE', path, handler, mw) }
1101
+ options(path: string, handlerOrMw: RouteHandler | MiddlewareHandler[], h?: RouteHandler | MiddlewareHandler[]): void { const { handler, mw } = this.resolve2(handlerOrMw, h); this.add('OPTIONS', path, handler, mw) }
1071
1102
 
1072
1103
  async resolve(method: string, path: string, extras?: Partial<HttpRequest>): Promise<HttpResponse> {
1073
1104
  const reqId = crypto.randomUUID().slice(0, 8)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "arckode-framework",
3
- "version": "1.0.6",
3
+ "version": "1.0.8",
4
4
  "description": "AI-first TypeScript/Bun framework. Modular, SOLID, zero magic. The AI reads the composition root and knows everything.",
5
5
  "type": "module",
6
6
  "main": "./kernel/framework.ts",