From 62c2533c8f5ebb4c85297aae3732f54e93e5c35d Mon Sep 17 00:00:00 2001 From: Tony Won Date: Tue, 24 Sep 2024 11:05:49 +0900 Subject: [PATCH 1/5] feat(config): `ActivityLoaderArgs.config` --- config/src/ActivityLoaderArgs.ts | 5 +++++ integrations/react/src/future/loader/loaderPlugin.tsx | 3 +++ 2 files changed, 8 insertions(+) diff --git a/config/src/ActivityLoaderArgs.ts b/config/src/ActivityLoaderArgs.ts index ff253503..3bbb1d22 100644 --- a/config/src/ActivityLoaderArgs.ts +++ b/config/src/ActivityLoaderArgs.ts @@ -1,3 +1,5 @@ +import type { ActivityDefinition } from "./ActivityDefinition"; +import type { Config } from "./Config"; import type { InferActivityParams } from "./InferActivityParams"; import type { RegisteredActivityParamTypes } from "./RegisteredActivityParamTypes"; @@ -5,4 +7,7 @@ export type ActivityLoaderArgs< ActivityName extends Extract, > = { params: InferActivityParams; + config: Config< + ActivityDefinition> + >; }; diff --git a/integrations/react/src/future/loader/loaderPlugin.tsx b/integrations/react/src/future/loader/loaderPlugin.tsx index e5e19140..b9792048 100644 --- a/integrations/react/src/future/loader/loaderPlugin.tsx +++ b/integrations/react/src/future/loader/loaderPlugin.tsx @@ -39,6 +39,7 @@ export function loaderPlugin( const loaderData = loader({ params: activityParams, + config, }); return { @@ -63,6 +64,7 @@ export function loaderPlugin( const loaderData = loader({ params: activityParams, + config, }); overrideActionParams({ @@ -86,6 +88,7 @@ export function loaderPlugin( const loaderData = loader({ params: activityParams, + config, }); overrideActionParams({ From 4f85c8a76a1a551aeb0604be2c037a886eb0c015 Mon Sep 17 00:00:00 2001 From: Tony Won Date: Tue, 24 Sep 2024 11:16:35 +0900 Subject: [PATCH 2/5] refactor: `AllActivityName` --- config/src/ActivityLoader.ts | 8 ++++---- config/src/ActivityLoaderArgs.ts | 12 ++++-------- config/src/AllActivityName.ts | 6 ++++++ config/src/InferActivityParams.ts | 10 +++++----- config/src/index.ts | 1 + extensions/link/src/future/Link.tsx | 13 +++---------- integrations/react/src/future/Actions.ts | 9 +++------ .../react/src/future/ActivityComponentType.tsx | 10 +++------- integrations/react/src/future/useActivityParams.ts | 7 ++----- integrations/react/src/future/useStepFlow.ts | 11 ++++------- 10 files changed, 35 insertions(+), 52 deletions(-) create mode 100644 config/src/AllActivityName.ts diff --git a/config/src/ActivityLoader.ts b/config/src/ActivityLoader.ts index 51910fec..3f138333 100644 --- a/config/src/ActivityLoader.ts +++ b/config/src/ActivityLoader.ts @@ -1,6 +1,6 @@ import type { ActivityLoaderArgs } from "./ActivityLoaderArgs"; -import type { RegisteredActivityParamTypes } from "./RegisteredActivityParamTypes"; +import type { AllActivityName } from "./AllActivityName"; -export type ActivityLoader< - ActivityName extends Extract, -> = (args: ActivityLoaderArgs) => any; +export type ActivityLoader = ( + args: ActivityLoaderArgs, +) => any; diff --git a/config/src/ActivityLoaderArgs.ts b/config/src/ActivityLoaderArgs.ts index 3bbb1d22..9b5ab917 100644 --- a/config/src/ActivityLoaderArgs.ts +++ b/config/src/ActivityLoaderArgs.ts @@ -1,13 +1,9 @@ import type { ActivityDefinition } from "./ActivityDefinition"; +import type { AllActivityName } from "./AllActivityName"; import type { Config } from "./Config"; import type { InferActivityParams } from "./InferActivityParams"; -import type { RegisteredActivityParamTypes } from "./RegisteredActivityParamTypes"; -export type ActivityLoaderArgs< - ActivityName extends Extract, -> = { +export interface ActivityLoaderArgs { params: InferActivityParams; - config: Config< - ActivityDefinition> - >; -}; + config: Config>; +} diff --git a/config/src/AllActivityName.ts b/config/src/AllActivityName.ts new file mode 100644 index 00000000..0bafc9a9 --- /dev/null +++ b/config/src/AllActivityName.ts @@ -0,0 +1,6 @@ +import type { RegisteredActivityParamTypes } from "./RegisteredActivityParamTypes"; + +export type AllActivityName = Extract< + keyof RegisteredActivityParamTypes, + string +>; diff --git a/config/src/InferActivityParams.ts b/config/src/InferActivityParams.ts index 4af31e05..fb3341a6 100644 --- a/config/src/InferActivityParams.ts +++ b/config/src/InferActivityParams.ts @@ -1,8 +1,8 @@ import type { ActivityBaseParams } from "./ActivityBaseParams"; +import type { AllActivityName } from "./AllActivityName"; import type { RegisteredActivityParamTypes } from "./RegisteredActivityParamTypes"; -export type InferActivityParams< - ActivityName extends Extract, -> = RegisteredActivityParamTypes[ActivityName] extends never - ? ActivityBaseParams - : RegisteredActivityParamTypes[ActivityName]; +export type InferActivityParams = + RegisteredActivityParamTypes[ActivityName] extends never + ? ActivityBaseParams + : RegisteredActivityParamTypes[ActivityName]; diff --git a/config/src/index.ts b/config/src/index.ts index 6e9932a1..2a3744ec 100644 --- a/config/src/index.ts +++ b/config/src/index.ts @@ -3,6 +3,7 @@ export * from "./ActivityBaseParams"; export * from "./ActivityDefinition"; export * from "./ActivityLoader"; export * from "./ActivityLoaderArgs"; +export * from "./AllActivityName"; export * from "./Config"; export * from "./InferActivityParams"; export * from "./Register"; diff --git a/extensions/link/src/future/Link.tsx b/extensions/link/src/future/Link.tsx index ad54b2e8..58eef053 100644 --- a/extensions/link/src/future/Link.tsx +++ b/extensions/link/src/future/Link.tsx @@ -1,9 +1,6 @@ /// -import type { - InferActivityParams, - RegisteredActivityParamTypes, -} from "@stackflow/config"; +import type { AllActivityName, InferActivityParams } from "@stackflow/config"; import { useConfig, useFlow } from "@stackflow/react/future"; import { useMemo } from "react"; import { omit } from "./omit"; @@ -16,9 +13,7 @@ type AnchorProps = Omit< "ref" | "href" >; -export interface LinkProps< - K extends Extract, -> extends AnchorProps { +export interface LinkProps extends AnchorProps { ref?: React.RefObject; activityName: K; activityParams: InferActivityParams; @@ -26,9 +21,7 @@ export interface LinkProps< replace?: boolean; } -export function Link< - K extends Extract, ->(props: LinkProps) { +export function Link(props: LinkProps) { const config = useConfig(); const { push, replace } = useFlow(); diff --git a/integrations/react/src/future/Actions.ts b/integrations/react/src/future/Actions.ts index 1105f4cb..43d0be31 100644 --- a/integrations/react/src/future/Actions.ts +++ b/integrations/react/src/future/Actions.ts @@ -1,10 +1,7 @@ -import type { - InferActivityParams, - RegisteredActivityParamTypes, -} from "@stackflow/config"; +import type { AllActivityName, InferActivityParams } from "@stackflow/config"; export type Actions = { - push>( + push( activityName: K, activityParams: InferActivityParams, options?: { @@ -13,7 +10,7 @@ export type Actions = { ): { activityId: string; }; - replace>( + replace( activityName: K, activityParams: InferActivityParams, options?: { diff --git a/integrations/react/src/future/ActivityComponentType.tsx b/integrations/react/src/future/ActivityComponentType.tsx index 2368cb06..0278bf49 100644 --- a/integrations/react/src/future/ActivityComponentType.tsx +++ b/integrations/react/src/future/ActivityComponentType.tsx @@ -1,9 +1,5 @@ -import type { - InferActivityParams, - RegisteredActivityParamTypes, -} from "@stackflow/config"; +import type { AllActivityName, InferActivityParams } from "@stackflow/config"; import type React from "react"; -export type ActivityComponentType< - ActivityName extends Extract, -> = React.ComponentType<{ params: InferActivityParams }>; +export type ActivityComponentType = + React.ComponentType<{ params: InferActivityParams }>; diff --git a/integrations/react/src/future/useActivityParams.ts b/integrations/react/src/future/useActivityParams.ts index 214f08dc..3403dc1f 100644 --- a/integrations/react/src/future/useActivityParams.ts +++ b/integrations/react/src/future/useActivityParams.ts @@ -1,13 +1,10 @@ import { useContext } from "react"; -import type { - InferActivityParams, - RegisteredActivityParamTypes, -} from "@stackflow/config"; +import type { AllActivityName, InferActivityParams } from "@stackflow/config"; import { ActivityContext } from "../__internal__/activity/ActivityProvider"; export function useActivityParams< - ActivityName extends Extract, + ActivityName extends AllActivityName, >(): InferActivityParams { return useContext(ActivityContext) .params as InferActivityParams; diff --git a/integrations/react/src/future/useStepFlow.ts b/integrations/react/src/future/useStepFlow.ts index b294c428..c6d97d09 100644 --- a/integrations/react/src/future/useStepFlow.ts +++ b/integrations/react/src/future/useStepFlow.ts @@ -1,14 +1,11 @@ -import type { - InferActivityParams, - RegisteredActivityParamTypes, -} from "@stackflow/config"; +import type { AllActivityName, InferActivityParams } from "@stackflow/config"; import { useCoreActions } from "../__internal__/core"; import type { StepActions } from "./StepActions"; import { makeStepActions } from "./makeStepActions"; -export function useStepFlow< - ActivityName extends Extract, ->(activityName: ActivityName): StepActions> { +export function useStepFlow( + activityName: ActivityName, +): StepActions> { const coreActions = useCoreActions(); return makeStepActions(() => coreActions); } From 5f28bcecc6370f90ae685b816a31e6e5a5915ba3 Mon Sep 17 00:00:00 2001 From: Tony Won Date: Tue, 24 Sep 2024 11:19:16 +0900 Subject: [PATCH 3/5] changeset --- .changeset/perfect-impalas-marry.md | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 .changeset/perfect-impalas-marry.md diff --git a/.changeset/perfect-impalas-marry.md b/.changeset/perfect-impalas-marry.md new file mode 100644 index 00000000..7baff5d7 --- /dev/null +++ b/.changeset/perfect-impalas-marry.md @@ -0,0 +1,7 @@ +--- +"@stackflow/react": minor +"@stackflow/link": minor +"@stackflow/config": minor +--- + +add `config` property in loader args From dabb4c7b236bfde0e1eec99a8b06d0714cd3a2f9 Mon Sep 17 00:00:00 2001 From: Tony Won Date: Wed, 25 Sep 2024 20:00:53 +0900 Subject: [PATCH 4/5] refactor: `AllActivityName` -> `RegisteredActivityName --- config/src/ActivityLoader.ts | 4 ++-- config/src/ActivityLoaderArgs.ts | 8 +++++--- config/src/InferActivityParams.ts | 4 ++-- .../{AllActivityName.ts => RegisteredActivityName.ts} | 2 +- config/src/index.ts | 2 +- extensions/link/src/future/Link.tsx | 10 +++++++--- integrations/react/src/future/Actions.ts | 9 ++++++--- .../react/src/future/ActivityComponentType.tsx | 7 +++++-- integrations/react/src/future/useActivityParams.ts | 8 +++++--- integrations/react/src/future/useStepFlow.ts | 7 +++++-- 10 files changed, 39 insertions(+), 22 deletions(-) rename config/src/{AllActivityName.ts => RegisteredActivityName.ts} (74%) diff --git a/config/src/ActivityLoader.ts b/config/src/ActivityLoader.ts index 3f138333..b7fbf9ef 100644 --- a/config/src/ActivityLoader.ts +++ b/config/src/ActivityLoader.ts @@ -1,6 +1,6 @@ import type { ActivityLoaderArgs } from "./ActivityLoaderArgs"; -import type { AllActivityName } from "./AllActivityName"; +import type { RegisteredActivityName } from "./RegisteredActivityName"; -export type ActivityLoader = ( +export type ActivityLoader = ( args: ActivityLoaderArgs, ) => any; diff --git a/config/src/ActivityLoaderArgs.ts b/config/src/ActivityLoaderArgs.ts index 9b5ab917..b19b5667 100644 --- a/config/src/ActivityLoaderArgs.ts +++ b/config/src/ActivityLoaderArgs.ts @@ -1,9 +1,11 @@ import type { ActivityDefinition } from "./ActivityDefinition"; -import type { AllActivityName } from "./AllActivityName"; import type { Config } from "./Config"; import type { InferActivityParams } from "./InferActivityParams"; +import type { RegisteredActivityName } from "./RegisteredActivityName"; -export interface ActivityLoaderArgs { +export interface ActivityLoaderArgs< + ActivityName extends RegisteredActivityName, +> { params: InferActivityParams; - config: Config>; + config: Config>; } diff --git a/config/src/InferActivityParams.ts b/config/src/InferActivityParams.ts index fb3341a6..2b049bee 100644 --- a/config/src/InferActivityParams.ts +++ b/config/src/InferActivityParams.ts @@ -1,8 +1,8 @@ import type { ActivityBaseParams } from "./ActivityBaseParams"; -import type { AllActivityName } from "./AllActivityName"; +import type { RegisteredActivityName } from "./RegisteredActivityName"; import type { RegisteredActivityParamTypes } from "./RegisteredActivityParamTypes"; -export type InferActivityParams = +export type InferActivityParams = RegisteredActivityParamTypes[ActivityName] extends never ? ActivityBaseParams : RegisteredActivityParamTypes[ActivityName]; diff --git a/config/src/AllActivityName.ts b/config/src/RegisteredActivityName.ts similarity index 74% rename from config/src/AllActivityName.ts rename to config/src/RegisteredActivityName.ts index 0bafc9a9..88c23d44 100644 --- a/config/src/AllActivityName.ts +++ b/config/src/RegisteredActivityName.ts @@ -1,6 +1,6 @@ import type { RegisteredActivityParamTypes } from "./RegisteredActivityParamTypes"; -export type AllActivityName = Extract< +export type RegisteredActivityName = Extract< keyof RegisteredActivityParamTypes, string >; diff --git a/config/src/index.ts b/config/src/index.ts index 2a3744ec..ab0a82d6 100644 --- a/config/src/index.ts +++ b/config/src/index.ts @@ -3,8 +3,8 @@ export * from "./ActivityBaseParams"; export * from "./ActivityDefinition"; export * from "./ActivityLoader"; export * from "./ActivityLoaderArgs"; -export * from "./AllActivityName"; export * from "./Config"; export * from "./InferActivityParams"; export * from "./Register"; +export * from "./RegisteredActivityName"; export * from "./RegisteredActivityParamTypes"; diff --git a/extensions/link/src/future/Link.tsx b/extensions/link/src/future/Link.tsx index 58eef053..7b3d82d3 100644 --- a/extensions/link/src/future/Link.tsx +++ b/extensions/link/src/future/Link.tsx @@ -1,6 +1,9 @@ /// -import type { AllActivityName, InferActivityParams } from "@stackflow/config"; +import type { + InferActivityParams, + RegisteredActivityName, +} from "@stackflow/config"; import { useConfig, useFlow } from "@stackflow/react/future"; import { useMemo } from "react"; import { omit } from "./omit"; @@ -13,7 +16,8 @@ type AnchorProps = Omit< "ref" | "href" >; -export interface LinkProps extends AnchorProps { +export interface LinkProps + extends AnchorProps { ref?: React.RefObject; activityName: K; activityParams: InferActivityParams; @@ -21,7 +25,7 @@ export interface LinkProps extends AnchorProps { replace?: boolean; } -export function Link(props: LinkProps) { +export function Link(props: LinkProps) { const config = useConfig(); const { push, replace } = useFlow(); diff --git a/integrations/react/src/future/Actions.ts b/integrations/react/src/future/Actions.ts index 43d0be31..fba0d317 100644 --- a/integrations/react/src/future/Actions.ts +++ b/integrations/react/src/future/Actions.ts @@ -1,7 +1,10 @@ -import type { AllActivityName, InferActivityParams } from "@stackflow/config"; +import type { + InferActivityParams, + RegisteredActivityName, +} from "@stackflow/config"; export type Actions = { - push( + push( activityName: K, activityParams: InferActivityParams, options?: { @@ -10,7 +13,7 @@ export type Actions = { ): { activityId: string; }; - replace( + replace( activityName: K, activityParams: InferActivityParams, options?: { diff --git a/integrations/react/src/future/ActivityComponentType.tsx b/integrations/react/src/future/ActivityComponentType.tsx index 0278bf49..05fcf125 100644 --- a/integrations/react/src/future/ActivityComponentType.tsx +++ b/integrations/react/src/future/ActivityComponentType.tsx @@ -1,5 +1,8 @@ -import type { AllActivityName, InferActivityParams } from "@stackflow/config"; +import type { + InferActivityParams, + RegisteredActivityName, +} from "@stackflow/config"; import type React from "react"; -export type ActivityComponentType = +export type ActivityComponentType = React.ComponentType<{ params: InferActivityParams }>; diff --git a/integrations/react/src/future/useActivityParams.ts b/integrations/react/src/future/useActivityParams.ts index 3403dc1f..9d2a93d7 100644 --- a/integrations/react/src/future/useActivityParams.ts +++ b/integrations/react/src/future/useActivityParams.ts @@ -1,10 +1,12 @@ +import type { + InferActivityParams, + RegisteredActivityName, +} from "@stackflow/config"; import { useContext } from "react"; - -import type { AllActivityName, InferActivityParams } from "@stackflow/config"; import { ActivityContext } from "../__internal__/activity/ActivityProvider"; export function useActivityParams< - ActivityName extends AllActivityName, + ActivityName extends RegisteredActivityName, >(): InferActivityParams { return useContext(ActivityContext) .params as InferActivityParams; diff --git a/integrations/react/src/future/useStepFlow.ts b/integrations/react/src/future/useStepFlow.ts index c6d97d09..22372627 100644 --- a/integrations/react/src/future/useStepFlow.ts +++ b/integrations/react/src/future/useStepFlow.ts @@ -1,9 +1,12 @@ -import type { AllActivityName, InferActivityParams } from "@stackflow/config"; +import type { + InferActivityParams, + RegisteredActivityName, +} from "@stackflow/config"; import { useCoreActions } from "../__internal__/core"; import type { StepActions } from "./StepActions"; import { makeStepActions } from "./makeStepActions"; -export function useStepFlow( +export function useStepFlow( activityName: ActivityName, ): StepActions> { const coreActions = useCoreActions(); From ae4bc78895f806d1abb2f514f36bf254f3ab79e0 Mon Sep 17 00:00:00 2001 From: Tony Won Date: Wed, 25 Sep 2024 20:02:27 +0900 Subject: [PATCH 5/5] chore: ignore format `__generated__` directory --- biome.json | 1 + 1 file changed, 1 insertion(+) diff --git a/biome.json b/biome.json index b2c8094d..daa15db1 100644 --- a/biome.json +++ b/biome.json @@ -53,6 +53,7 @@ ".vscode/**", ".yarn/**", ".next/**", + "__generated__/**", ".ultra.cache.json", "package.json" ]