diff --git a/src/object-merge/index.ts b/src/object-merge/index.ts index 4ae6ae7..0a66840 100644 --- a/src/object-merge/index.ts +++ b/src/object-merge/index.ts @@ -17,9 +17,9 @@ export type PathSegments = Array export type ResolveContext = {} -export type ResolveMethod = ( +export type ResolveMethod = ( options: Array, - contexts: Array, + contexts: Array, active: MergedObjectValue, key: string | number | symbol, pathSegments: PathSegments, diff --git a/src/resolvers/deepest.ts b/src/resolvers/deepest.ts index f73c9ef..3a84835 100644 --- a/src/resolvers/deepest.ts +++ b/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 @@ -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((currentValue, context) => { + const { depth } = context + + if (!currentValue || depth > currentValue) { + return depth } + + return currentValue }) diff --git a/src/resolvers/index.ts b/src/resolvers/index.ts index f749541..80f8403 100644 --- a/src/resolvers/index.ts +++ b/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 { + (currentValue: T | undefined, context: U): T +} -export const resolveOption: (predicament: ResolveOptionReducer) => ResolveMethod = predicament => (options, contexts) => { +export const resolveOption = (predicament: ResolveOptionPredicament, initialValue?: T): ResolveMethod => (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) { @@ -14,7 +16,7 @@ export const resolveOption: (predicament: ResolveOptionReducer) => ResolveMethod } return acc - }, undefined) + }, initialValue) if (resolvedIndex > -1) { return options[resolvedIndex]