From 77c04435ddccce2ebe40983696f2594693c06c22 Mon Sep 17 00:00:00 2001 From: Jean Date: Sun, 14 Dec 2025 16:45:30 +0100 Subject: [PATCH 1/2] fix: type contract with contract provider type utility --- .../provider-contract-declaration.test-d.ts | 32 ++++++++++++++++++- src/providers/providers.ts | 3 +- 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/src/providers/provider-contract-declaration.test-d.ts b/src/providers/provider-contract-declaration.test-d.ts index db24ece..49a6da6 100644 --- a/src/providers/provider-contract-declaration.test-d.ts +++ b/src/providers/provider-contract-declaration.test-d.ts @@ -1,5 +1,5 @@ import { expectType } from "tsd"; -import { createProvider, ProviderContract } from ".."; +import { contract, createProvider, ProviderContract } from ".."; // Ports interface X { @@ -40,3 +40,33 @@ expectType(y); const yBis = createYProvider(xBis); expectType(yBis); + +interface Greeter { + greet: (name: string) => string; +} + +const GREETER_TOKEN = "greeter"; +const Greeter = contract(GREETER_TOKEN); + +const PrefixProvider = createProvider({ + name: "prefix", + expose: () => ({ prefix: "Hello" }), +}); + +const PrefixGreeter: typeof Greeter = createProvider({ + name: GREETER_TOKEN, + deps: { prefix: PrefixProvider }, + expose: ({ prefix }) => ({ + greet: (name: string) => `${prefix.prefix}, ${name}!`, + }), +}); + +createProvider({ + name: "user", + deps: { greeter: PrefixGreeter }, + expose({ greeter }) { + expectType(greeter); + return greeter.greet("Alice"); + }, +}); + diff --git a/src/providers/providers.ts b/src/providers/providers.ts index e64421d..6c1ab61 100644 --- a/src/providers/providers.ts +++ b/src/providers/providers.ts @@ -4,6 +4,7 @@ import { deepClone } from "../utils/deep-clone"; import { BaseProviderDepsMap, ProviderAny, + ProviderContract, ProviderDef, ProviderOptions, ProvidersMap, @@ -28,7 +29,7 @@ export function contract(name: string) { provider.isContract = true; - return provider; + return provider as ProviderContract; } export function createProvider< From 4e922504f8890bffad73ca4da982c101510d5dcd Mon Sep 17 00:00:00 2001 From: Jean Date: Sun, 14 Dec 2025 16:48:50 +0100 Subject: [PATCH 2/2] fix: lint errors --- src/providers/provider-contract-declaration.test-d.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/providers/provider-contract-declaration.test-d.ts b/src/providers/provider-contract-declaration.test-d.ts index 49a6da6..c35e20a 100644 --- a/src/providers/provider-contract-declaration.test-d.ts +++ b/src/providers/provider-contract-declaration.test-d.ts @@ -65,8 +65,7 @@ createProvider({ name: "user", deps: { greeter: PrefixGreeter }, expose({ greeter }) { - expectType(greeter); + expectType(greeter); return greeter.greet("Alice"); }, }); -