Skip to content

Commit

Permalink
change Request type parameters order from Request<E, A> to `Reque… (
Browse files Browse the repository at this point in the history
  • Loading branch information
gcanti authored and tim-smart committed Feb 9, 2024
1 parent 78f47ab commit 52e5d20
Show file tree
Hide file tree
Showing 12 changed files with 40 additions and 30 deletions.
5 changes: 5 additions & 0 deletions .changeset/tender-bikes-reply.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"effect": minor
---

change `Request` type parameters order from `Request<E, A>` to `Request<A, E = never>`
2 changes: 1 addition & 1 deletion packages/effect/mod.sh
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
#!/bin/bash
dirs=(../effect/test)
dirs=(../effect/src)
for dir in ${dirs[@]};
do
echo Refactoring $dir
Expand Down
7 changes: 6 additions & 1 deletion packages/effect/mod.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,8 @@ const enabled = {
swapTakeParams: false,
swapFiberParams: false,
swapRuntimeFiberParams: false,
swapFiberSetParams: true,
swapFiberSetParams: false,
swapRequestParams: true,
cleanupSTM: false,
cleanupEffect: false,
cleanupStream: false,
Expand Down Expand Up @@ -97,6 +98,7 @@ const swapTakeParams = swapParamsEA("Take")
const swapFiberParams = swapParamsEA("Fiber")
const swapRuntimeFiberParams = swapParamsEA("FiberRuntime")
const swapFiberSetParams = swapParamsEA("FiberSet")
const swapRequestParams = swapParamsEA("Request")

const swapSTMParams = swapParamsREA("STM")
const swapSTMGenParams = swapParamsREA("STMGen")
Expand Down Expand Up @@ -154,6 +156,9 @@ export default function transformer(file: cs.FileInfo, api: cs.API) {
if (enabled.swapFiberSetParams) {
swapFiberSetParams(ast)
}
if (enabled.swapRequestParams) {
swapRequestParams(ast)
}
if (enabled.cleanupEffect) {
cleanupEffect(ast)
}
Expand Down
2 changes: 1 addition & 1 deletion packages/effect/src/KeyedPool.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ export const KeyedPoolTypeId: unique symbol = internal.KeyedPoolTypeId
export type KeyedPoolTypeId = typeof KeyedPoolTypeId

/**
* A `KeyedPool<K, E, A>` is a pool of `Pool`s of items of type `A`. Each pool
* A `KeyedPool<K, A, E>` is a pool of `Pool`s of items of type `A`. Each pool
* in the `KeyedPool` is associated with a key of type `K`.
*
* @since 2.0.0
Expand Down
24 changes: 12 additions & 12 deletions packages/effect/src/Request.ts
Original file line number Diff line number Diff line change
Expand Up @@ -29,13 +29,13 @@ export const RequestTypeId: unique symbol = internal.RequestTypeId
export type RequestTypeId = typeof RequestTypeId

/**
* A `Request<E, A>` is a request from a data source for a value of type `A`
* A `Request<A, E>` is a request from a data source for a value of type `A`
* that may fail with an `E`.
*
* @since 2.0.0
* @category models
*/
export interface Request<out E, out A> extends Request.Variance<E, A> {}
export interface Request<out A, out E = never> extends Request.Variance<A, E> {}

/**
* @since 2.0.0
Expand All @@ -45,10 +45,10 @@ export declare namespace Request {
* @since 2.0.0
* @category models
*/
export interface Variance<out E, out A> {
export interface Variance<out A, out E> {
readonly [RequestTypeId]: {
readonly _E: Types.Covariant<E>
readonly _A: Types.Covariant<A>
readonly _E: Types.Covariant<E>
}
}

Expand All @@ -66,31 +66,31 @@ export declare namespace Request {
* @since 2.0.0
* @category type-level
*/
export type Error<T extends Request<any, any>> = [T] extends [Request<infer _E, infer _A>] ? _E : never
export type Error<T extends Request<any, any>> = [T] extends [Request<infer _A, infer _E>] ? _E : never

/**
* A utility type to extract the value type from a `Request`.
*
* @since 2.0.0
* @category type-level
*/
export type Success<T extends Request<any, any>> = [T] extends [Request<infer _E, infer _A>] ? _A : never
export type Success<T extends Request<any, any>> = [T] extends [Request<infer _A, infer _E>] ? _A : never

/**
* A utility type to extract the result type from a `Request`.
*
* @since 2.0.0
* @category type-level
*/
export type Result<T extends Request<any, any>> = T extends Request<infer E, infer A> ? Exit.Exit<A, E> : never
export type Result<T extends Request<any, any>> = T extends Request<infer A, infer E> ? Exit.Exit<A, E> : never

/**
* A utility type to extract the optional result type from a `Request`.
*
* @since 2.0.0
* @category type-level
*/
export type OptionalResult<T extends Request<any, any>> = T extends Request<infer E, infer A>
export type OptionalResult<T extends Request<any, any>> = T extends Request<infer A, infer E>
? Exit.Exit<Option.Option<A>, E>
: never
}
Expand Down Expand Up @@ -140,7 +140,7 @@ export const tagged: <R extends Request<any, any> & { _tag: string }>(
export const Class: new<Error, Success, A extends Record<string, any>>(
args: Types.Equals<Omit<A, keyof Request<unknown, unknown>>, {}> extends true ? void
: { readonly [P in keyof A as P extends keyof Request<unknown, unknown> ? never : P]: A[P] }
) => Request<Error, Success> & Readonly<A> = internal.Class as any
) => Request<Success, Error> & Readonly<A> = internal.Class as any

/**
* Provides a Tagged constructor for a Request Class.
Expand All @@ -163,7 +163,7 @@ export const TaggedClass: <Tag extends string>(
) => new<Error, Success, A extends Record<string, any>>(
args: Types.Equals<Omit<A, keyof Request<unknown, unknown>>, {}> extends true ? void
: { readonly [P in keyof A as P extends "_tag" | keyof Request<unknown, unknown> ? never : P]: A[P] }
) => Request<Error, Success> & Readonly<A> & { readonly _tag: Tag } = internal.TaggedClass as any
) => Request<Success, Error> & Readonly<A> & { readonly _tag: Tag } = internal.TaggedClass as any

/**
* Complete a `Request` with the specified result.
Expand Down Expand Up @@ -303,8 +303,8 @@ export type EntryTypeId = typeof EntryTypeId
export interface Entry<out R> extends Entry.Variance<R> {
readonly request: R
readonly result: Deferred<
[R] extends [Request<infer _E, infer _A>] ? _A : never,
[R] extends [Request<infer _E, infer _A>] ? _E : never
[R] extends [Request<infer _A, infer _E>] ? _A : never,
[R] extends [Request<infer _A, infer _E>] ? _E : never
>
readonly listeners: Listeners
readonly ownerId: FiberId
Expand Down
6 changes: 3 additions & 3 deletions packages/effect/src/RequestResolver.ts
Original file line number Diff line number Diff line change
Expand Up @@ -219,7 +219,7 @@ export const eitherWith: {
* @since 2.0.0
* @category constructors
*/
export const fromFunction: <A extends Request.Request<never, any>>(
export const fromFunction: <A extends Request.Request<any>>(
f: (request: A) => Request.Request.Success<A>
) => RequestResolver<A, never> = internal.fromFunction

Expand All @@ -231,7 +231,7 @@ export const fromFunction: <A extends Request.Request<never, any>>(
* @since 2.0.0
* @category constructors
*/
export const fromFunctionBatched: <A extends Request.Request<never, any>>(
export const fromFunctionBatched: <A extends Request.Request<any>>(
f: (chunk: Array<A>) => Iterable<Request.Request.Success<A>>
) => RequestResolver<A, never> = internal.fromFunctionBatched

Expand All @@ -257,7 +257,7 @@ export const fromEffect: <R, A extends Request.Request<any, any>>(
export const fromEffectTagged: <A extends Request.Request<any, any> & { readonly _tag: string }>() => <
Fns extends {
readonly [Tag in A["_tag"]]: [Extract<A, { readonly _tag: Tag }>] extends [infer Req]
? Req extends Request.Request<infer ReqE, infer ReqA>
? Req extends Request.Request<infer ReqA, infer ReqE>
? (requests: Array<Req>) => Effect.Effect<Iterable<ReqA>, ReqE, any>
: never
: never
Expand Down
6 changes: 3 additions & 3 deletions packages/effect/src/internal/dataSource.ts
Original file line number Diff line number Diff line change
Expand Up @@ -181,7 +181,7 @@ export const eitherWith = dual<
))

/** @internal */
export const fromFunction = <A extends Request.Request<never, any>>(
export const fromFunction = <A extends Request.Request<any>>(
f: (request: A) => Request.Request.Success<A>
): RequestResolver.RequestResolver<A> =>
makeBatched((requests: Array<A>) =>
Expand All @@ -192,7 +192,7 @@ export const fromFunction = <A extends Request.Request<never, any>>(
).identified("FromFunction", f)

/** @internal */
export const fromFunctionBatched = <A extends Request.Request<never, any>>(
export const fromFunctionBatched = <A extends Request.Request<any>>(
f: (chunk: Array<A>) => Iterable<Request.Request.Success<A>>
): RequestResolver.RequestResolver<A> =>
makeBatched((as: Array<A>) =>
Expand Down Expand Up @@ -224,7 +224,7 @@ export const fromEffectTagged = <
<
Fns extends {
readonly [Tag in A["_tag"]]: [Extract<A, { readonly _tag: Tag }>] extends [infer Req] ?
Req extends Request.Request<infer ReqE, infer ReqA> ?
Req extends Request.Request<infer ReqA, infer ReqE> ?
(requests: Array<Req>) => Effect.Effect<Iterable<ReqA>, ReqE, any>
: never
: never
Expand Down
4 changes: 2 additions & 2 deletions packages/effect/src/internal/request.ts
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ export const tagged = <R extends Request.Request<any, any> & { _tag: string }>(
export const Class: new<Error, Success, A extends Record<string, any>>(
args: Types.Equals<Omit<A, keyof Request.Request<unknown, unknown>>, {}> extends true ? void
: { readonly [P in keyof A as P extends keyof Request.Request<unknown, unknown> ? never : P]: A[P] }
) => Request.Request<Error, Success> & Readonly<A> = (function() {
) => Request.Request<Success, Error> & Readonly<A> = (function() {
function Class(this: any, args: any) {
if (args) {
Object.assign(this, args)
Expand All @@ -65,7 +65,7 @@ export const TaggedClass = <Tag extends string>(
): new<Error, Success, A extends Record<string, any>>(
args: Types.Equals<Omit<A, keyof Request.Request<unknown, unknown>>, {}> extends true ? void
: { readonly [P in keyof A as P extends "_tag" | keyof Request.Request<unknown, unknown> ? never : P]: A[P] }
) => Request.Request<Error, Success> & Readonly<A> & { readonly _tag: Tag } => {
) => Request.Request<Success, Error> & Readonly<A> & { readonly _tag: Tag } => {
return class TaggedClass extends Class<any, any, any> {
readonly _tag = tag
} as any
Expand Down
8 changes: 4 additions & 4 deletions packages/effect/test/Effect/query-nested.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -38,27 +38,27 @@ interface ChildExtra {
readonly extra: string
}

export interface GetAllParents extends Request.Request<never, ReadonlyArray<Parent>> {
export interface GetAllParents extends Request.Request<ReadonlyArray<Parent>> {
readonly _tag: "GetAllParents"
}

export const GetAllParents = Request.tagged<GetAllParents>("GetAllParents")

export interface GetParentChildren extends Request.Request<never, ReadonlyArray<Child>> {
export interface GetParentChildren extends Request.Request<ReadonlyArray<Child>> {
readonly _tag: "GetParentChildren"
readonly id: number
}

export const GetParentChildren = Request.tagged<GetParentChildren>("GetParentChildren")

export interface GetChildInfo extends Request.Request<never, ChildInfo> {
export interface GetChildInfo extends Request.Request<ChildInfo> {
readonly _tag: "GetChildInfo"
readonly id: number
}

export const GetChildInfo = Request.tagged<GetChildInfo>("GetChildInfo")

export interface GetChildExtra extends Request.Request<never, ChildExtra> {
export interface GetChildExtra extends Request.Request<ChildExtra> {
readonly _tag: "GetChildExtra"
readonly id: number
}
Expand Down
2 changes: 1 addition & 1 deletion packages/effect/test/Effect/query.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ export const userNames: ReadonlyMap<number, string> = new Map(

export type UserRequest = GetAllIds | GetNameById

export interface GetAllIds extends Request.Request<never, ReadonlyArray<number>> {
export interface GetAllIds extends Request.Request<ReadonlyArray<number>> {
readonly _tag: "GetAllIds"
}

Expand Down
2 changes: 1 addition & 1 deletion packages/rpc/src/Resolver.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ export interface RpcResolver<R> extends Resolver.RequestResolver<RpcRequest, R>
* @category models
* @since 1.0.0
*/
export interface RpcRequest extends Request.Request<RpcError, unknown> {
export interface RpcRequest extends Request.Request<unknown, RpcError> {
readonly payload: RpcRequest.Payload
readonly hash: number
readonly schema: RpcSchema.Any
Expand Down
2 changes: 1 addition & 1 deletion packages/schema/src/Schema.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4697,7 +4697,7 @@ export const TaggedError = <Self>() =>
* @since 1.0.0
*/
export interface TaggedRequest<Tag extends string, R, IS, S, RR, IE, E, IA, A>
extends Request.Request<E, A>, Serializable.SerializableWithResult<R, IS, S, RR, IE, E, IA, A>
extends Request.Request<A, E>, Serializable.SerializableWithResult<R, IS, S, RR, IE, E, IA, A>
{
readonly _tag: Tag
}
Expand Down

0 comments on commit 52e5d20

Please sign in to comment.