Client overview
Added in v1.0.0
Table of contents
constructor
make
Signature
export declare const make: ({
acquirer,
beginTransaction,
commit,
rollback,
rollbackSavepoint,
savepoint,
transactionAcquirer
}: Client.MakeOptions) => Client
Added in v1.0.0
model
Client (interface)
Signature
export interface Client extends Constructor {
/**
* Copy of the client for safeql etc.
*/
readonly safe: this
/**
* Create unsafe SQL query
*/
readonly unsafe: <A extends object>(sql: string, params?: ReadonlyArray<Primitive> | undefined) => Statement<A>
/**
* Create an `AND` chain for a where clause
*/
readonly and: (clauses: ReadonlyArray<string | Fragment>) => Fragment
/**
* Create an `OR` chain for a where clause
*/
readonly or: (clauses: ReadonlyArray<string | Fragment>) => Fragment
/**
* Create comma seperated values, with an optional prefix
*
* Useful for `ORDER BY` and `GROUP BY` clauses
*/
readonly csv: {
(values: ReadonlyArray<string | Fragment>): Fragment
(prefix: string, values: ReadonlyArray<string | Fragment>): Fragment
}
readonly join: (
literal: string,
addParens?: boolean,
fallback?: string
) => (clauses: ReadonlyArray<string | Fragment>) => Fragment
readonly reserve: Effect.Effect<Connection, SqlError, Scope>
/**
* With the given effect, ensure all sql queries are run in a transaction.
*
* Note: This will not include query run inside request resolvers.
*/
withTransaction<R, E, A>(self: Effect.Effect<A, E, R>): Effect.Effect<A, E | SqlError, R>
/**
* Run a sql query with a request schema and a result schema.
*
* The request schema is used to validate the input of the query.
* The result schema is used to validate the output of the query.
*/
schema<IR, II, IA, AR, AI, A, R, E>(
requestSchema: Schema.Schema<IA, II, IR>,
resultSchema: Schema.Schema<A, AI, AR>,
run: (_: II) => Effect.Effect<ReadonlyArray<unknown>, E, R>
): (_: IA) => Effect.Effect<ReadonlyArray<A>, E | SchemaError, R | IR | AR>
/**
* Run a sql query with a request schema that returns void.
*/
schemaVoid<IR, II, IA, R, E>(
requestSchema: Schema.Schema<IA, II, IR>,
run: (_: II) => Effect.Effect<unknown, E, R>
): (_: IA) => Effect.Effect<void, E | SchemaError, R | IR>
/**
* Run a sql query with a request schema and a result schema.
*
* The request schema is used to validate the input of the query.
* The result schema is used to validate the output of the query.
*
* Takes the first result of the query.
*/
schemaSingle<IR, II, IA, AR, AI, A, R, E>(
requestSchema: Schema.Schema<IA, II, IR>,
resultSchema: Schema.Schema<A, AI, AR>,
run: (_: II) => Effect.Effect<ReadonlyArray<unknown>, E, R>
): (_: IA) => Effect.Effect<A, E | SchemaError, R | IR | AR>
/**
* Run a sql query with a request schema and a result schema.
*
* The request schema is used to validate the input of the query.
* The result schema is used to validate the output of the query.
*
* Returns an Option of the first result of the query.
*/
schemaSingleOption<IR, II, IA, AR, AI, A, R, E>(
requestSchema: Schema.Schema<IA, II, IR>,
resultSchema: Schema.Schema<A, AI, AR>,
run: (_: II) => Effect.Effect<ReadonlyArray<unknown>, E, R>
): (_: IA) => Effect.Effect<Option<A>, E | SchemaError, R | IR | AR>
/**
* Create a resolver for a sql query with a request schema and a result schema.
*
* Takes a tag parameter to identify the requests.
*
* The request schema is used to validate the input of the query.
* The result schema is used to validate the output of the query.
*
* Returns a resolver, request and a execute function.
*/
resolver<T extends string, R, IR, II, IA, AR, AI, A, E>(
tag: T,
options: {
readonly request: Schema.Schema<IA, II, IR>
readonly result: Schema.Schema<A, AI, AR>
readonly run: (requests: ReadonlyArray<II>) => Effect.Effect<ReadonlyArray<unknown>, E, R>
}
): Resolver<T, R | IR | AR, IA, A, E | ResultLengthMismatch>
/**
* Create a resolver for a sql query with a request schema and a result schema.
* Returns an Option of the first result of the query.
*
* Takes a tag parameter to identify the requests.
*
* The request schema is used to validate the input of the query.
* The result schema is used to validate the output of the query.
*
* Returns a resolver, request and a execute function.
*/
resolverSingleOption<T extends string, R, IR, II, IA, AR, AI, A, E>(
tag: T,
options: {
readonly request: Schema.Schema<IA, II, IR>
readonly result: Schema.Schema<A, AI, AR>
readonly run: (request: II) => Effect.Effect<ReadonlyArray<unknown>, E, R>
}
): Resolver<T, R | IR | AR, IA, Option<A>, E>
/**
* Create a resolver for a sql query with a request schema and a result schema.
* Returns the first result of the query.
*
* Takes a tag parameter to identify the requests.
*
* The request schema is used to validate the input of the query.
* The result schema is used to validate the output of the query.
*
* Returns a resolver, request and a execute function.
*/
resolverSingle<T extends string, R, IR, II, IA, AR, AI, A, E>(
tag: T,
options: {
readonly request: Schema.Schema<IA, II, IR>
readonly result: Schema.Schema<A, AI, AR>
readonly run: (request: II) => Effect.Effect<ReadonlyArray<unknown>, E, R>
}
): Resolver<T, R | IR | AR, IA, A, E>
/**
* Create a resolver for a sql query with a request schema.
* Returns no result.
*
* Takes a tag parameter to identify the requests.
*
* The request schema is used to validate the input of the query.
*
* Returns a resolver, request and a execute function.
*/
resolverVoid<T extends string, R, IR, II, IA, E>(
tag: T,
options: {
readonly request: Schema.Schema<IA, II, IR>
readonly run: (requests: ReadonlyArray<II>) => Effect.Effect<unknown, E, R>
}
): Resolver<T, R | IR, IA, void, E>
/**
* Create a resolver for a sql query with a request schema and a result schema.
* Returns an array of the potentially matching results.
*
* Takes a tag parameter to identify the requests.
* Takes a function to extract the id from the request and result.
*
* Returns a resolver, request and an execute function.
*/
resolverId<T extends string, R, IR, II, IA, AR, AI, A, E>(
tag: T,
options: {
readonly id: Schema.Schema<IA, II, IR>
readonly result: Schema.Schema<A, AI, AR>
readonly resultId: (_: AI) => IA
readonly run: (requests: ReadonlyArray<II>) => Effect.Effect<ReadonlyArray<unknown>, E, R>
}
): Resolver<T, R | IR | AR, IA, Option<A>, E>
/**
* Create a resolver for a sql query with a request schema and a result schema.
* Returns an array of the potentially matching results.
*
* Takes a tag parameter to identify the requests.
* Takes a function to extract the id from the request and result.
*
* Returns a resolver, request and an execute function.
*/
resolverIdMany<T extends string, R, IR, II, IA, AR, AI, A, E, K>(
tag: T,
options: {
readonly request: Schema.Schema<IA, II, IR>
readonly requestId: (_: IA) => K
readonly result: Schema.Schema<A, AI, AR>
readonly resultId: (_: AI) => K
readonly run: (requests: ReadonlyArray<II>) => Effect.Effect<ReadonlyArray<unknown>, E, R>
}
): Resolver<T, R | IR | AR, IA, ReadonlyArray<A>, E>
}
Added in v1.0.0
models
Request (interface)
Signature
export interface Request<T extends string, I, E, A> extends request.Request<A, SchemaError | E> {
readonly _tag: T
readonly i0: I
}
Added in v1.0.0
Resolver (type alias)
Signature
export type Resolver<T extends string, R, I, A, E> = [never] extends [R]
? ResolverWithExecute<T, I, A, E>
: ResolverBase<T, R, I, A, E>
Added in v1.0.0
ResolverBase (interface)
Signature
export interface ResolverBase<T extends string, R, I, A, E> {
readonly Request: request.Request.Constructor<Request<T, I, E, A>, "_tag">
readonly Resolver: RequestResolver.RequestResolver<Request<T, I, E, A>, R>
readonly makeExecute: (
Resolver: RequestResolver.RequestResolver<any, never>,
context?: Context<any>
) => (i0: I) => Effect.Effect<A, SchemaError | E>
readonly populateCache: (id: I, _: A) => Effect.Effect<void>
readonly invalidateCache: (id: I) => Effect.Effect<void>
}
Added in v1.0.0
ResolverWithExecute (interface)
Signature
export interface ResolverWithExecute<T extends string, I, A, E> extends ResolverBase<T, never, I, A, E> {
readonly execute: (_: I) => Effect.Effect<A, SchemaError | E>
}
Added in v1.0.0
utils
Client (namespace)
Added in v1.0.0
MakeOptions (interface)
Signature
export interface MakeOptions {
readonly acquirer: Connection.Acquirer
readonly compiler: Compiler
readonly transactionAcquirer: Connection.Acquirer
readonly beginTransaction?: string
readonly rollback?: string
readonly commit?: string
readonly savepoint?: (name: string) => string
readonly rollbackSavepoint?: (name: string) => string
}
Added in v1.0.0
TransactionConnection
Signature
export declare const TransactionConnection: Tag<
readonly [conn: Connection, counter: number],
readonly [conn: Connection, counter: number]
>
Added in v1.0.0
defaultTransforms
Signature
export declare const defaultTransforms: (
transformer: (str: string) => string,
nested?: boolean
) => {
readonly value: (value: any) => any
readonly object: (obj: Record<string, any>) => any
readonly array: <A extends object>(rows: readonly A[]) => readonly A[]
}
Added in v1.0.0