Context overview
Re-exports from @effect/data/Context
Added in v1.0.0
Table of contents
constructors
empty
Returns an empty Context
.
Signature
export declare const empty: () => Context<never>
Example
import * as Context from "effect/Context"
assert.strictEqual(Context.isContext(Context.empty()), true)
Added in v1.0.0
isContext
Returns an empty Context
.
Signature
export declare const isContext: (input: unknown) => input is Context<never>
Example
import * as Context from "effect/Context"
assert.strictEqual(Context.isContext(Context.empty()), true)
Added in v1.0.0
make
Creates a new Context
with a single service associated to the tag.
Signature
export declare const make: <T extends Tag<any, any>>(tag: T, service: Tag.Service<T>) => Context<Tag.Identifier<T>>
Example
import * as Context from "effect/Context"
const Port = Context.Tag<{ PORT: number }>()
const Services = Context.make(Port, { PORT: 8080 })
assert.deepStrictEqual(Context.get(Services, Port), { PORT: 8080 })
Added in v1.0.0
getters
get
Get a service from the context that corresponds to the given tag.
Signature
export declare const get: {
<Services, T extends ValidTagsById<Services>>(tag: T): (self: Context<Services>) => Tag.Service<T>
<Services, T extends ValidTagsById<Services>>(self: Context<Services>, tag: T): Tag.Service<T>
}
Example
import * as Context from "effect/Context"
import { pipe } from "effect/Function"
const Port = Context.Tag<{ PORT: number }>()
const Timeout = Context.Tag<{ TIMEOUT: number }>()
const Services = pipe(Context.make(Port, { PORT: 8080 }), Context.add(Timeout, { TIMEOUT: 5000 }))
assert.deepStrictEqual(Context.get(Services, Timeout), { TIMEOUT: 5000 })
Added in v1.0.0
getOption
Get the value associated with the specified tag from the context wrapped in an Option
object. If the tag is not found, the Option
object will be None
.
Signature
export declare const getOption: {
<S, I>(tag: Tag<I, S>): <Services>(self: Context<Services>) => Option<S>
<Services, S, I>(self: Context<Services>, tag: Tag<I, S>): Option<S>
}
Example
import * as Context from "effect/Context"
import * as O from "effect/Option"
const Port = Context.Tag<{ PORT: number }>()
const Timeout = Context.Tag<{ TIMEOUT: number }>()
const Services = Context.make(Port, { PORT: 8080 })
assert.deepStrictEqual(Context.getOption(Services, Port), O.some({ PORT: 8080 }))
assert.deepStrictEqual(Context.getOption(Services, Timeout), O.none())
Added in v1.0.0
guards
isTag
Checks if the provided argument is a Tag
.
Signature
export declare const isTag: (input: unknown) => input is Tag<any, any>
Example
import * as Context from "effect/Context"
assert.strictEqual(Context.isTag(Context.Tag()), true)
Added in v1.0.0
models
Context
Signature
export declare const Context: any
Added in v1.0.0
TagUnify
Signature
export declare const TagUnify: any
Added in v1.0.0
TagUnifyIgnore
Signature
export declare const TagUnifyIgnore: any
Added in v1.0.0
ValidTagsById
Signature
export declare const ValidTagsById: any
Added in v1.0.0
symbol
TagTypeId
Signature
export declare const TagTypeId: any
Added in v1.0.0
TypeId
Signature
export declare const TypeId: any
Added in v1.0.0
unsafe
unsafeGet
Get a service from the context that corresponds to the given tag. This function is unsafe because if the tag is not present in the context, a runtime error will be thrown.
For a safer version see {@link getOption}.
Signature
export declare const unsafeGet: {
<S, I>(tag: Tag<I, S>): <Services>(self: Context<Services>) => S
<Services, S, I>(self: Context<Services>, tag: Tag<I, S>): S
}
Example
import * as Context from "effect/Context"
const Port = Context.Tag<{ PORT: number }>()
const Timeout = Context.Tag<{ TIMEOUT: number }>()
const Services = Context.make(Port, { PORT: 8080 })
assert.deepStrictEqual(Context.unsafeGet(Services, Port), { PORT: 8080 })
assert.throws(() => Context.unsafeGet(Services, Timeout))
Added in v1.0.0
utils
TagClass
Signature
export declare const TagClass: any
Added in v1.0.0
add
Adds a service to a given Context
.
Signature
export declare const add: {
<T extends Tag<any, any>>(
tag: T,
service: Tag.Service<T>
): <Services>(self: Context<Services>) => Context<Services | Tag.Identifier<T>>
<Services, T extends Tag<any, any>>(
self: Context<Services>,
tag: T,
service: Tag.Service<T>
): Context<Services | Tag.Identifier<T>>
}
Example
import * as Context from "effect/Context"
import { pipe } from "effect/Function"
const Port = Context.Tag<{ PORT: number }>()
const Timeout = Context.Tag<{ TIMEOUT: number }>()
const someContext = Context.make(Port, { PORT: 8080 })
const Services = pipe(someContext, Context.add(Timeout, { TIMEOUT: 5000 }))
assert.deepStrictEqual(Context.get(Services, Port), { PORT: 8080 })
assert.deepStrictEqual(Context.get(Services, Timeout), { TIMEOUT: 5000 })
Added in v1.0.0
getMany
Get multiple services from the context that corresponds to the given tags.
Signature
export declare const getMany: {
<Services, T extends ReadonlyArray<ValidTagsById<Services>>>(
...tags: T
): (self: Context<Services>) => { readonly [K in keyof T]: Tag.Service<T[K]> }
<Services, T extends ReadonlyArray<ValidTagsById<Services>>>(
self: Context<Services>,
...tags: T
): { readonly [K in keyof T]: Tag.Service<T[K]> }
}
Added in v1.0.0
merge
Merges two Context
s, returning a new Context
containing the services of both.
Signature
export declare const merge: {
<R1>(that: Context<R1>): <Services>(self: Context<Services>) => Context<R1 | Services>
<Services, R1>(self: Context<Services>, that: Context<R1>): Context<Services | R1>
}
Example
import * as Context from "effect/Context"
const Port = Context.Tag<{ PORT: number }>()
const Timeout = Context.Tag<{ TIMEOUT: number }>()
const firstContext = Context.make(Port, { PORT: 8080 })
const secondContext = Context.make(Timeout, { TIMEOUT: 5000 })
const Services = Context.merge(firstContext, secondContext)
assert.deepStrictEqual(Context.get(Services, Port), { PORT: 8080 })
assert.deepStrictEqual(Context.get(Services, Timeout), { TIMEOUT: 5000 })
Added in v1.0.0
omit
Omits specified services from a given Context
.
Signature
export declare const omit: <Services, S extends Array<ValidTagsById<Services>>>(
...tags: S
) => (self: Context<Services>) => Context<Exclude<Services, { [k in keyof S]: Tag.Identifier<S[k]> }[keyof S]>>
Added in v1.0.0
pick
Returns a new Context
that contains only the specified services.
Signature
export declare const pick: <Services, S extends Array<ValidTagsById<Services>>>(
...tags: S
) => (self: Context<Services>) => Context<{ [k in keyof S]: Tag.Identifier<S[k]> }[number]>
Example
import * as Context from "effect/Context"
import { pipe } from "effect/Function"
import * as O from "effect/Option"
const Port = Context.Tag<{ PORT: number }>()
const Timeout = Context.Tag<{ TIMEOUT: number }>()
const someContext = pipe(Context.make(Port, { PORT: 8080 }), Context.add(Timeout, { TIMEOUT: 5000 }))
const Services = pipe(someContext, Context.pick(Port))
assert.deepStrictEqual(Context.getOption(Services, Port), O.some({ PORT: 8080 }))
assert.deepStrictEqual(Context.getOption(Services, Timeout), O.none())
Added in v1.0.0