@farm.js/plugin 0.1.0-beta.20 → 0.1.0-beta.22

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/index.d.ts CHANGED
@@ -39,5 +39,5 @@
39
39
  * })
40
40
  * ```
41
41
  */
42
- export declare const version = "0.1.0-beta.12";
42
+ export declare const version = "0.1.0-beta.22";
43
43
  //# sourceMappingURL=index.d.ts.map
package/dist/index.js CHANGED
@@ -39,7 +39,7 @@
39
39
  * })
40
40
  * ```
41
41
  */
42
- export const version = "0.1.0-beta.12";
42
+ export const version = "0.1.0-beta.22";
43
43
  // Note: Import plugins from their respective subpaths:
44
44
  // - @farm.js/plugin/rsc
45
45
  // - @farm.js/plugin/middleware
@@ -1,4 +1,5 @@
1
1
  import type { EntryContext } from "../types.js";
2
+ export declare const serverFnTransportErrorClientRuntime = "function createFarmServerFnTransportError(value) {\n const message = value && typeof value === 'object' && typeof value.message === 'string'\n ? value.message\n : 'Server function failed';\n const error = new Error(message);\n\n if (\n value &&\n typeof value === 'object' &&\n value.name === 'ServerFnFailure' &&\n typeof value.code === 'string' &&\n Number.isInteger(value.status) &&\n value.status >= 400 &&\n value.status <= 599 &&\n Object.prototype.hasOwnProperty.call(value, 'data')\n ) {\n error.name = 'ServerFnFailure';\n error.code = value.code;\n error.status = value.status;\n error.data = value.data;\n Object.defineProperty(error, Symbol.for('farm.server-fn.failure'), {\n value: true,\n enumerable: false,\n });\n return error;\n }\n\n error.name = 'ServerActionError';\n return error;\n}";
2
3
  /**
3
4
  * Generates the browser entry file.
4
5
  *
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/rsc/entries/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,YAAY,GAAG,MAAM,CAiR7D"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/rsc/entries/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,eAAO,MAAM,mCAAmC,62BA6B9C,CAAC;AAEH;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,YAAY,GAAG,MAAM,CAiR7D"}
@@ -1,3 +1,33 @@
1
+ export const serverFnTransportErrorClientRuntime = `function createFarmServerFnTransportError(value) {
2
+ const message = value && typeof value === 'object' && typeof value.message === 'string'
3
+ ? value.message
4
+ : 'Server function failed';
5
+ const error = new Error(message);
6
+
7
+ if (
8
+ value &&
9
+ typeof value === 'object' &&
10
+ value.name === 'ServerFnFailure' &&
11
+ typeof value.code === 'string' &&
12
+ Number.isInteger(value.status) &&
13
+ value.status >= 400 &&
14
+ value.status <= 599 &&
15
+ Object.prototype.hasOwnProperty.call(value, 'data')
16
+ ) {
17
+ error.name = 'ServerFnFailure';
18
+ error.code = value.code;
19
+ error.status = value.status;
20
+ error.data = value.data;
21
+ Object.defineProperty(error, Symbol.for('farm.server-fn.failure'), {
22
+ value: true,
23
+ enumerable: false,
24
+ });
25
+ return error;
26
+ }
27
+
28
+ error.name = 'ServerActionError';
29
+ return error;
30
+ }`;
1
31
  /**
2
32
  * Generates the browser entry file.
3
33
  *
@@ -45,6 +75,8 @@ import {
45
75
  let actionSetup = "";
46
76
  if (ctx.actionsEnabled) {
47
77
  actionSetup = `
78
+ ${serverFnTransportErrorClientRuntime}
79
+
48
80
  // Ref for payload setter (used by server action callback and refetch)
49
81
  const setPayloadRef = { current: null };
50
82
 
@@ -96,9 +128,7 @@ setServerCallback(async (id, args) => {
96
128
  applyFarmCacheInvalidations(p.returnValue?.invalidations);
97
129
  if (!p.returnValue || !p.returnValue.ok) {
98
130
  debug('Server action failed:', id);
99
- const error = new Error(p.returnValue?.data?.message || 'Server function failed');
100
- error.name = 'ServerActionError';
101
- throw error;
131
+ throw createFarmServerFnTransportError(p.returnValue?.data);
102
132
  }
103
133
  return completeFarmServerQueryAction(serverQueryInvocation, p.returnValue.data);
104
134
  });
@@ -1 +1 @@
1
- {"version":3,"file":"rsc.d.ts","sourceRoot":"","sources":["../../../src/rsc/entries/rsc.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,YAAY,GAAG,MAAM,CAg7B1D"}
1
+ {"version":3,"file":"rsc.d.ts","sourceRoot":"","sources":["../../../src/rsc/entries/rsc.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,YAAY,GAAG,MAAM,CAs7B1D"}
@@ -642,8 +642,11 @@ async function handleFarmRequest(request) {
642
642
  if (request.signal.aborted) {
643
643
  return new Response(null, { status: 499, headers: { 'Cache-Control': 'no-store' } });
644
644
  }
645
- console.error('[Farm.js] Server action failed:', e);
646
- returnValue = { ok: false, data: sanitizeServerActionError(e) };
645
+ const actionError = sanitizeServerActionError(e);
646
+ if (actionError.name === 'ServerActionError') {
647
+ console.error('[Farm.js] Server action failed:', e);
648
+ }
649
+ returnValue = { ok: false, data: actionError };
647
650
  debug('Server action failed:', actionId, e);
648
651
  }
649
652
  } else {
@@ -674,10 +677,13 @@ async function handleFarmRequest(request) {
674
677
  if (request.signal.aborted) {
675
678
  return new Response(null, { status: 499, headers: { 'Cache-Control': 'no-store' } });
676
679
  }
677
- console.error('[Farm.js] Form action failed:', e);
678
- debug('Form action failed:', e);
679
- return new Response('Server function failed', {
680
- status: 500,
680
+ const actionError = sanitizeServerActionError(e);
681
+ if (actionError.name === 'ServerActionError') {
682
+ console.error('[Farm.js] Form action failed:', e);
683
+ }
684
+ debug('Form action failed:', actionError);
685
+ return new Response(actionError.message, {
686
+ status: actionError.name === 'ServerFnFailure' ? actionError.status : 500,
681
687
  headers: {
682
688
  'Cache-Control': 'no-store',
683
689
  'Content-Type': 'text/plain; charset=utf-8',
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/rsc/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,EAA4B,KAAK,MAAM,EAAE,KAAK,UAAU,EAAE,MAAM,MAAM,CAAC;AAE9E,OAAO,KAAK,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AACrE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAC;AACpF,OAAO,KAAK,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AA4B9E,YAAY,EAAE,oBAAoB,EAAE,YAAY,EAAE,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAExF,YAAY,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,wBAAwB,CAAC;AAC1D,YAAY,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAGjE,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,SAAS,cAAc,EAAE,CAAC;IACpC,MAAM,CAAC,EAAE,SAAS,iBAAiB,EAAE,CAAC;IACtC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE;QACb;;;WAGG;QACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;QAC3B;;;WAGG;QACH,aAAa,CAAC,EAAE,OAAO,CAAC;QACxB;;;;;;;WAOG;QACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;KAC7B,CAAC;IACF,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,aAAa,CAAC,EAAE,uBAAuB,CAAC;IACxC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACjD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE;QACR,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,gHAAgH;IAChH,OAAO,CAAC,EAAE,GAAG,EAAE,CAAC;CACjB;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,MAAM,GAAE,aAAkB,GAAG,UAAU,CAiDnE;AA8TD;;;;;GAKG;AACH,MAAM,CAAC,OAAO,UAAU,OAAO,CAAC,OAAO,GAAE,oBAAyB,GAAG,MAAM,EAAE,CA0oC5E"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/rsc/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,EAA4B,KAAK,MAAM,EAAE,KAAK,UAAU,EAAE,MAAM,MAAM,CAAC;AAE9E,OAAO,KAAK,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AACrE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAC;AACpF,OAAO,KAAK,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AA4B9E,YAAY,EAAE,oBAAoB,EAAE,YAAY,EAAE,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAExF,YAAY,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,wBAAwB,CAAC;AAC1D,YAAY,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAGjE,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,SAAS,cAAc,EAAE,CAAC;IACpC,MAAM,CAAC,EAAE,SAAS,iBAAiB,EAAE,CAAC;IACtC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE;QACb;;;WAGG;QACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;QAC3B;;;WAGG;QACH,aAAa,CAAC,EAAE,OAAO,CAAC;QACxB;;;;;;;WAOG;QACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;KAC7B,CAAC;IACF,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,aAAa,CAAC,EAAE,uBAAuB,CAAC;IACxC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACjD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE;QACR,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,gHAAgH;IAChH,OAAO,CAAC,EAAE,GAAG,EAAE,CAAC;CACjB;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,MAAM,GAAE,aAAkB,GAAG,UAAU,CAiDnE;AA8TD;;;;;GAKG;AACH,MAAM,CAAC,OAAO,UAAU,OAAO,CAAC,OAAO,GAAE,oBAAyB,GAAG,MAAM,EAAE,CAyoC5E"}
package/dist/rsc/index.js CHANGED
@@ -26,7 +26,7 @@ import { init as initModuleLexer, parse as parseModuleImports } from "es-module-
26
26
  import { farmEnvironmentFunctionsPlugin } from "@farm.js/core/environment/vite";
27
27
  import { generateRscEntry } from "./entries/rsc.js";
28
28
  import { generateSsrEntry } from "./entries/ssr.js";
29
- import { generateClientEntry } from "./entries/client.js";
29
+ import { generateClientEntry, serverFnTransportErrorClientRuntime } from "./entries/client.js";
30
30
  import { transformFarmServerFns } from "./server-fn-transform.js";
31
31
  import { transformAutomaticOptimizedBoundaries } from "./automatic-optimized-boundary.js";
32
32
  import { resolveRscBuildOutputPath } from "./build-paths.js";
@@ -848,6 +848,7 @@ import {
848
848
  createFarmDeploymentRequestHeaders,
849
849
  isFarmDeploymentMismatchResponse,
850
850
  } from '@farm.js/core/deployment';
851
+ ${serverFnTransportErrorClientRuntime}
851
852
  const farmDeploymentId = ${JSON.stringify(entryContext.deploymentId)};
852
853
  setServerCallback(async (id, args) => {
853
854
  const refs = createTemporaryReferenceSet();
@@ -874,9 +875,7 @@ setServerCallback(async (id, args) => {
874
875
  if (!res.ok) throw new Error('Server action failed: ' + res.status);
875
876
  const p = await createFromReadableStream(res.body, { temporaryReferences: refs });
876
877
  if (p?.returnValue?.ok) return p.returnValue.data;
877
- const error = new Error(p?.returnValue?.data?.message || 'Server function failed');
878
- error.name = 'ServerActionError';
879
- throw error;
878
+ throw createFarmServerFnTransportError(p?.returnValue?.data);
880
879
  });
881
880
  `
882
881
  : "";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@farm.js/plugin",
3
- "version": "0.1.0-beta.20",
3
+ "version": "0.1.0-beta.22",
4
4
  "description": "Official plugins for Farm.js framework",
5
5
  "license": "MIT",
6
6
  "author": "Farm.js Team",
@@ -61,7 +61,7 @@
61
61
  "nitro": "3.0.1-alpha.0",
62
62
  "picocolors": "^1.0.0",
63
63
  "rsc-html-stream": "^0.0.4",
64
- "@farm.js/core": "0.1.0-beta.20"
64
+ "@farm.js/core": "0.1.0-beta.22"
65
65
  },
66
66
  "devDependencies": {
67
67
  "@types/node": "^20.19.21",
@@ -82,7 +82,7 @@
82
82
  "react-dom": "19.2.8",
83
83
  "react-server-dom-webpack": "19.2.8",
84
84
  "vite": ">=6.0.0",
85
- "@farm.js/core": "0.1.0-beta.20"
85
+ "@farm.js/core": "0.1.0-beta.22"
86
86
  },
87
87
  "peerDependenciesMeta": {
88
88
  "@vitejs/plugin-rsc": {