Skip to content

Commit

Permalink
use zod to export save
Browse files Browse the repository at this point in the history
  • Loading branch information
KhafraDev committed Jun 12, 2024
1 parent 5fde43d commit cf7a656
Show file tree
Hide file tree
Showing 2 changed files with 78 additions and 62 deletions.
65 changes: 3 additions & 62 deletions src/Synergism.ts
Original file line number Diff line number Diff line change
Expand Up @@ -159,6 +159,7 @@ import { handleLogin } from './Login'
import { octeractData, OcteractUpgrade } from './Octeracts'
import { updatePlatonicUpgradeBG } from './Platonic'
import { QuarkHandler } from './Quark'
import { playerJsonSchema } from './saves/PlayerJsonSchema'
import { playerSchema } from './saves/PlayerSchema'
import { getFastForwardTotalMultiplier, singularityData, SingularityUpgrade } from './singularity'
import { SingularityChallenge, singularityChallengeData } from './SingularityChallenges'
Expand Down Expand Up @@ -1510,69 +1511,9 @@ export const saveSynergy = async (button?: boolean): Promise<boolean> => {
player.loaded1009 = true
player.loaded1009hotfix1 = true

// shallow hold, doesn't modify OG object nor is affected by modifications to OG
const p = Object.assign({}, player, {
codes: Array.from(player.codes),
worlds: Number(player.worlds),
wowCubes: Number(player.wowCubes),
wowTesseracts: Number(player.wowTesseracts),
wowHypercubes: Number(player.wowHypercubes),
wowPlatonicCubes: Number(player.wowPlatonicCubes),
singularityUpgrades: Object.fromEntries(
Object.entries(player.singularityUpgrades).map(([key, value]) => {
return [
key,
{
level: value.level,
goldenQuarksInvested: value.goldenQuarksInvested,
toggleBuy: value.toggleBuy,
freeLevels: value.freeLevels
}
]
})
),
octeractUpgrades: Object.fromEntries(
Object.entries(player.octeractUpgrades).map(([key, value]) => {
return [
key,
{
level: value.level,
octeractsInvested: value.octeractsInvested,
toggleBuy: value.toggleBuy,
freeLevels: value.freeLevels
}
]
})
),
singularityChallenges: Object.fromEntries(
Object.entries(player.singularityChallenges).map(([key, value]) => {
return [
key,
{
completions: value.completions,
highestSingularityCompleted: value.highestSingularityCompleted,
enabled: value.enabled
}
]
})
),
blueberryUpgrades: Object.fromEntries(
Object.entries(player.blueberryUpgrades).map(([key, value]) => {
return [
key,
{
level: value.level,
ambrosiaInvested: value.ambrosiaInvested,
blueberriesInvested: value.blueberriesInvested,
toggleBuy: value.toggleBuy,
freeLevels: value.freeLevels
}
]
})
)
})

const p = playerJsonSchema.parse(player)
const save = btoa(JSON.stringify(p))

if (save !== null) {
const saveBlob = new Blob([save], { type: 'text/plain' })

Expand Down
75 changes: 75 additions & 0 deletions src/saves/PlayerJsonSchema.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
import { z } from 'zod'
import type { Player } from '../types/Synergism'
import { playerSchema } from './PlayerSchema'

export const playerJsonSchema = playerSchema.extend({
codes: z.any().transform((codes: Player['codes']) => Array.from(codes)),
worlds: z.any().transform((worlds: Player['worlds']) => Number(worlds)),
wowCubes: z.any().transform((cubes: Player['wowCubes']) => Number(cubes)),
wowTesseracts: z.any().transform((tesseracts: Player['wowTesseracts']) => Number(tesseracts)),
wowHypercubes: z.any().transform((hypercubes: Player['wowHypercubes']) => Number(hypercubes)),
wowPlatonicCubes: z.any().transform((cubes: Player['wowPlatonicCubes']) => Number(cubes)),

singularityUpgrades: z.any().transform((upgrades: Player['singularityUpgrades']) =>
Object.fromEntries(
Object.entries(upgrades).map(([key, value]) => {
return [
key,
{
level: value.level,
goldenQuarksInvested: value.goldenQuarksInvested,
toggleBuy: value.toggleBuy,
freeLevels: value.freeLevels
}
]
})
)
),
octeractUpgrades: z.any().transform((upgrades: Player['octeractUpgrades']) =>
Object.fromEntries(
Object.entries(upgrades).map(([key, value]) => {
return [
key,
{
level: value.level,
octeractsInvested: value.octeractsInvested,
toggleBuy: value.toggleBuy,
freeLevels: value.freeLevels
}
]
})
)
),
singularityChallenges: z.any().transform((challenges: Player['singularityChallenges']) =>
Object.fromEntries(
Object.entries(challenges).map(([key, value]) => {
return [
key,
{
completions: value.completions,
highestSingularityCompleted: value.highestSingularityCompleted,
enabled: value.enabled
}
]
})
)
),
blueberryUpgrades: z.any().transform((upgrades: Player['blueberryUpgrades']) =>
Object.fromEntries(
Object.entries(upgrades).map(([key, value]) => {
return [
key,
{
level: value.level,
ambrosiaInvested: value.ambrosiaInvested,
blueberriesInvested: value.blueberriesInvested,
toggleBuy: value.toggleBuy,
freeLevels: value.freeLevels
}
]
})
)
),

dayCheck: z.any().transform((dayCheck: Player['dayCheck']) => dayCheck?.toISOString() ?? null)
})

0 comments on commit cf7a656

Please sign in to comment.