@nice-code/action 0.1.3 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -410
- package/build/index.js +5176 -1970
- package/build/react-query/index.js +7 -7
- package/build/types/ActionDefinition/Action/Action.combined.types.d.ts +27 -0
- package/build/types/ActionDefinition/Action/ActionBase.d.ts +14 -0
- package/build/types/ActionDefinition/Action/ActionBase.types.d.ts +24 -0
- package/build/types/ActionDefinition/Action/Context/ActionContext.d.ts +26 -0
- package/build/types/ActionDefinition/Action/Context/ActionContext.types.d.ts +35 -0
- package/build/types/ActionDefinition/Action/Core/ActionCore.d.ts +20 -0
- package/build/types/ActionDefinition/Action/Core/ActionCore.types.d.ts +10 -0
- package/build/types/ActionDefinition/Action/Payload/ActionPayload.d.ts +14 -0
- package/build/types/ActionDefinition/Action/Payload/ActionPayload.types.d.ts +106 -0
- package/build/types/ActionDefinition/Action/Payload/ActionPayload_Progress.d.ts +15 -0
- package/build/types/ActionDefinition/Action/Payload/ActionPayload_Request.d.ts +24 -0
- package/build/types/ActionDefinition/Action/Payload/ActionPayload_Result.d.ts +18 -0
- package/build/types/ActionDefinition/Action/RunningAction.d.ts +33 -0
- package/build/types/ActionDefinition/Action/RunningAction.types.d.ts +65 -0
- package/build/types/ActionDefinition/Domain/ActionDomain.d.ts +30 -0
- package/build/types/ActionDefinition/Domain/ActionDomain.types.d.ts +37 -0
- package/build/types/ActionDefinition/Domain/ActionDomainBase.d.ts +14 -0
- package/build/types/ActionDefinition/Domain/ActionRootDomain.d.ts +23 -0
- package/build/types/ActionDefinition/Domain/helpers/createRootActionDomain.d.ts +5 -0
- package/build/types/{ActionSchema/NiceActionSchema.d.ts → ActionDefinition/Schema/ActionSchema.d.ts} +10 -29
- package/build/types/ActionDefinition/Schema/ActionSchema.types.d.ts +32 -0
- package/build/types/ActionRuntime/ActionDomainManager.d.ts +13 -0
- package/build/types/ActionRuntime/ActionRuntime.d.ts +48 -0
- package/build/types/ActionRuntime/ActionRuntime.types.d.ts +22 -0
- package/build/types/ActionRuntime/ActionRuntimeManager.d.ts +19 -0
- package/build/types/ActionRuntime/Client/ActionClientSpecifier.d.ts +47 -0
- package/build/types/ActionRuntime/Client/utils/clientSpecifierToStringIds.d.ts +2 -0
- package/build/types/ActionRuntime/Handler/ActionHandler.d.ts +16 -0
- package/build/types/ActionRuntime/Handler/ActionHandler.types.d.ts +68 -0
- package/build/types/ActionRuntime/Handler/ExternalClient/ActionExternalClientHandler.d.ts +42 -0
- package/build/types/ActionRuntime/Handler/ExternalClient/ActionExternalClientHandler.types.d.ts +7 -0
- package/build/types/ActionRuntime/Handler/ExternalClient/Transport/ConnectionTransportManager.d.ts +9 -0
- package/build/types/ActionRuntime/Handler/ExternalClient/Transport/Custom/TransportCustom.d.ts +7 -0
- package/build/types/ActionRuntime/Handler/ExternalClient/Transport/Custom/TransportCustom.types.d.ts +11 -0
- package/build/types/ActionRuntime/Handler/ExternalClient/Transport/Http/TransportHttp.d.ts +8 -0
- package/build/types/ActionRuntime/Handler/ExternalClient/Transport/Http/TransportHttp.types.d.ts +17 -0
- package/build/types/ActionRuntime/Handler/ExternalClient/Transport/Transport.combined.types.d.ts +4 -0
- package/build/types/ActionRuntime/Handler/ExternalClient/Transport/Transport.d.ts +13 -0
- package/build/types/ActionRuntime/Handler/ExternalClient/Transport/Transport.types.d.ts +106 -0
- package/build/types/ActionRuntime/Handler/ExternalClient/Transport/WebSocket/TransportWebSocket.d.ts +13 -0
- package/build/types/ActionRuntime/Handler/ExternalClient/Transport/WebSocket/TransportWebSocket.types.d.ts +13 -0
- package/build/types/{ActionRuntimeEnvironment/ActionConnect → ActionRuntime/Handler/ExternalClient}/Transport/err_nice_transport.d.ts +5 -7
- package/build/types/ActionRuntime/Handler/ExternalClient/Transport/helpers/addTransportStatusMetadata.d.ts +2 -0
- package/build/types/ActionRuntime/Handler/ExternalClient/Transport/helpers/createUnsetTransportResolvers.d.ts +2 -0
- package/build/types/ActionRuntime/Handler/ExternalClient/err_nice_external_client.d.ts +5 -0
- package/build/types/ActionRuntime/Handler/Local/ActionLocalHandler.d.ts +55 -0
- package/build/types/ActionRuntime/Handler/Local/ActionLocalHandler.types.d.ts +6 -0
- package/build/types/ActionRuntime/Routing/ActionRouter.d.ts +55 -0
- package/build/types/ActionRuntime/Routing/ActionRouter.types.d.ts +20 -0
- package/build/types/ActionRuntime/test/helpers/new_action_test_data.d.ts +301 -0
- package/build/types/errors/err_nice_action.d.ts +22 -12
- package/build/types/index.d.ts +31 -32
- package/build/types/nice_action.static.d.ts +3 -0
- package/build/types/react-query/index.d.ts +9 -10
- package/build/types/utils/assertIsActionJson.d.ts +2 -0
- package/build/types/utils/getAssumedRuntimeEnvironment.d.ts +2 -0
- package/build/types/utils/isActionPayload_Any_JsonObject.d.ts +2 -0
- package/build/types/utils/isActionPayload_Progress_JsonObject.d.ts +2 -0
- package/build/types/utils/isActionPayload_Request_JsonObject.d.ts +2 -0
- package/build/types/utils/isActionPayload_Result_JsonObject.d.ts +2 -0
- package/build/types/utils/isAction_Any_Instance.d.ts +3 -0
- package/build/types/utils/isAction_Any_JsonObject.d.ts +2 -0
- package/build/types/utils/isAction_Base_JsonObject.d.ts +2 -0
- package/build/types/utils/isAction_Context_JsonObject.d.ts +2 -0
- package/build/types/utils/isAction_Core_JsonObject.d.ts +2 -0
- package/build/types/utils/wait.utils.d.ts +13 -0
- package/package.json +3 -3
- package/build/types/ActionDomain/NiceActionDomain.d.ts +0 -40
- package/build/types/ActionDomain/NiceActionDomain.types.d.ts +0 -37
- package/build/types/ActionDomain/NiceActionDomainBase.d.ts +0 -14
- package/build/types/ActionDomain/RootDomain/NiceActionRootDomain.d.ts +0 -22
- package/build/types/ActionDomain/helpers/createRootActionDomain.d.ts +0 -5
- package/build/types/ActionRuntimeEnvironment/ActionConnect/ActionConnect.d.ts +0 -24
- package/build/types/ActionRuntimeEnvironment/ActionConnect/ActionConnect.types.d.ts +0 -15
- package/build/types/ActionRuntimeEnvironment/ActionConnect/ConnectionConfig/ConnectionConfig.d.ts +0 -12
- package/build/types/ActionRuntimeEnvironment/ActionConnect/ConnectionConfig/ConnectionConfig.types.d.ts +0 -6
- package/build/types/ActionRuntimeEnvironment/ActionConnect/Transport/Transport.d.ts +0 -19
- package/build/types/ActionRuntimeEnvironment/ActionConnect/Transport/Transport.types.d.ts +0 -70
- package/build/types/ActionRuntimeEnvironment/ActionConnect/Transport/TransportCustom.d.ts +0 -12
- package/build/types/ActionRuntimeEnvironment/ActionConnect/Transport/TransportHttp.d.ts +0 -9
- package/build/types/ActionRuntimeEnvironment/ActionConnect/Transport/TransportWebSocket.d.ts +0 -17
- package/build/types/ActionRuntimeEnvironment/ActionConnect/err_nice_connect.d.ts +0 -5
- package/build/types/ActionRuntimeEnvironment/ActionHandler/ActionHandler.d.ts +0 -80
- package/build/types/ActionRuntimeEnvironment/ActionHandler/ActionHandler.types.d.ts +0 -69
- package/build/types/ActionRuntimeEnvironment/ActionRuntimeEnvironment.d.ts +0 -32
- package/build/types/ActionRuntimeEnvironment/ActionRuntimeEnvironment.types.d.ts +0 -15
- package/build/types/ActionRuntimeEnvironment/utils/getAssumedRuntimeEnvironment.d.ts +0 -2
- package/build/types/ActionSchema/NiceActionSchema.types.d.ts +0 -32
- package/build/types/ActionSchema/action.d.ts +0 -2
- package/build/types/NiceAction/MatchAction/MatchAction.d.ts +0 -27
- package/build/types/NiceAction/NiceAction.d.ts +0 -64
- package/build/types/NiceAction/NiceAction.enums.d.ts +0 -5
- package/build/types/NiceAction/NiceAction.types.d.ts +0 -78
- package/build/types/NiceAction/NiceActionCombined.types.d.ts +0 -10
- package/build/types/NiceAction/NiceActionPrimed.d.ts +0 -43
- package/build/types/NiceAction/NiceActionResponse.d.ts +0 -42
- package/build/types/NiceAction/utils/isNiceActionInstance.d.ts +0 -3
- package/build/types/utils/isActionResponseJsonObject.d.ts +0 -2
- package/build/types/utils/isPrimedActionJsonObject.d.ts +0 -2
- /package/build/types/{ActionRuntimeEnvironment/ActionConnect → ActionRuntime/Handler/ExternalClient}/Transport/err_nice_transport_ws.d.ts +0 -0
- /package/build/types/utils/{maybePromise.d.ts → typescript/MaybePromise.d.ts} +0 -0
|
@@ -3100,25 +3100,25 @@ function useMutation(options, queryClient) {
|
|
|
3100
3100
|
return { ...result, mutate, mutateAsync: result.mutate };
|
|
3101
3101
|
}
|
|
3102
3102
|
// src/react-query/index.ts
|
|
3103
|
-
function niceActionQueryKey(action, input
|
|
3103
|
+
function niceActionQueryKey(action, input) {
|
|
3104
3104
|
if (input === undefined) {
|
|
3105
3105
|
return ["nice-action", action.domain, action.allDomains, action.id];
|
|
3106
3106
|
}
|
|
3107
|
-
return ["nice-action", action.domain, action.allDomains, action.id, input
|
|
3107
|
+
return ["nice-action", action.domain, action.allDomains, action.id, input];
|
|
3108
3108
|
}
|
|
3109
3109
|
function useNiceQuery(action, input, options) {
|
|
3110
|
-
const {
|
|
3110
|
+
const { enabled, ...queryOptions2 } = options ?? {};
|
|
3111
3111
|
return useQuery({
|
|
3112
|
-
queryKey: input != null ? niceActionQueryKey(action, input
|
|
3113
|
-
queryFn: () => action.
|
|
3112
|
+
queryKey: input != null ? niceActionQueryKey(action, input) : niceActionQueryKey(action),
|
|
3113
|
+
queryFn: () => action.request(input).runToOutput(),
|
|
3114
3114
|
enabled: input != null && (enabled ?? true),
|
|
3115
3115
|
...queryOptions2
|
|
3116
3116
|
});
|
|
3117
3117
|
}
|
|
3118
3118
|
function useNiceMutation(action, options) {
|
|
3119
|
-
const
|
|
3119
|
+
const mutationOptions2 = options ?? {};
|
|
3120
3120
|
return useMutation({
|
|
3121
|
-
mutationFn: (input) => action.
|
|
3121
|
+
mutationFn: (input) => action.request(input).runToOutput(),
|
|
3122
3122
|
...mutationOptions2
|
|
3123
3123
|
});
|
|
3124
3124
|
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { IActionDomain } from "../Domain/ActionDomain.types";
|
|
2
|
+
import type { IActionBase } from "./ActionBase.types";
|
|
3
|
+
import type { ActionContext } from "./Context/ActionContext";
|
|
4
|
+
import type { IActionContext_JsonObject } from "./Context/ActionContext.types";
|
|
5
|
+
import type { ActionCore } from "./Core/ActionCore";
|
|
6
|
+
import type { IActionCore_JsonObject } from "./Core/ActionCore.types";
|
|
7
|
+
import type { IActionPayload_Progress_JsonObject, IActionPayload_Request_JsonObject, IActionPayload_Result_JsonObject, TActionPayload_Any_Instance, TActionPayload_Any_JsonObject } from "./Payload/ActionPayload.types";
|
|
8
|
+
import type { ActionPayload_Progress } from "./Payload/ActionPayload_Progress";
|
|
9
|
+
import type { ActionPayload_Request } from "./Payload/ActionPayload_Request";
|
|
10
|
+
import type { ActionPayload_Result } from "./Payload/ActionPayload_Result";
|
|
11
|
+
export type TAction_Any_Instance<DOM extends IActionDomain, ID extends keyof DOM["actions"] & string = keyof DOM["actions"] & string> = ActionCore<DOM, ID> | TActionPayload_Any_Instance<DOM, ID> | ActionContext<DOM, ID>;
|
|
12
|
+
/**
|
|
13
|
+
*
|
|
14
|
+
* COMBINED JSON TYPES
|
|
15
|
+
*
|
|
16
|
+
*/
|
|
17
|
+
export type TAction_Any_JsonObject<DOM extends IActionDomain = IActionDomain, ID extends keyof DOM["actions"] & string = keyof DOM["actions"] & string> = IActionCore_JsonObject<DOM, ID> | TActionPayload_Any_JsonObject<DOM, ID> | IActionContext_JsonObject<DOM, ID>;
|
|
18
|
+
/**
|
|
19
|
+
*
|
|
20
|
+
* UTILITY TYPES
|
|
21
|
+
*
|
|
22
|
+
*/
|
|
23
|
+
export type TDistributedDomainActions<DOM extends IActionDomain, ACT extends IActionBase<any, DOM, any>> = {
|
|
24
|
+
[ID in keyof DOM["actions"] & string]: TNarrowActionType<DOM, ACT, ID>;
|
|
25
|
+
}[keyof DOM["actions"] & string];
|
|
26
|
+
export type TNarrowActionType<DOM extends IActionDomain, ACT extends IActionBase<any, DOM, any>, ID extends keyof DOM["actions"] & string = keyof DOM["actions"] & string> = ACT extends ActionPayload_Result<any> ? ActionPayload_Result<DOM, ID> : ACT extends ActionPayload_Request<any> ? ActionPayload_Request<DOM, ID> : ACT extends ActionPayload_Progress<any> ? ActionPayload_Progress<DOM, ID> : ACT extends ActionCore<any> ? ActionCore<DOM, ID> : never;
|
|
27
|
+
export type TNarrowActionJsonTypeToActionInstanceType<DOM extends IActionDomain, ACT extends TAction_Any_JsonObject<DOM>, ID extends keyof DOM["actions"] & string = keyof DOM["actions"] & string> = ACT extends IActionPayload_Request_JsonObject<any> ? ActionPayload_Request<DOM, ID> : ACT extends IActionPayload_Result_JsonObject<any> ? ActionPayload_Result<DOM, ID> : ACT extends IActionPayload_Progress_JsonObject<any> ? ActionPayload_Progress<DOM, ID> : ACT extends IActionCore_JsonObject<any> ? ActionCore<DOM, ID> : never;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { ActionDomain } from "../Domain/ActionDomain";
|
|
2
|
+
import type { IActionDomain } from "../Domain/ActionDomain.types";
|
|
3
|
+
import type { EActionForm, IActionBase, IActionBase_JsonObject } from "./ActionBase.types";
|
|
4
|
+
export declare abstract class ActionBase<FORM extends EActionForm, DOM extends IActionDomain, ID extends keyof DOM["actions"] & string = keyof DOM["actions"] & string> implements IActionBase<FORM, DOM, ID> {
|
|
5
|
+
readonly form: FORM;
|
|
6
|
+
readonly _domain: ActionDomain<DOM>;
|
|
7
|
+
readonly id: ID;
|
|
8
|
+
readonly domain: DOM["domain"];
|
|
9
|
+
readonly allDomains: DOM["allDomains"];
|
|
10
|
+
readonly schema: DOM["actions"][ID];
|
|
11
|
+
constructor(form: FORM, _domain: ActionDomain<DOM>, id: ID);
|
|
12
|
+
protected toJsonObject(): IActionBase_JsonObject<FORM, DOM, ID>;
|
|
13
|
+
protected toJsonString(): string;
|
|
14
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { ActionDomain } from "../Domain/ActionDomain";
|
|
2
|
+
import type { IActionDomain } from "../Domain/ActionDomain.types";
|
|
3
|
+
export declare enum EActionForm {
|
|
4
|
+
core = "core",
|
|
5
|
+
context = "context",
|
|
6
|
+
data = "data"
|
|
7
|
+
}
|
|
8
|
+
export interface INiceActionIdAndDomain<DOM extends IActionDomain = IActionDomain> {
|
|
9
|
+
domain: DOM["domain"];
|
|
10
|
+
id: keyof DOM["actions"] & string;
|
|
11
|
+
}
|
|
12
|
+
export interface IActionBase<FORM extends EActionForm, DOM extends IActionDomain, ID extends keyof DOM["actions"] & string = keyof DOM["actions"] & string> extends INiceActionIdAndDomain<DOM> {
|
|
13
|
+
id: ID;
|
|
14
|
+
form: FORM;
|
|
15
|
+
_domain: ActionDomain<DOM>;
|
|
16
|
+
allDomains: DOM["allDomains"];
|
|
17
|
+
schema: DOM["actions"][ID];
|
|
18
|
+
}
|
|
19
|
+
export interface IActionBase_JsonObject<FORM extends EActionForm = EActionForm, DOM extends IActionDomain = IActionDomain, ID extends keyof DOM["actions"] & string = keyof DOM["actions"] & string> {
|
|
20
|
+
form: FORM;
|
|
21
|
+
domain: DOM["domain"];
|
|
22
|
+
allDomains: DOM["allDomains"];
|
|
23
|
+
id: ID;
|
|
24
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { JSONSerializableValue } from "@nice-code/error";
|
|
2
|
+
import type { ActionDomain } from "../../Domain/ActionDomain";
|
|
3
|
+
import type { IActionDomain, TInferInputFromSchema, TInferOutputFromSchema } from "../../Domain/ActionDomain.types";
|
|
4
|
+
import { ActionBase } from "../ActionBase";
|
|
5
|
+
import { EActionForm } from "../ActionBase.types";
|
|
6
|
+
import { ActionClientSpecifier } from "../../../ActionRuntime/Client/ActionClientSpecifier";
|
|
7
|
+
import type { IActionContext, IActionContext_Data, IActionContext_Data_JsonObject, IActionContext_JsonObject, IActionRouteItem } from "./ActionContext.types";
|
|
8
|
+
export declare class ActionContext<DOM extends IActionDomain, ID extends keyof DOM["actions"] & string = keyof DOM["actions"] & string> extends ActionBase<EActionForm.context, DOM, ID> implements IActionContext<DOM, ID> {
|
|
9
|
+
readonly _domain: ActionDomain<DOM>;
|
|
10
|
+
readonly form = EActionForm.context;
|
|
11
|
+
readonly _routing: IActionRouteItem[];
|
|
12
|
+
readonly timeCreated: number;
|
|
13
|
+
readonly cuid: string;
|
|
14
|
+
originClient: ActionClientSpecifier;
|
|
15
|
+
constructor(_domain: ActionDomain<DOM>, id: ID, hydrationData: IActionContext_Data);
|
|
16
|
+
_setOriginClient(client: ActionClientSpecifier): void;
|
|
17
|
+
toJsonString(): string;
|
|
18
|
+
toContextDataJsonObject(): IActionContext_Data_JsonObject;
|
|
19
|
+
toJsonObject(): IActionContext_JsonObject<DOM, ID>;
|
|
20
|
+
get routing(): IActionRouteItem[];
|
|
21
|
+
addRouteItem(item: IActionRouteItem): void;
|
|
22
|
+
deserializeInput(serialized: JSONSerializableValue): TInferInputFromSchema<DOM["actions"][ID]>["Input"];
|
|
23
|
+
serializeInput(raw: TInferInputFromSchema<DOM["actions"][ID]>["Input"]): JSONSerializableValue;
|
|
24
|
+
validateInput(input: unknown): TInferInputFromSchema<DOM["actions"][ID]>["Input"];
|
|
25
|
+
validateOutput(output: unknown): TInferOutputFromSchema<DOM["actions"][ID]>["Output"];
|
|
26
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { ActionClientSpecifier, IActionClientSpecifier } from "../../../ActionRuntime/Client/ActionClientSpecifier";
|
|
2
|
+
import type { IActionDomain } from "../../Domain/ActionDomain.types";
|
|
3
|
+
import type { EActionForm, IActionBase, IActionBase_JsonObject } from "../ActionBase.types";
|
|
4
|
+
import type { IActionRouteItemHandler } from "../Payload/ActionPayload.types";
|
|
5
|
+
export interface IActionRouteItem {
|
|
6
|
+
runtime: ActionClientSpecifier;
|
|
7
|
+
handler: IActionRouteItemHandler;
|
|
8
|
+
time: number;
|
|
9
|
+
}
|
|
10
|
+
export interface IActionContext_Data {
|
|
11
|
+
cuid: string;
|
|
12
|
+
timeCreated: number;
|
|
13
|
+
routing: IActionRouteItem[];
|
|
14
|
+
originClient: ActionClientSpecifier;
|
|
15
|
+
}
|
|
16
|
+
export interface IActionContext<DOM extends IActionDomain, ID extends keyof DOM["actions"] & string = keyof DOM["actions"] & string> extends IActionBase<EActionForm.context, DOM, ID>, IActionContext_Data {
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
*
|
|
20
|
+
* JSON TYPES
|
|
21
|
+
*
|
|
22
|
+
*/
|
|
23
|
+
export interface IActionRouteItem_JsonObject {
|
|
24
|
+
runtime: IActionClientSpecifier;
|
|
25
|
+
handler: IActionRouteItemHandler;
|
|
26
|
+
time: number;
|
|
27
|
+
}
|
|
28
|
+
export interface IActionContext_Data_JsonObject {
|
|
29
|
+
cuid: string;
|
|
30
|
+
timeCreated: number;
|
|
31
|
+
routing: IActionRouteItem_JsonObject[];
|
|
32
|
+
originClient: IActionClientSpecifier;
|
|
33
|
+
}
|
|
34
|
+
export interface IActionContext_JsonObject<DOM extends IActionDomain = IActionDomain, ID extends keyof DOM["actions"] & string = keyof DOM["actions"] & string> extends IActionBase_JsonObject<EActionForm.context, DOM, ID>, IActionContext_Data_JsonObject {
|
|
35
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { JSONSerializableValue } from "@nice-code/error";
|
|
2
|
+
import type { ActionDomain } from "../../Domain/ActionDomain";
|
|
3
|
+
import type { IActionDomain, TInferInputFromSchema, TInferOutputFromSchema } from "../../Domain/ActionDomain.types";
|
|
4
|
+
import type { TNarrowActionType } from "../Action.combined.types";
|
|
5
|
+
import { ActionBase } from "../ActionBase";
|
|
6
|
+
import { EActionForm, type IActionBase, type IActionBase_JsonObject } from "../ActionBase.types";
|
|
7
|
+
import { ActionPayload_Request } from "../Payload/ActionPayload_Request";
|
|
8
|
+
import type { IActionCore } from "./ActionCore.types";
|
|
9
|
+
export declare class ActionCore<DOM extends IActionDomain, ID extends keyof DOM["actions"] & string = keyof DOM["actions"] & string> extends ActionBase<EActionForm.core, DOM, ID> implements IActionCore<DOM, ID> {
|
|
10
|
+
readonly _domain: ActionDomain<DOM>;
|
|
11
|
+
readonly form = EActionForm.core;
|
|
12
|
+
constructor(_domain: ActionDomain<DOM>, id: ID);
|
|
13
|
+
is<ACT extends IActionBase<any, any, any>>(action: ACT | unknown | null | undefined): action is TNarrowActionType<DOM, ACT, ID>;
|
|
14
|
+
toJsonObject(): IActionBase_JsonObject<EActionForm.core, DOM, ID>;
|
|
15
|
+
request(input: TInferInputFromSchema<DOM["actions"][ID]>["Input"]): ActionPayload_Request<DOM, ID>;
|
|
16
|
+
deserializeInput(serialized: JSONSerializableValue): TInferInputFromSchema<DOM["actions"][ID]>["Input"];
|
|
17
|
+
serializeInput(raw: TInferInputFromSchema<DOM["actions"][ID]>["Input"]): JSONSerializableValue;
|
|
18
|
+
validateInput(input: unknown): TInferInputFromSchema<DOM["actions"][ID]>["Input"];
|
|
19
|
+
validateOutput(output: unknown): TInferOutputFromSchema<DOM["actions"][ID]>["Output"];
|
|
20
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { IActionDomain } from "../../Domain/ActionDomain.types";
|
|
2
|
+
import type { EActionForm, IActionBase } from "../ActionBase.types";
|
|
3
|
+
export interface IActionCore<DOM extends IActionDomain, ID extends keyof DOM["actions"] & string = keyof DOM["actions"] & string> extends IActionBase<EActionForm.core, DOM, ID> {
|
|
4
|
+
}
|
|
5
|
+
export type IActionCore_JsonObject<DOM extends IActionDomain = IActionDomain, ID extends keyof DOM["actions"] & string = keyof DOM["actions"] & string> = {
|
|
6
|
+
form: EActionForm.core;
|
|
7
|
+
domain: DOM["domain"];
|
|
8
|
+
allDomains: DOM["allDomains"];
|
|
9
|
+
id: ID;
|
|
10
|
+
};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { IActionDomain } from "../../Domain/ActionDomain.types";
|
|
2
|
+
import { ActionBase } from "../ActionBase";
|
|
3
|
+
import { EActionForm } from "../ActionBase.types";
|
|
4
|
+
import type { ActionContext } from "../Context/ActionContext";
|
|
5
|
+
import type { EActionPayloadType, IActionPayload_Base, IActionPayload_Base_JsonObject, IActionPayload_Data_Base } from "./ActionPayload.types";
|
|
6
|
+
export declare abstract class ActionPayload<DT extends EActionPayloadType, DOM extends IActionDomain, ID extends keyof DOM["actions"] & string = keyof DOM["actions"] & string> extends ActionBase<EActionForm.data, DOM, ID> implements IActionPayload_Base<DT, DOM, ID> {
|
|
7
|
+
readonly form: EActionForm.data;
|
|
8
|
+
readonly type: DT;
|
|
9
|
+
readonly context: ActionContext<DOM, ID>;
|
|
10
|
+
readonly time: number;
|
|
11
|
+
protected constructor(context: ActionContext<DOM, ID>, type: DT, data: IActionPayload_Data_Base);
|
|
12
|
+
protected toBaseJsonObject(): IActionPayload_Base_JsonObject<DT, DOM, ID>;
|
|
13
|
+
abstract toJsonObject(): IActionPayload_Base_JsonObject<DT, DOM, ID>;
|
|
14
|
+
}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import type { TInferActionError } from "../../..";
|
|
2
|
+
import type { IActionHandler_ExternalClient_Json, IActionHandler_Local_Json } from "../../../ActionRuntime/Handler/ActionHandler.types";
|
|
3
|
+
import type { ETransportType } from "../../../ActionRuntime/Handler/ExternalClient/Transport/Transport.types";
|
|
4
|
+
import type { IActionDomain, TInferInputFromSchema, TInferOutputFromSchema } from "../../Domain/ActionDomain.types";
|
|
5
|
+
import type { EActionForm, IActionBase, IActionBase_JsonObject } from "../ActionBase.types";
|
|
6
|
+
import type { ActionContext } from "../Context/ActionContext";
|
|
7
|
+
import type { IActionContext_Data_JsonObject } from "../Context/ActionContext.types";
|
|
8
|
+
import type { ActionPayload_Progress } from "./ActionPayload_Progress";
|
|
9
|
+
import type { ActionPayload_Request } from "./ActionPayload_Request";
|
|
10
|
+
import type { ActionPayload_Result } from "./ActionPayload_Result";
|
|
11
|
+
export declare enum EActionPayloadType {
|
|
12
|
+
request = "request",
|
|
13
|
+
progress = "progress",
|
|
14
|
+
stream = "stream",
|
|
15
|
+
result = "result"
|
|
16
|
+
}
|
|
17
|
+
export interface IActionPayload_Data_Base {
|
|
18
|
+
time: number;
|
|
19
|
+
}
|
|
20
|
+
export interface IActionPayload_Base<DT extends EActionPayloadType, DOM extends IActionDomain, ID extends keyof DOM["actions"] & string> extends IActionBase<EActionForm.data, DOM, ID>, IActionPayload_Data_Base {
|
|
21
|
+
readonly type: DT;
|
|
22
|
+
readonly context: ActionContext<DOM, ID>;
|
|
23
|
+
}
|
|
24
|
+
export type IActionRouteItemHandler = IActionHandler_Local_Json | (IActionHandler_ExternalClient_Json & {
|
|
25
|
+
transType: ETransportType;
|
|
26
|
+
transOrd: number;
|
|
27
|
+
});
|
|
28
|
+
/**
|
|
29
|
+
* [ ]
|
|
30
|
+
* [ ACTION PAYLOAD TYPES ]
|
|
31
|
+
* [ ]
|
|
32
|
+
*/
|
|
33
|
+
/**
|
|
34
|
+
*
|
|
35
|
+
* [ RESULT ]
|
|
36
|
+
*
|
|
37
|
+
*/
|
|
38
|
+
export type TActionResultOutcome<OUT, ERR> = {
|
|
39
|
+
ok: true;
|
|
40
|
+
output: OUT;
|
|
41
|
+
} | {
|
|
42
|
+
ok: false;
|
|
43
|
+
error: ERR;
|
|
44
|
+
};
|
|
45
|
+
export interface IActionPayload_Result<DOM extends IActionDomain, ID extends keyof DOM["actions"] & string> extends IActionPayload_Base<EActionPayloadType.result, DOM, ID> {
|
|
46
|
+
readonly result: TActionResultOutcome<TInferOutputFromSchema<DOM["actions"][ID]>["Output"], TInferActionError<DOM["actions"][ID]>>;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
*
|
|
50
|
+
* [ PROGRESS ]
|
|
51
|
+
*
|
|
52
|
+
*/
|
|
53
|
+
export declare enum EActionProgressType {
|
|
54
|
+
none = "none",
|
|
55
|
+
percentage = "percentage",
|
|
56
|
+
custom = "custom"
|
|
57
|
+
}
|
|
58
|
+
export interface IActionProgress_None {
|
|
59
|
+
type: EActionProgressType.none;
|
|
60
|
+
}
|
|
61
|
+
export interface IActionProgress_Percentage {
|
|
62
|
+
type: EActionProgressType.percentage;
|
|
63
|
+
progress: number;
|
|
64
|
+
message?: string;
|
|
65
|
+
}
|
|
66
|
+
export interface IActionProgress_Custom {
|
|
67
|
+
type: EActionProgressType.custom;
|
|
68
|
+
data: any;
|
|
69
|
+
}
|
|
70
|
+
export type TActionProgress = IActionProgress_None | IActionProgress_Percentage | IActionProgress_Custom;
|
|
71
|
+
export interface IActionPayload_Progress<DOM extends IActionDomain, ID extends keyof DOM["actions"] & string> extends IActionPayload_Base<EActionPayloadType.progress, DOM, ID> {
|
|
72
|
+
readonly progress: TActionProgress;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
*
|
|
76
|
+
* [ ]
|
|
77
|
+
* [ Wire JSON types ]
|
|
78
|
+
* [ ]
|
|
79
|
+
*
|
|
80
|
+
*/
|
|
81
|
+
export interface IActionPayload_Base_JsonObject<DT extends EActionPayloadType, DOM extends IActionDomain = IActionDomain, ID extends keyof DOM["actions"] & string = keyof DOM["actions"] & string> extends IActionBase_JsonObject<EActionForm.data, DOM, ID> {
|
|
82
|
+
type: DT;
|
|
83
|
+
context: IActionContext_Data_JsonObject;
|
|
84
|
+
time: number;
|
|
85
|
+
}
|
|
86
|
+
export interface IActionPayload_Request_JsonObject<DOM extends IActionDomain = IActionDomain, ID extends keyof DOM["actions"] & string = keyof DOM["actions"] & string> extends IActionPayload_Base_JsonObject<EActionPayloadType.request, DOM, ID> {
|
|
87
|
+
type: EActionPayloadType.request;
|
|
88
|
+
input: TInferInputFromSchema<DOM["actions"][ID]>["SerdeInput"];
|
|
89
|
+
}
|
|
90
|
+
export interface IActionPayload_Progress_JsonObject<DOM extends IActionDomain = IActionDomain, ID extends keyof DOM["actions"] & string = keyof DOM["actions"] & string> extends IActionPayload_Base_JsonObject<EActionPayloadType.progress, DOM, ID> {
|
|
91
|
+
type: EActionPayloadType.progress;
|
|
92
|
+
progress: TActionProgress;
|
|
93
|
+
}
|
|
94
|
+
export interface IActionPayload_Result_JsonObject<DOM extends IActionDomain = IActionDomain, ID extends keyof DOM["actions"] & string = keyof DOM["actions"] & string> extends IActionPayload_Base_JsonObject<EActionPayloadType.result, DOM, ID> {
|
|
95
|
+
type: EActionPayloadType.result;
|
|
96
|
+
result: TActionResultOutcome<TInferOutputFromSchema<DOM["actions"][ID]>["Output"], TInferActionError<DOM["actions"][ID]>>;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
*
|
|
100
|
+
* [ ]
|
|
101
|
+
* [ COMBINED TYPES ]
|
|
102
|
+
* [ ]
|
|
103
|
+
*
|
|
104
|
+
*/
|
|
105
|
+
export type TActionPayload_Any_Instance<DOM extends IActionDomain = IActionDomain, ID extends keyof DOM["actions"] & string = keyof DOM["actions"] & string> = ActionPayload_Request<DOM, ID> | ActionPayload_Result<DOM, ID> | ActionPayload_Progress<DOM, ID>;
|
|
106
|
+
export type TActionPayload_Any_JsonObject<DOM extends IActionDomain = IActionDomain, ID extends keyof DOM["actions"] & string = keyof DOM["actions"] & string> = IActionPayload_Request_JsonObject<DOM, ID> | IActionPayload_Progress_JsonObject<DOM, ID> | IActionPayload_Result_JsonObject<DOM, ID>;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { IActionDomain } from "../../Domain/ActionDomain.types";
|
|
2
|
+
import type { ActionContext } from "../Context/ActionContext";
|
|
3
|
+
import { ActionPayload } from "./ActionPayload";
|
|
4
|
+
import type { IActionPayload_Data_Base, IActionPayload_Progress, IActionPayload_Progress_JsonObject, TActionProgress } from "./ActionPayload.types";
|
|
5
|
+
import { EActionPayloadType } from "./ActionPayload.types";
|
|
6
|
+
import { ActionPayload_Request } from "./ActionPayload_Request";
|
|
7
|
+
export declare class ActionPayload_Progress<DOM extends IActionDomain, ID extends keyof DOM["actions"] & string = keyof DOM["actions"] & string> extends ActionPayload<EActionPayloadType.progress, DOM, ID> implements IActionPayload_Progress<DOM, ID> {
|
|
8
|
+
readonly progress: TActionProgress;
|
|
9
|
+
constructor(params: {
|
|
10
|
+
context: ActionContext<DOM, ID>;
|
|
11
|
+
} | ActionPayload_Request<DOM, ID>, progress: TActionProgress, data: IActionPayload_Data_Base);
|
|
12
|
+
toJsonObject(): IActionPayload_Progress_JsonObject<DOM, ID>;
|
|
13
|
+
toJsonString(): string;
|
|
14
|
+
toHttpResponse(): Response;
|
|
15
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { IExecuteActionOptions } from "../../../ActionRuntime/Handler/ActionHandler.types";
|
|
2
|
+
import type { IActionDomain, TInferInputFromSchema, TInferOutputFromSchema } from "../../Domain/ActionDomain.types";
|
|
3
|
+
import type { TInferActionError } from "../../Schema/ActionSchema";
|
|
4
|
+
import type { ActionContext } from "../Context/ActionContext";
|
|
5
|
+
import type { RunningAction } from "../RunningAction";
|
|
6
|
+
import { ActionPayload } from "./ActionPayload";
|
|
7
|
+
import type { IActionPayload_Data_Base, TActionProgress } from "./ActionPayload.types";
|
|
8
|
+
import { EActionPayloadType, type IActionPayload_Request_JsonObject } from "./ActionPayload.types";
|
|
9
|
+
import { ActionPayload_Progress } from "./ActionPayload_Progress";
|
|
10
|
+
import { ActionPayload_Result } from "./ActionPayload_Result";
|
|
11
|
+
export declare class ActionPayload_Request<DOM extends IActionDomain, ID extends keyof DOM["actions"] & string = keyof DOM["actions"] & string> extends ActionPayload<EActionPayloadType.request, DOM, ID> {
|
|
12
|
+
readonly input: TInferInputFromSchema<DOM["actions"][ID]>["Input"];
|
|
13
|
+
constructor(params: {
|
|
14
|
+
context: ActionContext<DOM, ID>;
|
|
15
|
+
}, input: TInferInputFromSchema<DOM["actions"][ID]>["Input"], data: IActionPayload_Data_Base);
|
|
16
|
+
successResult(...args: [TInferOutputFromSchema<DOM["actions"][ID]>["Output"]] extends [never] ? [] | [output: TInferOutputFromSchema<DOM["actions"][ID]>["Output"]] : [output: TInferOutputFromSchema<DOM["actions"][ID]>["Output"]]): ActionPayload_Result<DOM, ID>;
|
|
17
|
+
errorResult(err: TInferActionError<DOM["actions"][ID]>): ActionPayload_Result<DOM, ID>;
|
|
18
|
+
progress(progress: TActionProgress): ActionPayload_Progress<DOM, ID>;
|
|
19
|
+
toJsonObject(): IActionPayload_Request_JsonObject<DOM, ID>;
|
|
20
|
+
toJsonString(): string;
|
|
21
|
+
runToOutput(options?: IExecuteActionOptions<DOM, ID>): Promise<TInferOutputFromSchema<DOM["actions"][ID]>["Output"]>;
|
|
22
|
+
runToResultPayload(options?: IExecuteActionOptions<DOM, ID>): Promise<ActionPayload_Result<DOM, ID>>;
|
|
23
|
+
run(options?: IExecuteActionOptions<DOM, ID>): Promise<RunningAction<DOM, ID>>;
|
|
24
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { IActionDomain, TInferOutputFromSchema } from "../../Domain/ActionDomain.types";
|
|
2
|
+
import type { TInferActionError } from "../../Schema/ActionSchema";
|
|
3
|
+
import type { ActionContext } from "../Context/ActionContext";
|
|
4
|
+
import { ActionPayload } from "./ActionPayload";
|
|
5
|
+
import type { IActionPayload_Data_Base, TActionResultOutcome } from "./ActionPayload.types";
|
|
6
|
+
import { EActionPayloadType, type IActionPayload_Result_JsonObject } from "./ActionPayload.types";
|
|
7
|
+
import { ActionPayload_Request } from "./ActionPayload_Request";
|
|
8
|
+
export declare class ActionPayload_Result<DOM extends IActionDomain, ID extends keyof DOM["actions"] & string = keyof DOM["actions"] & string> extends ActionPayload<EActionPayloadType.result, DOM, ID> {
|
|
9
|
+
readonly result: TActionResultOutcome<TInferOutputFromSchema<DOM["actions"][ID]>["Output"], TInferActionError<DOM["actions"][ID]>>;
|
|
10
|
+
constructor(params: {
|
|
11
|
+
context: ActionContext<DOM, ID>;
|
|
12
|
+
} | ActionPayload_Request<DOM, ID>, result: TActionResultOutcome<TInferOutputFromSchema<DOM["actions"][ID]>["Output"], TInferActionError<DOM["actions"][ID]>>, data: IActionPayload_Data_Base);
|
|
13
|
+
toJsonObject(): IActionPayload_Result_JsonObject<DOM, ID>;
|
|
14
|
+
toJsonString(): string;
|
|
15
|
+
toHttpResponse({ useErrorStatus }?: {
|
|
16
|
+
useErrorStatus?: boolean;
|
|
17
|
+
}): Response;
|
|
18
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { ActionDomain } from "../..";
|
|
2
|
+
import type { IActionDomain } from "../Domain/ActionDomain.types";
|
|
3
|
+
import type { ActionContext } from "./Context/ActionContext";
|
|
4
|
+
import { type IActionPayload_Result_JsonObject } from "./Payload/ActionPayload.types";
|
|
5
|
+
import type { ActionPayload_Progress } from "./Payload/ActionPayload_Progress";
|
|
6
|
+
import type { ActionPayload_Result } from "./Payload/ActionPayload_Result";
|
|
7
|
+
import { type IRunningActionState, type IRunningActionState_ConstructorParams, type IRunningActionUserMethods, type TRunningActionUpdate, type TRunningActionUpdateListener } from "./RunningAction.types";
|
|
8
|
+
export declare class RunningAction<DOM extends IActionDomain, ID extends keyof DOM["actions"] & string = keyof DOM["actions"] & string> implements IRunningActionUserMethods<DOM, ID> {
|
|
9
|
+
protected _state: IRunningActionState<DOM, ID>;
|
|
10
|
+
readonly context: ActionContext<DOM, ID>;
|
|
11
|
+
readonly cuid: string;
|
|
12
|
+
readonly id: ID;
|
|
13
|
+
readonly _domain: ActionDomain<DOM>;
|
|
14
|
+
readonly domain: DOM["domain"];
|
|
15
|
+
readonly allDomains: DOM["allDomains"];
|
|
16
|
+
private readonly _resultPayloadPromise;
|
|
17
|
+
private _resolveResult;
|
|
18
|
+
private _rejectResult;
|
|
19
|
+
private _isAborted;
|
|
20
|
+
private readonly _updates;
|
|
21
|
+
private readonly _updateListeners;
|
|
22
|
+
constructor(initialState: IRunningActionState_ConstructorParams<DOM, ID>);
|
|
23
|
+
get state(): IRunningActionState<DOM, ID>;
|
|
24
|
+
abort(reason?: unknown): void;
|
|
25
|
+
addUpdateListeners(listeners: TRunningActionUpdateListener<DOM, ID>[]): () => void;
|
|
26
|
+
iterateUpdates(): AsyncIterable<TRunningActionUpdate<DOM, ID>>;
|
|
27
|
+
_sendUpdate(update: TRunningActionUpdate<DOM, ID>): void;
|
|
28
|
+
_completeWithResult(result: ActionPayload_Result<DOM, ID>): boolean;
|
|
29
|
+
_abort(reason?: unknown): boolean;
|
|
30
|
+
_updateProgress(progress: ActionPayload_Progress<DOM, ID>): void;
|
|
31
|
+
waitForResultPayload(): Promise<ActionPayload_Result<DOM, ID>>;
|
|
32
|
+
_resolveFromJson(resultJson: IActionPayload_Result_JsonObject<DOM, ID>): boolean;
|
|
33
|
+
}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import type { IActionDomain } from "../Domain/ActionDomain.types";
|
|
2
|
+
import type { TInferActionError } from "../Schema/ActionSchema";
|
|
3
|
+
import type { ActionContext } from "./Context/ActionContext";
|
|
4
|
+
import type { TActionProgress } from "./Payload/ActionPayload.types";
|
|
5
|
+
import type { ActionPayload_Progress } from "./Payload/ActionPayload_Progress";
|
|
6
|
+
import type { ActionPayload_Request } from "./Payload/ActionPayload_Request";
|
|
7
|
+
import type { ActionPayload_Result } from "./Payload/ActionPayload_Result";
|
|
8
|
+
import type { RunningAction } from "./RunningAction";
|
|
9
|
+
export declare enum ERunningActionState {
|
|
10
|
+
running = "running",
|
|
11
|
+
completed = "completed"
|
|
12
|
+
}
|
|
13
|
+
export interface IRunningActionState<DOM extends IActionDomain, ID extends keyof DOM["actions"] & string> {
|
|
14
|
+
request: ActionPayload_Request<DOM, ID>;
|
|
15
|
+
progress: ActionPayload_Progress<DOM, ID>[];
|
|
16
|
+
result?: ActionPayload_Result<DOM, ID>;
|
|
17
|
+
}
|
|
18
|
+
export interface IRunningActionState_ConstructorParams<DOM extends IActionDomain, ID extends keyof DOM["actions"] & string> {
|
|
19
|
+
context: ActionContext<DOM, ID>;
|
|
20
|
+
request: ActionPayload_Request<DOM, ID>;
|
|
21
|
+
progress?: ActionPayload_Progress<DOM, ID>[];
|
|
22
|
+
result?: ActionPayload_Result<DOM, ID>;
|
|
23
|
+
}
|
|
24
|
+
export declare enum ERunningActionUpdateType {
|
|
25
|
+
started = "started",
|
|
26
|
+
progress = "progress",
|
|
27
|
+
finished = "finished"
|
|
28
|
+
}
|
|
29
|
+
export interface IRunningActionEvent_Base<T extends ERunningActionUpdateType, DOM extends IActionDomain, ID extends keyof DOM["actions"] & string = keyof DOM["actions"] & string> {
|
|
30
|
+
type: T;
|
|
31
|
+
runningAction: RunningAction<DOM, ID>;
|
|
32
|
+
time: number;
|
|
33
|
+
}
|
|
34
|
+
export interface IRunningActionUpdate_Started<DOM extends IActionDomain, ID extends keyof DOM["actions"] & string = keyof DOM["actions"] & string> extends IRunningActionEvent_Base<ERunningActionUpdateType.started, DOM, ID> {
|
|
35
|
+
}
|
|
36
|
+
export interface IRunningActionUpdate_Progress<DOM extends IActionDomain, ID extends keyof DOM["actions"] & string = keyof DOM["actions"] & string> extends IRunningActionEvent_Base<ERunningActionUpdateType.progress, DOM, ID> {
|
|
37
|
+
progress: TActionProgress;
|
|
38
|
+
}
|
|
39
|
+
export declare enum ERunningActionFinishedType {
|
|
40
|
+
aborted = "aborted",
|
|
41
|
+
failed = "failed",
|
|
42
|
+
success = "success"
|
|
43
|
+
}
|
|
44
|
+
export interface IRunningActionUpdate_Finished<FT extends ERunningActionFinishedType, DOM extends IActionDomain, ID extends keyof DOM["actions"] & string = keyof DOM["actions"] & string> extends IRunningActionEvent_Base<ERunningActionUpdateType.finished, DOM, ID> {
|
|
45
|
+
finishType: FT;
|
|
46
|
+
reason?: unknown;
|
|
47
|
+
}
|
|
48
|
+
export interface IRunningActionUpdate_Abort<DOM extends IActionDomain, ID extends keyof DOM["actions"] & string = keyof DOM["actions"] & string> extends IRunningActionUpdate_Finished<ERunningActionFinishedType.aborted, DOM, ID> {
|
|
49
|
+
reason?: unknown;
|
|
50
|
+
}
|
|
51
|
+
export interface IRunningActionUpdate_Failed<DOM extends IActionDomain, ID extends keyof DOM["actions"] & string = keyof DOM["actions"] & string> extends IRunningActionUpdate_Finished<ERunningActionFinishedType.failed, DOM, ID> {
|
|
52
|
+
error: TInferActionError<DOM["actions"][ID]>;
|
|
53
|
+
}
|
|
54
|
+
export interface IRunningActionUpdate_Success<DOM extends IActionDomain, ID extends keyof DOM["actions"] & string = keyof DOM["actions"] & string> extends IRunningActionUpdate_Finished<ERunningActionFinishedType.success, DOM, ID> {
|
|
55
|
+
response: ActionPayload_Result<DOM, ID>;
|
|
56
|
+
}
|
|
57
|
+
export type TRunningActionUpdateFinished<DOM extends IActionDomain, ID extends keyof DOM["actions"] & string = keyof DOM["actions"] & string> = IRunningActionUpdate_Abort<DOM, ID> | IRunningActionUpdate_Failed<DOM, ID> | IRunningActionUpdate_Success<DOM, ID>;
|
|
58
|
+
export type TRunningActionUpdate<DOM extends IActionDomain, ID extends keyof DOM["actions"] & string = keyof DOM["actions"] & string> = IRunningActionUpdate_Started<DOM, ID> | IRunningActionUpdate_Progress<DOM, ID> | TRunningActionUpdateFinished<DOM, ID>;
|
|
59
|
+
export type TRunningActionUpdateListener<DOM extends IActionDomain, ID extends keyof DOM["actions"] & string = keyof DOM["actions"] & string> = (update: TRunningActionUpdate<DOM, ID>) => void;
|
|
60
|
+
export interface IRunningActionUserMethods<DOM extends IActionDomain, ID extends keyof DOM["actions"] & string> {
|
|
61
|
+
waitForResultPayload(): Promise<ActionPayload_Result<DOM, ID>>;
|
|
62
|
+
addUpdateListeners(listeners: TRunningActionUpdateListener<DOM, ID>[]): () => void;
|
|
63
|
+
iterateUpdates(): AsyncIterable<TRunningActionUpdate<DOM, ID>>;
|
|
64
|
+
abort(reason?: unknown): void;
|
|
65
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { IExecuteActionOptions } from "../../ActionRuntime/Handler/ActionHandler.types";
|
|
2
|
+
import type { TAction_Any_JsonObject, TDistributedDomainActions, TNarrowActionJsonTypeToActionInstanceType } from "../Action/Action.combined.types";
|
|
3
|
+
import { type IActionBase } from "../Action/ActionBase.types";
|
|
4
|
+
import { ActionContext } from "../Action/Context/ActionContext";
|
|
5
|
+
import type { IActionContext_Data_JsonObject } from "../Action/Context/ActionContext.types";
|
|
6
|
+
import { ActionCore } from "../Action/Core/ActionCore";
|
|
7
|
+
import { type IActionPayload_Request_JsonObject, type IActionPayload_Result_JsonObject } from "../Action/Payload/ActionPayload.types";
|
|
8
|
+
import { ActionPayload_Request } from "../Action/Payload/ActionPayload_Request";
|
|
9
|
+
import { ActionPayload_Result } from "../Action/Payload/ActionPayload_Result";
|
|
10
|
+
import type { RunningAction } from "../Action/RunningAction";
|
|
11
|
+
import type { IActionDomain, IActionDomainChildOptions, TActionDomainChildDef } from "./ActionDomain.types";
|
|
12
|
+
import { ActionDomainBase } from "./ActionDomainBase";
|
|
13
|
+
import { type ActionRootDomain } from "./ActionRootDomain";
|
|
14
|
+
export declare class ActionDomain<ACT_DOM extends IActionDomain = IActionDomain> extends ActionDomainBase<ACT_DOM> {
|
|
15
|
+
private _rootDomain;
|
|
16
|
+
constructor(definition: ACT_DOM, { rootDomain, }: {
|
|
17
|
+
rootDomain: ActionRootDomain;
|
|
18
|
+
});
|
|
19
|
+
get rootDomain(): ActionRootDomain<import("./ActionDomain.types").IActionRootDomain<string>>;
|
|
20
|
+
createChildDomain<SUB_DOM extends IActionDomainChildOptions>(subDomainDef: SUB_DOM & {
|
|
21
|
+
[K in Exclude<keyof SUB_DOM, keyof IActionDomainChildOptions>]: never;
|
|
22
|
+
}): ActionDomain<TActionDomainChildDef<ACT_DOM, SUB_DOM>>;
|
|
23
|
+
action<ID extends keyof ACT_DOM["actions"] & string>(id: ID): ActionCore<ACT_DOM, ID>;
|
|
24
|
+
hydrateContext<ID extends keyof ACT_DOM["actions"] & string>(id: ID, contextData: IActionContext_Data_JsonObject): ActionContext<ACT_DOM, ID>;
|
|
25
|
+
isDomainAction<ACT extends IActionBase<any, ACT_DOM, any>>(action: ACT | unknown | null | undefined): action is TDistributedDomainActions<ACT_DOM, ACT>;
|
|
26
|
+
hydrateRequest<ID extends keyof ACT_DOM["actions"] & string, P extends IActionPayload_Request_JsonObject<ACT_DOM, ID>>(serialized: P): ActionPayload_Request<ACT_DOM, ID>;
|
|
27
|
+
hydrateResultPayload<ID extends keyof ACT_DOM["actions"] & string, R extends IActionPayload_Result_JsonObject<ACT_DOM, ID>>(serialized: R): ActionPayload_Result<ACT_DOM, ID>;
|
|
28
|
+
hydrateAnyAction<ID extends keyof ACT_DOM["actions"] & string, AJ extends TAction_Any_JsonObject<ACT_DOM, ID>>(actionJson: AJ): TNarrowActionJsonTypeToActionInstanceType<ACT_DOM, AJ, ID>;
|
|
29
|
+
runAction<ID extends keyof ACT_DOM["actions"] & string, ACT extends ActionPayload_Request<ACT_DOM, ID>>(request: ACT, options?: IExecuteActionOptions<ACT_DOM, ID>): Promise<RunningAction<ACT_DOM, ID>>;
|
|
30
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { ActionSchema } from "../Schema/ActionSchema";
|
|
2
|
+
import type { IActionErrorDeclaration, TTransportedValue } from "../Schema/ActionSchema.types";
|
|
3
|
+
export type TPossibleDomainId = string;
|
|
4
|
+
export type TPossibleDomainIdList = [TPossibleDomainId, ...TPossibleDomainId[]];
|
|
5
|
+
export type TActionDomainSchema = Record<string, ActionSchema<TTransportedValue<any, any>, TTransportedValue<any, any>, readonly IActionErrorDeclaration<any, any>[]>>;
|
|
6
|
+
/**
|
|
7
|
+
* Data shape for a domain — used for construction and as the type-level schema carrier.
|
|
8
|
+
* Does NOT include class methods.
|
|
9
|
+
*/
|
|
10
|
+
export interface IActionDomain<IDS extends TPossibleDomainIdList = TPossibleDomainIdList, SCH extends TActionDomainSchema = TActionDomainSchema> {
|
|
11
|
+
domain: IDS[0] & string;
|
|
12
|
+
allDomains: IDS;
|
|
13
|
+
actions: SCH;
|
|
14
|
+
}
|
|
15
|
+
export interface IActionRootDomain<ID extends TPossibleDomainId = TPossibleDomainId> extends IActionDomain<[ID], {}> {
|
|
16
|
+
domain: ID;
|
|
17
|
+
allDomains: [ID];
|
|
18
|
+
actions: {};
|
|
19
|
+
}
|
|
20
|
+
export interface IActionDomainChildOptions<ERR_DOMAIN extends string = string, SCHEMA extends TActionDomainSchema = TActionDomainSchema> {
|
|
21
|
+
domain: ERR_DOMAIN;
|
|
22
|
+
actions: SCHEMA;
|
|
23
|
+
}
|
|
24
|
+
export type TActionDomainChildDef<PARENT_DEF extends IActionDomain, SUB extends IActionDomainChildOptions> = {
|
|
25
|
+
domain: SUB["domain"];
|
|
26
|
+
allDomains: [SUB["domain"], ...PARENT_DEF["allDomains"]];
|
|
27
|
+
actions: SUB["actions"];
|
|
28
|
+
};
|
|
29
|
+
export type TDomainActionId<DOM extends IActionDomain> = keyof DOM["actions"] & string;
|
|
30
|
+
export type TInferInputFromSchema<SCH extends ActionSchema<any, any, any>> = SCH extends ActionSchema<infer IN, any, any> ? {
|
|
31
|
+
Input: IN[0];
|
|
32
|
+
SerdeInput: IN[1];
|
|
33
|
+
} : never;
|
|
34
|
+
export type TInferOutputFromSchema<SCH extends ActionSchema<any, any, any>> = SCH extends ActionSchema<any, infer OUT, any> ? {
|
|
35
|
+
Output: OUT[0];
|
|
36
|
+
SerdeOutput: OUT[1];
|
|
37
|
+
} : never;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { TRunningActionUpdateListener } from "../Action/RunningAction.types";
|
|
2
|
+
import type { IActionDomain } from "./ActionDomain.types";
|
|
3
|
+
export declare abstract class ActionDomainBase<ACT_DOM extends IActionDomain = IActionDomain> implements IActionDomain<ACT_DOM["allDomains"], ACT_DOM["actions"]> {
|
|
4
|
+
readonly domain: ACT_DOM["domain"];
|
|
5
|
+
readonly allDomains: ACT_DOM["allDomains"];
|
|
6
|
+
readonly actions: ACT_DOM["actions"];
|
|
7
|
+
protected _listeners: TRunningActionUpdateListener<any, any>[];
|
|
8
|
+
constructor(definition: ACT_DOM);
|
|
9
|
+
/**
|
|
10
|
+
* Add an observer that is called after every action dispatched through this domain.
|
|
11
|
+
* Returns an unsubscribe function — call it to remove the listener.
|
|
12
|
+
*/
|
|
13
|
+
addActionListener(listener: TRunningActionUpdateListener<ACT_DOM, any>): () => void;
|
|
14
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { ActionRuntime } from "../../ActionRuntime/ActionRuntime";
|
|
2
|
+
import type { IActionClientSpecifier } from "../../ActionRuntime/Client/ActionClientSpecifier";
|
|
3
|
+
import type { IExecuteActionOptions } from "../../ActionRuntime/Handler/ActionHandler.types";
|
|
4
|
+
import type { ActionPayload_Request } from "../Action/Payload/ActionPayload_Request";
|
|
5
|
+
import type { RunningAction } from "../Action/RunningAction";
|
|
6
|
+
import { ActionDomain } from "./ActionDomain";
|
|
7
|
+
import type { IActionDomain, IActionDomainChildOptions, IActionRootDomain, TActionDomainChildDef } from "./ActionDomain.types";
|
|
8
|
+
import { ActionDomainBase } from "./ActionDomainBase";
|
|
9
|
+
export declare class ActionRootDomain<ROOT_DOM extends IActionRootDomain = IActionRootDomain> extends ActionDomainBase<ROOT_DOM> {
|
|
10
|
+
readonly domainDefinition: {
|
|
11
|
+
domain: ROOT_DOM["domain"];
|
|
12
|
+
};
|
|
13
|
+
private _actionRuntimeManager;
|
|
14
|
+
constructor(domainDefinition: {
|
|
15
|
+
domain: ROOT_DOM["domain"];
|
|
16
|
+
});
|
|
17
|
+
createChildDomain<SUB_DOM extends IActionDomainChildOptions>(subDomainDef: SUB_DOM & {
|
|
18
|
+
[K in Exclude<keyof SUB_DOM, keyof IActionDomainChildOptions>]: never;
|
|
19
|
+
}): ActionDomain<TActionDomainChildDef<ROOT_DOM, SUB_DOM>>;
|
|
20
|
+
addActionRuntime(runtime: ActionRuntime): this;
|
|
21
|
+
getRuntime(clientSpecifier: IActionClientSpecifier): ActionRuntime | undefined;
|
|
22
|
+
_runAction<DOM extends IActionDomain, ID extends keyof DOM["actions"] & string = keyof DOM["actions"] & string, ACT extends ActionPayload_Request<DOM, ID> = ActionPayload_Request<DOM, ID>>(primed: ACT, options?: IExecuteActionOptions<DOM, ID>): Promise<RunningAction<DOM, ID>>;
|
|
23
|
+
}
|