Skip to content

Commit b81963d

Browse files
authored
fix (#339)
1 parent c63be2d commit b81963d

File tree

4 files changed

+29
-10
lines changed

4 files changed

+29
-10
lines changed

.changeset/brave-rooms-go.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
---
2+
"@vercel/flags-core": patch
3+
"@flags-sdk/vercel": patch
4+
---
5+
6+
Loosen the type restrictions on the `Evaluation` type as the previous implementation would only work with `interface` but not with `type` that lead to an accidental breaking change.

packages/adapter-vercel/src/index.test.ts

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { flagsClient, resetDefaultFlagsClient } from '@vercel/flags-core';
2-
import type { Origin, ProviderData } from 'flags';
2+
import type { Adapter, Origin, ProviderData } from 'flags';
33
import { flag } from 'flags/next';
44
import { HttpResponse, http } from 'msw';
55
import { setupServer } from 'msw/node';
@@ -10,6 +10,7 @@ import {
1010
beforeEach,
1111
describe,
1212
expect,
13+
expectTypeOf,
1314
it,
1415
vi,
1516
} from 'vitest';
@@ -102,6 +103,20 @@ describe('createVercelAdapter', () => {
102103
sdkKey: 'vf_my_sdk_key',
103104
} satisfies Origin);
104105
});
106+
107+
it('has correct types', () => {
108+
const adapter = createVercelAdapter(flagsClient);
109+
type SampleValue = boolean;
110+
type SampleEvaluationContext = { user: { id: string } };
111+
const instance = adapter<SampleValue, SampleEvaluationContext>();
112+
expectTypeOf(instance).toEqualTypeOf<
113+
Adapter<SampleValue, SampleEvaluationContext>
114+
>();
115+
expectTypeOf(instance.decide)
116+
.parameter(0)
117+
.toHaveProperty('entities')
118+
.toEqualTypeOf<SampleEvaluationContext | undefined>();
119+
});
105120
});
106121

107122
describe('when used with getProviderData', () => {

packages/adapter-vercel/src/index.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,10 @@ export function createVercelAdapter(
3030
? createClient(sdkKeyOrFlagsClient)
3131
: sdkKeyOrFlagsClient;
3232

33-
return function vercelAdapter<
33+
return function vercelAdapter<ValueType, EntitiesType>(): Adapter<
3434
ValueType,
35-
EntitiesType extends Record<string, unknown>,
36-
>(): Adapter<ValueType, EntitiesType> {
35+
EntitiesType
36+
> {
3737
return {
3838
origin: flagsClient.origin,
3939
config: { reportValue: false },
@@ -75,10 +75,10 @@ export function resetDefaultVercelAdapter() {
7575
*
7676
*/
7777
// This is initialized lazily to avoid warning when it is not actually used and env vars are missing.
78-
export function vercelAdapter<
78+
export function vercelAdapter<ValueType, EntitiesType>(): Adapter<
7979
ValueType,
80-
EntitiesType extends Record<string, unknown>,
81-
>(): Adapter<ValueType, EntitiesType> {
80+
EntitiesType
81+
> {
8282
if (!defaultVercelAdapter) {
8383
defaultVercelAdapter = createVercelAdapter(flagsClient);
8484
}

packages/vercel-flags-core/src/types.ts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
import type { ControllerInstance } from './controller-fns';
2-
31
/**
42
* Options for stream connection behavior
53
*/
@@ -138,7 +136,7 @@ export type FlagsClient<Entities = Record<string, unknown>> = {
138136
* @param entities
139137
* @returns
140138
*/
141-
evaluate: <T = Value, E extends Entities = Entities>(
139+
evaluate: <T = Value, E = Entities>(
142140
flagKey: string,
143141
defaultValue?: T,
144142
entities?: E,

0 commit comments

Comments
 (0)