diff --git a/src/providers/provider-contract-declaration.test-d.ts b/src/providers/provider-contract-declaration.test-d.ts index db24ece..c35e20a 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,32 @@ 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<