@kellanjs/actioncraft 0.0.2 → 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.
Files changed (88) hide show
  1. package/README.md +1263 -1
  2. package/dist/actioncraft-error.d.ts +23 -0
  3. package/dist/actioncraft-error.js +60 -0
  4. package/dist/actioncraft-error.js.map +1 -0
  5. package/dist/actioncraft-prev.d.ts +93 -0
  6. package/dist/actioncraft-prev.js +387 -0
  7. package/dist/actioncraft-prev.js.map +1 -0
  8. package/dist/actioncraft.d.ts +94 -40
  9. package/dist/actioncraft.js +337 -68
  10. package/dist/actioncraft.js.map +1 -1
  11. package/dist/api.d.ts +49 -0
  12. package/dist/api.js +84 -0
  13. package/dist/api.js.map +1 -0
  14. package/dist/classes/action-builder.d.ts +59 -0
  15. package/dist/classes/action-builder.js +95 -0
  16. package/dist/classes/action-builder.js.map +1 -0
  17. package/dist/classes/craft-builder.d.ts +66 -0
  18. package/dist/classes/craft-builder.js +129 -0
  19. package/dist/classes/craft-builder.js.map +1 -0
  20. package/dist/classes/crafter.d.ts +66 -0
  21. package/dist/classes/crafter.js +129 -0
  22. package/dist/classes/crafter.js.map +1 -0
  23. package/dist/classes/error.d.ts +23 -0
  24. package/dist/classes/error.js +60 -0
  25. package/dist/classes/error.js.map +1 -0
  26. package/dist/classes/executor/callbacks.d.ts +6 -0
  27. package/dist/classes/executor/callbacks.js +20 -0
  28. package/dist/classes/executor/callbacks.js.map +1 -0
  29. package/dist/classes/executor/errors.d.ts +29 -0
  30. package/dist/classes/executor/errors.js +114 -0
  31. package/dist/classes/executor/errors.js.map +1 -0
  32. package/dist/classes/executor/executor.d.ts +68 -0
  33. package/dist/classes/executor/executor.js +391 -0
  34. package/dist/classes/executor/executor.js.map +1 -0
  35. package/dist/classes/executor/logging.d.ts +2 -0
  36. package/dist/classes/executor/logging.js +8 -0
  37. package/dist/classes/executor/logging.js.map +1 -0
  38. package/dist/classes/executor/transformation.d.ts +17 -0
  39. package/dist/classes/executor/transformation.js +43 -0
  40. package/dist/classes/executor/transformation.js.map +1 -0
  41. package/dist/classes/executor/validation.d.ts +16 -0
  42. package/dist/classes/executor/validation.js +70 -0
  43. package/dist/classes/executor/validation.js.map +1 -0
  44. package/dist/classes/executor.d.ts +64 -0
  45. package/dist/classes/executor.js +354 -0
  46. package/dist/classes/executor.js.map +1 -0
  47. package/dist/classes/internal.d.ts +10 -0
  48. package/dist/classes/internal.js +5 -0
  49. package/dist/classes/internal.js.map +1 -0
  50. package/dist/core/errors.d.ts +2 -2
  51. package/dist/core/errors.js +5 -5
  52. package/dist/core/errors.js.map +1 -1
  53. package/dist/core/logging.d.ts +1 -1
  54. package/dist/core/transformation.d.ts +2 -2
  55. package/dist/core/validation.d.ts +4 -4
  56. package/dist/core/validation.js +14 -14
  57. package/dist/core/validation.js.map +1 -1
  58. package/dist/craft.d.ts +29 -0
  59. package/dist/craft.js +62 -0
  60. package/dist/craft.js.map +1 -0
  61. package/dist/error.d.ts +21 -6
  62. package/dist/error.js +59 -10
  63. package/dist/error.js.map +1 -1
  64. package/dist/index.d.ts +4 -3
  65. package/dist/index.js +4 -3
  66. package/dist/index.js.map +1 -1
  67. package/dist/initial.d.ts +14 -0
  68. package/dist/initial.js +47 -0
  69. package/dist/initial.js.map +1 -0
  70. package/dist/types/actions.d.ts +67 -25
  71. package/dist/types/builder.d.ts +92 -0
  72. package/dist/types/builder.js +2 -0
  73. package/dist/types/builder.js.map +1 -0
  74. package/dist/types/config.d.ts +4 -0
  75. package/dist/types/crafter.d.ts +87 -0
  76. package/dist/types/crafter.js +2 -0
  77. package/dist/types/crafter.js.map +1 -0
  78. package/dist/types/errors.d.ts +26 -18
  79. package/dist/types/inference.d.ts +41 -8
  80. package/dist/types/result.d.ts +8 -14
  81. package/dist/types/result.js +36 -4
  82. package/dist/types/result.js.map +1 -1
  83. package/dist/types/schemas.d.ts +7 -7
  84. package/dist/types/shared.d.ts +17 -7
  85. package/dist/utils.d.ts +30 -6
  86. package/dist/utils.js +68 -8
  87. package/dist/utils.js.map +1 -1
  88. package/package.json +3 -3
package/dist/utils.js CHANGED
@@ -1,4 +1,6 @@
1
- import { ActionCraftError } from "./error.js";
1
+ import { ActioncraftError } from "./classes/error.js";
2
+ import { EXTERNAL_ERROR_TYPES } from "./types/errors.js";
3
+ import { err } from "./types/result.js";
2
4
  export function unwrap(resultOrPromise) {
3
5
  // Handle Promise case
4
6
  if (resultOrPromise instanceof Promise) {
@@ -8,16 +10,18 @@ export function unwrap(resultOrPromise) {
8
10
  return _unwrapSync(resultOrPromise);
9
11
  }
10
12
  /**
11
- * Synchronously unwraps a result, throwing on error.
13
+ * Synchronously unwraps a result, throwing on error with embedded action ID.
12
14
  */
13
15
  function _unwrapSync(result) {
14
- // Handle api-style results ({ success: true/false })
16
+ // Extract action ID from result if present
17
+ const actionId = "__ac_id" in result ? result.__ac_id : undefined;
18
+ // Handle api-style results ({ success: true/false }) - includes both ApiResult and StatefulApiResult
15
19
  if (typeof result === "object" && result !== null && "success" in result) {
16
20
  const apiResult = result;
17
21
  if (apiResult.success) {
18
22
  return apiResult.data;
19
23
  }
20
- throw new ActionCraftError(apiResult.error);
24
+ throw new ActioncraftError(apiResult.error, actionId);
21
25
  }
22
26
  // Handle functional-style results ({ type: "ok"/"err" })
23
27
  if (typeof result === "object" && result !== null && "type" in result) {
@@ -25,13 +29,14 @@ function _unwrapSync(result) {
25
29
  if (functionalResult.type === "ok") {
26
30
  return functionalResult.value;
27
31
  }
28
- throw new ActionCraftError(functionalResult.error);
32
+ throw new ActioncraftError(functionalResult.error, actionId);
29
33
  }
30
- throw new Error("Invalid result format from ActionCraft action");
34
+ throw new Error("Invalid result format from Actioncraft action");
31
35
  }
32
36
  /**
33
- * Creates a throwable version of an ActionCraft action.
34
- * The returned function throws on error instead of returning Result objects.
37
+ * Creates a throwable version of an Actioncraft action.
38
+ * The returned function throws ActioncraftErrors with automatic action ID verification support.
39
+ * Errors thrown by this function can be verified with isActioncraftError(error, action).
35
40
  */
36
41
  export function throwable(action) {
37
42
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
@@ -41,4 +46,59 @@ export function throwable(action) {
41
46
  return unwrap(result);
42
47
  });
43
48
  }
49
+ /**
50
+ * Creates an appropriate initial state for any action based on its configuration.
51
+ * The initial state uses the action's real ID for consistency with actual results.
52
+ *
53
+ * For useActionState actions: returns StatefulApiResult with error and values
54
+ * For functional format actions: returns Result.err() with error
55
+ * For regular actions: returns ApiResult with error
56
+ *
57
+ * Usage:
58
+ * - useActionState: const [state, action] = useActionState(myAction, initial(myAction))
59
+ * - useState: const [state, setState] = useState(initial(myAction))
60
+ */
61
+ export function initial(action) {
62
+ const error = {
63
+ type: EXTERNAL_ERROR_TYPES.INITIAL_STATE,
64
+ message: "Action has not been executed yet",
65
+ };
66
+ // Attempt to read the action ID created during craft()
67
+ const actionId =
68
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
69
+ action?.__ac_id ?? "unknown";
70
+ // Attempt to read the Actioncraft config attached during craft()
71
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
72
+ const cfg = action?.__ac_config;
73
+ // Functional format -> Result<_, _>
74
+ if (cfg?.resultFormat === "functional") {
75
+ return err(error, actionId);
76
+ }
77
+ // useActionState enabled -> StatefulApiResult
78
+ if (cfg?.useActionState) {
79
+ return {
80
+ success: false,
81
+ error,
82
+ values: undefined,
83
+ __ac_id: actionId,
84
+ };
85
+ }
86
+ // Default ApiResult shape
87
+ return {
88
+ success: false,
89
+ error,
90
+ __ac_id: actionId,
91
+ };
92
+ }
93
+ /**
94
+ * Utility to extract the action ID from a crafted action.
95
+ * Useful for debugging and logging purposes.
96
+ *
97
+ * @param action - The crafted action
98
+ * @returns The action ID if available, undefined otherwise
99
+ */
100
+ export function getActionId(action) {
101
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
102
+ return action.__ac_id;
103
+ }
44
104
  //# sourceMappingURL=utils.js.map
package/dist/utils.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAkB9C,MAAM,UAAU,MAAM,CACpB,eAG6D;IAE7D,sBAAsB;IACtB,IAAI,eAAe,YAAY,OAAO,EAAE,CAAC;QACvC,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;IAC/D,CAAC;IAED,4BAA4B;IAC5B,OAAO,WAAW,CAAC,eAAe,CAAC,CAAC;AACtC,CAAC;AAED;;GAEG;AACH,SAAS,WAAW,CAClB,MAAwD;IAExD,qDAAqD;IACrD,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,IAAI,SAAS,IAAI,MAAM,EAAE,CAAC;QACzE,MAAM,SAAS,GAAG,MAAkC,CAAC;QACrD,IAAI,SAAS,CAAC,OAAO,EAAE,CAAC;YACtB,OAAO,SAAS,CAAC,IAAI,CAAC;QACxB,CAAC;QACD,MAAM,IAAI,gBAAgB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC9C,CAAC;IAED,yDAAyD;IACzD,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,IAAI,MAAM,EAAE,CAAC;QACtE,MAAM,gBAAgB,GAAG,MAA+B,CAAC;QACzD,IAAI,gBAAgB,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;YACnC,OAAO,gBAAgB,CAAC,KAAK,CAAC;QAChC,CAAC;QACD,MAAM,IAAI,gBAAgB,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;IACrD,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;AACnE,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,SAAS,CAGvB,MAAe;IACf,8DAA8D;IAC9D,OAAO,CAAC,KAAK,EAAE,GAAG,IAAW,EAAE,EAAE;QAC/B,8DAA8D;QAC9D,MAAM,MAAM,GAAG,MAAO,MAAc,CAAC,GAAG,IAAI,CAAC,CAAC;QAC9C,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC;IACxB,CAAC,CAA6B,CAAC;AACjC,CAAC"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kellanjs/actioncraft",
3
- "version": "0.0.2",
3
+ "version": "0.2.0",
4
4
  "description": "Fluent, type-safe builder for Next.js server actions.",
5
5
  "keywords": [
6
6
  "next.js",
@@ -68,7 +68,7 @@
68
68
  "typescript": "^5.8.3",
69
69
  "typescript-eslint": "^8.35.1",
70
70
  "vitest": "^3.2.4",
71
- "zod": "^3.25.74",
72
- "zod-form-data": "^3.0.0"
71
+ "zod": "^4.1.5",
72
+ "zod-form-data": "^3.0.1"
73
73
  }
74
74
  }