@farm.js/core 0.1.0-beta.50 → 0.1.0-beta.52

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 (50) hide show
  1. package/dist/{chunk-HSHA3H3U.mjs → chunk-3E2WRUR2.mjs} +15 -1
  2. package/dist/chunk-3E2WRUR2.mjs.map +1 -0
  3. package/dist/{chunk-6YIZDTX7.mjs → chunk-BTFOMBWK.mjs} +43 -5
  4. package/dist/chunk-BTFOMBWK.mjs.map +1 -0
  5. package/dist/{chunk-GM43ZLTS.mjs → chunk-JK6YAQ3E.mjs} +52 -9
  6. package/dist/chunk-JK6YAQ3E.mjs.map +1 -0
  7. package/dist/{chunk-ZAW3D2TI.mjs → chunk-M2DI67UZ.mjs} +2 -2
  8. package/dist/{chunk-DDE3BBDN.mjs → chunk-TW74WBSB.mjs} +2 -2
  9. package/dist/{chunk-DDE3BBDN.mjs.map → chunk-TW74WBSB.mjs.map} +1 -1
  10. package/dist/{chunk-QTAJIJJJ.mjs → chunk-XMUPYG2D.mjs} +2 -2
  11. package/dist/client/lifecycle.mjs +2 -2
  12. package/dist/client-plugins.cjs +1 -1
  13. package/dist/client-plugins.cjs.map +1 -1
  14. package/dist/client-plugins.mjs +2 -2
  15. package/dist/client.cjs +15 -1
  16. package/dist/client.cjs.map +1 -1
  17. package/dist/client.mjs +4 -4
  18. package/dist/index.cjs +113 -11
  19. package/dist/index.cjs.map +1 -1
  20. package/dist/index.mjs +6 -6
  21. package/dist/internal/build-runtime.cjs +99 -11
  22. package/dist/internal/build-runtime.cjs.map +1 -1
  23. package/dist/internal/build-runtime.mjs +3 -3
  24. package/dist/internal/client-runtime.cjs +1 -1
  25. package/dist/internal/client-runtime.cjs.map +1 -1
  26. package/dist/internal/client-runtime.mjs +2 -2
  27. package/dist/plugin.cjs +51 -8
  28. package/dist/plugin.cjs.map +1 -1
  29. package/dist/plugin.mjs +2 -2
  30. package/dist/renderer-client.cjs +14 -0
  31. package/dist/renderer-client.cjs.map +1 -1
  32. package/dist/renderer-client.mjs +1 -1
  33. package/dist/server-query-client.cjs +14 -0
  34. package/dist/server-query-client.cjs.map +1 -1
  35. package/dist/server-query-client.mjs +2 -2
  36. package/dist/server.cjs +51 -8
  37. package/dist/server.cjs.map +1 -1
  38. package/dist/server.mjs +2 -2
  39. package/dist/version.cjs +1 -1
  40. package/dist/version.cjs.map +1 -1
  41. package/dist/version.mjs +1 -1
  42. package/dist/vite.cjs +51 -8
  43. package/dist/vite.cjs.map +1 -1
  44. package/dist/vite.mjs +2 -2
  45. package/package.json +1 -1
  46. package/dist/chunk-6YIZDTX7.mjs.map +0 -1
  47. package/dist/chunk-GM43ZLTS.mjs.map +0 -1
  48. package/dist/chunk-HSHA3H3U.mjs.map +0 -1
  49. /package/dist/{chunk-ZAW3D2TI.mjs.map → chunk-M2DI67UZ.mjs.map} +0 -0
  50. /package/dist/{chunk-QTAJIJJJ.mjs.map → chunk-XMUPYG2D.mjs.map} +0 -0
@@ -1,12 +1,12 @@
1
1
  import {
2
2
  createClientPluginManager,
3
3
  installChunkErrorRecovery
4
- } from "../chunk-QTAJIJJJ.mjs";
4
+ } from "../chunk-XMUPYG2D.mjs";
5
5
  import {
6
6
  searchParamsToObject
7
7
  } from "../chunk-4DCGM2BW.mjs";
8
8
  import "../chunk-FXG2PS27.mjs";
9
- import "../chunk-DDE3BBDN.mjs";
9
+ import "../chunk-TW74WBSB.mjs";
10
10
  import {
11
11
  __name
12
12
  } from "../chunk-CGILA3WO.mjs";
package/dist/plugin.cjs CHANGED
@@ -19037,7 +19037,7 @@ _setFarmThemeServerSnapshotResolver(() => {
19037
19037
  });
19038
19038
 
19039
19039
  // package.json
19040
- var version = "0.1.0-beta.50";
19040
+ var version = "0.1.0-beta.52";
19041
19041
 
19042
19042
  // src/version.ts
19043
19043
  var FARM_VERSION = version;
@@ -23641,6 +23641,14 @@ __name(_withAfterNodeMiddleware, "_withAfterNodeMiddleware");
23641
23641
  // src/dev-static.ts
23642
23642
  var fs9 = __toESM(require("fs"));
23643
23643
  var path20 = __toESM(require("path"));
23644
+ function shouldBypassFarmRouterForDottedPath(pathname, routeManager, baseDirs) {
23645
+ if (!pathname.includes(".") || pathname.endsWith(".html")) return false;
23646
+ const matchesAppRoute = Boolean(
23647
+ routeManager?.matchRoute(pathname)?.route || routeManager?.matchMetadataRoute(pathname) || routeManager?.matchMetadataImage(pathname)
23648
+ );
23649
+ return !matchesAppRoute || devServableFileExists(pathname, baseDirs);
23650
+ }
23651
+ __name(shouldBypassFarmRouterForDottedPath, "shouldBypassFarmRouterForDottedPath");
23644
23652
  function devServableFileExists(pathname, baseDirs) {
23645
23653
  let decodedPathname;
23646
23654
  try {
@@ -23666,6 +23674,34 @@ function devServableFileExists(pathname, baseDirs) {
23666
23674
  }
23667
23675
  __name(devServableFileExists, "devServableFileExists");
23668
23676
 
23677
+ // src/server-query-boundary.ts
23678
+ var SERVER_FN_FACTORIES = ["createServerQuery", "createServerFn"];
23679
+ var FARM_CORE_IMPORT_RE = /import\s*(?!type\b)(?:[\w$]+\s*,\s*)?\{([^}]*)\}\s*from\s*(["'])@farm\.js\/core(?:\/[\w./-]+)?\2/g;
23680
+ function findClientServerFnViolation(code, id) {
23681
+ if (id.startsWith("\0") || id.startsWith("virtual:") || id.includes("node_modules")) return null;
23682
+ if (!code.includes("@farm.js/core")) return null;
23683
+ for (const match of code.matchAll(FARM_CORE_IMPORT_RE)) {
23684
+ const specifiers = match[1];
23685
+ for (const factory of SERVER_FN_FACTORIES) {
23686
+ if (!new RegExp(`(?:^|[\\s{,])${factory}(?:[\\s},]|$)`).test(specifiers)) continue;
23687
+ if (new RegExp(`(?<![\\w$.])${factory}\\s*(?:<[^>]*>)?\\s*\\(`).test(code)) {
23688
+ return { factory };
23689
+ }
23690
+ }
23691
+ }
23692
+ return null;
23693
+ }
23694
+ __name(findClientServerFnViolation, "findClientServerFnViolation");
23695
+ function formatServerFnBoundaryError(violation, id) {
23696
+ return [
23697
+ `${violation.factory} handlers run only on the server, but ${id} is being bundled into the client.`,
23698
+ `Importing a ${violation.factory} module from client code executes the server handler (and its Node-only imports) in the browser.`,
23699
+ `Either enable the server-function transform (add @farm.js/plugin/rsc and set experimental.serverActions: true in farm.config.ts) so client imports become server references,`,
23700
+ `or keep the query on the server: call it from server components, or expose an API route and use createAPIClient from the client.`
23701
+ ].join("\n");
23702
+ }
23703
+ __name(formatServerFnBoundaryError, "formatServerFnBoundaryError");
23704
+
23669
23705
  // src/vite.ts
23670
23706
  init_deployment();
23671
23707
  init_image_config();
@@ -25081,13 +25117,11 @@ window.__FARM_MANIFEST__ = ${inlineValue({
25081
25117
  if (req.url?.startsWith("/@") || req.url?.startsWith("/node_modules")) {
25082
25118
  return next();
25083
25119
  }
25084
- if (requestPathname.includes(".") && !requestPathname.endsWith(".html")) {
25085
- const matchesAppRoute = Boolean(
25086
- farmApp?.getRouteManager()?.matchRoute(requestPathname)?.route
25087
- );
25088
- if (!matchesAppRoute || devServableFileExists(requestPathname, [server.config.publicDir, server.config.root])) {
25089
- return next();
25090
- }
25120
+ if (shouldBypassFarmRouterForDottedPath(requestPathname, farmApp?.getRouteManager(), [
25121
+ server.config.publicDir,
25122
+ server.config.root
25123
+ ])) {
25124
+ return next();
25091
25125
  }
25092
25126
  if (req.url?.startsWith("/__farm/page-data")) {
25093
25127
  const urlObj = new URL(req.url, `http://${req.headers.host || "localhost:3000"}`);
@@ -25741,6 +25775,15 @@ export const manifest = getManifest();
25741
25775
  }
25742
25776
  },
25743
25777
  async transform(code, id, transformOptions) {
25778
+ if (!transformOptions?.ssr) {
25779
+ const currentConfig = farmApp?.getConfig() ?? options;
25780
+ if (currentConfig.experimental?.serverActions !== true) {
25781
+ const violation = findClientServerFnViolation(code, id);
25782
+ if (violation) {
25783
+ this.error(formatServerFnBoundaryError(violation, id));
25784
+ }
25785
+ }
25786
+ }
25744
25787
  if (typeof imageImports.transform === "function") {
25745
25788
  const imageModule = await imageImports.transform.call(this, code, id, transformOptions);
25746
25789
  if (imageModule) return imageModule;