Skip to content

Commit

Permalink
πŸ› Remove BrandedDataFunction in favor of intermediate StrongAction & … (
Browse files Browse the repository at this point in the history
#10)

* πŸ› Remove BrandedDataFunction in favor of intermediate StrongAction & StrongLoader types

* Played again by F2
  • Loading branch information
Fuiste authored Jul 28, 2023
1 parent 8013079 commit e7bf811
Show file tree
Hide file tree
Showing 5 changed files with 33 additions and 24 deletions.
7 changes: 5 additions & 2 deletions src/buildStrongRoute.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,10 @@ import {
import { useStrongLoaderData, useStrongRouteError } from "./hooks";
import { strongResponse } from "./strongResponse";
import {
BrandedDataFunction,
BuildStrongRemixRouteExportsOpts,
PickDataAndStatus,
StrongAction,
StrongLoader,
StrongRedirect,
StrongRemixRouteExports,
StrongResponse,
Expand Down Expand Up @@ -49,7 +50,9 @@ const handleDataFunctionForRemix = async <
Failure extends StrongResponse<unknown, NonRedirectStatus> = never,
Redirect extends StrongRedirect<string, RedirectStatus> = never,
>(
dataFunction: BrandedDataFunction<Failure, Success, Redirect>,
dataFunction:
| StrongLoader<Failure, Success, Redirect>
| StrongAction<Failure, Success, Redirect>,
args: DataFunctionArgs,
) => {
const resultEffect = (await dataFunction(args)) as Effect.Effect<
Expand Down
4 changes: 3 additions & 1 deletion src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,10 @@ export { buildStrongRoute } from "./buildStrongRoute";
export {
StrongResponse,
StrongRedirect,
StrongLoader,
StrongLoaderWithCallbacks,
StrongActionWithCallbacks,
StrongAction,
StrongLoader,
StrongComponent,
StrongErrorBoundary,
} from "./types";
Expand Down
6 changes: 3 additions & 3 deletions src/strongAction.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import { DataFunctionArgs } from "@remix-run/server-runtime";
import { NonRedirectStatus, RedirectStatus } from "./HttpStatusCode";
import {
BrandedDataFunction,
StrongAction,
StrongActionWithCallbacks,
StrongRedirect,
StrongResponse,
} from "./types";
Expand All @@ -14,8 +14,8 @@ export const strongAction =
Success extends StrongResponse<unknown, NonRedirectStatus> = never,
Redirect extends StrongRedirect<string, RedirectStatus> = never,
>(
actionFn: StrongAction<Failure, Success, Redirect>,
): BrandedDataFunction<Failure, Success, Redirect> =>
actionFn: StrongActionWithCallbacks<Failure, Success, Redirect>,
): StrongAction<Failure, Success, Redirect> =>
(args: DataFunctionArgs) =>
actionFn(args, {
fail: Effect.fail,
Expand Down
6 changes: 3 additions & 3 deletions src/strongLoader.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import { DataFunctionArgs } from "@remix-run/server-runtime";
import { NonRedirectStatus, RedirectStatus } from "./HttpStatusCode";
import {
BrandedDataFunction,
StrongLoader,
StrongLoaderWithCallbacks,
StrongRedirect,
StrongResponse,
} from "./types";
Expand All @@ -14,8 +14,8 @@ export const strongLoader =
Success extends StrongResponse<unknown, NonRedirectStatus>,
Redirect extends StrongRedirect<string, RedirectStatus> = never,
>(
loaderFn: StrongLoader<Failure, Success, Redirect>,
): BrandedDataFunction<Failure, Success, Redirect> =>
loaderFn: StrongLoaderWithCallbacks<Failure, Success, Redirect>,
): StrongLoader<Failure, Success, Redirect> =>
(args: DataFunctionArgs) =>
loaderFn(args, {
fail: Effect.fail,
Expand Down
34 changes: 19 additions & 15 deletions src/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,18 +17,6 @@ import {
RedirectStatus,
} from "./HttpStatusCode";

export type BrandedDataFunction<
Failure extends StrongResponse<unknown, NonRedirectStatus>,
Success extends StrongResponse<unknown, NonRedirectStatus>,
Redirect extends StrongRedirect<string, RedirectStatus>,
> = LoaderFunction & {
__brand?: {
Failure: Failure;
Success: Success;
Redirect: Redirect;
};
};

export interface _StrongResponse<T, S extends HttpStatusCode>
extends ResponseInit {
data: T;
Expand Down Expand Up @@ -63,12 +51,29 @@ export type StrongCallbacks<
) => Effect.Effect<never, Failure, Success | Redirect>;
};

export type StrongLoaderWithCallbacks<
Failure extends StrongResponse<unknown, NonRedirectStatus> = never,
Success extends StrongResponse<unknown, NonRedirectStatus> = never,
Redirect extends StrongRedirect<string, RedirectStatus> = never,
> = (
args: LoaderArgs,
callbacks: StrongCallbacks<Failure, Success, Redirect>,
) => Promise<Effect.Effect<never, Failure, Success | Redirect>>;

export type StrongLoader<
Failure extends StrongResponse<unknown, NonRedirectStatus> = never,
Success extends StrongResponse<unknown, NonRedirectStatus> = never,
Redirect extends StrongRedirect<string, RedirectStatus> = never,
> = (
args: LoaderArgs,
) => Promise<Effect.Effect<never, Failure, Success | Redirect>>;

export type StrongActionWithCallbacks<
Failure extends StrongResponse<unknown, NonRedirectStatus> = never,
Success extends StrongResponse<unknown, NonRedirectStatus> = never,
Redirect extends StrongRedirect<string, RedirectStatus> = never,
> = (
args: ActionArgs,
callbacks: StrongCallbacks<Failure, Success, Redirect>,
) => Promise<Effect.Effect<never, Failure, Success | Redirect>>;

Expand All @@ -78,7 +83,6 @@ export type StrongAction<
Redirect extends StrongRedirect<string, RedirectStatus> = never,
> = (
args: ActionArgs,
callbacks: StrongCallbacks<Failure, Success, Redirect>,
) => Promise<Effect.Effect<never, Failure, Success | Redirect>>;

export type StrongComponent<
Expand All @@ -98,8 +102,8 @@ export type BuildStrongRemixRouteExportsOpts<
ActionRedirect extends StrongRedirect<string, RedirectStatus> = never,
> = {
routeId: string;
loader?: BrandedDataFunction<LoaderFailure, LoaderSuccess, LoaderRedirect>;
action?: BrandedDataFunction<ActionFailure, ActionSuccess, ActionRedirect>;
loader?: StrongLoader<LoaderFailure, LoaderSuccess, LoaderRedirect>;
action?: StrongAction<ActionFailure, ActionSuccess, ActionRedirect>;
Component?: StrongComponent<LoaderSuccess>;
ErrorBoundary?: StrongErrorBoundary<LoaderFailure | ActionFailure>;
};
Expand Down

0 comments on commit e7bf811

Please sign in to comment.