<Self>(key: string): <const Members extends Record<string, unknown>>(
members: Members
) => Context.ServiceClass<Self, string, { readonly members: Members }> & {
members: Members
kind: "hyperlink-ts/Group"
} & MembersCreate a group tag holding the given named member tags.
export const const Tag: <Self>(key: string) => <
const Members extends Record<string, unknown>
>(
members: Members
) => Context.ServiceClass<
Self,
string,
{
readonly members: Members
}
> & {
members: Members
kind: "hyperlink-ts/Group"
} & Members
Create a group tag holding the given named member tags.
Tag =
<function (type parameter) Self in <Self>(key: string): <const Members extends Record<string, unknown>>(members: Members) => Context.ServiceClass<Self, string, {
readonly members: Members;
}> & {
members: Members;
kind: "hyperlink-ts/Group";
} & Members
Self>(key: stringkey: string) =>
<const function (type parameter) Members in <const Members extends Record<string, unknown>>(members: Members): Context.ServiceClass<Self, string, {
readonly members: Members;
}> & {
members: Members;
kind: "hyperlink-ts/Group";
} & Members
Members extends type Record<K extends keyof any, T> = {
[P in K]: T
}
Construct a type with a set of properties K of type T
Record<string, unknown>>(members: const Members extends Record<string, unknown>members: function (type parameter) Members in <const Members extends Record<string, unknown>>(members: Members): Context.ServiceClass<Self, string, {
readonly members: Members;
}> & {
members: Members;
kind: "hyperlink-ts/Group";
} & Members
Members) => {
const const base: Context.ServiceClass<
Self,
string,
{ readonly members: Members }
>
const base: {
key: Identifier;
Service: {
members: Members;
};
of: (this: void, self: { readonly members: Members }) => { readonly members: Members };
context: (self: { readonly members: Members }) => Context.Context<Self>;
use: (f: (service: { readonly members: Members }) => Effect<A, E, R>) => Effect<A, E, Self | R>;
useSync: (f: (service: { readonly members: Members }) => A) => Effect<A, never, Self>;
Identifier: Identifier;
stack: string | undefined;
pipe: { <A>(this: A): A; <A, B = never>(this: A, ab: (_: A) => B): B; <A, B = never, C = never>(this: A, ab: (_: A) => B, bc: (_: B) => C): C; <A, B = never, C = never, D = never>(this: A, ab: (_: A) => B, bc: (_: B) => C, cd: (_: C) => D): D; <…;
toString: () => string;
toJSON: () => unknown;
}
base = import ContextContext.const Service: {
<Identifier, Shape = Identifier>(
key: string
): Service<Identifier, Shape>
<Self, Shape>(): <
Identifier extends string,
E,
R = Types.unassigned,
Args extends ReadonlyArray<any> = never
>(
id: Identifier,
options?:
| {
readonly make:
| ((
...args: Args
) => Effect<Shape, E, R>)
| Effect<Shape, E, R>
| undefined
}
| undefined
) => ServiceClass<Self, Identifier, Shape> &
([Types.unassigned] extends [R]
? unknown
: {
readonly make: [Args] extends [never]
? Effect<Shape, E, R>
: (
...args: Args
) => Effect<Shape, E, R>
})
<Self>(): <
Identifier extends string,
Make extends
| Effect<any, any, any>
| ((...args: any) => Effect<any, any, any>)
>(
id: Identifier,
options: { readonly make: Make }
) => ServiceClass<
Self,
Identifier,
Make extends
| Effect<infer _A, infer _E, infer _R>
| ((
...args: infer _Args
) => Effect<infer _A, infer _E, infer _R>)
? _A
: never
> & { readonly make: Make }
}
Creates a Context service key.
When to use
Use when you need to define a context service key for a dependency that must
be provided by the surrounding context.
Details
Call Context.Service("Key") for a function-style key, or use the two-stage
form Context.Service<Self, Shape>()("Key") for class-style service
declarations. The returned key can be yielded as an Effect and passed to
Context.make, Context.add, and the Context getter functions.
Gotchas
The string key is the runtime identity of the service. Reusing the same key
string for unrelated services makes them occupy the same slot in a
Context.
Example (Creating service keys)
import { Context } from "effect"
// Create a simple service
const Database = Context.Service<{
query: (sql: string) => string
}>("Database")
// Create a service class
class Config extends Context.Service<Config, {
port: number
}>()("Config") {}
// Use the services to create contexts
const db = Context.make(Database, {
query: (sql) => `Result: ${sql}`
})
const config = Context.make(Config, { port: 8080 })
Service<function (type parameter) Self in <Self>(key: string): <const Members extends Record<string, unknown>>(members: Members) => Context.ServiceClass<Self, string, {
readonly members: Members;
}> & {
members: Members;
kind: "hyperlink-ts/Group";
} & Members
Self, { readonly members: const Members extends Record<string, unknown>members: function (type parameter) Members in <const Members extends Record<string, unknown>>(members: Members): Context.ServiceClass<Self, string, {
readonly members: Members;
}> & {
members: Members;
kind: "hyperlink-ts/Group";
} & Members
Members }>()(key: stringkey);
return var Object: ObjectConstructorProvides functionality common to all JavaScript objects.
Object.ObjectConstructor.assign<Context.ServiceClass<Self, string, {
readonly members: Members;
}>, {
members: Members;
kind: "hyperlink-ts/Group";
}, Members>(target: Context.ServiceClass<Self, string, {
readonly members: Members;
}>, source1: {
members: Members;
kind: "hyperlink-ts/Group";
}, source2: Members): Context.ServiceClass<Self, string, {
readonly members: Members;
}> & {
members: Members;
kind: "hyperlink-ts/Group";
} & Members (+3 overloads)
Copy the values of all of the enumerable own properties from one or more source objects to a
target object. Returns the target object.
assign(const base: Context.ServiceClass<
Self,
string,
{ readonly members: Members }
>
const base: {
key: Identifier;
Service: {
members: Members;
};
of: (this: void, self: { readonly members: Members }) => { readonly members: Members };
context: (self: { readonly members: Members }) => Context.Context<Self>;
use: (f: (service: { readonly members: Members }) => Effect<A, E, R>) => Effect<A, E, Self | R>;
useSync: (f: (service: { readonly members: Members }) => A) => Effect<A, never, Self>;
Identifier: Identifier;
stack: string | undefined;
pipe: { <A>(this: A): A; <A, B = never>(this: A, ab: (_: A) => B): B; <A, B = never, C = never>(this: A, ab: (_: A) => B, bc: (_: B) => C): C; <A, B = never, C = never, D = never>(this: A, ab: (_: A) => B, bc: (_: B) => C, cd: (_: C) => D): D; <…;
toString: () => string;
toJSON: () => unknown;
}
base, { members: const Members extends Record<string, unknown>members, kind: "hyperlink-ts/Group"kind }, members: const Members extends Record<string, unknown>members);
};