diff --git a/apps/api/Dockerfile b/apps/api/Dockerfile index 51a5aa3..b2d926a 100644 --- a/apps/api/Dockerfile +++ b/apps/api/Dockerfile @@ -16,6 +16,9 @@ RUN pnpm install --frozen-lockfile COPY packages/shared ./packages/shared COPY apps/api ./apps/api +# Compila primero el paquete shared (api lo consume vía dist/) +RUN pnpm --filter @naturcalabacera/shared build + # Compila TypeScript del api RUN pnpm --filter @naturcalabacera/api build diff --git a/apps/api/src/events/handler.ts b/apps/api/src/events/handler.ts index 5ea693b..9b3cdee 100644 --- a/apps/api/src/events/handler.ts +++ b/apps/api/src/events/handler.ts @@ -75,8 +75,8 @@ function buildChangesBlock(prev: Reservation, curr: Reservation): string { const changes: Array<{ label: string; from: string; to: string }> = []; for (const [field, label] of Object.entries(FIELD_LABELS)) { - const prevVal = (prev as Record)[field]; - const currVal = (curr as Record)[field]; + const prevVal = (prev as unknown as Record)[field]; + const currVal = (curr as unknown as Record)[field]; const prevStr = formatFieldValue(field, prevVal); const currStr = formatFieldValue(field, currVal); if (prevStr !== currStr) { diff --git a/apps/api/src/routes/health.ts b/apps/api/src/routes/health.ts index eb7d3c0..914a28e 100644 --- a/apps/api/src/routes/health.ts +++ b/apps/api/src/routes/health.ts @@ -1,6 +1,6 @@ -import { Router } from 'express'; +import { Router, type Router as ExpressRouter } from 'express'; -const router = Router(); +const router: ExpressRouter = Router(); router.get('/', (_req, res) => { res.json({ status: 'ok', timestamp: new Date().toISOString() }); diff --git a/apps/api/src/routes/notifications.ts b/apps/api/src/routes/notifications.ts index 3011996..c2b4684 100644 --- a/apps/api/src/routes/notifications.ts +++ b/apps/api/src/routes/notifications.ts @@ -1,10 +1,10 @@ -import { Router } from 'express'; +import { Router, type Router as ExpressRouter } from 'express'; import { scheduleNotificationsForReservation } from '../jobs/runner.js'; import { handleNotificationEvent } from '../events/handler.js'; import { supabaseAdmin } from '../lib/supabase.js'; import type { Reservation } from '@naturcalabacera/shared'; -const router = Router(); +const router: ExpressRouter = Router(); /** * POST /api/notifications/reservation-event diff --git a/apps/api/src/routes/users.ts b/apps/api/src/routes/users.ts index 541bc81..82a909d 100644 --- a/apps/api/src/routes/users.ts +++ b/apps/api/src/routes/users.ts @@ -1,8 +1,8 @@ -import { Router, type Request, type Response, type NextFunction } from 'express'; +import { Router, type Request, type Response, type NextFunction, type Router as ExpressRouter } from 'express'; import { supabaseAdmin } from '../lib/supabase.js'; import type { UserRole } from '@naturcalabacera/shared'; -const router = Router(); +const router: ExpressRouter = Router(); const VALID_ROLES: UserRole[] = ['admin', 'internal_staff', 'external_availability_viewer']; diff --git a/apps/api/tsconfig.json b/apps/api/tsconfig.json index 2d23d6c..5623eba 100644 --- a/apps/api/tsconfig.json +++ b/apps/api/tsconfig.json @@ -10,8 +10,8 @@ "esModuleInterop": true, "declaration": true, "paths": { - "@naturcalabacera/shared": ["../../packages/shared/src/index.ts"], - "@naturcalabacera/shared/*": ["../../packages/shared/src/*"] + "@naturcalabacera/shared": ["../../packages/shared/dist/index.d.ts"], + "@naturcalabacera/shared/*": ["../../packages/shared/dist/*"] } }, "include": ["src"], diff --git a/packages/shared/package.json b/packages/shared/package.json index a007ca5..41b55f0 100644 --- a/packages/shared/package.json +++ b/packages/shared/package.json @@ -6,6 +6,7 @@ "main": "./src/index.ts", "types": "./src/index.ts", "scripts": { + "build": "tsc", "test": "vitest run", "test:watch": "vitest" }, diff --git a/packages/shared/tsconfig.json b/packages/shared/tsconfig.json index 10330ba..299a7ba 100644 --- a/packages/shared/tsconfig.json +++ b/packages/shared/tsconfig.json @@ -1,12 +1,15 @@ { "compilerOptions": { "target": "ES2022", - "module": "ESNext", - "moduleResolution": "bundler", + "module": "NodeNext", + "moduleResolution": "NodeNext", "strict": true, "skipLibCheck": true, "declaration": true, + "declarationMap": true, + "rootDir": "./src", "outDir": "./dist" }, - "include": ["src"] + "include": ["src"], + "exclude": ["node_modules", "dist", "**/*.test.ts"] }