Skip to content

Commit

Permalink
feat(eval): support optional getter/setter
Browse files Browse the repository at this point in the history
  • Loading branch information
shigma committed Aug 28, 2020
1 parent 8a1bcf6 commit f723eaf
Showing 1 changed file with 6 additions and 6 deletions.
12 changes: 6 additions & 6 deletions packages/plugin-eval/src/main.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@ type TrappedAction<O> = (argv: TrappedArgv<O>, ...args: string[]) => ReturnType<

export interface UserTrap<T = any, K extends User.Field = never> {
fields: Iterable<K>
get(data: Pick<User, K>): T
set(data: Pick<User, K>, value: T): void
get?(data: Pick<User, K>): T
set?(data: Pick<User, K>, value: T): void
}

export namespace UserTrap {
Expand All @@ -36,16 +36,16 @@ export namespace UserTrap {
if (!$user) return {}
const result: Partial<User> = {}
for (const field of fields) {
const trap = traps[field]
Reflect.set(result, field, trap ? trap.get($user) : $user[field])
const getter = traps[field]?.get
Reflect.set(result, field, getter ? getter($user) : $user[field])
}
return result
}

export function set($user: User.Observed<never>, data: Partial<User>) {
for (const field in data) {
const trap = traps[field]
trap ? trap.set($user, data[field]) : $user[field] = data[field]
const setter = traps[field]?.set
setter ? setter($user, data[field]) : ($user[field] = data[field])
}
return $user._update()
}
Expand Down

0 comments on commit f723eaf

Please sign in to comment.