@farm.js/core 0.1.0-beta.13 → 0.1.0-beta.16
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/dist/api/route-manager.cjs.map +1 -1
- package/dist/api/route-manager.mjs +2 -2
- package/dist/api/runtime.cjs.map +1 -1
- package/dist/api/runtime.mjs +1 -1
- package/dist/api.cjs +18 -10
- package/dist/api.cjs.map +1 -1
- package/dist/api.mjs +3 -3
- package/dist/{chunk-B232I2GP.mjs → chunk-3HIVDX7J.mjs} +12 -1
- package/dist/chunk-3HIVDX7J.mjs.map +1 -0
- package/dist/{chunk-JDEOUK5V.mjs → chunk-6YXKHAFU.mjs} +3 -3
- package/dist/{chunk-VSDZEB5M.mjs → chunk-AN3PQVKH.mjs} +14 -16
- package/dist/{chunk-VSDZEB5M.mjs.map → chunk-AN3PQVKH.mjs.map} +1 -1
- package/dist/{chunk-Z5CQMP54.mjs → chunk-ARRYKOI5.mjs} +2 -2
- package/dist/{chunk-KLA67WKG.mjs → chunk-B3FFOIWS.mjs} +2 -2
- package/dist/{chunk-3WIRO3N7.mjs → chunk-BWJC5ZOD.mjs} +2 -2
- package/dist/{chunk-3WIRO3N7.mjs.map → chunk-BWJC5ZOD.mjs.map} +1 -1
- package/dist/{chunk-PFE6GMNE.mjs → chunk-HMRFYJK6.mjs} +19 -11
- package/dist/chunk-HMRFYJK6.mjs.map +1 -0
- package/dist/{chunk-32W4QEJP.mjs → chunk-KFTGPFRD.mjs} +1 -1
- package/dist/chunk-KFTGPFRD.mjs.map +1 -0
- package/dist/{chunk-Z3YG4OZT.mjs → chunk-OSWV5IJB.mjs} +140 -41
- package/dist/chunk-OSWV5IJB.mjs.map +1 -0
- package/dist/{chunk-OPHK6OJN.mjs → chunk-SLDBGSC3.mjs} +2 -2
- package/dist/{chunk-L2PE36GQ.mjs → chunk-T2KL7VEL.mjs} +3 -3
- package/dist/{chunk-WDU6QXNK.mjs → chunk-UCYWGN2P.mjs} +1 -1
- package/dist/chunk-UCYWGN2P.mjs.map +1 -0
- package/dist/{chunk-65A7QIKI.mjs → chunk-UMVLB3PN.mjs} +3 -3
- package/dist/chunk-UMVLB3PN.mjs.map +1 -0
- package/dist/{chunk-VY2UYN5R.mjs → chunk-VPCFICID.mjs} +82 -3
- package/dist/chunk-VPCFICID.mjs.map +1 -0
- package/dist/{chunk-H3TE3LOV.mjs → chunk-XMFTIVJH.mjs} +2 -2
- package/dist/{chunk-UB5UOSHB.mjs → chunk-ZVMV3THA.mjs} +71 -2
- package/dist/chunk-ZVMV3THA.mjs.map +1 -0
- package/dist/client.cjs.map +1 -1
- package/dist/client.mjs +3 -3
- package/dist/deployment.cjs +12 -0
- package/dist/deployment.cjs.map +1 -1
- package/dist/deployment.mjs +3 -1
- package/dist/{devtools-GAZ7F3KL.mjs → devtools-E4YNCY5J.mjs} +4 -4
- package/dist/docs.cjs.map +1 -1
- package/dist/docs.mjs +4 -4
- package/dist/index.cjs +332 -58
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs +28 -16
- package/dist/index.mjs.map +1 -1
- package/dist/internal/build-runtime.cjs +159 -46
- package/dist/internal/build-runtime.cjs.map +1 -1
- package/dist/internal/build-runtime.mjs +11 -11
- package/dist/internal/config-runtime.cjs.map +1 -1
- package/dist/internal/config-runtime.mjs +3 -3
- package/dist/navigation.cjs.map +1 -1
- package/dist/navigation.mjs +3 -3
- package/dist/plugin.cjs +141 -34
- package/dist/plugin.cjs.map +1 -1
- package/dist/plugin.mjs +8 -8
- package/dist/server-action-security.cjs +23 -1
- package/dist/server-action-security.cjs.map +1 -1
- package/dist/server-action-security.mjs +1 -1
- package/dist/server-fn-client.cjs.map +1 -1
- package/dist/server-fn-client.mjs +1 -1
- package/dist/server-fn.cjs +140 -3
- package/dist/server-fn.cjs.map +1 -1
- package/dist/server-fn.mjs +14 -3
- package/dist/server-query.cjs +99 -1
- package/dist/server-query.cjs.map +1 -1
- package/dist/server-query.mjs +3 -3
- package/dist/server.cjs +260 -37
- package/dist/server.cjs.map +1 -1
- package/dist/server.mjs +11 -11
- package/dist/testing.cjs.map +1 -1
- package/dist/testing.mjs +3 -3
- package/dist/version.cjs +1 -1
- package/dist/version.cjs.map +1 -1
- package/dist/version.mjs +1 -1
- package/dist/vite.cjs +142 -35
- package/dist/vite.cjs.map +1 -1
- package/dist/vite.mjs +8 -8
- package/package.json +1 -1
- package/types/client.d.ts +115 -4
- package/dist/chunk-32W4QEJP.mjs.map +0 -1
- package/dist/chunk-65A7QIKI.mjs.map +0 -1
- package/dist/chunk-B232I2GP.mjs.map +0 -1
- package/dist/chunk-PFE6GMNE.mjs.map +0 -1
- package/dist/chunk-UB5UOSHB.mjs.map +0 -1
- package/dist/chunk-VY2UYN5R.mjs.map +0 -1
- package/dist/chunk-WDU6QXNK.mjs.map +0 -1
- package/dist/chunk-Z3YG4OZT.mjs.map +0 -1
- /package/dist/{chunk-JDEOUK5V.mjs.map → chunk-6YXKHAFU.mjs.map} +0 -0
- /package/dist/{chunk-Z5CQMP54.mjs.map → chunk-ARRYKOI5.mjs.map} +0 -0
- /package/dist/{chunk-KLA67WKG.mjs.map → chunk-B3FFOIWS.mjs.map} +0 -0
- /package/dist/{chunk-OPHK6OJN.mjs.map → chunk-SLDBGSC3.mjs.map} +0 -0
- /package/dist/{chunk-L2PE36GQ.mjs.map → chunk-T2KL7VEL.mjs.map} +0 -0
- /package/dist/{chunk-H3TE3LOV.mjs.map → chunk-XMFTIVJH.mjs.map} +0 -0
- /package/dist/{devtools-GAZ7F3KL.mjs.map → devtools-E4YNCY5J.mjs.map} +0 -0
package/dist/server-query.cjs
CHANGED
|
@@ -806,6 +806,26 @@ __name(stableSerialize, "stableSerialize");
|
|
|
806
806
|
|
|
807
807
|
// src/server-action-security.ts
|
|
808
808
|
var import_node_async_hooks = require("async_hooks");
|
|
809
|
+
|
|
810
|
+
// src/server-fn-error.ts
|
|
811
|
+
var FARM_SERVER_FN_FAILURE_SYMBOL = /* @__PURE__ */ Symbol.for("farm.server-fn.failure");
|
|
812
|
+
var _ServerFnFailure = class _ServerFnFailure extends Error {
|
|
813
|
+
constructor(code, data, options) {
|
|
814
|
+
super(options.message);
|
|
815
|
+
this.name = "ServerFnFailure";
|
|
816
|
+
this.code = code;
|
|
817
|
+
this.data = data;
|
|
818
|
+
this.status = options.status;
|
|
819
|
+
Object.defineProperty(this, FARM_SERVER_FN_FAILURE_SYMBOL, {
|
|
820
|
+
value: true,
|
|
821
|
+
enumerable: false
|
|
822
|
+
});
|
|
823
|
+
}
|
|
824
|
+
};
|
|
825
|
+
__name(_ServerFnFailure, "ServerFnFailure");
|
|
826
|
+
var ServerFnFailure = _ServerFnFailure;
|
|
827
|
+
|
|
828
|
+
// src/server-action-security.ts
|
|
809
829
|
var SERVER_ACTION_STORAGE_KEY = /* @__PURE__ */ Symbol.for("farm.serverActionStorage");
|
|
810
830
|
var FALLBACK_ABORT_CONTROLLER_KEY = /* @__PURE__ */ Symbol.for("farm.serverActionFallbackAbortController");
|
|
811
831
|
function getServerActionExecutionContext() {
|
|
@@ -858,6 +878,8 @@ function createServerFn(options) {
|
|
|
858
878
|
throw new TypeError("createServerFn requires a handler function");
|
|
859
879
|
}
|
|
860
880
|
const middleware = resolveServerFnMiddleware(options.middleware);
|
|
881
|
+
const errors = normalizeServerFnErrors(options.errors);
|
|
882
|
+
const error = createServerFnErrorHandler(errors);
|
|
861
883
|
const serverFn = /* @__PURE__ */ __name(async (value) => {
|
|
862
884
|
const formData = isFormData(value) ? value : void 0;
|
|
863
885
|
const rawInput = formData ? formDataToObject(formData) : value;
|
|
@@ -875,7 +897,7 @@ function createServerFn(options) {
|
|
|
875
897
|
let resolvedContext = Object.freeze(/* @__PURE__ */ Object.create(null));
|
|
876
898
|
const result = await runServerFnMiddleware(middleware, handlerContext, async (context) => {
|
|
877
899
|
resolvedContext = context.context;
|
|
878
|
-
return options.handler(context);
|
|
900
|
+
return options.handler({ ...context, error });
|
|
879
901
|
});
|
|
880
902
|
const parsedResult = await _parseServerFnSchema(options.output, result, "output");
|
|
881
903
|
if (options.invalidates) {
|
|
@@ -905,6 +927,10 @@ function createServerFn(options) {
|
|
|
905
927
|
value: options.output,
|
|
906
928
|
enumerable: false
|
|
907
929
|
},
|
|
930
|
+
__farmServerFnError: {
|
|
931
|
+
value: void 0,
|
|
932
|
+
enumerable: false
|
|
933
|
+
},
|
|
908
934
|
__farmServerFnMiddleware: {
|
|
909
935
|
value: middleware,
|
|
910
936
|
enumerable: false
|
|
@@ -943,6 +969,78 @@ async function runServerFnMiddleware(middleware, handlerContext, handler) {
|
|
|
943
969
|
return dispatch(0, Object.freeze(/* @__PURE__ */ Object.create(null)));
|
|
944
970
|
}
|
|
945
971
|
__name(runServerFnMiddleware, "runServerFnMiddleware");
|
|
972
|
+
function normalizeServerFnErrors(definitions) {
|
|
973
|
+
if (definitions === void 0) return Object.freeze({});
|
|
974
|
+
if (!isPlainServerFnObject(definitions)) {
|
|
975
|
+
throw new TypeError("createServerFn errors must be an object");
|
|
976
|
+
}
|
|
977
|
+
const normalized = /* @__PURE__ */ Object.create(null);
|
|
978
|
+
for (const [code, definition] of Object.entries(definitions)) {
|
|
979
|
+
if (!code.trim()) {
|
|
980
|
+
throw new TypeError("Server function error codes cannot be empty");
|
|
981
|
+
}
|
|
982
|
+
if (!definition || typeof definition !== "object") {
|
|
983
|
+
throw new TypeError(`Server function error "${code}" must be an object`);
|
|
984
|
+
}
|
|
985
|
+
if (!Number.isInteger(definition.status) || definition.status < 400 || definition.status > 599) {
|
|
986
|
+
throw new TypeError(
|
|
987
|
+
`Server function error "${code}" status must be an integer between 400 and 599`
|
|
988
|
+
);
|
|
989
|
+
}
|
|
990
|
+
if (!definition.data || typeof definition.data.parse !== "function" && typeof definition.data.safeParse !== "function") {
|
|
991
|
+
throw new TypeError(
|
|
992
|
+
`Server function error "${code}" data must provide synchronous parse() or safeParse()`
|
|
993
|
+
);
|
|
994
|
+
}
|
|
995
|
+
if (definition.message !== void 0 && typeof definition.message !== "string") {
|
|
996
|
+
throw new TypeError(`Server function error "${code}" message must be a string`);
|
|
997
|
+
}
|
|
998
|
+
normalized[code] = Object.freeze({ ...definition });
|
|
999
|
+
}
|
|
1000
|
+
return Object.freeze(normalized);
|
|
1001
|
+
}
|
|
1002
|
+
__name(normalizeServerFnErrors, "normalizeServerFnErrors");
|
|
1003
|
+
function createServerFnErrorHandler(definitions) {
|
|
1004
|
+
return ((code, data) => {
|
|
1005
|
+
const definition = definitions[code];
|
|
1006
|
+
if (!definition) {
|
|
1007
|
+
throw new TypeError(`Server function error "${code}" is not declared`);
|
|
1008
|
+
}
|
|
1009
|
+
const parsed = parseServerFnFailureData(code, definition.data, data);
|
|
1010
|
+
throw new ServerFnFailure(code, parsed, {
|
|
1011
|
+
status: definition.status,
|
|
1012
|
+
message: definition.message ?? "Server function failed"
|
|
1013
|
+
});
|
|
1014
|
+
});
|
|
1015
|
+
}
|
|
1016
|
+
__name(createServerFnErrorHandler, "createServerFnErrorHandler");
|
|
1017
|
+
function parseServerFnFailureData(code, schema, value) {
|
|
1018
|
+
if (typeof schema.safeParse === "function") {
|
|
1019
|
+
const result2 = schema.safeParse(value);
|
|
1020
|
+
if (isPromiseLike(result2)) {
|
|
1021
|
+
throw new TypeError(`Server function error "${code}" data schema must parse synchronously`);
|
|
1022
|
+
}
|
|
1023
|
+
return unwrapSafeParseResult(result2);
|
|
1024
|
+
}
|
|
1025
|
+
const result = schema.parse(value);
|
|
1026
|
+
if (isPromiseLike(result)) {
|
|
1027
|
+
throw new TypeError(`Server function error "${code}" data schema must parse synchronously`);
|
|
1028
|
+
}
|
|
1029
|
+
return result;
|
|
1030
|
+
}
|
|
1031
|
+
__name(parseServerFnFailureData, "parseServerFnFailureData");
|
|
1032
|
+
function isPlainServerFnObject(value) {
|
|
1033
|
+
if (!value || typeof value !== "object" || Array.isArray(value)) return false;
|
|
1034
|
+
const prototype = Object.getPrototypeOf(value);
|
|
1035
|
+
return prototype === Object.prototype || prototype === null;
|
|
1036
|
+
}
|
|
1037
|
+
__name(isPlainServerFnObject, "isPlainServerFnObject");
|
|
1038
|
+
function isPromiseLike(value) {
|
|
1039
|
+
return Boolean(
|
|
1040
|
+
value && (typeof value === "object" || typeof value === "function") && "then" in value && typeof value.then === "function"
|
|
1041
|
+
);
|
|
1042
|
+
}
|
|
1043
|
+
__name(isPromiseLike, "isPromiseLike");
|
|
946
1044
|
function resolveServerFnMiddleware(middleware) {
|
|
947
1045
|
const resolved = [];
|
|
948
1046
|
const seen = /* @__PURE__ */ new Set();
|