sendou.ink/scripts/placements/schemas.ts
Kalle fd48bced91
Migrate Prettier/Eslint/Stylelint setup to Biome (#1772)
* Initial

* CSS lint

* Test CI

* Add 1v1, 2v2, and 3v3 Tags (#1771)

* Initial

* CSS lint

* Test CI

* Rename step

---------

Co-authored-by: xi <104683822+ximk@users.noreply.github.com>
2024-06-24 13:07:17 +03:00

77 lines
1.8 KiB
TypeScript

import { z } from "zod";
const placements = z.object({
edges: z.array(
z.object({
node: z.object({
id: z.string(),
name: z.string(),
rank: z.number(),
rankDiff: z.union([z.string(), z.null()]),
xPower: z.number(),
weapon: z.object({
name: z.string(),
image: z.object({ url: z.string() }),
id: z.string(),
image3d: z.object({ url: z.string() }),
image2d: z.object({ url: z.string() }),
image3dThumbnail: z.object({ url: z.string() }),
image2dThumbnail: z.object({ url: z.string() }),
subWeapon: z.object({
name: z.string(),
image: z.object({ url: z.string() }),
id: z.string(),
}),
specialWeapon: z.object({
name: z.string(),
image: z.object({ url: z.string() }),
id: z.string(),
}),
}),
weaponTop: z.boolean(),
__isPlayer: z.string(),
byname: z.string(),
nameId: z.string(),
nameplate: z.object({
badges: z.array(
z.union([
z.object({
image: z.object({ url: z.string() }),
id: z.string(),
}),
z.null(),
]),
),
background: z.object({
textColor: z.object({
a: z.number(),
b: z.number(),
g: z.number(),
r: z.number(),
}),
image: z.object({ url: z.string() }),
id: z.string(),
}),
}),
__typename: z.string(),
}),
cursor: z.string(),
}),
),
pageInfo: z.object({ endCursor: z.string(), hasNextPage: z.boolean() }),
});
// e.g. https://splatoon3.ink/data/xrank/xrank.detail.a-2.clamblitz.json
export const xRankSchema = z.object({
data: z.object({
node: z.object({
__typename: z.string(),
xRankingAr: placements.optional(),
xRankingCl: placements.optional(),
xRankingLf: placements.optional(),
xRankingGl: placements.optional(),
id: z.string(),
}),
}),
});