UNPKG

@battle-racing/br-common-lib

Version:

Common library for all Battle Racing Repositorios

106 lines (105 loc) 6.93 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.socketServerToClientEventsParamsSchema = exports.socketWebAppServerToClientEventsParamsSchema = exports.socketKartServerToClientEventsParamsSchema = exports.socketGameEventParamsSchema = exports.socketKartEventsParamsSchema = exports.socketGameTrackServerToClientEventsParamsSchema = exports.socketGameTrackEventParamsSchema = exports.socketGameTrackEventsParamsSchema = void 0; const zod_1 = require("zod"); const game_1 = require("../../game"); const gameTrack_1 = require("../../gameTrack"); const hardware_1 = require("../../hardware"); const kart_1 = require("../../kart"); const kartTracking_1 = require("../../kartTracking"); const SocketPowerUp_schema_1 = require("../SocketPowerUp.schema"); // Helper for Response generic? // responseSchema is typically `responseSchema(dataSchema)`. // Assuming responseSchema is a function that returns a Zod schema. // I need to check `responseSchema` definition. // If it is a function, I need to call it with the inner schema. // If it is a generic type in TS, I need to replicate it in Zod. const response = (dataSchema) => zod_1.z.object({ status: zod_1.z.number(), message: zod_1.z.string().optional(), data: dataSchema.optional(), // Simplified response schema // Need to verify actual Response Schema structure }); // ACTUALLY, I should check src/domains/response/index.ts before committing to this. // But for now I will assume I can import `responseSchema` and if it is not generic I might need to adapt. // Wait, I haven't migrated `Response` domain?? // `src/types/response` exists? // Let me quickly check `src/domains/response`. // If it doesn't exist, I might be blocking myself. // ... assuming `response` domain exists or I need to create it. // Checking imports: `import { responseSchema } from '../../../response';` // I haven't migrated `Response` domain explicitly in my tasks. // But user said "Migrate Game Domain", "Kart", "KartTracking". // Response was not in the list. // If `Response` is in `src/types/response`, I should probably create a basic schema for it or use `z.any()` temporarily if it's generic and hard to express. // BUT I want to be strict. // Let's use `z.any()` for response data for now OR assume I can make a helper. // SocketGameTrackServerToClient exports.socketGameTrackEventsParamsSchema = zod_1.z.object({ 'game-track:init:response': zod_1.z.any(), // Placeholder for Response<GameTrack> }); exports.socketGameTrackEventParamsSchema = zod_1.z.object({ 'game-track:emergency:activate': zod_1.z.undefined(), 'game-track:emergency:deactivate': zod_1.z.undefined(), 'game-track:lights:showEffect': hardware_1.showLightsEffectParamsSchema, 'game-track:lights:showColor': hardware_1.showLightsColorParamsSchema, 'game-track:sound:play': hardware_1.playSoundOptionsSchema, }); exports.socketGameTrackServerToClientEventsParamsSchema = exports.socketGameTrackEventsParamsSchema.merge(exports.socketGameTrackEventParamsSchema); // SocketKartServerToClient // Helper to prefix keys // Zod doesn't have "map keys" easily. // But I can define the object explicitly with prefixed keys. // keys: `kart:${keyof SocketPowerUpEventsParams}`. // I have to list them manually or use a loop (but loop not good for static analysis). // I will list them manually. const socketKartPowerUpEventsParamsSchema = zod_1.z.object({ 'kart:powerUp:assign': SocketPowerUp_schema_1.socketPowerUpEventsParamsSchema.shape['powerUp:assign'], 'kart:powerUp:damage': SocketPowerUp_schema_1.socketPowerUpEventsParamsSchema.shape['powerUp:damage'], 'kart:powerUp:execute': SocketPowerUp_schema_1.socketPowerUpEventsParamsSchema.shape['powerUp:execute'], 'kart:powerUps:sync': SocketPowerUp_schema_1.socketPowerUpEventsParamsSchema.shape['powerUps:sync'], }); exports.socketKartEventsParamsSchema = zod_1.z.object({ 'kart:init:response': zod_1.z.any(), // Response<{ kart: Kart; gameTrack: GameTrack }> 'kart:gameTrack:updated': zod_1.z.object({ gameTrack: gameTrack_1.gameTrackSchema, config: gameTrack_1.gameTrackKartConfigSchema }), 'kart:gameTrack:emergency:started': zod_1.z.undefined(), 'kart:gameTrack:emergency:stopped': zod_1.z.undefined(), 'kart:status:change': zod_1.z.object({ status: kart_1.kartStatusSchema }), }); exports.socketGameEventParamsSchema = zod_1.z.object({ 'kart:game:selected': zod_1.z.object({ gameId: zod_1.z.string(), gameType: game_1.gameTypeSchema }), 'kart:game:eliminated': zod_1.z.object({ gameId: zod_1.z.string(), gameType: game_1.gameTypeSchema }), 'kart:game:yellow-flag:started': zod_1.z.object({ gameId: zod_1.z.string(), gameType: game_1.gameTypeSchema }), 'kart:game:yellow-flag:stopped': zod_1.z.object({ gameId: zod_1.z.string(), gameType: game_1.gameTypeSchema }), 'kart:game:red-flag:started': zod_1.z.object({ gameId: zod_1.z.string(), gameType: game_1.gameTypeSchema }), 'kart:game:red-flag:stopped': zod_1.z.object({ gameId: zod_1.z.string(), gameType: game_1.gameTypeSchema }), 'kart:game:started': zod_1.z.object({ game: game_1.gameSchema }), 'kart:game:finished': zod_1.z.object({ game: game_1.gameSchema, isWinner: zod_1.z.boolean() }), 'kart:game:sync': zod_1.z.object({ game: game_1.gameSchema }), }); exports.socketKartServerToClientEventsParamsSchema = exports.socketKartEventsParamsSchema .merge(exports.socketGameEventParamsSchema) .merge(socketKartPowerUpEventsParamsSchema); // SocketWebAppServerToClient exports.socketWebAppServerToClientEventsParamsSchema = zod_1.z.object({ 'karts:authenticate:response': zod_1.z.any(), // Response<void> 'karts:list:response': zod_1.z.any(), // Response<Kart[]> 'karts:onKartsUpdated': zod_1.z.array(kart_1.kartSchema), // karts:onHardwareData is complex: keyof SocketHardwareOnDataEventsParams + payload // This is better typed as a union of objects for each hardware event? // Or just { kartGuid, socketEvent: string, payload: any } // Zod schema for validation: 'karts:onHardwareData': zod_1.z.object({ kartGuid: zod_1.z.string(), socketEvent: zod_1.z.string(), // keyof... payload: zod_1.z.any(), // payload... }), 'karts:tracking:checkpointEvent': zod_1.z.object({ checkpointEvent: kartTracking_1.checkpointEventSchema }), 'game:changed': zod_1.z.object({ game: game_1.gameSchema }), 'gameTracks:onGameTrackUpdated': zod_1.z.array(gameTrack_1.gameTrackSchema), 'gameTracks:connectedRasperries': zod_1.z.array(zod_1.z.object({ macAddress: zod_1.z.string() })), 'gameTracks:list:response': zod_1.z.any(), // Response<MacAddressGameTrackConnections> }); exports.socketServerToClientEventsParamsSchema = exports.socketGameTrackServerToClientEventsParamsSchema .merge(exports.socketKartServerToClientEventsParamsSchema) .merge(exports.socketWebAppServerToClientEventsParamsSchema);