Skip to content

Commit

Permalink
simplify zod & fix types
Browse files Browse the repository at this point in the history
  • Loading branch information
KhafraDev committed Jun 23, 2024
1 parent 2781ae9 commit 8eaff97
Show file tree
Hide file tree
Showing 2 changed files with 42 additions and 44 deletions.
16 changes: 6 additions & 10 deletions src/saves/PlayerSchema.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,14 +20,7 @@ const decimalSchema = z.custom<Decimal>((value) => {
}
}).transform((decimalSource) => new Decimal(decimalSource))

const arrayStartingWithNull = (s: ZodType) =>
z.array(z.union([z.null(), s]))
.refine((arr) => arr.length > 0 && arr[0] === null, {
message: 'First element must be null'
})
.refine((arr) => arr.slice(1).every((element) => typeof element === 'number'), {
message: 'All elements after the first must be numbers'
})
const arrayStartingWithNull = (s: ZodType) => z.tuple([z.null()]).rest(s)

const arrayExtend = <K extends keyof Player, Value extends Player[K]>(array: Value, k: K) => {
if (array.length < blankSave[k].length) {
Expand Down Expand Up @@ -449,7 +442,7 @@ export const playerSchema = z.object({
ascensionCounterRealReal: z.number().default(() => blankSave.ascensionCounterRealReal),
cubeUpgrades: arrayStartingWithNull(z.number())
.transform((array) => arrayExtend(array as [null, ...number[]], 'cubeUpgrades'))
.default(() => [...blankSave.cubeUpgrades]),
.default((): [null, ...number[]] => [...blankSave.cubeUpgrades]),
cubeUpgradesBuyMaxToggle: z.boolean().default(() => blankSave.cubeUpgradesBuyMaxToggle),
autoCubeUpgradesToggle: z.boolean().default(() => blankSave.autoCubeUpgradesToggle),
autoPlatonicUpgradesToggle: z.boolean().default(() => blankSave.autoPlatonicUpgradesToggle),
Expand Down Expand Up @@ -521,7 +514,10 @@ export const playerSchema = z.object({
),
corruptionShowStats: z.boolean().default(() => blankSave.corruptionShowStats),

constantUpgrades: arrayStartingWithNull(z.number()).default(() => [...blankSave.constantUpgrades]),
constantUpgrades: arrayStartingWithNull(z.number()).default((): [
null,
...number[]
] => [...blankSave.constantUpgrades]),
// TODO: real types
history: z.object({
ants: z.any().array(),
Expand Down
70 changes: 36 additions & 34 deletions src/types/Synergism.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@ import type {
} from '../StatCache'
import type { Tabs } from '../Tabs'

type ArrayStartingWithNull<T> = [null, ...T[]]

export interface Player {
firstPlayed: string
worlds: QuarkHandler
Expand Down Expand Up @@ -422,20 +424,20 @@ export interface Player {
goldenQuarksTimer: number

antPoints: Decimal
antUpgrades: (null | number)[]
antUpgrades: number[]
antSacrificePoints: number
antSacrificeTimer: number
antSacrificeTimerReal: number

talismanLevels: number[]
talismanRarity: number[]
talismanOne: (null | number)[]
talismanTwo: (null | number)[]
talismanThree: (null | number)[]
talismanFour: (null | number)[]
talismanFive: (null | number)[]
talismanSix: (null | number)[]
talismanSeven: (null | number)[]
talismanOne: ArrayStartingWithNull<number>
talismanTwo: ArrayStartingWithNull<number>
talismanThree: ArrayStartingWithNull<number>
talismanFour: ArrayStartingWithNull<number>
talismanFive: ArrayStartingWithNull<number>
talismanSix: ArrayStartingWithNull<number>
talismanSeven: ArrayStartingWithNull<number>
talismanShards: number
commonFragments: number
uncommonFragments: number
Expand Down Expand Up @@ -463,7 +465,7 @@ export interface Player {
openHypercubes: number
autoOpenPlatonicsCubes: boolean
openPlatonicsCubes: number
cubeUpgrades: [null, ...number[]]
cubeUpgrades: ArrayStartingWithNull<number>
cubeUpgradesBuyMaxToggle: boolean
autoCubeUpgradesToggle: boolean
autoPlatonicUpgradesToggle: boolean
Expand Down Expand Up @@ -535,7 +537,7 @@ export interface Player {
corruptionLoadoutNames: string[]
corruptionShowStats: boolean

constantUpgrades: [null, ...number[]]
constantUpgrades: ArrayStartingWithNull<number>
history: Record<Category, ResetHistoryEntryUnion[]>
historyShowPerSecond: boolean

Expand Down Expand Up @@ -835,13 +837,13 @@ export interface GlobalVariables {
rune4Talisman: number
rune5Talisman: number

talisman1Effect: [null, ...number[]]
talisman2Effect: [null, ...number[]]
talisman3Effect: [null, ...number[]]
talisman4Effect: [null, ...number[]]
talisman5Effect: [null, ...number[]]
talisman6Effect: [null, ...number[]]
talisman7Effect: [null, ...number[]]
talisman1Effect: ArrayStartingWithNull<number>
talisman2Effect: ArrayStartingWithNull<number>
talisman3Effect: ArrayStartingWithNull<number>
talisman4Effect: ArrayStartingWithNull<number>
talisman5Effect: ArrayStartingWithNull<number>
talisman6Effect: ArrayStartingWithNull<number>
talisman7Effect: ArrayStartingWithNull<number>

talisman6Power: number
talisman7Quarks: number
Expand All @@ -854,21 +856,21 @@ export interface GlobalVariables {

talismanLevelCostMultiplier: number[]

talismanPositiveModifier: [null, ...number[]]
talismanNegativeModifier: [null, ...number[]]
talismanPositiveModifier: ArrayStartingWithNull<number>
talismanNegativeModifier: ArrayStartingWithNull<number>

commonTalismanEnhanceCost: [null, ...number[]]
uncommonTalismanEnchanceCost: [null, ...number[]]
rareTalismanEnchanceCost: [null, ...number[]]
epicTalismanEnhanceCost: [null, ...number[]]
legendaryTalismanEnchanceCost: [null, ...number[]]
mythicalTalismanEnchanceCost: [null, ...number[]]
commonTalismanEnhanceCost: ArrayStartingWithNull<number>
uncommonTalismanEnchanceCost: ArrayStartingWithNull<number>
rareTalismanEnchanceCost: ArrayStartingWithNull<number>
epicTalismanEnhanceCost: ArrayStartingWithNull<number>
legendaryTalismanEnchanceCost: ArrayStartingWithNull<number>
mythicalTalismanEnchanceCost: ArrayStartingWithNull<number>

talismanRespec: number

obtainiumGain: number

mirrorTalismanStats: [null, ...number[]]
mirrorTalismanStats: ArrayStartingWithNull<number>
antELO: number
effectiveELO: number

Expand All @@ -891,19 +893,19 @@ export interface GlobalVariables {

buildingSubTab: BuildingSubtab
// number000 of each before Diminishing Returns
blessingbase: [null, ...number[]]
blessingDRPower: [null, ...number[]]
blessingbase: ArrayStartingWithNull<number>
blessingDRPower: ArrayStartingWithNull<number>
giftbase: number[]
giftDRPower: number[]
benedictionbase: [null, ...number[]]
benedictionDRPower: [null, ...number[]]
benedictionbase: ArrayStartingWithNull<number>
benedictionDRPower: ArrayStartingWithNull<number>
// 10 Million of each before Diminishing returns on first number 200k for second, and 10k for the last few
platonicCubeBase: number[]
platonicDRPower: number[]

cubeBonusMultiplier: [null, ...number[]]
tesseractBonusMultiplier: [null, ...number[]]
hypercubeBonusMultiplier: [null, ...number[]]
cubeBonusMultiplier: ArrayStartingWithNull<number>
tesseractBonusMultiplier: ArrayStartingWithNull<number>
hypercubeBonusMultiplier: ArrayStartingWithNull<number>
platonicBonusMultiplier: number[]

autoOfferingCounter: number
Expand Down Expand Up @@ -934,7 +936,7 @@ export interface GlobalVariables {
acceleratorMultiplier: number
multiplierMultiplier: number

constUpgradeCosts: [null, ...number[]]
constUpgradeCosts: ArrayStartingWithNull<number>

globalConstantMult: Decimal
autoTalismanTimer: number
Expand Down

0 comments on commit 8eaff97

Please sign in to comment.