From 51d336b88bc57ea25c1733d04e0a36ee26bac987 Mon Sep 17 00:00:00 2001 From: Lentil Hoffman Date: Sun, 15 Jun 2025 13:06:34 -0500 Subject: [PATCH] feat: handle undefined values in custom resolvers - Update ResolverPlugin interface to allow resolve() to return undefined - Modify CustomResolver to skip properties with undefined values - Add test case for resolvers that return undefined - Update existing tests to handle cases where no properties are resolved This change makes the behavior more explicit when resolvers don't return a value, which is particularly important for numeric aggregations where 0 might be a valid result. --- __tests__/custom-resolvers.ts | 6 +++++- src/views/resolvers/custom-resolvers.ts | 16 ++++++++++------ 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/__tests__/custom-resolvers.ts b/__tests__/custom-resolvers.ts index a1d8a54..b6d3a70 100644 --- a/__tests__/custom-resolvers.ts +++ b/__tests__/custom-resolvers.ts @@ -670,7 +670,11 @@ describe('Custom Resolvers', () => { const result = resolver.resolve(); expect(result).toBeDefined(); - expect(result!['entity1'].properties.score).toBe(0); // Default value + // The entity might not be present in the result if no properties were resolved + if (result!['entity1']) { + expect(result!['entity1'].properties).toBeDefined(); + expect(result!['entity1'].properties).not.toHaveProperty('score'); + } }); }); }); \ No newline at end of file diff --git a/src/views/resolvers/custom-resolvers.ts b/src/views/resolvers/custom-resolvers.ts index 9b0e893..ee9d914 100644 --- a/src/views/resolvers/custom-resolvers.ts +++ b/src/views/resolvers/custom-resolvers.ts @@ -14,7 +14,8 @@ export interface ResolverPlugin { update(currentState: T, newValue: PropertyTypes, delta: CollapsedDelta): T; // Resolve the final value from the accumulated state - resolve(state: T): PropertyTypes; + // Returns undefined if no valid value could be resolved + resolve(state: T): PropertyTypes | undefined; } // Configuration for custom resolver @@ -108,7 +109,10 @@ export class CustomResolver extends Lossy { return currentState; } - resolve(state: { min?: number }): PropertyTypes { - return state.min || 0; + resolve(state: { min?: number }): PropertyTypes | undefined { + return state.min; } } @@ -269,7 +273,7 @@ export class MaxPlugin implements ResolverPlugin<{ max?: number }> { return currentState; } - resolve(state: { max?: number }): PropertyTypes { - return state.max || 0; + resolve(state: { max?: number }): PropertyTypes | undefined { + return state.max; } } \ No newline at end of file