From e7bf8119cb065ab6a14ad505f7175b4645ff62fd Mon Sep 17 00:00:00 2001 From: William Pelrine Date: Fri, 28 Jul 2023 16:09:00 -0400 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9B=20Remove=20BrandedDataFunction=20i?= =?UTF-8?q?n=20favor=20of=20intermediate=20StrongAction=20&=20=E2=80=A6=20?= =?UTF-8?q?(#10)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 🐛 Remove BrandedDataFunction in favor of intermediate StrongAction & StrongLoader types * Played again by F2 --- src/buildStrongRoute.tsx | 7 +++++-- src/index.ts | 4 +++- src/strongAction.ts | 6 +++--- src/strongLoader.ts | 6 +++--- src/types.ts | 34 +++++++++++++++++++--------------- 5 files changed, 33 insertions(+), 24 deletions(-) diff --git a/src/buildStrongRoute.tsx b/src/buildStrongRoute.tsx index 52b1292..c9929cb 100644 --- a/src/buildStrongRoute.tsx +++ b/src/buildStrongRoute.tsx @@ -10,9 +10,10 @@ import { import { useStrongLoaderData, useStrongRouteError } from "./hooks"; import { strongResponse } from "./strongResponse"; import { - BrandedDataFunction, BuildStrongRemixRouteExportsOpts, PickDataAndStatus, + StrongAction, + StrongLoader, StrongRedirect, StrongRemixRouteExports, StrongResponse, @@ -49,7 +50,9 @@ const handleDataFunctionForRemix = async < Failure extends StrongResponse = never, Redirect extends StrongRedirect = never, >( - dataFunction: BrandedDataFunction, + dataFunction: + | StrongLoader + | StrongAction, args: DataFunctionArgs, ) => { const resultEffect = (await dataFunction(args)) as Effect.Effect< diff --git a/src/index.ts b/src/index.ts index 70b2429..130ee02 100644 --- a/src/index.ts +++ b/src/index.ts @@ -2,8 +2,10 @@ export { buildStrongRoute } from "./buildStrongRoute"; export { StrongResponse, StrongRedirect, - StrongLoader, + StrongLoaderWithCallbacks, + StrongActionWithCallbacks, StrongAction, + StrongLoader, StrongComponent, StrongErrorBoundary, } from "./types"; diff --git a/src/strongAction.ts b/src/strongAction.ts index 1dd116d..a500348 100644 --- a/src/strongAction.ts +++ b/src/strongAction.ts @@ -1,8 +1,8 @@ import { DataFunctionArgs } from "@remix-run/server-runtime"; import { NonRedirectStatus, RedirectStatus } from "./HttpStatusCode"; import { - BrandedDataFunction, StrongAction, + StrongActionWithCallbacks, StrongRedirect, StrongResponse, } from "./types"; @@ -14,8 +14,8 @@ export const strongAction = Success extends StrongResponse = never, Redirect extends StrongRedirect = never, >( - actionFn: StrongAction, - ): BrandedDataFunction => + actionFn: StrongActionWithCallbacks, + ): StrongAction => (args: DataFunctionArgs) => actionFn(args, { fail: Effect.fail, diff --git a/src/strongLoader.ts b/src/strongLoader.ts index 1542477..be7da42 100644 --- a/src/strongLoader.ts +++ b/src/strongLoader.ts @@ -1,8 +1,8 @@ import { DataFunctionArgs } from "@remix-run/server-runtime"; import { NonRedirectStatus, RedirectStatus } from "./HttpStatusCode"; import { - BrandedDataFunction, StrongLoader, + StrongLoaderWithCallbacks, StrongRedirect, StrongResponse, } from "./types"; @@ -14,8 +14,8 @@ export const strongLoader = Success extends StrongResponse, Redirect extends StrongRedirect = never, >( - loaderFn: StrongLoader, - ): BrandedDataFunction => + loaderFn: StrongLoaderWithCallbacks, + ): StrongLoader => (args: DataFunctionArgs) => loaderFn(args, { fail: Effect.fail, diff --git a/src/types.ts b/src/types.ts index b32a3a0..2a51ec6 100644 --- a/src/types.ts +++ b/src/types.ts @@ -17,18 +17,6 @@ import { RedirectStatus, } from "./HttpStatusCode"; -export type BrandedDataFunction< - Failure extends StrongResponse, - Success extends StrongResponse, - Redirect extends StrongRedirect, -> = LoaderFunction & { - __brand?: { - Failure: Failure; - Success: Success; - Redirect: Redirect; - }; -}; - export interface _StrongResponse extends ResponseInit { data: T; @@ -63,12 +51,29 @@ export type StrongCallbacks< ) => Effect.Effect; }; +export type StrongLoaderWithCallbacks< + Failure extends StrongResponse = never, + Success extends StrongResponse = never, + Redirect extends StrongRedirect = never, +> = ( + args: LoaderArgs, + callbacks: StrongCallbacks, +) => Promise>; + export type StrongLoader< Failure extends StrongResponse = never, Success extends StrongResponse = never, Redirect extends StrongRedirect = never, > = ( args: LoaderArgs, +) => Promise>; + +export type StrongActionWithCallbacks< + Failure extends StrongResponse = never, + Success extends StrongResponse = never, + Redirect extends StrongRedirect = never, +> = ( + args: ActionArgs, callbacks: StrongCallbacks, ) => Promise>; @@ -78,7 +83,6 @@ export type StrongAction< Redirect extends StrongRedirect = never, > = ( args: ActionArgs, - callbacks: StrongCallbacks, ) => Promise>; export type StrongComponent< @@ -98,8 +102,8 @@ export type BuildStrongRemixRouteExportsOpts< ActionRedirect extends StrongRedirect = never, > = { routeId: string; - loader?: BrandedDataFunction; - action?: BrandedDataFunction; + loader?: StrongLoader; + action?: StrongAction; Component?: StrongComponent; ErrorBoundary?: StrongErrorBoundary; };