Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
fix: fix/improve resolver types
  • Loading branch information
pimlie committed Apr 3, 2021
1 parent 89d7f58 commit fcb47a9
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 14 deletions.
4 changes: 2 additions & 2 deletions src/object-merge/index.ts
Expand Up @@ -17,9 +17,9 @@ export type PathSegments = Array<string>

export type ResolveContext = {}

export type ResolveMethod = (
export type ResolveMethod<T = ResolveContext> = (
options: Array<any>,
contexts: Array<ResolveContext>,
contexts: Array<T>,
active: MergedObjectValue,
key: string | number | symbol,
pathSegments: PathSegments,
Expand Down
16 changes: 9 additions & 7 deletions src/resolvers/deepest.ts
@@ -1,6 +1,5 @@
import { ResolveContext, ResolveMethod } from '../object-merge'
import { MetaResolveContext } from '../types'
import { resolveOption } from '.'
import type { MetaResolveContext } from '../types'
import { resolveOption } from './index'

type MergeResolveContextDeepest = MetaResolveContext & {
depth: number
Expand All @@ -24,9 +23,12 @@ export function setup (context: MergeResolveContextDeepest): void {
context.depth = depth
}

export const resolve: ResolveMethod = resolveOption((acc: any, context: ResolveContext) => {
const { depth } = (context as unknown as MergeResolveContextDeepest)
if (!acc || depth > acc) {
return acc
export const resolve = resolveOption<number, MergeResolveContextDeepest>((currentValue, context) => {
const { depth } = context

if (!currentValue || depth > currentValue) {
return depth
}

return currentValue
})
12 changes: 7 additions & 5 deletions src/resolvers/index.ts
@@ -1,11 +1,13 @@
import { ResolveContext, ResolveMethod } from '../object-merge'
import type { ResolveContext, ResolveMethod } from '../object-merge'

export type ResolveOptionReducer = (accumulator: any, context: ResolveContext) => ResolveMethod
export interface ResolveOptionPredicament<T, U> {
(currentValue: T | undefined, context: U): T
}

export const resolveOption: (predicament: ResolveOptionReducer) => ResolveMethod = predicament => (options, contexts) => {
export const resolveOption = <T, U = ResolveContext>(predicament: ResolveOptionPredicament<T, U>, initialValue?: T): ResolveMethod<U> => (options, contexts) => {
let resolvedIndex = -1

contexts.reduce((acc: ResolveContext | undefined, context, index) => {
contexts.reduce((acc, context, index) => {
const retval = predicament(acc, context)

if (retval !== acc) {
Expand All @@ -14,7 +16,7 @@ export const resolveOption: (predicament: ResolveOptionReducer) => ResolveMethod
}

return acc
}, undefined)
}, initialValue)

if (resolvedIndex > -1) {
return options[resolvedIndex]
Expand Down

0 comments on commit fcb47a9

Please sign in to comment.