mirror of
https://github.com/monkeytypegame/monkeytype.git
synced 2024-09-20 07:16:17 +08:00
impr(local storage with schema): add fallback value copy to migrate parameters
!nuf
This commit is contained in:
parent
1d7e7bbb91
commit
09ce4bd672
|
@ -1,16 +1,17 @@
|
|||
import { ZodError, ZodIssue } from "zod";
|
||||
import { deepClone } from "./misc";
|
||||
|
||||
export class LocalStorageWithSchema<T> {
|
||||
private key: string;
|
||||
private schema: Zod.Schema<T>;
|
||||
private fallback: T;
|
||||
private migrate?: (value: unknown, zodIssues: ZodIssue[]) => T;
|
||||
private migrate?: (value: unknown, zodIssues: ZodIssue[], fallback: T) => T;
|
||||
|
||||
constructor(options: {
|
||||
key: string;
|
||||
schema: Zod.Schema<T>;
|
||||
fallback: T;
|
||||
migrate?: (value: unknown, zodIssues: ZodIssue[]) => T;
|
||||
migrate?: (value: unknown, zodIssues: ZodIssue[], fallback: T) => T;
|
||||
}) {
|
||||
this.key = options.key;
|
||||
this.schema = options.schema;
|
||||
|
@ -50,7 +51,11 @@ export class LocalStorageWithSchema<T> {
|
|||
|
||||
let newValue = this.fallback;
|
||||
if (this.migrate) {
|
||||
const migrated = this.migrate(jsonParsed, schemaParsed.error.issues);
|
||||
const migrated = this.migrate(
|
||||
jsonParsed,
|
||||
schemaParsed.error.issues,
|
||||
deepClone(this.fallback)
|
||||
);
|
||||
const parse = this.schema.safeParse(migrated);
|
||||
if (parse.success) {
|
||||
newValue = migrated;
|
||||
|
|
Loading…
Reference in a new issue