Mark incoming state as readonly
This commit is contained in:
parent
e5845b9a57
commit
8accc42167
|
@ -25,6 +25,7 @@
|
||||||
"react-hook-form": "^5.6.3",
|
"react-hook-form": "^5.6.3",
|
||||||
"react-scripts": "^3.4.1",
|
"react-scripts": "^3.4.1",
|
||||||
"react-use-websocket": "^2.0.1",
|
"react-use-websocket": "^2.0.1",
|
||||||
|
"ts-essentials": "^6.0.5",
|
||||||
"typeface-roboto": "^0.0.75",
|
"typeface-roboto": "^0.0.75",
|
||||||
"typescript": "^3.9.2",
|
"typescript": "^3.9.2",
|
||||||
"uuid": "^8.0.0"
|
"uuid": "^8.0.0"
|
||||||
|
|
|
@ -1,17 +1,9 @@
|
||||||
import myzod, { Infer } from 'myzod';
|
import myzod, { Infer } from 'myzod';
|
||||||
|
import { DeepReadonly } from 'ts-essentials';
|
||||||
|
|
||||||
// See protocol.go.
|
// See protocol.go.
|
||||||
|
|
||||||
export type RoomResponse = Infer<typeof RoomResponse>;
|
// Messages sent from client to server.
|
||||||
export const RoomResponse = myzod.object({
|
|
||||||
id: myzod.string().optional().nullable(),
|
|
||||||
error: myzod.string().optional().nullable(),
|
|
||||||
});
|
|
||||||
|
|
||||||
export type TimeResponse = Infer<typeof TimeResponse>;
|
|
||||||
export const TimeResponse = myzod.object({
|
|
||||||
time: myzod.date(),
|
|
||||||
});
|
|
||||||
|
|
||||||
export type WordPack = Infer<typeof WordPack>;
|
export type WordPack = Infer<typeof WordPack>;
|
||||||
const WordPack = myzod.object({
|
const WordPack = myzod.object({
|
||||||
|
@ -83,7 +75,20 @@ export const ClientNote = myzod
|
||||||
])
|
])
|
||||||
);
|
);
|
||||||
|
|
||||||
export type StateTile = Infer<typeof StateTile>;
|
// Messages sent from server to client.
|
||||||
|
|
||||||
|
export type RoomResponse = DeepReadonly<Infer<typeof RoomResponse>>;
|
||||||
|
export const RoomResponse = myzod.object({
|
||||||
|
id: myzod.string().optional().nullable(),
|
||||||
|
error: myzod.string().optional().nullable(),
|
||||||
|
});
|
||||||
|
|
||||||
|
export type TimeResponse = DeepReadonly<Infer<typeof TimeResponse>>;
|
||||||
|
export const TimeResponse = myzod.object({
|
||||||
|
time: myzod.date(),
|
||||||
|
});
|
||||||
|
|
||||||
|
export type StateTile = DeepReadonly<Infer<typeof StateTile>>;
|
||||||
const StateTile = myzod.object({
|
const StateTile = myzod.object({
|
||||||
word: myzod.string(),
|
word: myzod.string(),
|
||||||
revealed: myzod.boolean(),
|
revealed: myzod.boolean(),
|
||||||
|
@ -97,26 +102,26 @@ const StateTile = myzod.object({
|
||||||
.nullable(),
|
.nullable(),
|
||||||
});
|
});
|
||||||
|
|
||||||
export type StateBoard = Infer<typeof StateBoard>;
|
export type StateBoard = DeepReadonly<Infer<typeof StateBoard>>;
|
||||||
const StateBoard = myzod.array(myzod.array(StateTile));
|
const StateBoard = myzod.array(myzod.array(StateTile));
|
||||||
|
|
||||||
export type StatePlayer = Infer<typeof StatePlayer>;
|
export type StatePlayer = DeepReadonly<Infer<typeof StatePlayer>>;
|
||||||
const StatePlayer = myzod.object({
|
const StatePlayer = myzod.object({
|
||||||
playerID: myzod.string(),
|
playerID: myzod.string(),
|
||||||
nickname: myzod.string(),
|
nickname: myzod.string(),
|
||||||
spymaster: myzod.boolean(),
|
spymaster: myzod.boolean(),
|
||||||
});
|
});
|
||||||
|
|
||||||
export type StateTeams = Infer<typeof StateTeams>;
|
export type StateTeams = DeepReadonly<Infer<typeof StateTeams>>;
|
||||||
const StateTeams = myzod.array(myzod.array(StatePlayer));
|
const StateTeams = myzod.array(myzod.array(StatePlayer));
|
||||||
|
|
||||||
export type StateTimer = Infer<typeof StateTimer>;
|
export type StateTimer = DeepReadonly<Infer<typeof StateTimer>>;
|
||||||
const StateTimer = myzod.object({
|
const StateTimer = myzod.object({
|
||||||
turnTime: myzod.number(),
|
turnTime: myzod.number(),
|
||||||
turnEnd: myzod.date(),
|
turnEnd: myzod.date(),
|
||||||
});
|
});
|
||||||
|
|
||||||
export type State = Infer<typeof State>;
|
export type State = DeepReadonly<Infer<typeof State>>;
|
||||||
export const State = myzod.object({
|
export const State = myzod.object({
|
||||||
version: myzod.number(),
|
version: myzod.number(),
|
||||||
teams: StateTeams,
|
teams: StateTeams,
|
||||||
|
@ -136,7 +141,7 @@ export const State = myzod.object({
|
||||||
hideBomb: myzod.boolean(),
|
hideBomb: myzod.boolean(),
|
||||||
});
|
});
|
||||||
|
|
||||||
export type ServerNote = Infer<typeof ServerNote>;
|
export type ServerNote = DeepReadonly<Infer<typeof ServerNote>>;
|
||||||
export const ServerNote = myzod.union([
|
export const ServerNote = myzod.union([
|
||||||
myzod.object({
|
myzod.object({
|
||||||
method: myzod.literal('state'),
|
method: myzod.literal('state'),
|
||||||
|
|
|
@ -10531,6 +10531,11 @@ tr46@^1.0.1:
|
||||||
dependencies:
|
dependencies:
|
||||||
punycode "^2.1.0"
|
punycode "^2.1.0"
|
||||||
|
|
||||||
|
ts-essentials@^6.0.5:
|
||||||
|
version "6.0.5"
|
||||||
|
resolved "https://registry.yarnpkg.com/ts-essentials/-/ts-essentials-6.0.5.tgz#dd5b98f73bd56dc94d15dfbc0fbf01da3163eb42"
|
||||||
|
integrity sha512-RSAKlpu+E0DCGY8FsbG92EveRLw2Y+UgK3ksX01w1VaHeG01dKkYo/KtAV4q0qPT6nPbLfyerb2YPVSediP+8g==
|
||||||
|
|
||||||
ts-pnp@1.1.6:
|
ts-pnp@1.1.6:
|
||||||
version "1.1.6"
|
version "1.1.6"
|
||||||
resolved "https://registry.yarnpkg.com/ts-pnp/-/ts-pnp-1.1.6.tgz#389a24396d425a0d3162e96d2b4638900fdc289a"
|
resolved "https://registry.yarnpkg.com/ts-pnp/-/ts-pnp-1.1.6.tgz#389a24396d425a0d3162e96d2b4638900fdc289a"
|
||||||
|
|
Loading…
Reference in New Issue