@battle-racing/br-common-lib
Version:
Common library for all Battle Racing Repositorios
106 lines (105 loc) • 6.93 kB
JavaScript
"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);