lifeto-shop/src/lib/storage.ts

70 lines
1.7 KiB
TypeScript
Raw Normal View History

2022-07-03 15:50:41 +00:00
//class helper {
// Revive<T>(t:string, _type:string):string {
// return t
// }
// Revive<T>(t:string, _type:string[]):string[]{
// return t.split(",")
// }
// Revive<T>(t:string, _type:number):number {
// return Number(t)
// }
// Revive<T>(t:string, _type:number[]):number[]{
// return t.split(",").map(Number)
// }
//}
import { ColumnSet } from "./table"
2022-07-06 07:48:11 +00:00
import { TricksterCharacter, TricksterInventory } from "./trickster"
2022-07-03 15:50:41 +00:00
export const ARRAY_SEPERATOR = ","
let as = ARRAY_SEPERATOR
export interface Reviver<T> {
Murder(t:T):string
Revive(s:string):T
}
export const StoreStr= {
Murder: (s:string):string=>s,
Revive: (s:string):string=>s
}
export const StoreNum = {
Murder: (s:number):string=>s.toString(),
Revive: (s:string):number=>Number(s)
}
export const StoreStrSet = {
Murder: (s:Set<string>):string=>Array.from(s).join(as),
Revive: (s:string):Set<string>=>new Set(s.split(as))
}
export const StoreColSet = {
2022-07-03 16:05:10 +00:00
Murder: (s:ColumnSet):string=>Array.from(s.s.values()).join(as),
2022-07-06 07:48:11 +00:00
Revive: (s:string):ColumnSet=>new ColumnSet(s.split(as) as any)
2022-07-03 15:50:41 +00:00
}
2022-07-06 07:48:11 +00:00
export const StoreChars = {
2022-07-07 07:54:36 +00:00
Murder: (s:Map<string,TricksterCharacter>):string=>{
let o = JSON.stringify(Array.from(s.entries()))
return o
},
2022-07-06 07:48:11 +00:00
Revive: (s:string):Map<string,TricksterCharacter>=>new Map(JSON.parse(s)),
2022-07-03 16:37:06 +00:00
}
2022-07-07 07:54:36 +00:00
export const StoreJsonable = {
Murder: <T>(s:T):string=>JSON.stringify(Object.entries(s)),
Revive: <T>(s:string):T=>JSON.parse(s),
}
export interface Serializable<T> {
parse(s:any):T
}
export const StoreSerializable = <T extends Serializable<T>>(n:(new ()=>T))=>{
return {
Murder: (s:T):string=>JSON.stringify(s),
Revive: (s:string):T=>new n().parse(JSON.parse(s))
}
}