@nice-code/action 0.2.1 → 0.2.2

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.
Files changed (33) hide show
  1. package/build/index.js +56 -47
  2. package/build/react-query/index.js +10 -9
  3. package/build/types/ActionDefinition/Action/Action.combined.types.d.ts +8 -8
  4. package/build/types/ActionDefinition/Action/ActionBase.d.ts +2 -2
  5. package/build/types/ActionDefinition/Action/ActionBase.types.d.ts +4 -4
  6. package/build/types/ActionDefinition/Action/Context/ActionContext.d.ts +5 -5
  7. package/build/types/ActionDefinition/Action/Context/ActionContext.types.d.ts +2 -2
  8. package/build/types/ActionDefinition/Action/Core/ActionCore.d.ts +6 -6
  9. package/build/types/ActionDefinition/Action/Core/ActionCore.types.d.ts +2 -2
  10. package/build/types/ActionDefinition/Action/Payload/ActionPayload.d.ts +1 -1
  11. package/build/types/ActionDefinition/Action/Payload/ActionPayload.types.d.ts +14 -13
  12. package/build/types/ActionDefinition/Action/Payload/ActionPayload_Progress.d.ts +1 -1
  13. package/build/types/ActionDefinition/Action/Payload/ActionPayload_Request.d.ts +6 -6
  14. package/build/types/ActionDefinition/Action/Payload/ActionPayload_Result.d.ts +3 -3
  15. package/build/types/ActionDefinition/Action/RunningAction.d.ts +1 -1
  16. package/build/types/ActionDefinition/Action/RunningAction.types.d.ts +16 -16
  17. package/build/types/ActionDefinition/Domain/ActionDomain.d.ts +14 -6
  18. package/build/types/ActionDefinition/Domain/ActionDomain.types.d.ts +6 -6
  19. package/build/types/ActionDefinition/Domain/ActionDomainBase.d.ts +3 -3
  20. package/build/types/ActionDefinition/Domain/ActionRootDomain.d.ts +1 -1
  21. package/build/types/ActionRuntime/ActionDomainManager.d.ts +1 -1
  22. package/build/types/ActionRuntime/ActionRuntime.d.ts +2 -7
  23. package/build/types/ActionRuntime/Handler/ActionHandler.d.ts +1 -1
  24. package/build/types/ActionRuntime/Handler/ActionHandler.types.d.ts +3 -6
  25. package/build/types/ActionRuntime/Handler/ExternalClient/ActionExternalClientHandler.d.ts +3 -3
  26. package/build/types/ActionRuntime/Handler/Local/ActionLocalHandler.d.ts +4 -4
  27. package/build/types/ActionRuntime/Handler/Local/ActionLocalHandler.types.d.ts +1 -1
  28. package/build/types/ActionRuntime/Routing/ActionRouter.d.ts +7 -7
  29. package/build/types/errors/err_nice_action.d.ts +2 -2
  30. package/build/types/react-query/hooks/useActionMutation.d.ts +6 -0
  31. package/build/types/react-query/hooks/useActionQuery.d.ts +15 -0
  32. package/build/types/react-query/index.d.ts +2 -72
  33. package/package.json +1 -1
package/build/index.js CHANGED
@@ -143,7 +143,7 @@ class ActionBase {
143
143
  this.id = id;
144
144
  this.domain = _domain.domain;
145
145
  this.allDomains = _domain.allDomains;
146
- this.schema = _domain.actions[id];
146
+ this.schema = _domain.actionSchema[id];
147
147
  }
148
148
  toJsonObject() {
149
149
  return {
@@ -251,8 +251,9 @@ var EActionPayloadType;
251
251
  ((EActionPayloadType2) => {
252
252
  EActionPayloadType2["request"] = "request";
253
253
  EActionPayloadType2["progress"] = "progress";
254
- EActionPayloadType2["stream"] = "stream";
255
254
  EActionPayloadType2["result"] = "result";
255
+ EActionPayloadType2["stream"] = "stream";
256
+ EActionPayloadType2["push"] = "push";
256
257
  })(EActionPayloadType ||= {});
257
258
  var EActionProgressType;
258
259
  ((EActionProgressType2) => {
@@ -572,7 +573,7 @@ class RunningAction {
572
573
  return this._completeWithResult(result);
573
574
  }
574
575
  }
575
- // ../nice-error/build/index.js
576
+ // ../../node_modules/.bun/@nice-code+error@0.1.3+7524df1edfed9f02/node_modules/@nice-code/error/build/index.js
576
577
  var ACCEPTED = 202;
577
578
  var BAD_GATEWAY = 502;
578
579
  var BAD_REQUEST = 400;
@@ -3257,7 +3258,7 @@ var EErrId_NiceAction;
3257
3258
  EErrId_NiceAction2["hydration_action_state_mismatch"] = "hydration_action_state_mismatch";
3258
3259
  EErrId_NiceAction2["hydration_action_id_not_found"] = "hydration_action_id_not_found";
3259
3260
  EErrId_NiceAction2["no_action_execution_handler"] = "no_action_execution_handler";
3260
- EErrId_NiceAction2["wire_action_not_primed_or_response"] = "wire_action_not_primed_or_response";
3261
+ EErrId_NiceAction2["wire_action_not_payload"] = "wire_action_not_payload";
3261
3262
  EErrId_NiceAction2["wire_not_action_data"] = "wire_not_action_data";
3262
3263
  EErrId_NiceAction2["client_runtime_already_registered"] = "client_runtime_already_registered";
3263
3264
  EErrId_NiceAction2["client_runtime_not_registered"] = "client_runtime_not_registered";
@@ -3295,11 +3296,11 @@ var err_nice_action = err_nice.createChildDomain({
3295
3296
  ["no_action_execution_handler" /* no_action_execution_handler */]: err({
3296
3297
  message: ({ domain, actionId, specifiedClient }) => `${specifiedClient ? ` The targeted client runtime [${specifiedClient.stringId}] has no` : "No"} action handler registered for "${actionId}" in domain "${domain}".`
3297
3298
  }),
3298
- ["wire_action_not_primed_or_response" /* wire_action_not_primed_or_response */]: err({
3299
- message: ({ domain, actionId, actionState }) => `Cannot handle wire for action "${actionId}" in domain "${domain}": expected action type of "primed" or "resolved", got "${actionState}".`
3299
+ ["wire_action_not_payload" /* wire_action_not_payload */]: err({
3300
+ message: ({ domain, actionId, actionState }) => `Cannot handle wire for action "${actionId}" in domain "${domain}": expected action form of "${"data" /* data */}" and type of "${"request" /* request */}", "${"progress" /* progress */}" or "${"result" /* result */}", got "${actionState}".`
3300
3301
  }),
3301
3302
  ["wire_not_action_data" /* wire_not_action_data */]: err({
3302
- message: () => `Cannot handle wire for action: expected an object with a "domain" property of type string and a "type" property of "primed" or "resolved".`
3303
+ message: () => `Cannot handle wire for action: expected an object with a "domain" property of type string, a "form" property of "${"data" /* data */}" and a "type" property of "${"request" /* request */}", "${"progress" /* progress */}" or "${"result" /* result */}".`
3303
3304
  }),
3304
3305
  ["client_runtime_already_registered" /* client_runtime_already_registered */]: err({
3305
3306
  message: ({ context, client }) => `Environment is already registered${context?.domain ? ` on domain "${context.domain}"` : ""} for client [${client.stringId}]. Each client specifier (exact match on all properties) may only be registered once.`
@@ -3348,22 +3349,17 @@ var isAction_Core_JsonObject = (obj) => {
3348
3349
 
3349
3350
  // src/utils/isActionPayload_Progress_JsonObject.ts
3350
3351
  var isActionPayload_Progress_JsonObject = (obj) => {
3351
- return isAction_Base_JsonObject(obj) && "input" in obj && obj.type === "progress" /* progress */;
3352
+ return isAction_Base_JsonObject(obj) && "progress" in obj && obj.form === "data" /* data */ && obj.type === "progress" /* progress */;
3352
3353
  };
3353
3354
 
3354
3355
  // src/utils/isActionPayload_Request_JsonObject.ts
3355
3356
  var isActionPayload_Request_JsonObject = (obj) => {
3356
- return isAction_Base_JsonObject(obj) && "input" in obj && obj.type === "request" /* request */;
3357
+ return isAction_Base_JsonObject(obj) && "input" in obj && obj.form === "data" /* data */ && obj.type === "request" /* request */;
3357
3358
  };
3358
3359
 
3359
3360
  // src/utils/isActionPayload_Result_JsonObject.ts
3360
3361
  var isActionPayload_Result_JsonObject = (obj) => {
3361
- if (!isAction_Base_JsonObject(obj))
3362
- return false;
3363
- if (obj.type !== "result" /* result */)
3364
- return false;
3365
- const result = obj.result;
3366
- return result != null && typeof result === "object" && typeof result.ok === "boolean" && (("output" in result) || ("error" in result));
3362
+ return isAction_Base_JsonObject(obj) && obj.result != null && obj.form === "data" /* data */ && obj.type === "result" /* result */;
3367
3363
  };
3368
3364
 
3369
3365
  // src/utils/isActionPayload_Any_JsonObject.ts
@@ -3392,12 +3388,12 @@ function isAction_Any_Instance(value) {
3392
3388
  class ActionDomainBase {
3393
3389
  domain;
3394
3390
  allDomains;
3395
- actions;
3391
+ actionSchema;
3396
3392
  _listeners = [];
3397
3393
  constructor(definition) {
3398
3394
  this.domain = definition.domain;
3399
3395
  this.allDomains = definition.allDomains;
3400
- this.actions = definition.actions;
3396
+ this.actionSchema = definition.actionSchema;
3401
3397
  }
3402
3398
  addActionListener(listener) {
3403
3399
  this._listeners.push(listener);
@@ -3410,11 +3406,13 @@ class ActionDomainBase {
3410
3406
  // src/ActionDefinition/Domain/ActionDomain.ts
3411
3407
  class ActionDomain extends ActionDomainBase {
3412
3408
  _rootDomain;
3409
+ _actionMap;
3413
3410
  constructor(definition, {
3414
3411
  rootDomain
3415
3412
  }) {
3416
3413
  super(definition);
3417
3414
  this._rootDomain = rootDomain;
3415
+ this._actionMap = this.createActionMap();
3418
3416
  }
3419
3417
  get rootDomain() {
3420
3418
  return this._rootDomain;
@@ -3428,13 +3426,19 @@ class ActionDomain extends ActionDomainBase {
3428
3426
  });
3429
3427
  }
3430
3428
  return new ActionDomain({
3431
- allDomains: [subDomainDef.domain, ...this.allDomains],
3429
+ allDomains: [...this.allDomains, subDomainDef.domain],
3432
3430
  domain: subDomainDef.domain,
3433
- actions: subDomainDef.actions
3431
+ actionSchema: subDomainDef.actions
3434
3432
  }, { rootDomain: this._rootDomain });
3435
3433
  }
3436
- action(id) {
3437
- const actionSchema = this.actions[id];
3434
+ get action() {
3435
+ return this._actionMap;
3436
+ }
3437
+ actionsMap() {
3438
+ return this._actionMap;
3439
+ }
3440
+ actionForId(id) {
3441
+ const actionSchema = this.actionSchema[id];
3438
3442
  if (!actionSchema) {
3439
3443
  throw err_nice_action.fromId("action_id_not_in_domain" /* action_id_not_in_domain */, {
3440
3444
  domain: this.domain,
@@ -3460,7 +3464,7 @@ class ActionDomain extends ActionDomainBase {
3460
3464
  isDomainAction(action) {
3461
3465
  return isAction_Any_Instance(action) && action.domain === this.domain;
3462
3466
  }
3463
- hydrateRequest(serialized) {
3467
+ hydrateRequestPayload(serialized) {
3464
3468
  if (serialized.type !== "request" /* request */) {
3465
3469
  throw err_nice_action.fromId("hydration_action_state_mismatch" /* hydration_action_state_mismatch */, {
3466
3470
  expected: "request" /* request */,
@@ -3474,7 +3478,7 @@ class ActionDomain extends ActionDomainBase {
3474
3478
  });
3475
3479
  }
3476
3480
  const id = serialized.id;
3477
- if (!this.actions[id]) {
3481
+ if (!this.actionSchema[id]) {
3478
3482
  throw err_nice_action.fromId("hydration_action_id_not_found" /* hydration_action_id_not_found */, {
3479
3483
  domain: this.domain,
3480
3484
  actionId: serialized.id
@@ -3499,7 +3503,7 @@ class ActionDomain extends ActionDomainBase {
3499
3503
  });
3500
3504
  }
3501
3505
  const id = serialized.id;
3502
- if (!this.actions[id]) {
3506
+ if (!this.actionSchema[id]) {
3503
3507
  throw err_nice_action.fromId("hydration_action_id_not_found" /* hydration_action_id_not_found */, {
3504
3508
  domain: this.domain,
3505
3509
  actionId: serialized.id
@@ -3514,13 +3518,13 @@ class ActionDomain extends ActionDomainBase {
3514
3518
  assertIsActionJson(actionJson);
3515
3519
  if (actionJson.form === "data" /* data */) {
3516
3520
  if (actionJson.type === "request" /* request */) {
3517
- return this.hydrateRequest(actionJson);
3521
+ return this.hydrateRequestPayload(actionJson);
3518
3522
  }
3519
3523
  if (actionJson.type === "result" /* result */) {
3520
3524
  return this.hydrateResultPayload(actionJson);
3521
3525
  }
3522
3526
  }
3523
- return this.action(actionJson.id);
3527
+ return this.actionForId(actionJson.id);
3524
3528
  }
3525
3529
  async runAction(request, options) {
3526
3530
  const allListeners = [
@@ -3532,6 +3536,13 @@ class ActionDomain extends ActionDomainBase {
3532
3536
  listeners: allListeners
3533
3537
  });
3534
3538
  }
3539
+ createActionMap() {
3540
+ const map = {};
3541
+ for (const id in this.actionSchema) {
3542
+ map[id] = new ActionCore(this, id);
3543
+ }
3544
+ return map;
3545
+ }
3535
3546
  }
3536
3547
  // src/ActionRuntime/ActionRuntimeManager.ts
3537
3548
  class ActionRuntimeManager {
@@ -3563,7 +3574,7 @@ class ActionRuntimeManager {
3563
3574
  if (runtime2 == null) {
3564
3575
  return;
3565
3576
  }
3566
- const handler = runtime2.getHandlerForAction(action, options);
3577
+ const handler = runtime2._getHandlerForAction(action, options);
3567
3578
  if (handler != null) {
3568
3579
  return { handler, runtime: runtime2 };
3569
3580
  }
@@ -3576,7 +3587,7 @@ class ActionRuntimeManager {
3576
3587
  }
3577
3588
  }
3578
3589
  for (const runtime2 of this._runtimes.values()) {
3579
- const handler = runtime2.getHandlerForAction(action);
3590
+ const handler = runtime2._getHandlerForAction(action);
3580
3591
  if (handler) {
3581
3592
  return { handler, runtime: runtime2 };
3582
3593
  }
@@ -3644,7 +3655,7 @@ class ActionRootDomain extends ActionDomainBase {
3644
3655
  super({
3645
3656
  domain: domainId,
3646
3657
  allDomains: [domainId],
3647
- actions: {}
3658
+ actionSchema: {}
3648
3659
  });
3649
3660
  this.domainDefinition = domainDefinition;
3650
3661
  this._actionRuntimeManager = new ActionRuntimeManager({ domain: domainId });
@@ -3658,9 +3669,9 @@ class ActionRootDomain extends ActionDomainBase {
3658
3669
  });
3659
3670
  }
3660
3671
  return new ActionDomain({
3661
- allDomains: [subDomainDef.domain, ...this.allDomains],
3672
+ allDomains: [...this.allDomains, subDomainDef.domain],
3662
3673
  domain: subDomainDef.domain,
3663
- actions: subDomainDef.actions
3674
+ actionSchema: subDomainDef.actions
3664
3675
  }, { rootDomain: this });
3665
3676
  }
3666
3677
  addActionRuntime(runtime2) {
@@ -3670,11 +3681,11 @@ class ActionRootDomain extends ActionDomainBase {
3670
3681
  getRuntime(clientSpecifier) {
3671
3682
  return this._actionRuntimeManager.getBestRuntimeForSpecifier(clientSpecifier);
3672
3683
  }
3673
- async _runAction(primed, options) {
3674
- const { handler, runtime: runtime2 } = this._actionRuntimeManager.getRuntimeAndHandlerForActionOrThrow(primed, options);
3675
- primed.context._setOriginClient(runtime2.clientSpecifier);
3684
+ async _runAction(actionPayload, options) {
3685
+ const { handler, runtime: runtime2 } = this._actionRuntimeManager.getRuntimeAndHandlerForActionOrThrow(actionPayload, options);
3686
+ actionPayload.context._setOriginClient(runtime2.clientSpecifier);
3676
3687
  const allListeners = [...this._listeners, ...options?.listeners ?? []];
3677
- const runningAction = await handler.handleActionRequest(primed, {
3688
+ const runningAction = await handler.handleActionRequest(actionPayload, {
3678
3689
  targetLocalRuntime: runtime2
3679
3690
  });
3680
3691
  runningAction.addUpdateListeners(allListeners);
@@ -3685,7 +3696,7 @@ class ActionRootDomain extends ActionDomainBase {
3685
3696
  var createActionRootDomain = (definition) => {
3686
3697
  return new ActionRootDomain(definition);
3687
3698
  };
3688
- // ../common-errors/build/index.js
3699
+ // ../../node_modules/.bun/@nice-code+common-errors@0.1.3+51eba3db27e14993/node_modules/@nice-code/common-errors/build/index.js
3689
3700
  var ACCEPTED2 = 202;
3690
3701
  var BAD_GATEWAY2 = 502;
3691
3702
  var BAD_REQUEST2 = 400;
@@ -6586,7 +6597,7 @@ class ActionRuntime {
6586
6597
  resolveIncomingActionPayload(json) {
6587
6598
  if (json.type === "request" /* request */) {
6588
6599
  this.handleActionPayloadWire(json).catch((err3) => {
6589
- console.error(`[ActionRuntime] Incoming primed action [${json.domain}:${json.id}] unhandled:`, err3);
6600
+ console.error(`[ActionRuntime] Incoming action [${json.domain}:${json.id}:${json.form}:${json.type}] unhandled:`, err3);
6590
6601
  });
6591
6602
  return;
6592
6603
  }
@@ -6595,10 +6606,8 @@ class ActionRuntime {
6595
6606
  async handleActionPayloadWire(wire) {
6596
6607
  let action;
6597
6608
  if (isActionPayload_Any_JsonObject(wire)) {
6598
- const domain = this.actionRouter.domainManager.getActionDomain(wire);
6599
- if (domain) {
6600
- action = domain.hydrateAnyAction(wire);
6601
- }
6609
+ const domain = this.actionRouter.domainManager.getActionDomainOrThrow(wire);
6610
+ action = domain.hydrateAnyAction(wire);
6602
6611
  }
6603
6612
  if (action == null) {
6604
6613
  throw err_nice_action.fromId("wire_not_action_data" /* wire_not_action_data */);
@@ -6619,7 +6628,7 @@ class ActionRuntime {
6619
6628
  label: `Handling incoming action payloads of type "${action.type}"`
6620
6629
  });
6621
6630
  }
6622
- getHandlerForAction(action, options) {
6631
+ _getHandlerForAction(action, options) {
6623
6632
  const handlers = this.actionRouter.getRouteDataEntriesForAction(action);
6624
6633
  const targetExternalClient = options?.targetExternalClient;
6625
6634
  const possibleHandlers = handlers.filter((handler2) => {
@@ -6658,7 +6667,7 @@ class ActionRuntime {
6658
6667
  return handler;
6659
6668
  }
6660
6669
  getHandlerForActionOrThrow(action, options) {
6661
- const handler = this.getHandlerForAction(action, options);
6670
+ const handler = this._getHandlerForAction(action, options);
6662
6671
  if (handler == null) {
6663
6672
  throw err_nice_action.fromId("no_action_execution_handler" /* no_action_execution_handler */, {
6664
6673
  actionId: action.id,
@@ -7196,9 +7205,9 @@ class TransportWebSocket extends Transport {
7196
7205
  };
7197
7206
  ws.addEventListener("message", (event) => {
7198
7207
  if (typeof event.data === "string") {
7199
- const actionJson = wsData.formatMessage?.incoming?.(event.data) ?? this._parseActionMessage(event.data);
7200
- if (actionJson != null) {
7201
- this.resolvers.onIncomingActionDataJson(actionJson);
7208
+ const rawJson = wsData.formatMessage?.incoming?.(event.data) ?? this._parseActionMessage(event.data);
7209
+ if (rawJson != null && isActionPayload_Any_JsonObject(rawJson)) {
7210
+ this.resolvers.onIncomingActionDataJson(rawJson);
7202
7211
  }
7203
7212
  }
7204
7213
  });
@@ -7426,7 +7435,7 @@ class ActionLocalHandler extends ActionHandler {
7426
7435
  async handlePayloadWireOrThrow(wire, config) {
7427
7436
  const hydratedAction = this.actionRouter.domainManager.hydrateActionPayload(wire);
7428
7437
  if (!(hydratedAction instanceof ActionPayload_Request)) {
7429
- throw err_nice_action.fromId("wire_action_not_primed_or_response" /* wire_action_not_primed_or_response */, {
7438
+ throw err_nice_action.fromId("wire_action_not_payload" /* wire_action_not_payload */, {
7430
7439
  domain: hydratedAction.domain,
7431
7440
  actionId: hydratedAction.id,
7432
7441
  actionState: hydratedAction.type ?? hydratedAction.form
@@ -3099,7 +3099,15 @@ function useMutation(options, queryClient) {
3099
3099
  }
3100
3100
  return { ...result, mutate, mutateAsync: result.mutate };
3101
3101
  }
3102
- // src/react-query/index.ts
3102
+ // src/react-query/hooks/useActionMutation.ts
3103
+ function useActionMutation(action, options) {
3104
+ const mutationOptions2 = options ?? {};
3105
+ return useMutation({
3106
+ mutationFn: (input) => action.request(input).runToOutput(),
3107
+ ...mutationOptions2
3108
+ });
3109
+ }
3110
+ // src/react-query/hooks/useActionQuery.ts
3103
3111
  function niceActionQueryKey(action, input) {
3104
3112
  if (input === undefined) {
3105
3113
  return ["nice-action", action.domain, action.allDomains, action.id];
@@ -3115,15 +3123,8 @@ function useNiceQuery(action, input, options) {
3115
3123
  ...queryOptions2
3116
3124
  });
3117
3125
  }
3118
- function useNiceMutation(action, options) {
3119
- const mutationOptions2 = options ?? {};
3120
- return useMutation({
3121
- mutationFn: (input) => action.request(input).runToOutput(),
3122
- ...mutationOptions2
3123
- });
3124
- }
3125
3126
  export {
3126
3127
  useNiceQuery,
3127
- useNiceMutation,
3128
+ useActionMutation,
3128
3129
  niceActionQueryKey
3129
3130
  };
@@ -12,26 +12,26 @@ import type { ActionPayload_Result } from "./Payload/ActionPayload_Result";
12
12
  * Distributes a union ID into a proper discriminated union of ActionPayload_Request instances,
13
13
  * so that narrowing on `.id` also narrows `.input`.
14
14
  */
15
- export type TDistributeActionPayload_Request<DOM extends IActionDomain, ID extends keyof DOM["actions"] & string> = ID extends keyof DOM["actions"] & string ? ActionPayload_Request<DOM, ID> : never;
15
+ export type TDistributeActionPayload_Request<DOM extends IActionDomain, ID extends keyof DOM["actionSchema"] & string> = ID extends keyof DOM["actionSchema"] & string ? ActionPayload_Request<DOM, ID> : never;
16
16
  /**
17
17
  * Distributes a union ID into a proper discriminated union of ActionPayload_Result instances,
18
18
  * so that narrowing on `.id` also narrows `.result`.
19
19
  */
20
- export type TDistributeActionPayload_Result<DOM extends IActionDomain, ID extends keyof DOM["actions"] & string> = ID extends keyof DOM["actions"] & string ? ActionPayload_Result<DOM, ID> : never;
21
- 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>;
20
+ export type TDistributeActionPayload_Result<DOM extends IActionDomain, ID extends keyof DOM["actionSchema"] & string> = ID extends keyof DOM["actionSchema"] & string ? ActionPayload_Result<DOM, ID> : never;
21
+ export type TAction_Any_Instance<DOM extends IActionDomain, ID extends keyof DOM["actionSchema"] & string = keyof DOM["actionSchema"] & string> = ActionCore<DOM, ID> | TActionPayload_Any_Instance<DOM, ID> | ActionContext<DOM, ID>;
22
22
  /**
23
23
  *
24
24
  * COMBINED JSON TYPES
25
25
  *
26
26
  */
27
- 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>;
27
+ export type TAction_Any_JsonObject<DOM extends IActionDomain = IActionDomain, ID extends keyof DOM["actionSchema"] & string = keyof DOM["actionSchema"] & string> = IActionCore_JsonObject<DOM, ID> | TActionPayload_Any_JsonObject<DOM, ID> | IActionContext_JsonObject<DOM, ID>;
28
28
  /**
29
29
  *
30
30
  * UTILITY TYPES
31
31
  *
32
32
  */
33
33
  export type TDistributedDomainActions<DOM extends IActionDomain, ACT extends IActionBase<any, DOM, any>> = {
34
- [ID in keyof DOM["actions"] & string]: TNarrowActionType<DOM, ACT, ID>;
35
- }[keyof DOM["actions"] & string];
36
- 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;
37
- 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;
34
+ [ID in keyof DOM["actionSchema"] & string]: TNarrowActionType<DOM, ACT, ID>;
35
+ }[keyof DOM["actionSchema"] & string];
36
+ export type TNarrowActionType<DOM extends IActionDomain, ACT extends IActionBase<any, DOM, any>, ID extends keyof DOM["actionSchema"] & string = keyof DOM["actionSchema"] & 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;
37
+ export type TNarrowActionJsonTypeToActionInstanceType<DOM extends IActionDomain, ACT extends TAction_Any_JsonObject<DOM>, ID extends keyof DOM["actionSchema"] & string = keyof DOM["actionSchema"] & 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;
@@ -1,13 +1,13 @@
1
1
  import type { ActionDomain } from "../Domain/ActionDomain";
2
2
  import type { IActionDomain } from "../Domain/ActionDomain.types";
3
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> {
4
+ export declare abstract class ActionBase<FORM extends EActionForm, DOM extends IActionDomain, ID extends keyof DOM["actionSchema"] & string = keyof DOM["actionSchema"] & string> implements IActionBase<FORM, DOM, ID> {
5
5
  readonly form: FORM;
6
6
  readonly _domain: ActionDomain<DOM>;
7
7
  readonly id: ID;
8
8
  readonly domain: DOM["domain"];
9
9
  readonly allDomains: DOM["allDomains"];
10
- readonly schema: DOM["actions"][ID];
10
+ readonly schema: DOM["actionSchema"][ID];
11
11
  constructor(form: FORM, _domain: ActionDomain<DOM>, id: ID);
12
12
  protected toJsonObject(): IActionBase_JsonObject<FORM, DOM, ID>;
13
13
  protected toJsonString(): string;
@@ -7,16 +7,16 @@ export declare enum EActionForm {
7
7
  }
8
8
  export interface INiceActionIdAndDomain<DOM extends IActionDomain = IActionDomain> {
9
9
  domain: DOM["domain"];
10
- id: keyof DOM["actions"] & string;
10
+ id: keyof DOM["actionSchema"] & string;
11
11
  }
12
- export interface IActionBase<FORM extends EActionForm, DOM extends IActionDomain, ID extends keyof DOM["actions"] & string = keyof DOM["actions"] & string> extends INiceActionIdAndDomain<DOM> {
12
+ export interface IActionBase<FORM extends EActionForm, DOM extends IActionDomain, ID extends keyof DOM["actionSchema"] & string = keyof DOM["actionSchema"] & string> extends INiceActionIdAndDomain<DOM> {
13
13
  id: ID;
14
14
  form: FORM;
15
15
  _domain: ActionDomain<DOM>;
16
16
  allDomains: DOM["allDomains"];
17
- schema: DOM["actions"][ID];
17
+ schema: DOM["actionSchema"][ID];
18
18
  }
19
- export interface IActionBase_JsonObject<FORM extends EActionForm = EActionForm, DOM extends IActionDomain = IActionDomain, ID extends keyof DOM["actions"] & string = keyof DOM["actions"] & string> {
19
+ export interface IActionBase_JsonObject<FORM extends EActionForm = EActionForm, DOM extends IActionDomain = IActionDomain, ID extends keyof DOM["actionSchema"] & string = keyof DOM["actionSchema"] & string> {
20
20
  form: FORM;
21
21
  domain: DOM["domain"];
22
22
  allDomains: DOM["allDomains"];
@@ -4,7 +4,7 @@ import type { IActionDomain, TInferInputFromSchema, TInferOutputFromSchema } fro
4
4
  import { ActionBase } from "../ActionBase";
5
5
  import { EActionForm } from "../ActionBase.types";
6
6
  import type { IActionContext, IActionContext_Data, IActionContext_Data_JsonObject, IActionContext_JsonObject, IActionRouteItem } from "./ActionContext.types";
7
- 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> {
7
+ export declare class ActionContext<DOM extends IActionDomain, ID extends keyof DOM["actionSchema"] & string = keyof DOM["actionSchema"] & string> extends ActionBase<EActionForm.context, DOM, ID> implements IActionContext<DOM, ID> {
8
8
  readonly _domain: ActionDomain<DOM>;
9
9
  readonly form = EActionForm.context;
10
10
  readonly _routing: IActionRouteItem[];
@@ -18,8 +18,8 @@ export declare class ActionContext<DOM extends IActionDomain, ID extends keyof D
18
18
  toJsonObject(): IActionContext_JsonObject<DOM, ID>;
19
19
  get routing(): IActionRouteItem[];
20
20
  addRouteItem(item: IActionRouteItem): void;
21
- deserializeInput(serialized: TInferInputFromSchema<DOM["actions"][ID]>["SerdeInput"]): TInferInputFromSchema<DOM["actions"][ID]>["Input"];
22
- serializeInput(raw: TInferInputFromSchema<DOM["actions"][ID]>["Input"]): TInferInputFromSchema<DOM["actions"][ID]>["SerdeInput"];
23
- validateInput(input: unknown): TInferInputFromSchema<DOM["actions"][ID]>["Input"];
24
- validateOutput(output: unknown): TInferOutputFromSchema<DOM["actions"][ID]>["Output"];
21
+ deserializeInput(serialized: TInferInputFromSchema<DOM["actionSchema"][ID]>["SerdeInput"]): TInferInputFromSchema<DOM["actionSchema"][ID]>["Input"];
22
+ serializeInput(raw: TInferInputFromSchema<DOM["actionSchema"][ID]>["Input"]): TInferInputFromSchema<DOM["actionSchema"][ID]>["SerdeInput"];
23
+ validateInput(input: unknown): TInferInputFromSchema<DOM["actionSchema"][ID]>["Input"];
24
+ validateOutput(output: unknown): TInferOutputFromSchema<DOM["actionSchema"][ID]>["Output"];
25
25
  }
@@ -13,7 +13,7 @@ export interface IActionContext_Data {
13
13
  routing: IActionRouteItem[];
14
14
  originClient: ActionClientSpecifier;
15
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 {
16
+ export interface IActionContext<DOM extends IActionDomain, ID extends keyof DOM["actionSchema"] & string = keyof DOM["actionSchema"] & string> extends IActionBase<EActionForm.context, DOM, ID>, IActionContext_Data {
17
17
  }
18
18
  /**
19
19
  *
@@ -31,5 +31,5 @@ export interface IActionContext_Data_JsonObject {
31
31
  routing: IActionRouteItem_JsonObject[];
32
32
  originClient: IActionClientSpecifier;
33
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 {
34
+ export interface IActionContext_JsonObject<DOM extends IActionDomain = IActionDomain, ID extends keyof DOM["actionSchema"] & string = keyof DOM["actionSchema"] & string> extends IActionBase_JsonObject<EActionForm.context, DOM, ID>, IActionContext_Data_JsonObject {
35
35
  }
@@ -5,15 +5,15 @@ import { ActionBase } from "../ActionBase";
5
5
  import { EActionForm, type IActionBase, type IActionBase_JsonObject } from "../ActionBase.types";
6
6
  import { ActionPayload_Request } from "../Payload/ActionPayload_Request";
7
7
  import type { IActionCore } from "./ActionCore.types";
8
- 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> {
8
+ export declare class ActionCore<DOM extends IActionDomain, ID extends keyof DOM["actionSchema"] & string = keyof DOM["actionSchema"] & string> extends ActionBase<EActionForm.core, DOM, ID> implements IActionCore<DOM, ID> {
9
9
  readonly _domain: ActionDomain<DOM>;
10
10
  readonly form = EActionForm.core;
11
11
  constructor(_domain: ActionDomain<DOM>, id: ID);
12
12
  is<ACT extends IActionBase<any, any, any>>(action: ACT | unknown | null | undefined): action is TNarrowActionType<DOM, ACT, ID>;
13
13
  toJsonObject(): IActionBase_JsonObject<EActionForm.core, DOM, ID>;
14
- request(input: TInferInputFromSchema<DOM["actions"][ID]>["Input"]): ActionPayload_Request<DOM, ID>;
15
- deserializeInput(serialized: TInferInputFromSchema<DOM["actions"][ID]>["SerdeInput"]): TInferInputFromSchema<DOM["actions"][ID]>["Input"];
16
- serializeInput(raw: TInferInputFromSchema<DOM["actions"][ID]>["Input"]): TInferInputFromSchema<DOM["actions"][ID]>["SerdeInput"];
17
- validateInput(input: unknown): TInferInputFromSchema<DOM["actions"][ID]>["Input"];
18
- validateOutput(output: unknown): TInferOutputFromSchema<DOM["actions"][ID]>["Output"];
14
+ request(input: TInferInputFromSchema<DOM["actionSchema"][ID]>["Input"]): ActionPayload_Request<DOM, ID>;
15
+ deserializeInput(serialized: TInferInputFromSchema<DOM["actionSchema"][ID]>["SerdeInput"]): TInferInputFromSchema<DOM["actionSchema"][ID]>["Input"];
16
+ serializeInput(raw: TInferInputFromSchema<DOM["actionSchema"][ID]>["Input"]): TInferInputFromSchema<DOM["actionSchema"][ID]>["SerdeInput"];
17
+ validateInput(input: unknown): TInferInputFromSchema<DOM["actionSchema"][ID]>["Input"];
18
+ validateOutput(output: unknown): TInferOutputFromSchema<DOM["actionSchema"][ID]>["Output"];
19
19
  }
@@ -1,8 +1,8 @@
1
1
  import type { IActionDomain } from "../../Domain/ActionDomain.types";
2
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> {
3
+ export interface IActionCore<DOM extends IActionDomain, ID extends keyof DOM["actionSchema"] & string = keyof DOM["actionSchema"] & string> extends IActionBase<EActionForm.core, DOM, ID> {
4
4
  }
5
- export type IActionCore_JsonObject<DOM extends IActionDomain = IActionDomain, ID extends keyof DOM["actions"] & string = keyof DOM["actions"] & string> = {
5
+ export type IActionCore_JsonObject<DOM extends IActionDomain = IActionDomain, ID extends keyof DOM["actionSchema"] & string = keyof DOM["actionSchema"] & string> = {
6
6
  form: EActionForm.core;
7
7
  domain: DOM["domain"];
8
8
  allDomains: DOM["allDomains"];
@@ -3,7 +3,7 @@ import { ActionBase } from "../ActionBase";
3
3
  import { EActionForm } from "../ActionBase.types";
4
4
  import type { ActionContext } from "../Context/ActionContext";
5
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> {
6
+ export declare abstract class ActionPayload<DT extends EActionPayloadType, DOM extends IActionDomain, ID extends keyof DOM["actionSchema"] & string = keyof DOM["actionSchema"] & string> extends ActionBase<EActionForm.data, DOM, ID> implements IActionPayload_Base<DT, DOM, ID> {
7
7
  readonly form: EActionForm.data;
8
8
  readonly type: DT;
9
9
  readonly context: ActionContext<DOM, ID>;
@@ -11,13 +11,14 @@ import type { ActionPayload_Result } from "./ActionPayload_Result";
11
11
  export declare enum EActionPayloadType {
12
12
  request = "request",
13
13
  progress = "progress",
14
+ result = "result",
14
15
  stream = "stream",
15
- result = "result"
16
+ push = "push"
16
17
  }
17
18
  export interface IActionPayload_Data_Base {
18
19
  time: number;
19
20
  }
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
+ export interface IActionPayload_Base<DT extends EActionPayloadType, DOM extends IActionDomain, ID extends keyof DOM["actionSchema"] & string> extends IActionBase<EActionForm.data, DOM, ID>, IActionPayload_Data_Base {
21
22
  readonly type: DT;
22
23
  readonly context: ActionContext<DOM, ID>;
23
24
  }
@@ -42,8 +43,8 @@ export type TActionResultOutcome<OUT, ERR> = {
42
43
  ok: false;
43
44
  error: ERR;
44
45
  };
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]>>;
46
+ export interface IActionPayload_Result<DOM extends IActionDomain, ID extends keyof DOM["actionSchema"] & string> extends IActionPayload_Base<EActionPayloadType.result, DOM, ID> {
47
+ readonly result: TActionResultOutcome<TInferOutputFromSchema<DOM["actionSchema"][ID]>["Output"], TInferActionError<DOM["actionSchema"][ID]>>;
47
48
  }
48
49
  /**
49
50
  *
@@ -68,7 +69,7 @@ export interface IActionProgress_Custom {
68
69
  data: any;
69
70
  }
70
71
  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
+ export interface IActionPayload_Progress<DOM extends IActionDomain, ID extends keyof DOM["actionSchema"] & string> extends IActionPayload_Base<EActionPayloadType.progress, DOM, ID> {
72
73
  readonly progress: TActionProgress;
73
74
  }
74
75
  /**
@@ -78,22 +79,22 @@ export interface IActionPayload_Progress<DOM extends IActionDomain, ID extends k
78
79
  * [ ]
79
80
  *
80
81
  */
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
+ export interface IActionPayload_Base_JsonObject<DT extends EActionPayloadType, DOM extends IActionDomain = IActionDomain, ID extends keyof DOM["actionSchema"] & string = keyof DOM["actionSchema"] & string> extends IActionBase_JsonObject<EActionForm.data, DOM, ID> {
82
83
  type: DT;
83
84
  context: IActionContext_Data_JsonObject;
84
85
  time: number;
85
86
  }
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
+ export interface IActionPayload_Request_JsonObject<DOM extends IActionDomain = IActionDomain, ID extends keyof DOM["actionSchema"] & string = keyof DOM["actionSchema"] & string> extends IActionPayload_Base_JsonObject<EActionPayloadType.request, DOM, ID> {
87
88
  type: EActionPayloadType.request;
88
- input: TInferInputFromSchema<DOM["actions"][ID]>["SerdeInput"];
89
+ input: TInferInputFromSchema<DOM["actionSchema"][ID]>["SerdeInput"];
89
90
  }
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
+ export interface IActionPayload_Progress_JsonObject<DOM extends IActionDomain = IActionDomain, ID extends keyof DOM["actionSchema"] & string = keyof DOM["actionSchema"] & string> extends IActionPayload_Base_JsonObject<EActionPayloadType.progress, DOM, ID> {
91
92
  type: EActionPayloadType.progress;
92
93
  progress: TActionProgress;
93
94
  }
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
+ export interface IActionPayload_Result_JsonObject<DOM extends IActionDomain = IActionDomain, ID extends keyof DOM["actionSchema"] & string = keyof DOM["actionSchema"] & string> extends IActionPayload_Base_JsonObject<EActionPayloadType.result, DOM, ID> {
95
96
  type: EActionPayloadType.result;
96
- result: TActionResultOutcome<TInferOutputFromSchema<DOM["actions"][ID]>["Output"], TInferActionError<DOM["actions"][ID]>>;
97
+ result: TActionResultOutcome<TInferOutputFromSchema<DOM["actionSchema"][ID]>["Output"], TInferActionError<DOM["actionSchema"][ID]>>;
97
98
  }
98
99
  /**
99
100
  *
@@ -102,5 +103,5 @@ export interface IActionPayload_Result_JsonObject<DOM extends IActionDomain = IA
102
103
  * [ ]
103
104
  *
104
105
  */
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>;
106
+ export type TActionPayload_Any_Instance<DOM extends IActionDomain = IActionDomain, ID extends keyof DOM["actionSchema"] & string = keyof DOM["actionSchema"] & string> = ActionPayload_Request<DOM, ID> | ActionPayload_Result<DOM, ID> | ActionPayload_Progress<DOM, ID>;
107
+ export type TActionPayload_Any_JsonObject<DOM extends IActionDomain = IActionDomain, ID extends keyof DOM["actionSchema"] & string = keyof DOM["actionSchema"] & string> = IActionPayload_Request_JsonObject<DOM, ID> | IActionPayload_Progress_JsonObject<DOM, ID> | IActionPayload_Result_JsonObject<DOM, ID>;
@@ -4,7 +4,7 @@ import { ActionPayload } from "./ActionPayload";
4
4
  import type { IActionPayload_Data_Base, IActionPayload_Progress, IActionPayload_Progress_JsonObject, TActionProgress } from "./ActionPayload.types";
5
5
  import { EActionPayloadType } from "./ActionPayload.types";
6
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> {
7
+ export declare class ActionPayload_Progress<DOM extends IActionDomain, ID extends keyof DOM["actionSchema"] & string = keyof DOM["actionSchema"] & string> extends ActionPayload<EActionPayloadType.progress, DOM, ID> implements IActionPayload_Progress<DOM, ID> {
8
8
  readonly progress: TActionProgress;
9
9
  constructor(params: {
10
10
  context: ActionContext<DOM, ID>;
@@ -8,17 +8,17 @@ import type { IActionPayload_Data_Base, TActionProgress } from "./ActionPayload.
8
8
  import { EActionPayloadType, type IActionPayload_Request_JsonObject } from "./ActionPayload.types";
9
9
  import { ActionPayload_Progress } from "./ActionPayload_Progress";
10
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"];
11
+ export declare class ActionPayload_Request<DOM extends IActionDomain, ID extends keyof DOM["actionSchema"] & string = keyof DOM["actionSchema"] & string> extends ActionPayload<EActionPayloadType.request, DOM, ID> {
12
+ readonly input: TInferInputFromSchema<DOM["actionSchema"][ID]>["Input"];
13
13
  constructor(params: {
14
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>;
15
+ }, input: TInferInputFromSchema<DOM["actionSchema"][ID]>["Input"], data: IActionPayload_Data_Base);
16
+ successResult(...args: [TInferOutputFromSchema<DOM["actionSchema"][ID]>["Output"]] extends [never] ? [] | [output: TInferOutputFromSchema<DOM["actionSchema"][ID]>["Output"]] : [output: TInferOutputFromSchema<DOM["actionSchema"][ID]>["Output"]]): ActionPayload_Result<DOM, ID>;
17
+ errorResult(err: TInferActionError<DOM["actionSchema"][ID]>): ActionPayload_Result<DOM, ID>;
18
18
  progress(progress: TActionProgress): ActionPayload_Progress<DOM, ID>;
19
19
  toJsonObject(): IActionPayload_Request_JsonObject<DOM, ID>;
20
20
  toJsonString(): string;
21
- runToOutput(options?: IExecuteActionOptions<DOM, ID>): Promise<TInferOutputFromSchema<DOM["actions"][ID]>["Output"]>;
21
+ runToOutput(options?: IExecuteActionOptions<DOM, ID>): Promise<TInferOutputFromSchema<DOM["actionSchema"][ID]>["Output"]>;
22
22
  runToResultPayload(options?: IExecuteActionOptions<DOM, ID>): Promise<ActionPayload_Result<DOM, ID>>;
23
23
  run(options?: IExecuteActionOptions<DOM, ID>): Promise<RunningAction<DOM, ID>>;
24
24
  }
@@ -5,11 +5,11 @@ import { ActionPayload } from "./ActionPayload";
5
5
  import type { IActionPayload_Data_Base, TActionResultOutcome } from "./ActionPayload.types";
6
6
  import { EActionPayloadType, type IActionPayload_Result_JsonObject } from "./ActionPayload.types";
7
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]>>;
8
+ export declare class ActionPayload_Result<DOM extends IActionDomain, ID extends keyof DOM["actionSchema"] & string = keyof DOM["actionSchema"] & string> extends ActionPayload<EActionPayloadType.result, DOM, ID> {
9
+ readonly result: TActionResultOutcome<TInferOutputFromSchema<DOM["actionSchema"][ID]>["Output"], TInferActionError<DOM["actionSchema"][ID]>>;
10
10
  constructor(params: {
11
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);
12
+ } | ActionPayload_Request<DOM, ID>, result: TActionResultOutcome<TInferOutputFromSchema<DOM["actionSchema"][ID]>["Output"], TInferActionError<DOM["actionSchema"][ID]>>, data: IActionPayload_Data_Base);
13
13
  toJsonObject(): IActionPayload_Result_JsonObject<DOM, ID>;
14
14
  toJsonString(): string;
15
15
  toHttpResponse({ useErrorStatus }?: {
@@ -5,7 +5,7 @@ import { type IActionPayload_Result_JsonObject } from "./Payload/ActionPayload.t
5
5
  import type { ActionPayload_Progress } from "./Payload/ActionPayload_Progress";
6
6
  import type { ActionPayload_Result } from "./Payload/ActionPayload_Result";
7
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> {
8
+ export declare class RunningAction<DOM extends IActionDomain, ID extends keyof DOM["actionSchema"] & string = keyof DOM["actionSchema"] & string> implements IRunningActionUserMethods<DOM, ID> {
9
9
  protected _state: IRunningActionState<DOM, ID>;
10
10
  readonly context: ActionContext<DOM, ID>;
11
11
  readonly cuid: string;
@@ -10,12 +10,12 @@ export declare enum ERunningActionState {
10
10
  running = "running",
11
11
  completed = "completed"
12
12
  }
13
- export interface IRunningActionState<DOM extends IActionDomain, ID extends keyof DOM["actions"] & string> {
13
+ export interface IRunningActionState<DOM extends IActionDomain, ID extends keyof DOM["actionSchema"] & string> {
14
14
  request: ActionPayload_Request<DOM, ID>;
15
15
  progress: ActionPayload_Progress<DOM, ID>[];
16
16
  result?: ActionPayload_Result<DOM, ID>;
17
17
  }
18
- export interface IRunningActionState_ConstructorParams<DOM extends IActionDomain, ID extends keyof DOM["actions"] & string> {
18
+ export interface IRunningActionState_ConstructorParams<DOM extends IActionDomain, ID extends keyof DOM["actionSchema"] & string> {
19
19
  context: ActionContext<DOM, ID>;
20
20
  request: ActionPayload_Request<DOM, ID>;
21
21
  progress?: ActionPayload_Progress<DOM, ID>[];
@@ -26,14 +26,14 @@ export declare enum ERunningActionUpdateType {
26
26
  progress = "progress",
27
27
  finished = "finished"
28
28
  }
29
- export interface IRunningActionEvent_Base<T extends ERunningActionUpdateType, DOM extends IActionDomain, ID extends keyof DOM["actions"] & string = keyof DOM["actions"] & string> {
29
+ export interface IRunningActionEvent_Base<T extends ERunningActionUpdateType, DOM extends IActionDomain, ID extends keyof DOM["actionSchema"] & string = keyof DOM["actionSchema"] & string> {
30
30
  type: T;
31
31
  runningAction: RunningAction<DOM, ID>;
32
32
  time: number;
33
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> {
34
+ export interface IRunningActionUpdate_Started<DOM extends IActionDomain, ID extends keyof DOM["actionSchema"] & string = keyof DOM["actionSchema"] & string> extends IRunningActionEvent_Base<ERunningActionUpdateType.started, DOM, ID> {
35
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> {
36
+ export interface IRunningActionUpdate_Progress<DOM extends IActionDomain, ID extends keyof DOM["actionSchema"] & string = keyof DOM["actionSchema"] & string> extends IRunningActionEvent_Base<ERunningActionUpdateType.progress, DOM, ID> {
37
37
  progress: TActionProgress;
38
38
  }
39
39
  export declare enum ERunningActionFinishedType {
@@ -41,29 +41,29 @@ export declare enum ERunningActionFinishedType {
41
41
  failed = "failed",
42
42
  success = "success"
43
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> {
44
+ export interface IRunningActionUpdate_Finished<FT extends ERunningActionFinishedType, DOM extends IActionDomain, ID extends keyof DOM["actionSchema"] & string = keyof DOM["actionSchema"] & string> extends IRunningActionEvent_Base<ERunningActionUpdateType.finished, DOM, ID> {
45
45
  finishType: FT;
46
46
  reason?: unknown;
47
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> {
48
+ export interface IRunningActionUpdate_Abort<DOM extends IActionDomain, ID extends keyof DOM["actionSchema"] & string = keyof DOM["actionSchema"] & string> extends IRunningActionUpdate_Finished<ERunningActionFinishedType.aborted, DOM, ID> {
49
49
  reason?: unknown;
50
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]>;
51
+ export interface IRunningActionUpdate_Failed<DOM extends IActionDomain, ID extends keyof DOM["actionSchema"] & string = keyof DOM["actionSchema"] & string> extends IRunningActionUpdate_Finished<ERunningActionFinishedType.failed, DOM, ID> {
52
+ error: TInferActionError<DOM["actionSchema"][ID]>;
53
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> {
54
+ export interface IRunningActionUpdate_Success<DOM extends IActionDomain, ID extends keyof DOM["actionSchema"] & string = keyof DOM["actionSchema"] & string> extends IRunningActionUpdate_Finished<ERunningActionFinishedType.success, DOM, ID> {
55
55
  response: ActionPayload_Result<DOM, ID>;
56
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;
57
+ export type TRunningActionUpdateFinished<DOM extends IActionDomain, ID extends keyof DOM["actionSchema"] & string = keyof DOM["actionSchema"] & string> = IRunningActionUpdate_Abort<DOM, ID> | IRunningActionUpdate_Failed<DOM, ID> | IRunningActionUpdate_Success<DOM, ID>;
58
+ export type TRunningActionUpdate<DOM extends IActionDomain, ID extends keyof DOM["actionSchema"] & string = keyof DOM["actionSchema"] & string> = IRunningActionUpdate_Started<DOM, ID> | IRunningActionUpdate_Progress<DOM, ID> | TRunningActionUpdateFinished<DOM, ID>;
59
+ export type TRunningActionUpdateListener<DOM extends IActionDomain, ID extends keyof DOM["actionSchema"] & string = keyof DOM["actionSchema"] & string> = (update: TRunningActionUpdate<DOM, ID>) => void;
60
60
  /**
61
61
  * Distributes a union ID into a proper discriminated union of RunningAction update events,
62
62
  * so that narrowing on `update.runningAction.id` also narrows `update.runningAction`'s input/output types.
63
63
  */
64
- export type TDistributeRunningActionUpdate<DOM extends IActionDomain, ID extends keyof DOM["actions"] & string = keyof DOM["actions"] & string> = ID extends keyof DOM["actions"] & string ? TRunningActionUpdate<DOM, ID> : never;
65
- export type TDistributeRunningActionUpdateListener<DOM extends IActionDomain, ID extends keyof DOM["actions"] & string = keyof DOM["actions"] & string> = (update: TDistributeRunningActionUpdate<DOM, ID>) => void;
66
- export interface IRunningActionUserMethods<DOM extends IActionDomain, ID extends keyof DOM["actions"] & string> {
64
+ export type TDistributeRunningActionUpdate<DOM extends IActionDomain, ID extends keyof DOM["actionSchema"] & string = keyof DOM["actionSchema"] & string> = ID extends keyof DOM["actionSchema"] & string ? TRunningActionUpdate<DOM, ID> : never;
65
+ export type TDistributeRunningActionUpdateListener<DOM extends IActionDomain, ID extends keyof DOM["actionSchema"] & string = keyof DOM["actionSchema"] & string> = (update: TDistributeRunningActionUpdate<DOM, ID>) => void;
66
+ export interface IRunningActionUserMethods<DOM extends IActionDomain, ID extends keyof DOM["actionSchema"] & string> {
67
67
  waitForResultPayload(): Promise<ActionPayload_Result<DOM, ID>>;
68
68
  addUpdateListeners(listeners: TRunningActionUpdateListener<DOM, ID>[]): () => void;
69
69
  iterateUpdates(): AsyncIterable<TRunningActionUpdate<DOM, ID>>;
@@ -10,8 +10,12 @@ import type { RunningAction } from "../Action/RunningAction";
10
10
  import type { IActionDomain, IActionDomainChildOptions, TActionDomainChildDef } from "./ActionDomain.types";
11
11
  import { ActionDomainBase } from "./ActionDomainBase";
12
12
  import { type ActionRootDomain } from "./ActionRootDomain";
13
+ type TActionMap<ACT_DOM extends IActionDomain> = {
14
+ [K in keyof ACT_DOM["actionSchema"] & string]: ActionCore<ACT_DOM, K>;
15
+ };
13
16
  export declare class ActionDomain<ACT_DOM extends IActionDomain = IActionDomain> extends ActionDomainBase<ACT_DOM> {
14
17
  private _rootDomain;
18
+ private readonly _actionMap;
15
19
  constructor(definition: ACT_DOM, { rootDomain, }: {
16
20
  rootDomain: ActionRootDomain<any>;
17
21
  });
@@ -19,11 +23,15 @@ export declare class ActionDomain<ACT_DOM extends IActionDomain = IActionDomain>
19
23
  createChildDomain<SUB_DOM extends IActionDomainChildOptions>(subDomainDef: SUB_DOM & {
20
24
  [K in Exclude<keyof SUB_DOM, keyof IActionDomainChildOptions>]: never;
21
25
  }): ActionDomain<TActionDomainChildDef<ACT_DOM, SUB_DOM>>;
22
- action<ID extends keyof ACT_DOM["actions"] & string>(id: ID): ActionCore<ACT_DOM, ID>;
23
- hydrateContext<ID extends keyof ACT_DOM["actions"] & string>(id: ID, contextData: IActionContext_Data_JsonObject): ActionContext<ACT_DOM, ID>;
26
+ get action(): TActionMap<ACT_DOM>;
27
+ actionsMap(): TActionMap<ACT_DOM>;
28
+ actionForId<ID extends keyof ACT_DOM["actionSchema"] & string>(id: ID): ActionCore<ACT_DOM, ID>;
29
+ hydrateContext<ID extends keyof ACT_DOM["actionSchema"] & string>(id: ID, contextData: IActionContext_Data_JsonObject): ActionContext<ACT_DOM, ID>;
24
30
  isDomainAction<ACT extends IActionBase<any, ACT_DOM, any>>(action: ACT | unknown | null | undefined): action is TDistributedDomainActions<ACT_DOM, ACT>;
25
- hydrateRequest<ID extends keyof ACT_DOM["actions"] & string, P extends IActionPayload_Request_JsonObject<ACT_DOM, ID>>(serialized: P): TDistributeActionPayload_Request<ACT_DOM, ID>;
26
- hydrateResultPayload<ID extends keyof ACT_DOM["actions"] & string, R extends IActionPayload_Result_JsonObject<ACT_DOM, ID>>(serialized: R): TDistributeActionPayload_Result<ACT_DOM, ID>;
27
- hydrateAnyAction<ID extends keyof ACT_DOM["actions"] & string, AJ extends TAction_Any_JsonObject<ACT_DOM, ID>>(actionJson: AJ): TNarrowActionJsonTypeToActionInstanceType<ACT_DOM, AJ, ID>;
28
- 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>>;
31
+ hydrateRequestPayload<ID extends keyof ACT_DOM["actionSchema"] & string, P extends IActionPayload_Request_JsonObject<ACT_DOM, ID>>(serialized: P): TDistributeActionPayload_Request<ACT_DOM, ID>;
32
+ hydrateResultPayload<ID extends keyof ACT_DOM["actionSchema"] & string, R extends IActionPayload_Result_JsonObject<ACT_DOM, ID>>(serialized: R): TDistributeActionPayload_Result<ACT_DOM, ID>;
33
+ hydrateAnyAction<ID extends keyof ACT_DOM["actionSchema"] & string, AJ extends TAction_Any_JsonObject<ACT_DOM, ID>>(actionJson: AJ): TNarrowActionJsonTypeToActionInstanceType<ACT_DOM, AJ, ID>;
34
+ runAction<ID extends keyof ACT_DOM["actionSchema"] & string, ACT extends ActionPayload_Request<ACT_DOM, ID>>(request: ACT, options?: IExecuteActionOptions<ACT_DOM, ID>): Promise<RunningAction<ACT_DOM, ID>>;
35
+ private createActionMap;
29
36
  }
37
+ export {};
@@ -1,7 +1,7 @@
1
1
  import type { ActionSchema } from "../Schema/ActionSchema";
2
2
  import type { IActionErrorDeclaration, TTransportedValue } from "../Schema/ActionSchema.types";
3
3
  export type TPossibleDomainId = string;
4
- export type TPossibleDomainIdList = [TPossibleDomainId, ...TPossibleDomainId[]];
4
+ export type TPossibleDomainIdList = [...TPossibleDomainId[], TPossibleDomainId];
5
5
  export type TActionDomainSchema = Record<string, ActionSchema<TTransportedValue<any, any>, TTransportedValue<any, any>, readonly IActionErrorDeclaration<any, any>[]>>;
6
6
  /**
7
7
  * Data shape for a domain — used for construction and as the type-level schema carrier.
@@ -10,12 +10,12 @@ export type TActionDomainSchema = Record<string, ActionSchema<TTransportedValue<
10
10
  export interface IActionDomain<IDS extends TPossibleDomainIdList = TPossibleDomainIdList, SCH extends TActionDomainSchema = TActionDomainSchema> {
11
11
  domain: IDS[0] & string;
12
12
  allDomains: IDS;
13
- actions: SCH;
13
+ actionSchema: SCH;
14
14
  }
15
15
  export interface IActionRootDomain<ID extends TPossibleDomainId = TPossibleDomainId> extends IActionDomain<[ID], {}> {
16
16
  domain: ID;
17
17
  allDomains: [ID];
18
- actions: {};
18
+ actionSchema: {};
19
19
  }
20
20
  export interface IActionDomainChildOptions<ERR_DOMAIN extends string = string, SCHEMA extends TActionDomainSchema = TActionDomainSchema> {
21
21
  domain: ERR_DOMAIN;
@@ -23,10 +23,10 @@ export interface IActionDomainChildOptions<ERR_DOMAIN extends string = string, S
23
23
  }
24
24
  export type TActionDomainChildDef<PARENT_DEF extends IActionDomain, SUB extends IActionDomainChildOptions> = {
25
25
  domain: SUB["domain"];
26
- allDomains: [SUB["domain"], ...PARENT_DEF["allDomains"]];
27
- actions: SUB["actions"];
26
+ allDomains: [...PARENT_DEF["allDomains"], SUB["domain"]];
27
+ actionSchema: SUB["actions"];
28
28
  };
29
- export type TDomainActionId<DOM extends IActionDomain> = keyof DOM["actions"] & string;
29
+ export type TDomainActionId<DOM extends IActionDomain> = keyof DOM["actionSchema"] & string;
30
30
  export type TInferInputFromSchema<SCH extends ActionSchema<any, any, any>> = SCH extends ActionSchema<infer IN, any, any> ? {
31
31
  Input: IN[0];
32
32
  SerdeInput: IN[1];
@@ -1,14 +1,14 @@
1
1
  import type { TDistributeRunningActionUpdateListener, TRunningActionUpdateListener } from "../Action/RunningAction.types";
2
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"]> {
3
+ export declare abstract class ActionDomainBase<ACT_DOM extends IActionDomain = IActionDomain> implements IActionDomain<ACT_DOM["allDomains"], ACT_DOM["actionSchema"]> {
4
4
  readonly domain: ACT_DOM["domain"];
5
5
  readonly allDomains: ACT_DOM["allDomains"];
6
- readonly actions: ACT_DOM["actions"];
6
+ readonly actionSchema: ACT_DOM["actionSchema"];
7
7
  protected _listeners: TRunningActionUpdateListener<any, any>[];
8
8
  constructor(definition: ACT_DOM);
9
9
  /**
10
10
  * Add an observer that is called after every action dispatched through this domain.
11
11
  * Returns an unsubscribe function — call it to remove the listener.
12
12
  */
13
- addActionListener(listener: TDistributeRunningActionUpdateListener<ACT_DOM, keyof ACT_DOM["actions"] & string>): () => void;
13
+ addActionListener(listener: TDistributeRunningActionUpdateListener<ACT_DOM, keyof ACT_DOM["actionSchema"] & string>): () => void;
14
14
  }
@@ -19,5 +19,5 @@ export declare class ActionRootDomain<ROOT_DOM extends IActionRootDomain = IActi
19
19
  }): ActionDomain<TActionDomainChildDef<ROOT_DOM, SUB_DOM>>;
20
20
  addActionRuntime(runtime: ActionRuntime): this;
21
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>>;
22
+ _runAction<DOM extends IActionDomain, ID extends keyof DOM["actionSchema"] & string = keyof DOM["actionSchema"] & string, ACT extends ActionPayload_Request<DOM, ID> = ActionPayload_Request<DOM, ID>>(actionPayload: ACT, options?: IExecuteActionOptions<DOM, ID>): Promise<RunningAction<DOM, ID>>;
23
23
  }
@@ -9,5 +9,5 @@ export declare class ActionDomainManager {
9
9
  verifyIsActionJson(action: INiceActionIdAndDomain<any>): void;
10
10
  getActionDomain<DOM extends IActionDomain, ACT extends INiceActionIdAndDomain<DOM>>(action: ACT): ActionDomain<DOM> | undefined;
11
11
  getActionDomainOrThrow<DOM extends IActionDomain, ACT extends INiceActionIdAndDomain<DOM>>(action: ACT): ActionDomain<DOM>;
12
- hydrateActionPayload<D extends IActionDomain, ID extends keyof D["actions"] & string, A extends TAction_Any_JsonObject<D, ID>>(actionJson: A): TNarrowActionJsonTypeToActionInstanceType<D, A, ID>;
12
+ hydrateActionPayload<D extends IActionDomain, ID extends keyof D["actionSchema"] & string, A extends TAction_Any_JsonObject<D, ID>>(actionJson: A): TNarrowActionJsonTypeToActionInstanceType<D, A, ID>;
13
13
  }
@@ -22,14 +22,9 @@ export declare class ActionRuntime {
22
22
  * the correct handler, and return the response. The most specific handler
23
23
  * match is chosen (action-ID-specific beats domain-wildcard).
24
24
  */
25
- handleActionPayloadWire<D extends IActionDomain, ID extends keyof D["actions"] & string>(wire: TActionPayload_Any_JsonObject<D, ID>): Promise<RunningAction<D, ID>>;
25
+ handleActionPayloadWire<D extends IActionDomain, ID extends keyof D["actionSchema"] & string>(wire: TActionPayload_Any_JsonObject<D, ID>): Promise<RunningAction<D, ID>>;
26
26
  handleActionPayloadWire(wire: unknown): Promise<RunningAction<any, any>>;
27
- handleActionPayload<DOM extends IActionDomain, ID extends keyof DOM["actions"] & string>(action: TActionPayload_Any_Instance<DOM, ID>, options?: Omit<IHandleActionOptions, "targetLocalRuntime">): Promise<RunningAction<DOM, ID>>;
28
- /**
29
- * Return the first handler registered for the given action, or `undefined`
30
- * if none has been registered (action-ID-specific beats domain-wildcard).
31
- */
32
- getHandlerForAction<ACT extends TActionPayload_Any_Instance<any, any>>(action: ACT, options?: Omit<IHandleActionOptions, "targetLocalRuntime">): TActionHandler | undefined;
27
+ handleActionPayload<DOM extends IActionDomain, ID extends keyof DOM["actionSchema"] & string>(action: TActionPayload_Any_Instance<DOM, ID>, options?: Omit<IHandleActionOptions, "targetLocalRuntime">): Promise<RunningAction<DOM, ID>>;
33
28
  getHandlerForActionOrThrow<ACT extends TActionPayload_Any_Instance<any, any>>(action: ACT, options?: Omit<IHandleActionOptions, "localRuntime">): TActionHandler;
34
29
  /**
35
30
  * Register one or more handlers. Each handler's own `actionRouter` defines
@@ -10,7 +10,7 @@ export declare abstract class ActionHandler<T extends EActionHandlerType> implem
10
10
  abstract readonly actionRouter: ActionRouter<any>;
11
11
  constructor();
12
12
  getActionRouter(): ActionRouter<any>;
13
- abstract handleActionRequest<DOM extends IActionDomain, ID extends keyof DOM["actions"] & string>(action: ActionPayload_Request<DOM, ID>, config?: IHandleActionOptions): Promise<RunningAction<DOM, ID>>;
13
+ abstract handleActionRequest<DOM extends IActionDomain, ID extends keyof DOM["actionSchema"] & string>(action: ActionPayload_Request<DOM, ID>, config?: IHandleActionOptions): Promise<RunningAction<DOM, ID>>;
14
14
  abstract toJsonObject(): TActionHandler_Json;
15
15
  abstract toHandlerRouteItem(...args: any[]): IActionRouteItemHandler;
16
16
  }
@@ -24,7 +24,7 @@ export interface IHandleActionOptions {
24
24
  targetExternalClient?: ActionClientSpecifier;
25
25
  targetLocalRuntime?: ActionRuntime;
26
26
  }
27
- export interface IExecuteActionOptions<DOM extends IActionDomain = IActionDomain, ID extends keyof DOM["actions"] & string = keyof DOM["actions"] & string> extends IHandleActionOptions {
27
+ export interface IExecuteActionOptions<DOM extends IActionDomain = IActionDomain, ID extends keyof DOM["actionSchema"] & string = keyof DOM["actionSchema"] & string> extends IHandleActionOptions {
28
28
  listeners?: TRunningActionUpdateListener<DOM, ID>[];
29
29
  }
30
30
  export type TAtLeastOne<T extends object> = {
@@ -35,9 +35,6 @@ export interface IActionHandler_Base<T extends EActionHandlerType> {
35
35
  handlerType: T;
36
36
  getActionRouter: () => ActionRouter<any>;
37
37
  }
38
- export interface IHandleActionPrimed_Input_Base<DOM extends IActionDomain = IActionDomain, ID extends keyof DOM["actions"] & string = keyof DOM["actions"] & string> {
39
- action: ActionPayload_Request<DOM, ID>;
40
- }
41
38
  /**
42
39
  *
43
40
  * LOCAL ACTION HANDLER
@@ -46,7 +43,7 @@ export interface IHandleActionPrimed_Input_Base<DOM extends IActionDomain = IAct
46
43
  export interface IHandleActionOptions_Local extends IHandleActionOptions {
47
44
  }
48
45
  export interface IActionHandler_Local extends IActionHandler_Base<EActionHandlerType.local> {
49
- handleActionRequest: <DOM extends IActionDomain, ID extends keyof DOM["actions"] & string>(action: ActionPayload_Request<DOM, ID>, config?: IHandleActionOptions_Local) => Promise<RunningAction<DOM, ID>>;
46
+ handleActionRequest: <DOM extends IActionDomain, ID extends keyof DOM["actionSchema"] & string>(action: ActionPayload_Request<DOM, ID>, config?: IHandleActionOptions_Local) => Promise<RunningAction<DOM, ID>>;
50
47
  }
51
48
  /**
52
49
  *
@@ -57,7 +54,7 @@ export interface IHandleActionOptions_External extends IHandleActionOptions {
57
54
  }
58
55
  export interface IActionHandler_ExternalClient extends IActionHandler_Base<EActionHandlerType.external> {
59
56
  externalClient: ActionClientSpecifier;
60
- handleActionRequest: <DOM extends IActionDomain, ID extends keyof DOM["actions"] & string>(action: ActionPayload_Request<DOM, ID>, config?: IHandleActionOptions_External) => Promise<RunningAction<DOM, ID>>;
57
+ handleActionRequest: <DOM extends IActionDomain, ID extends keyof DOM["actionSchema"] & string>(action: ActionPayload_Request<DOM, ID>, config?: IHandleActionOptions_External) => Promise<RunningAction<DOM, ID>>;
61
58
  _setIncomingActionDataListener(listener: (json: TActionPayload_Any_JsonObject<any>) => void): void;
62
59
  }
63
60
  /**
@@ -22,10 +22,10 @@ export declare class ActionExternalClientHandler extends ActionHandler<EActionHa
22
22
  readonly actionRouter: ActionRouter<true>;
23
23
  constructor({ externalClientSpecifier, transports, defaultTimeout, }: IActionExternalClientRequestHandlerConfig);
24
24
  forDomain<FOR_DOM extends IActionDomain>(domain: ActionDomain<FOR_DOM>): this;
25
- forAction<ACT_DOM extends IActionDomain, ID extends keyof ACT_DOM["actions"] & string>(action: ActionCore<ACT_DOM, ID>): this;
26
- forActionIds<ACT_DOM extends IActionDomain, IDS extends ReadonlyArray<keyof ACT_DOM["actions"] & string>>(domain: ActionDomain<ACT_DOM>, ids: IDS): this;
25
+ forAction<ACT_DOM extends IActionDomain, ID extends keyof ACT_DOM["actionSchema"] & string>(action: ActionCore<ACT_DOM, ID>): this;
26
+ forActionIds<ACT_DOM extends IActionDomain, IDS extends ReadonlyArray<keyof ACT_DOM["actionSchema"] & string>>(domain: ActionDomain<ACT_DOM>, ids: IDS): this;
27
27
  _setIncomingActionDataListener(listener: (json: TActionPayload_Any_JsonObject<any, any>) => void): void;
28
- handleActionRequest<DOM extends IActionDomain, ID extends keyof DOM["actions"] & string>(action: ActionPayload_Request<DOM, ID>, config?: IHandleActionOptions): Promise<RunningAction<DOM, ID>>;
28
+ handleActionRequest<DOM extends IActionDomain, ID extends keyof DOM["actionSchema"] & string>(action: ActionPayload_Request<DOM, ID>, config?: IHandleActionOptions): Promise<RunningAction<DOM, ID>>;
29
29
  /**
30
30
  * Dispatch a result or progress payload directly back to the external client via the best
31
31
  * available bidirectional transport (WebSocket / Custom). Used for return-path routing when the
@@ -24,13 +24,13 @@ export declare class ActionLocalHandler extends ActionHandler<EActionHandlerType
24
24
  * Receives the full primed action with narrowed input type.
25
25
  * Useful for handling specific actions locally while forwarding the rest of the domain. For example, a local "ping" action that checks connectivity without needing a round trip.
26
26
  */
27
- forAction<ACT_DOM extends IActionDomain, ID extends keyof ACT_DOM["actions"] & string>(action: ActionCore<ACT_DOM, ID>, handler: THandleActionExecutionFn<ACT_DOM, ID>): this;
27
+ forAction<ACT_DOM extends IActionDomain, ID extends keyof ACT_DOM["actionSchema"] & string>(action: ActionCore<ACT_DOM, ID>, handler: THandleActionExecutionFn<ACT_DOM, ID>): this;
28
28
  /**
29
29
  * Register a handler for multiple action IDs (first-match-wins among cases).
30
30
  * Receives the full primed action narrowed to the union of those IDs.
31
31
  * Use `act.coreAction.id` to branch on which action was dispatched.
32
32
  */
33
- forActionIds<ACT_DOM extends IActionDomain, IDS extends ReadonlyArray<keyof ACT_DOM["actions"] & string>>(domain: ActionDomain<ACT_DOM>, ids: IDS, handler: THandleActionExecutionFn<ACT_DOM, IDS[number]>): this;
33
+ forActionIds<ACT_DOM extends IActionDomain, IDS extends ReadonlyArray<keyof ACT_DOM["actionSchema"] & string>>(domain: ActionDomain<ACT_DOM>, ids: IDS, handler: THandleActionExecutionFn<ACT_DOM, IDS[number]>): this;
34
34
  /**
35
35
  * Register per-action handlers for a domain using a single map, without needing
36
36
  * separate `forAction` calls. Unregistered action IDs are unaffected.
@@ -44,9 +44,9 @@ export declare class ActionLocalHandler extends ActionHandler<EActionHandlerType
44
44
  * ```
45
45
  */
46
46
  forDomainActionCases<FOR_DOM extends IActionDomain>(domain: ActionDomain<FOR_DOM>, cases: {
47
- [ID in keyof FOR_DOM["actions"] & string]?: THandleActionExecutionFn<FOR_DOM, ID>;
47
+ [ID in keyof FOR_DOM["actionSchema"] & string]?: THandleActionExecutionFn<FOR_DOM, ID>;
48
48
  }): this;
49
- handleActionRequest<DOM extends IActionDomain, ID extends keyof DOM["actions"] & string>(action: ActionPayload_Request<DOM, ID>, config?: IHandleActionOptions): Promise<RunningAction<DOM, ID>>;
49
+ handleActionRequest<DOM extends IActionDomain, ID extends keyof DOM["actionSchema"] & string>(action: ActionPayload_Request<DOM, ID>, config?: IHandleActionOptions): Promise<RunningAction<DOM, ID>>;
50
50
  private _handleRunningAction;
51
51
  handlePayloadWireOrThrow(wire: unknown, config?: IHandleActionOptions): Promise<RunningAction<any, any>>;
52
52
  toJsonObject(): IActionHandler_Local_Json;
@@ -4,4 +4,4 @@ import type { IActionPayload_Result_JsonObject } from "../../../ActionDefinition
4
4
  import type { ActionPayload_Result } from "../../../ActionDefinition/Action/Payload/ActionPayload_Result";
5
5
  import type { IActionDomain, TInferOutputFromSchema } from "../../../ActionDefinition/Domain/ActionDomain.types";
6
6
  export type { TDistributeActionPayload_Request };
7
- export type THandleActionExecutionFn<DOM extends IActionDomain, ID extends keyof DOM["actions"] & string = keyof DOM["actions"] & string> = (action: TDistributeActionPayload_Request<DOM, ID>) => MaybePromise<ActionPayload_Result<DOM, ID> | IActionPayload_Result_JsonObject<DOM, ID> | TInferOutputFromSchema<DOM["actions"][ID]>["Output"] | undefined>;
7
+ export type THandleActionExecutionFn<DOM extends IActionDomain, ID extends keyof DOM["actionSchema"] & string = keyof DOM["actionSchema"] & string> = (action: TDistributeActionPayload_Request<DOM, ID>) => MaybePromise<ActionPayload_Result<DOM, ID> | IActionPayload_Result_JsonObject<DOM, ID> | TInferOutputFromSchema<DOM["actionSchema"][ID]>["Output"] | undefined>;
@@ -30,24 +30,24 @@ export declare class ActionRouter<DATA> {
30
30
  getDomains(): ActionDomain[];
31
31
  /** Register a handler for all actions in a domain, replacing any existing one. */
32
32
  forDomain<FOR_DOM extends IActionDomain>(domain: ActionDomain<FOR_DOM>, routeData: DATA): this;
33
- forAction<ACT_DOM extends IActionDomain, ID extends keyof ACT_DOM["actions"] & string>(action: ActionCore<ACT_DOM, ID>, routeData: DATA): this;
33
+ forAction<ACT_DOM extends IActionDomain, ID extends keyof ACT_DOM["actionSchema"] & string>(action: ActionCore<ACT_DOM, ID>, routeData: DATA): this;
34
34
  /** Register a handler for a specific action, replacing any existing one. */
35
- forActionId<ACT_DOM extends IActionDomain, ID extends keyof ACT_DOM["actions"] & string>(domain: ActionDomain<ACT_DOM>, id: ID, routeData: DATA): this;
35
+ forActionId<ACT_DOM extends IActionDomain, ID extends keyof ACT_DOM["actionSchema"] & string>(domain: ActionDomain<ACT_DOM>, id: ID, routeData: DATA): this;
36
36
  /** Register one handler for several action IDs, replacing any existing ones. */
37
- forActionIds<ACT_DOM extends IActionDomain, IDS extends ReadonlyArray<keyof ACT_DOM["actions"] & string>>(domain: ActionDomain<ACT_DOM>, ids: IDS, routeData: DATA): this;
37
+ forActionIds<ACT_DOM extends IActionDomain, IDS extends ReadonlyArray<keyof ACT_DOM["actionSchema"] & string>>(domain: ActionDomain<ACT_DOM>, ids: IDS, routeData: DATA): this;
38
38
  /** Register per-action handlers from a cases map, replacing any existing ones. */
39
39
  forDomainActionCases<FOR_DOM extends IActionDomain>(domain: ActionDomain<FOR_DOM>, cases: {
40
- [ID in keyof FOR_DOM["actions"] & string]?: DATA;
40
+ [ID in keyof FOR_DOM["actionSchema"] & string]?: DATA;
41
41
  }): this;
42
42
  /** Append a handler for all actions in a domain (accumulates alongside existing). */
43
43
  addForDomain<FOR_DOM extends IActionDomain>(domain: ActionDomain<FOR_DOM>, routeData: DATA): this;
44
44
  /** Append a handler for a specific action (accumulates alongside existing). */
45
- addForAction<ACT_DOM extends IActionDomain, ID extends keyof ACT_DOM["actions"] & string>(domain: ActionDomain<ACT_DOM>, id: ID, routeData: DATA): this;
45
+ addForAction<ACT_DOM extends IActionDomain, ID extends keyof ACT_DOM["actionSchema"] & string>(domain: ActionDomain<ACT_DOM>, id: ID, routeData: DATA): this;
46
46
  /** Append one handler for several action IDs (accumulates alongside existing). */
47
- addForActionIds<ACT_DOM extends IActionDomain, IDS extends ReadonlyArray<keyof ACT_DOM["actions"] & string>>(domain: ActionDomain<ACT_DOM>, ids: IDS, routeData: DATA): this;
47
+ addForActionIds<ACT_DOM extends IActionDomain, IDS extends ReadonlyArray<keyof ACT_DOM["actionSchema"] & string>>(domain: ActionDomain<ACT_DOM>, ids: IDS, routeData: DATA): this;
48
48
  /** Append per-action handlers from a cases map (accumulates alongside existing). */
49
49
  addForDomainActionCases<FOR_DOM extends IActionDomain>(domain: ActionDomain<FOR_DOM>, cases: {
50
- [ID in keyof FOR_DOM["actions"] & string]?: DATA;
50
+ [ID in keyof FOR_DOM["actionSchema"] & string]?: DATA;
51
51
  }): this;
52
52
  /** Append a handler directly by its raw match key (used when the key is known ahead of time). */
53
53
  addForKey(key: TMatchHandlerKey, routeData: DATA): this;
@@ -9,7 +9,7 @@ export declare enum EErrId_NiceAction {
9
9
  hydration_action_state_mismatch = "hydration_action_state_mismatch",
10
10
  hydration_action_id_not_found = "hydration_action_id_not_found",
11
11
  no_action_execution_handler = "no_action_execution_handler",
12
- wire_action_not_primed_or_response = "wire_action_not_primed_or_response",
12
+ wire_action_not_payload = "wire_action_not_payload",
13
13
  wire_not_action_data = "wire_not_action_data",
14
14
  client_runtime_already_registered = "client_runtime_already_registered",
15
15
  client_runtime_not_registered = "client_runtime_not_registered",
@@ -55,7 +55,7 @@ export declare const err_nice_action: import("@nice-code/error").NiceErrorDomain
55
55
  actionId: string;
56
56
  specifiedClient?: ActionClientSpecifier;
57
57
  }, import("@nice-code/error").JSONSerializableValue>;
58
- wire_action_not_primed_or_response: import("@nice-code/error").INiceErrorIdMetadata<{
58
+ wire_action_not_payload: import("@nice-code/error").INiceErrorIdMetadata<{
59
59
  domain: string;
60
60
  actionId: string;
61
61
  actionState: string | undefined;
@@ -0,0 +1,6 @@
1
+ import { type UseMutationOptions, type UseMutationResult } from "@tanstack/react-query";
2
+ import type { ActionCore } from "../../ActionDefinition/Action/Core/ActionCore";
3
+ import type { IActionDomain, TInferInputFromSchema, TInferOutputFromSchema } from "../../ActionDefinition/Domain/ActionDomain.types";
4
+ import type { TInferActionError } from "../../ActionDefinition/Schema/ActionSchema";
5
+ export type TUseNiceMutationOptions<DOM extends IActionDomain, ID extends keyof DOM["actionSchema"] & string, SCH extends DOM["actionSchema"][ID] = DOM["actionSchema"][ID], TContext = unknown> = Omit<UseMutationOptions<TInferOutputFromSchema<SCH>["Output"], TInferActionError<SCH>, TInferInputFromSchema<SCH>["Input"], TContext>, "mutationFn">;
6
+ export declare function useActionMutation<DOM extends IActionDomain, ID extends keyof DOM["actionSchema"] & string, SCH extends DOM["actionSchema"][ID], TContext = unknown>(action: ActionCore<DOM, ID>, options?: TUseNiceMutationOptions<DOM, ID, SCH, TContext>): UseMutationResult<TInferOutputFromSchema<SCH>["Output"], TInferActionError<SCH>, TInferInputFromSchema<SCH>["Input"], TContext>;
@@ -0,0 +1,15 @@
1
+ import { type QueryKey, type UseQueryOptions, type UseQueryResult } from "@tanstack/react-query";
2
+ import type { ActionCore } from "../../ActionDefinition/Action/Core/ActionCore";
3
+ import type { IActionDomain, TInferInputFromSchema, TInferOutputFromSchema } from "../../ActionDefinition/Domain/ActionDomain.types";
4
+ import type { TInferActionError } from "../../ActionDefinition/Schema/ActionSchema";
5
+ export declare function niceActionQueryKey<DOM extends IActionDomain, ID extends keyof DOM["actionSchema"] & string>(action: ActionCore<DOM, ID>): readonly ["nice-action", DOM["domain"], DOM["allDomains"], ID];
6
+ export declare function niceActionQueryKey<DOM extends IActionDomain, ID extends keyof DOM["actionSchema"] & string>(action: ActionCore<DOM, ID>, input: TInferInputFromSchema<DOM["actionSchema"][ID]>["Input"]): readonly [
7
+ "nice-action",
8
+ DOM["domain"],
9
+ DOM["allDomains"],
10
+ ID,
11
+ TInferInputFromSchema<DOM["actionSchema"][ID]>["Input"],
12
+ string | undefined
13
+ ];
14
+ export type TUseNiceQueryOptions<DOM extends IActionDomain, ID extends keyof DOM["actionSchema"] & string, SCH extends DOM["actionSchema"][ID] = DOM["actionSchema"][ID], TSelect = TInferOutputFromSchema<SCH>["Output"]> = Omit<UseQueryOptions<TInferOutputFromSchema<SCH>["Output"], TInferActionError<SCH>, TSelect, QueryKey>, "queryKey" | "queryFn">;
15
+ export declare function useNiceQuery<DOM extends IActionDomain, ID extends keyof DOM["actionSchema"] & string, SCH extends DOM["actionSchema"][ID], TSelect = TInferOutputFromSchema<SCH>["Output"]>(action: ActionCore<DOM, ID>, input: TInferInputFromSchema<SCH>["Input"] | null | undefined, options?: TUseNiceQueryOptions<DOM, ID, SCH, TSelect>): UseQueryResult<TSelect, TInferActionError<SCH>>;
@@ -1,72 +1,2 @@
1
- import type { QueryKey, UseMutationOptions, UseMutationResult, UseQueryOptions, UseQueryResult } from "@tanstack/react-query";
2
- import type { ActionCore } from "../ActionDefinition/Action/Core/ActionCore";
3
- import type { IActionDomain, TInferInputFromSchema, TInferOutputFromSchema } from "../ActionDefinition/Domain/ActionDomain.types";
4
- import type { TInferActionError } from "../ActionDefinition/Schema/ActionSchema";
5
- /**
6
- * Builds a stable TanStack Query key for a Nice Action.
7
- *
8
- * Overload 1 (no input) — returns a prefix key suitable for `queryClient.invalidateQueries`,
9
- * which will match every cached query for this action regardless of input.
10
- *
11
- * Overload 2 (with input) — returns the exact key used by `useNiceQuery` for the given input.
12
- * Use this when you need to read or invalidate a single cached result.
13
- *
14
- * @example
15
- * // Invalidate all cached results for an action
16
- * queryClient.invalidateQueries({ queryKey: niceActionQueryKey(domain.action("getUser")) });
17
- *
18
- * // Invalidate a specific cached result
19
- * queryClient.invalidateQueries({ queryKey: niceActionQueryKey(domain.action("getUser"), { userId: "123" }) });
20
- */
21
- export declare function niceActionQueryKey<DOM extends IActionDomain, ID extends keyof DOM["actions"] & string>(action: ActionCore<DOM, ID>): readonly ["nice-action", DOM["domain"], DOM["allDomains"], ID];
22
- export declare function niceActionQueryKey<DOM extends IActionDomain, ID extends keyof DOM["actions"] & string>(action: ActionCore<DOM, ID>, input: TInferInputFromSchema<DOM["actions"][ID]>["Input"]): readonly [
23
- "nice-action",
24
- DOM["domain"],
25
- DOM["allDomains"],
26
- ID,
27
- TInferInputFromSchema<DOM["actions"][ID]>["Input"],
28
- string | undefined
29
- ];
30
- export type TUseNiceQueryOptions<DOM extends IActionDomain, ID extends keyof DOM["actions"] & string, SCH extends DOM["actions"][ID] = DOM["actions"][ID], TSelect = TInferOutputFromSchema<SCH>["Output"]> = Omit<UseQueryOptions<TInferOutputFromSchema<SCH>["Output"], TInferActionError<SCH>, TSelect, QueryKey>, "queryKey" | "queryFn">;
31
- export type TUseNiceMutationOptions<DOM extends IActionDomain, ID extends keyof DOM["actions"] & string, SCH extends DOM["actions"][ID] = DOM["actions"][ID], TContext = unknown> = Omit<UseMutationOptions<TInferOutputFromSchema<SCH>["Output"], TInferActionError<SCH>, TInferInputFromSchema<SCH>["Input"], TContext>, "mutationFn">;
32
- /**
33
- * Execute a Nice Action as a TanStack Query.
34
- *
35
- * Automatically constructs a stable query key from the action's domain, id, and input.
36
- * Passing `null` or `undefined` as `input` disables the query (sets `enabled: false`),
37
- * which allows conditional execution while respecting React's rules of hooks.
38
- *
39
- * The `tag` option targets a specific named handler registered on the runtime environment.
40
- *
41
- * Supports TanStack Query's `select` option with full type inference — if you pass a
42
- * `select` transformer, `data` will be typed as the transformer's return type.
43
- *
44
- * @example
45
- * const { data, isPending, error } = useNiceQuery(
46
- * domain.action("getUser"),
47
- * { userId: "123" },
48
- * );
49
- *
50
- * @example
51
- * // Conditionally enabled
52
- * const { data } = useNiceQuery(domain.action("getUser"), userId ? { userId } : null);
53
- */
54
- export declare function useNiceQuery<DOM extends IActionDomain, ID extends keyof DOM["actions"] & string, SCH extends DOM["actions"][ID], TSelect = TInferOutputFromSchema<SCH>["Output"]>(action: ActionCore<DOM, ID>, input: TInferInputFromSchema<SCH>["Input"] | null | undefined, options?: TUseNiceQueryOptions<DOM, ID, SCH, TSelect>): UseQueryResult<TSelect, TInferActionError<SCH>>;
55
- /**
56
- * Execute a Nice Action as a TanStack Mutation.
57
- *
58
- * Ideal for actions that change server state — form submissions, updates, deletes, etc.
59
- * The input is provided at call time via `mutation.mutate(input)` or `mutation.mutateAsync(input)`.
60
- *
61
- * The `tag` option targets a specific named handler registered on the runtime environment.
62
- *
63
- * @example
64
- * const mutation = useNiceMutation(domain.action("createUser"));
65
- *
66
- * function handleSubmit(data: CreateUserInput) {
67
- * mutation.mutate(data, {
68
- * onSuccess: (user) => router.push(`/users/${user.id}`),
69
- * });
70
- * }
71
- */
72
- export declare function useNiceMutation<DOM extends IActionDomain, ID extends keyof DOM["actions"] & string, SCH extends DOM["actions"][ID], TContext = unknown>(action: ActionCore<DOM, ID>, options?: TUseNiceMutationOptions<DOM, ID, SCH, TContext>): UseMutationResult<TInferOutputFromSchema<SCH>["Output"], TInferActionError<SCH>, TInferInputFromSchema<SCH>["Input"], TContext>;
1
+ export * from "./hooks/useActionMutation";
2
+ export * from "./hooks/useActionQuery";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nice-code/action",
3
- "version": "0.2.1",
3
+ "version": "0.2.2",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "exports": {