@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.
- package/README.md +1263 -1
- package/dist/actioncraft-error.d.ts +23 -0
- package/dist/actioncraft-error.js +60 -0
- package/dist/actioncraft-error.js.map +1 -0
- package/dist/actioncraft-prev.d.ts +93 -0
- package/dist/actioncraft-prev.js +387 -0
- package/dist/actioncraft-prev.js.map +1 -0
- package/dist/actioncraft.d.ts +94 -40
- package/dist/actioncraft.js +337 -68
- package/dist/actioncraft.js.map +1 -1
- package/dist/api.d.ts +49 -0
- package/dist/api.js +84 -0
- package/dist/api.js.map +1 -0
- package/dist/classes/action-builder.d.ts +59 -0
- package/dist/classes/action-builder.js +95 -0
- package/dist/classes/action-builder.js.map +1 -0
- package/dist/classes/craft-builder.d.ts +66 -0
- package/dist/classes/craft-builder.js +129 -0
- package/dist/classes/craft-builder.js.map +1 -0
- package/dist/classes/crafter.d.ts +66 -0
- package/dist/classes/crafter.js +129 -0
- package/dist/classes/crafter.js.map +1 -0
- package/dist/classes/error.d.ts +23 -0
- package/dist/classes/error.js +60 -0
- package/dist/classes/error.js.map +1 -0
- package/dist/classes/executor/callbacks.d.ts +6 -0
- package/dist/classes/executor/callbacks.js +20 -0
- package/dist/classes/executor/callbacks.js.map +1 -0
- package/dist/classes/executor/errors.d.ts +29 -0
- package/dist/classes/executor/errors.js +114 -0
- package/dist/classes/executor/errors.js.map +1 -0
- package/dist/classes/executor/executor.d.ts +68 -0
- package/dist/classes/executor/executor.js +391 -0
- package/dist/classes/executor/executor.js.map +1 -0
- package/dist/classes/executor/logging.d.ts +2 -0
- package/dist/classes/executor/logging.js +8 -0
- package/dist/classes/executor/logging.js.map +1 -0
- package/dist/classes/executor/transformation.d.ts +17 -0
- package/dist/classes/executor/transformation.js +43 -0
- package/dist/classes/executor/transformation.js.map +1 -0
- package/dist/classes/executor/validation.d.ts +16 -0
- package/dist/classes/executor/validation.js +70 -0
- package/dist/classes/executor/validation.js.map +1 -0
- package/dist/classes/executor.d.ts +64 -0
- package/dist/classes/executor.js +354 -0
- package/dist/classes/executor.js.map +1 -0
- package/dist/classes/internal.d.ts +10 -0
- package/dist/classes/internal.js +5 -0
- package/dist/classes/internal.js.map +1 -0
- package/dist/core/errors.d.ts +2 -2
- package/dist/core/errors.js +5 -5
- package/dist/core/errors.js.map +1 -1
- package/dist/core/logging.d.ts +1 -1
- package/dist/core/transformation.d.ts +2 -2
- package/dist/core/validation.d.ts +4 -4
- package/dist/core/validation.js +14 -14
- package/dist/core/validation.js.map +1 -1
- package/dist/craft.d.ts +29 -0
- package/dist/craft.js +62 -0
- package/dist/craft.js.map +1 -0
- package/dist/error.d.ts +21 -6
- package/dist/error.js +59 -10
- package/dist/error.js.map +1 -1
- package/dist/index.d.ts +4 -3
- package/dist/index.js +4 -3
- package/dist/index.js.map +1 -1
- package/dist/initial.d.ts +14 -0
- package/dist/initial.js +47 -0
- package/dist/initial.js.map +1 -0
- package/dist/types/actions.d.ts +67 -25
- package/dist/types/builder.d.ts +92 -0
- package/dist/types/builder.js +2 -0
- package/dist/types/builder.js.map +1 -0
- package/dist/types/config.d.ts +4 -0
- package/dist/types/crafter.d.ts +87 -0
- package/dist/types/crafter.js +2 -0
- package/dist/types/crafter.js.map +1 -0
- package/dist/types/errors.d.ts +26 -18
- package/dist/types/inference.d.ts +41 -8
- package/dist/types/result.d.ts +8 -14
- package/dist/types/result.js +36 -4
- package/dist/types/result.js.map +1 -1
- package/dist/types/schemas.d.ts +7 -7
- package/dist/types/shared.d.ts +17 -7
- package/dist/utils.d.ts +30 -6
- package/dist/utils.js +68 -8
- package/dist/utils.js.map +1 -1
- package/package.json +3 -3
package/dist/utils.js
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
import {
|
|
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
|
-
//
|
|
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
|
|
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
|
|
32
|
+
throw new ActioncraftError(functionalResult.error, actionId);
|
|
29
33
|
}
|
|
30
|
-
throw new Error("Invalid result format from
|
|
34
|
+
throw new Error("Invalid result format from Actioncraft action");
|
|
31
35
|
}
|
|
32
36
|
/**
|
|
33
|
-
* Creates a throwable version of an
|
|
34
|
-
* The returned function throws
|
|
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,
|
|
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
|
|
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": "^
|
|
72
|
-
"zod-form-data": "^3.0.
|
|
71
|
+
"zod": "^4.1.5",
|
|
72
|
+
"zod-form-data": "^3.0.1"
|
|
73
73
|
}
|
|
74
74
|
}
|