@farm.js/core 0.1.62 → 0.1.64
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/{agent-mcp-handler-OV4WRFBL.cjs → agent-mcp-handler-OXT73ZBY.cjs} +5 -5
- package/dist/{agent-mcp-handler-7QMX2LUY.mjs → agent-mcp-handler-QLFDDTYN.mjs} +4 -4
- package/dist/{agent-mcp.d-BKZ3UNbt.d.mts → agent-mcp.d-CO_ABmNK.d.mts} +1 -1
- package/dist/{agent-mcp.d-C1zr_nGS.d.ts → agent-mcp.d-QD2WZ9BS.d.ts} +1 -1
- package/dist/agent-runtime.d.mts +1 -1
- package/dist/agent-runtime.d.ts +1 -1
- package/dist/analyzer-ODLF2Z6O.cjs +16 -0
- package/dist/{analyzer-YESYU3GK.mjs → analyzer-Q3QXC6PD.mjs} +3 -2
- package/dist/api/route-manager.d.mts +3 -3
- package/dist/api/route-manager.d.ts +3 -3
- package/dist/api/runtime.d.mts +2 -2
- package/dist/api/runtime.d.ts +2 -2
- package/dist/api.d.mts +3 -3
- package/dist/api.d.ts +3 -3
- package/dist/{app-manifest.d-ntch_bvA.d.ts → app-manifest.d-BpKxiU_E.d.mts} +9 -1
- package/dist/{app-manifest.d-BpvhfKRH.d.mts → app-manifest.d-DDmNkYQQ.d.ts} +9 -1
- package/dist/app-markdown.cjs +4 -4
- package/dist/app-markdown.d.mts +2 -2
- package/dist/app-markdown.d.ts +2 -2
- package/dist/app-markdown.mjs +3 -3
- package/dist/{app.d-CysWA_8v.d.mts → app.d-kuoVWhWM.d.mts} +4 -4
- package/dist/{app.d-AE8_v3Db.d.ts → app.d-x68Cwr0_.d.ts} +4 -4
- package/dist/{chunk-LT4VAF5Z.cjs → chunk-2C5L5RPM.cjs} +7 -6
- package/dist/{chunk-RMUD75WT.cjs → chunk-3EBHJET2.cjs} +355 -270
- package/dist/{chunk-RZNCMRD3.mjs → chunk-6NHSGVVA.mjs} +1 -1
- package/dist/{chunk-LVWGURLD.mjs → chunk-6NNYPY5W.mjs} +327 -13
- package/dist/{chunk-PRFNLQSP.cjs → chunk-7XGWBPQQ.cjs} +4 -4
- package/dist/{chunk-SG57PX7K.cjs → chunk-BTVDYS4B.cjs} +7 -2
- package/dist/{chunk-545WJ5UG.cjs → chunk-DUSHDZQL.cjs} +11 -11
- package/dist/{chunk-GVOMPU3Y.cjs → chunk-EL4364S2.cjs} +209 -32
- package/dist/{chunk-GGNJAGGE.cjs → chunk-FAP7CX7C.cjs} +1056 -529
- package/dist/{chunk-T46NNU4D.mjs → chunk-FH45OB37.mjs} +2 -2
- package/dist/{chunk-55U5QIXQ.mjs → chunk-FIR62CR3.mjs} +1 -1
- package/dist/{chunk-MEQN6DDA.cjs → chunk-FJWN7RV4.cjs} +5 -5
- package/dist/chunk-IOEXXZK3.mjs +88 -0
- package/dist/{chunk-EXXFSZOC.cjs → chunk-JCPSA4X5.cjs} +135 -134
- package/dist/{chunk-YSXTNSXS.mjs → chunk-K7OZAVOI.mjs} +7 -6
- package/dist/{chunk-KVW2M6PI.mjs → chunk-KL7SHLQB.mjs} +1 -1
- package/dist/{chunk-NT3QDN2E.mjs → chunk-LQDLEWPO.mjs} +1 -1
- package/dist/{chunk-UZZ6IEQP.mjs → chunk-MESQF2JC.mjs} +2 -2
- package/dist/{chunk-WKJQ2FJA.cjs → chunk-MG356ROI.cjs} +5 -5
- package/dist/{chunk-AJB3DHN6.cjs → chunk-N3Z3PLHC.cjs} +2 -2
- package/dist/{chunk-2CNKQC3G.mjs → chunk-NNLFW3P4.mjs} +2 -2
- package/dist/{chunk-XX32BOMM.cjs → chunk-NXFA7G3Y.cjs} +52 -26
- package/dist/{chunk-SM25ZC4S.cjs → chunk-O2XFIPNL.cjs} +1 -1
- package/dist/{chunk-VWW4Q3BJ.mjs → chunk-O4FWNLQK.mjs} +4 -4
- package/dist/{chunk-DZPR2W6U.cjs → chunk-O6L3YYPM.cjs} +5 -5
- package/dist/{chunk-UWI3SJAK.cjs → chunk-O7IEMY55.cjs} +3 -3
- package/dist/{chunk-6BJJYOFL.cjs → chunk-OLIGNTWU.cjs} +7 -7
- package/dist/{chunk-OUWRNHTV.mjs → chunk-OYF23QLG.mjs} +17 -16
- package/dist/{chunk-IQIKPKFP.mjs → chunk-RAH5MT53.mjs} +110 -25
- package/dist/{chunk-E72UD6ME.mjs → chunk-RVGSVQWT.mjs} +1 -1
- package/dist/{chunk-ZVIEFTUA.cjs → chunk-S25BQIFW.cjs} +16 -16
- package/dist/chunk-S7ZW72JH.cjs +254 -0
- package/dist/{chunk-VM7X5CKC.mjs → chunk-SLYDIHLW.mjs} +31 -5
- package/dist/chunk-SNFTMSHX.mjs +254 -0
- package/dist/{chunk-2WZTGPK6.mjs → chunk-SQ5O7I3L.mjs} +7 -2
- package/dist/{chunk-PCXIJKPM.mjs → chunk-TNBJ4LZG.mjs} +2 -2
- package/dist/{chunk-O27PLNQZ.cjs → chunk-UJ3R2AH2.cjs} +4 -4
- package/dist/{chunk-T4TBK5NY.mjs → chunk-VQ4NWOWO.mjs} +2 -2
- package/dist/{chunk-ZZ2QKCKW.mjs → chunk-WAY6LOQH.mjs} +1 -1
- package/dist/chunk-WBTHHTBO.cjs +88 -0
- package/dist/{chunk-ZBUAOGMY.mjs → chunk-WFNAOWH4.mjs} +1 -1
- package/dist/{chunk-IWRLV46X.cjs → chunk-WMTBBQHY.cjs} +4 -4
- package/dist/{chunk-2JYBLE63.mjs → chunk-WNYRYI4D.mjs} +770 -243
- package/dist/{chunk-CI4UNQHO.cjs → chunk-XBSKPLHF.cjs} +2 -2
- package/dist/{chunk-IOF4KXMP.mjs → chunk-XVWSDSUM.mjs} +201 -24
- package/dist/{chunk-JEJQGZI7.cjs → chunk-XZLZ6YPP.cjs} +346 -32
- package/dist/{chunk-QAS7KE7J.cjs → chunk-Y5TOT5F6.cjs} +5 -5
- package/dist/{chunk-DPE53XWL.mjs → chunk-ZEXE4TGY.mjs} +1 -1
- package/dist/{client-component.d-BoqC2MLC.d.mts → client-component.d-D74pqdea.d.mts} +14 -3
- package/dist/{client-component.d-Bgt3x5Fu.d.ts → client-component.d-D8VcypQA.d.ts} +14 -3
- package/dist/{client-plugins.d-BcqIy4au.d.ts → client-plugins.d-CXElzotB.d.ts} +18 -2
- package/dist/{client-plugins.d-CWyYBxXf.d.mts → client-plugins.d-D4-6hNx7.d.mts} +18 -2
- package/dist/client-plugins.d.mts +1 -1
- package/dist/client-plugins.d.ts +1 -1
- package/dist/client.d.mts +6 -6
- package/dist/client.d.ts +6 -6
- package/dist/config.d.mts +1 -1
- package/dist/config.d.ts +1 -1
- package/dist/desktop.d.mts +2 -2
- package/dist/desktop.d.ts +2 -2
- package/dist/{devtools-NUVXYG7I.mjs → devtools-MX3FE733.mjs} +5 -5
- package/dist/{devtools-SVRSGPNC.cjs → devtools-WET5NAKO.cjs} +6 -6
- package/dist/docs.cjs +8 -8
- package/dist/docs.d.mts +2 -2
- package/dist/docs.d.ts +2 -2
- package/dist/docs.mjs +7 -7
- package/dist/index.cjs +21 -20
- package/dist/{index.d-nAncqTXz.d.ts → index.d-A_x10zGS.d.ts} +1 -1
- package/dist/{index.d-BDaiu2i5.d.mts → index.d-SSgYDv4D.d.mts} +1 -1
- package/dist/index.d.mts +16 -16
- package/dist/index.d.ts +16 -16
- package/dist/index.mjs +20 -19
- package/dist/integrations.d.mts +1 -1
- package/dist/integrations.d.ts +1 -1
- package/dist/internal/app-markdown-runtime.cjs +3 -3
- package/dist/internal/app-markdown-runtime.d.mts +2 -2
- package/dist/internal/app-markdown-runtime.d.ts +2 -2
- package/dist/internal/app-markdown-runtime.mjs +2 -2
- package/dist/internal/build-runtime.cjs +22 -21
- package/dist/internal/build-runtime.d.mts +3 -3
- package/dist/internal/build-runtime.d.ts +3 -3
- package/dist/internal/build-runtime.mjs +21 -20
- package/dist/internal/cli-runtime.cjs +7 -7
- package/dist/internal/cli-runtime.mjs +6 -6
- package/dist/internal/client-error-overlay.cjs +4 -4
- package/dist/internal/client-error-overlay.mjs +1 -1
- package/dist/internal/client-runtime.d.mts +4 -4
- package/dist/internal/client-runtime.d.ts +4 -4
- package/dist/internal/compression-runtime.d.mts +1 -1
- package/dist/internal/compression-runtime.d.ts +1 -1
- package/dist/internal/config-runtime.cjs +7 -7
- package/dist/internal/config-runtime.d.mts +4 -4
- package/dist/internal/config-runtime.d.ts +4 -4
- package/dist/internal/config-runtime.mjs +6 -6
- package/dist/internal/infra-analytics-runtime.cjs +11 -9
- package/dist/internal/infra-analytics-runtime.mjs +9 -7
- package/dist/internal/native-server-fns.cjs +5 -4
- package/dist/internal/native-server-fns.mjs +4 -3
- package/dist/internal/product-telemetry-runtime.cjs +17 -211
- package/dist/internal/product-telemetry-runtime.mjs +10 -204
- package/dist/internal/production-runtime.cjs +13 -12
- package/dist/internal/production-runtime.d.mts +13 -12
- package/dist/internal/production-runtime.d.ts +13 -12
- package/dist/internal/production-runtime.mjs +14 -13
- package/dist/internal/react-cache.cjs +21 -1
- package/dist/internal/react-cache.d.mts +8 -1
- package/dist/internal/react-cache.d.ts +8 -1
- package/dist/internal/react-cache.mjs +21 -1
- package/dist/markdown.cjs +2 -2
- package/dist/markdown.d.mts +1 -1
- package/dist/markdown.d.ts +1 -1
- package/dist/markdown.mjs +1 -1
- package/dist/middleware.d.mts +3 -3
- package/dist/middleware.d.ts +3 -3
- package/dist/mobile.d.mts +2 -2
- package/dist/mobile.d.ts +2 -2
- package/dist/{native-tree-AS5L3ID3.mjs → native-tree-BPEE2LAL.mjs} +2 -2
- package/dist/{native-tree-Z2WYUJEV.cjs → native-tree-WOX3JMBG.cjs} +3 -3
- package/dist/{navigation-delegate.d-CSCm8ZxL.d.mts → navigation-delegate.d-DQVYKoaZ.d.mts} +1 -1
- package/dist/{navigation-delegate.d-BbUHRXxG.d.ts → navigation-delegate.d-GghbHJuK.d.ts} +1 -1
- package/dist/navigation.d.mts +4 -4
- package/dist/navigation.d.ts +4 -4
- package/dist/plugin.cjs +14 -14
- package/dist/plugin.d.mts +3 -3
- package/dist/plugin.d.ts +3 -3
- package/dist/plugin.mjs +13 -13
- package/dist/{production-runtime.d-DgT24A0f.d.ts → production-runtime.d-Bzns3NW9.d.ts} +1 -1
- package/dist/{production-runtime.d-CcQiDko5.d.mts → production-runtime.d-DiFa5vHW.d.mts} +1 -1
- package/dist/{render-plan.d-CyrX6MDs.d.ts → render-plan.d-CL_Ikfg_.d.ts} +1 -1
- package/dist/{render-plan.d-BH9WF-JZ.d.mts → render-plan.d-CcF0MeCf.d.mts} +1 -1
- package/dist/renderer-client.d.mts +4 -4
- package/dist/renderer-client.d.ts +4 -4
- package/dist/{request.d-BB8M8bcD.d.ts → request.d-B1RnTLri.d.ts} +1 -1
- package/dist/{request.d-CUrPnCW7.d.mts → request.d-DarDOCk9.d.mts} +1 -1
- package/dist/request.d.mts +2 -2
- package/dist/request.d.ts +2 -2
- package/dist/{route-rendering.d-DYqZMIf4.d.ts → route-rendering.d-BTUYCIj4.d.ts} +1 -1
- package/dist/{route-rendering.d-CYxlzaFm.d.mts → route-rendering.d-D_2Ual0-.d.mts} +1 -1
- package/dist/{router.d-DaKo507j.d.ts → router.d-CMANF6da.d.ts} +1 -1
- package/dist/{router.d-7o24CD8u.d.mts → router.d-Cuv1jntg.d.mts} +1 -1
- package/dist/{routes.d-BknKQcTu.d.ts → routes.d-B6yFe6jm.d.ts} +1 -1
- package/dist/{routes.d-D1IrO9KK.d.mts → routes.d-c2HKfrfL.d.mts} +1 -1
- package/dist/routes.d.mts +1 -1
- package/dist/routes.d.ts +1 -1
- package/dist/{rsc-pipeline-RFLHDAKD.mjs → rsc-pipeline-3LNVP2OO.mjs} +6 -6
- package/dist/{rsc-pipeline-OF2I7PCX.cjs → rsc-pipeline-G5WELVW3.cjs} +7 -7
- package/dist/{runtime-LBTK62AD.cjs → runtime-DMEULPE7.cjs} +22 -11
- package/dist/{runtime-M6UJCSLA.mjs → runtime-HQJ2LLQL.mjs} +20 -9
- package/dist/{runtime.d-CN73a-IL.d.ts → runtime.d-C3RQUj6_.d.ts} +1 -1
- package/dist/{runtime.d-CcNuzhX6.d.mts → runtime.d-wvh4ngU0.d.mts} +1 -1
- package/dist/server-plugins.d.mts +2 -2
- package/dist/server-plugins.d.ts +2 -2
- package/dist/server.cjs +31 -31
- package/dist/server.d.mts +9 -9
- package/dist/server.d.ts +9 -9
- package/dist/server.mjs +16 -16
- package/dist/{spa-router.d-CNi77LZm.d.mts → spa-router.d-WU_qS5gJ.d.mts} +2 -2
- package/dist/{spa-router.d-Cvgf5QP4.d.ts → spa-router.d-m8H_Kl_B.d.ts} +2 -2
- package/dist/testing.d.mts +1 -1
- package/dist/testing.d.ts +1 -1
- package/dist/{utils.d-C3H-14_Y.d.ts → utils.d-C9dQD5Zg.d.ts} +1 -1
- package/dist/{utils.d-D8VfzZYn.d.mts → utils.d-W9IiEqmW.d.mts} +1 -1
- package/dist/version.cjs +2 -2
- package/dist/version.mjs +1 -1
- package/dist/vite.cjs +18 -14
- package/dist/vite.d.mts +23 -5
- package/dist/vite.d.ts +23 -5
- package/dist/vite.mjs +17 -13
- package/package.json +1 -1
- package/dist/analyzer-2AHWJJR7.cjs +0 -15
- package/dist/chunk-CSLUBKGG.mjs +0 -44
- package/dist/chunk-SGBNF56S.cjs +0 -44
|
@@ -16,14 +16,18 @@ import {
|
|
|
16
16
|
createFarmClientOptimizeDepsEntries,
|
|
17
17
|
createFarmSourceAlias,
|
|
18
18
|
createFarmThemeCssPlugin,
|
|
19
|
+
ensureFarmPackageClientReference,
|
|
19
20
|
farmFontImportsPlugin,
|
|
21
|
+
farmRelativeImportFiles,
|
|
20
22
|
generateClientCachePersistenceCode,
|
|
21
23
|
generateFarmClientPluginEntryCode,
|
|
22
24
|
generateFarmIntegrationProviderClientCode,
|
|
23
25
|
getClientModuleMetadata,
|
|
26
|
+
getFarmClientReachableModules,
|
|
24
27
|
getIslandStrategyExport,
|
|
25
28
|
hasUseClientDirective,
|
|
26
29
|
inferFarmIslandStrategy,
|
|
30
|
+
invalidateFarmClientReachableModules,
|
|
27
31
|
isFarmDocsClientConfigModule,
|
|
28
32
|
isFarmPackageClientBoundary,
|
|
29
33
|
isIsolatableClientBoundarySource,
|
|
@@ -36,8 +40,9 @@ import {
|
|
|
36
40
|
resolveFarmRouteRootStrategy,
|
|
37
41
|
resolveModuleSourcePath,
|
|
38
42
|
rewriteFarmPackageClientImports,
|
|
43
|
+
rewriteFarmReactServerImports,
|
|
39
44
|
stripUseClientDirective
|
|
40
|
-
} from "./chunk-
|
|
45
|
+
} from "./chunk-WNYRYI4D.mjs";
|
|
41
46
|
import {
|
|
42
47
|
loadTailwindVitePlugin
|
|
43
48
|
} from "./chunk-OM7WILES.mjs";
|
|
@@ -61,13 +66,10 @@ import {
|
|
|
61
66
|
parseFarmLayoutChainHeader,
|
|
62
67
|
renderFarmLocaleAlternateLinks,
|
|
63
68
|
stripRouteGroups
|
|
64
|
-
} from "./chunk-
|
|
69
|
+
} from "./chunk-TNBJ4LZG.mjs";
|
|
65
70
|
import {
|
|
66
71
|
FARM_NATIVE_TREE_CONTENT_TYPE
|
|
67
72
|
} from "./chunk-LLZSYFOM.mjs";
|
|
68
|
-
import {
|
|
69
|
-
isFarmPreviewDeploymentEnvironment
|
|
70
|
-
} from "./chunk-CSLUBKGG.mjs";
|
|
71
73
|
import {
|
|
72
74
|
FARM_API_CATALOG_PATH,
|
|
73
75
|
createFarmAiCatalogResponse,
|
|
@@ -82,10 +84,13 @@ import {
|
|
|
82
84
|
resolveFarmMCPRouteLabel,
|
|
83
85
|
resolveFarmMarkdownRouteLabel,
|
|
84
86
|
setFarmRouteLabel
|
|
85
|
-
} from "./chunk-
|
|
87
|
+
} from "./chunk-SLYDIHLW.mjs";
|
|
86
88
|
import {
|
|
87
89
|
FARM_DEFAULT_MCP_PATH
|
|
88
|
-
} from "./chunk-
|
|
90
|
+
} from "./chunk-MESQF2JC.mjs";
|
|
91
|
+
import {
|
|
92
|
+
isFarmPreviewDeploymentEnvironment
|
|
93
|
+
} from "./chunk-SNFTMSHX.mjs";
|
|
89
94
|
import {
|
|
90
95
|
createFarmServerFnBoundaryModule,
|
|
91
96
|
isFarmServerFnBoundaryId,
|
|
@@ -132,10 +137,10 @@ import {
|
|
|
132
137
|
FARM_PREVIEW_ROBOTS_TAG,
|
|
133
138
|
resolveFarmAgentCrawlers,
|
|
134
139
|
resolveFarmAgentSitemap
|
|
135
|
-
} from "./chunk-
|
|
140
|
+
} from "./chunk-VQ4NWOWO.mjs";
|
|
136
141
|
import {
|
|
137
142
|
resolveFarmLlmsTxtConfig
|
|
138
|
-
} from "./chunk-
|
|
143
|
+
} from "./chunk-KL7SHLQB.mjs";
|
|
139
144
|
import {
|
|
140
145
|
getFarmAppDirectories,
|
|
141
146
|
getFarmLayerAliases,
|
|
@@ -152,7 +157,7 @@ import {
|
|
|
152
157
|
createFarmMarkdownSourceResponse,
|
|
153
158
|
isFarmMarkdownPageFile,
|
|
154
159
|
normalizeFarmMarkdownRoutePath
|
|
155
|
-
} from "./chunk-
|
|
160
|
+
} from "./chunk-RVGSVQWT.mjs";
|
|
156
161
|
import {
|
|
157
162
|
FARM_MARKDOWN_CONTENT_TYPE,
|
|
158
163
|
createFarmMarkdownErrorBody,
|
|
@@ -161,7 +166,7 @@ import {
|
|
|
161
166
|
getFarmMarkdownAlternatePath,
|
|
162
167
|
getFarmMarkdownMirrorPath,
|
|
163
168
|
resolveMarkdownMirrorTarget
|
|
164
|
-
} from "./chunk-
|
|
169
|
+
} from "./chunk-K7OZAVOI.mjs";
|
|
165
170
|
import {
|
|
166
171
|
resolveFarmRouteContext,
|
|
167
172
|
withFarmRouteContext
|
|
@@ -252,7 +257,7 @@ import {
|
|
|
252
257
|
} from "./chunk-QDWMCFTH.mjs";
|
|
253
258
|
import {
|
|
254
259
|
FARM_VERSION
|
|
255
|
-
} from "./chunk-
|
|
260
|
+
} from "./chunk-LQDLEWPO.mjs";
|
|
256
261
|
import {
|
|
257
262
|
DEFAULT_FARM_API_BASE_PATH
|
|
258
263
|
} from "./chunk-W6QLRQ3V.mjs";
|
|
@@ -692,6 +697,11 @@ import { rewriteFormStatusImports } from "@farm.js/islx/compiler";
|
|
|
692
697
|
import path5 from "path";
|
|
693
698
|
import { parseAst } from "rolldown/parseAst";
|
|
694
699
|
var FARM_REACT_CACHE_MODULE = "@farm.js/core/internal/react-cache";
|
|
700
|
+
var REACT_CACHE_LOCAL = "__farm_react_cache__";
|
|
701
|
+
var REACT_CACHE_APIS = {
|
|
702
|
+
cache: REACT_CACHE_LOCAL,
|
|
703
|
+
cacheSignal: "__farm_react_cache_signal__"
|
|
704
|
+
};
|
|
695
705
|
function rewriteFarmReactCacheImport(code, file) {
|
|
696
706
|
if (!code.includes("cache") || !code.includes("react")) return null;
|
|
697
707
|
const extension = path5.extname(file).slice(1);
|
|
@@ -702,15 +712,25 @@ function rewriteFarmReactCacheImport(code, file) {
|
|
|
702
712
|
} catch {
|
|
703
713
|
return null;
|
|
704
714
|
}
|
|
705
|
-
|
|
715
|
+
const edits = [];
|
|
706
716
|
const declarations = (program.body ?? []).filter(
|
|
707
717
|
(node) => node.type === "ImportDeclaration" && node.source?.value === "react" && node.importKind !== "type"
|
|
708
718
|
);
|
|
709
|
-
|
|
710
|
-
|
|
719
|
+
const namespaces = /* @__PURE__ */ new Set();
|
|
720
|
+
let memberImportAt = null;
|
|
721
|
+
for (const node of declarations) {
|
|
711
722
|
const specifiers = node.specifiers ?? [];
|
|
723
|
+
for (const specifier of specifiers) {
|
|
724
|
+
if (specifier.type === "ImportDefaultSpecifier" || specifier.type === "ImportNamespaceSpecifier") {
|
|
725
|
+
namespaces.add(specifier.local.name);
|
|
726
|
+
memberImportAt ?? (memberImportAt = node.end);
|
|
727
|
+
}
|
|
728
|
+
}
|
|
712
729
|
const caches = specifiers.filter(
|
|
713
|
-
(specifier) => specifier.type === "ImportSpecifier" && specifier.importKind !== "type" &&
|
|
730
|
+
(specifier) => specifier.type === "ImportSpecifier" && specifier.importKind !== "type" && Object.prototype.hasOwnProperty.call(
|
|
731
|
+
REACT_CACHE_APIS,
|
|
732
|
+
specifier.imported?.name ?? specifier.imported?.value ?? ""
|
|
733
|
+
)
|
|
714
734
|
);
|
|
715
735
|
if (caches.length === 0) continue;
|
|
716
736
|
const others = specifiers.filter((specifier) => !caches.includes(specifier));
|
|
@@ -723,12 +743,48 @@ function rewriteFarmReactCacheImport(code, file) {
|
|
|
723
743
|
].join(", ");
|
|
724
744
|
const lines = [
|
|
725
745
|
...clause ? [`import ${clause} from "react";`] : [],
|
|
726
|
-
`import { ${caches.map((specifier) =>
|
|
746
|
+
`import { ${caches.map((specifier) => `${specifier.imported?.name ?? specifier.imported?.value} as ${specifier.local.name}`).join(", ")} } from ${JSON.stringify(FARM_REACT_CACHE_MODULE)};`
|
|
727
747
|
];
|
|
728
|
-
|
|
729
|
-
|
|
748
|
+
edits.push({ start: node.start, end: node.end, text: lines.join("\n") });
|
|
749
|
+
}
|
|
750
|
+
if (namespaces.size > 0 && memberImportAt !== null) {
|
|
751
|
+
const used = /* @__PURE__ */ new Set();
|
|
752
|
+
const visit = (node) => {
|
|
753
|
+
if (!node || typeof node !== "object") return;
|
|
754
|
+
if (Array.isArray(node)) {
|
|
755
|
+
for (const child of node) visit(child);
|
|
756
|
+
return;
|
|
757
|
+
}
|
|
758
|
+
const current = node;
|
|
759
|
+
if (typeof current.type !== "string") return;
|
|
760
|
+
if (current.type === "ImportDeclaration") return;
|
|
761
|
+
if (current.type === "MemberExpression" && !current.computed && current.object?.type === "Identifier" && namespaces.has(current.object.name) && Object.prototype.hasOwnProperty.call(REACT_CACHE_APIS, current.property?.name ?? "")) {
|
|
762
|
+
const name = current.property.name;
|
|
763
|
+
edits.push({ start: current.start, end: current.end, text: REACT_CACHE_APIS[name] });
|
|
764
|
+
used.add(name);
|
|
765
|
+
return;
|
|
766
|
+
}
|
|
767
|
+
for (const [key, value] of Object.entries(current)) {
|
|
768
|
+
if (key === "start" || key === "end" || key === "loc" || key === "range") continue;
|
|
769
|
+
if (value && typeof value === "object") visit(value);
|
|
770
|
+
}
|
|
771
|
+
};
|
|
772
|
+
visit(program);
|
|
773
|
+
if (used.size > 0) {
|
|
774
|
+
edits.push({
|
|
775
|
+
start: memberImportAt,
|
|
776
|
+
end: memberImportAt,
|
|
777
|
+
text: `
|
|
778
|
+
import { ${[...used].map((name) => `${name} as ${REACT_CACHE_APIS[name]}`).join(", ")} } from ${JSON.stringify(FARM_REACT_CACHE_MODULE)};`
|
|
779
|
+
});
|
|
780
|
+
}
|
|
781
|
+
}
|
|
782
|
+
if (edits.length === 0) return null;
|
|
783
|
+
let output = code;
|
|
784
|
+
for (const edit of edits.sort((left, right) => right.start - left.start)) {
|
|
785
|
+
output = output.slice(0, edit.start) + edit.text + output.slice(edit.end);
|
|
730
786
|
}
|
|
731
|
-
return
|
|
787
|
+
return output;
|
|
732
788
|
}
|
|
733
789
|
|
|
734
790
|
// src/navigation/page-data-error.ts
|
|
@@ -824,7 +880,7 @@ function loadFarmWorkflowsDevRuntime() {
|
|
|
824
880
|
return import("./workflows.mjs");
|
|
825
881
|
}
|
|
826
882
|
function loadFarmDevtoolsSnapshotRuntime() {
|
|
827
|
-
return import("./devtools-
|
|
883
|
+
return import("./devtools-MX3FE733.mjs");
|
|
828
884
|
}
|
|
829
885
|
function loadFarmDevtoolsUIRuntime() {
|
|
830
886
|
return import("./devtools-ui-CYBVFLPH.mjs");
|
|
@@ -850,6 +906,7 @@ function farmI18nClientBridgePlugin() {
|
|
|
850
906
|
}
|
|
851
907
|
var FARM_SERVER_ONLY_ENTRIES = /* @__PURE__ */ new Set(["@farm.js/core/og"]);
|
|
852
908
|
var SERVER_ONLY_PACKAGE = "server-only";
|
|
909
|
+
var farmReactServerFiles = /* @__PURE__ */ new Set();
|
|
853
910
|
var FARM_SERVER_ONLY_PACKAGE_ID = "\0farm:server-only";
|
|
854
911
|
var FARM_PLATFORM_ENTRY = "@farm.js/core/platform";
|
|
855
912
|
var FARM_PLATFORM_CLIENT_ID = "\0farm:platform-client";
|
|
@@ -2430,10 +2487,15 @@ window.__FARM_MANIFEST__ = ${inlineValue({
|
|
|
2430
2487
|
return;
|
|
2431
2488
|
}
|
|
2432
2489
|
}
|
|
2433
|
-
if (options.mobileClient && !viteModuleRequest && (requestMethod === "GET" || requestMethod === "HEAD") && req.headers.accept?.includes(FARM_NATIVE_TREE_CONTENT_TYPE)) {
|
|
2434
|
-
const { createFarmNativeTreeResponse } = await import("./native-tree-
|
|
2490
|
+
if (options.mobileClient && !viteModuleRequest && (requestMethod === "GET" || requestMethod === "HEAD" || requestMethod === "POST") && req.headers.accept?.includes(FARM_NATIVE_TREE_CONTENT_TYPE)) {
|
|
2491
|
+
const { createFarmNativeTreeResponse } = await import("./native-tree-BPEE2LAL.mjs");
|
|
2492
|
+
const treeBodyInit = requestMethod === "POST" ? { body: createFarmNodeRequestBodyStream(req), duplex: "half" } : {};
|
|
2435
2493
|
const treeResponse = await createFarmNativeTreeResponse({
|
|
2436
|
-
request: new Request(fullUrl, {
|
|
2494
|
+
request: new Request(fullUrl, {
|
|
2495
|
+
method: requestMethod,
|
|
2496
|
+
headers: docsHeaders,
|
|
2497
|
+
...treeBodyInit
|
|
2498
|
+
}),
|
|
2437
2499
|
// As for the Markdown mirror: this server's own listener, redirects not followed.
|
|
2438
2500
|
renderPage: (request) => createFarmDevServerDispatch(server)(
|
|
2439
2501
|
new Request(request, {
|
|
@@ -3619,9 +3681,29 @@ export const manifest = getManifest();
|
|
|
3619
3681
|
async transform(code, id, transformOptions) {
|
|
3620
3682
|
const actionConfig = farmApp?.getConfig() ?? options;
|
|
3621
3683
|
let rewrotePackageImports = false;
|
|
3622
|
-
if (resolveFarmServerComponentsMode(actionConfig.experimental?.serverComponents) === "islands" && !id.includes("/node_modules/") && !id.startsWith("\0") && /\.[cm]?[jt]sx?(?:$|\?)/.test(id) && !hasUseClientDirective(code)) {
|
|
3684
|
+
if (resolveFarmServerComponentsMode(actionConfig.experimental?.serverComponents) === "islands" && (!id.includes("/node_modules/") || transformOptions?.ssr === true && farmReactServerFiles.has(id.split("?", 1)[0])) && !id.startsWith("\0") && /\.[cm]?[jt]sx?(?:$|\?)/.test(id) && !hasUseClientDirective(code)) {
|
|
3623
3685
|
const file = id.split("?", 1)[0];
|
|
3624
3686
|
const projectRoot = actionConfig.root || server?.config.root || process.cwd();
|
|
3687
|
+
if (transformOptions?.ssr === true) {
|
|
3688
|
+
if (farmReactServerFiles.has(file)) {
|
|
3689
|
+
for (const child of farmRelativeImportFiles(code, file))
|
|
3690
|
+
farmReactServerFiles.add(child);
|
|
3691
|
+
}
|
|
3692
|
+
const serverModule = farmReactServerFiles.has(file) || !getFarmClientReachableModules(
|
|
3693
|
+
path6.resolve(projectRoot, actionConfig.srcDir || "src"),
|
|
3694
|
+
projectRoot
|
|
3695
|
+
).has(path6.resolve(file));
|
|
3696
|
+
const reactServer = !serverModule ? null : rewriteFarmReactServerImports({
|
|
3697
|
+
code,
|
|
3698
|
+
file,
|
|
3699
|
+
reference: (specifier, exportName) => ensureFarmPackageClientReference(projectRoot, specifier, exportName),
|
|
3700
|
+
onServerFile: (serverFile) => farmReactServerFiles.add(serverFile)
|
|
3701
|
+
});
|
|
3702
|
+
if (reactServer !== null) {
|
|
3703
|
+
code = reactServer;
|
|
3704
|
+
rewrotePackageImports = true;
|
|
3705
|
+
}
|
|
3706
|
+
}
|
|
3625
3707
|
const referenced = rewriteFarmPackageClientImports({
|
|
3626
3708
|
code,
|
|
3627
3709
|
file,
|
|
@@ -3908,6 +3990,9 @@ if (import.meta.hot) {
|
|
|
3908
3990
|
logger.error(`SSG build failed: ${error}`);
|
|
3909
3991
|
}
|
|
3910
3992
|
},
|
|
3993
|
+
watchChange() {
|
|
3994
|
+
invalidateFarmClientReachableModules();
|
|
3995
|
+
},
|
|
3911
3996
|
async handleHotUpdate(ctx) {
|
|
3912
3997
|
const { file, server: server2, modules } = ctx;
|
|
3913
3998
|
if (initialPluginManager) {
|
|
@@ -5,14 +5,14 @@
|
|
|
5
5
|
|
|
6
6
|
|
|
7
7
|
|
|
8
|
-
var
|
|
8
|
+
var _chunkWMTBBQHYcjs = require('./chunk-WMTBBQHY.cjs');
|
|
9
9
|
|
|
10
10
|
|
|
11
11
|
|
|
12
12
|
var _chunkV3UOEWCBcjs = require('./chunk-V3UOEWCB.cjs');
|
|
13
13
|
|
|
14
14
|
|
|
15
|
-
var
|
|
15
|
+
var _chunkDUSHDZQLcjs = require('./chunk-DUSHDZQL.cjs');
|
|
16
16
|
|
|
17
17
|
|
|
18
18
|
|
|
@@ -30,7 +30,7 @@ function hasFarmDocsRuntimeAdapter(docs) {
|
|
|
30
30
|
}
|
|
31
31
|
function assertFarmDocsAdapterServesNoGuardedPages(docs, options, isPathGuarded) {
|
|
32
32
|
if (!isPathGuarded || !hasFarmDocsRuntimeAdapter(docs)) return;
|
|
33
|
-
const guarded =
|
|
33
|
+
const guarded = _chunkWMTBBQHYcjs.getFarmDocsRoots.call(void 0, docs).flatMap((root) => _chunkWMTBBQHYcjs.discoverFarmDocsPages.call(void 0, _chunkWMTBBQHYcjs.resolveFarmDocsContentDir.call(void 0, root, options), root)).filter((page) => isPathGuarded(page.href) || isPathGuarded(_chunkWMTBBQHYcjs.getFarmDocsMarkdownPath.call(void 0, page.href))).map((page) => page.href);
|
|
34
34
|
if (guarded.length === 0) return;
|
|
35
35
|
throw new Error(
|
|
36
36
|
`Docs pages behind a path guard (${guarded.join(", ")}) would be public: the docs adapter ${JSON.stringify(docs.adapter.id)} serves their content in llms-full.txt, search, Markdown, and MCP without running the app's guards. Move those pages out of the docs content directory, or set docs.adapter = false to use Farm's built-in docs runtime, which keeps guarded pages off anonymous surfaces.`
|
|
@@ -56,7 +56,7 @@ function createFarmDocsAdapterRuntimeConfig(docs, options, moduleConfig) {
|
|
|
56
56
|
...moduleConfig ? { ...getFarmDocsConfigModuleRoot(moduleConfig, docs.entry), ...docs.configOverrides } : _nullishCoalesce(docs.runtimeConfig, () => ( docs.config)),
|
|
57
57
|
entry: docs.config.entry || docs.entry.replace(/^\/+|\/+$/g, "") || "docs",
|
|
58
58
|
docsPath: docs.entry,
|
|
59
|
-
contentDir:
|
|
59
|
+
contentDir: _chunkWMTBBQHYcjs.resolveFarmDocsContentDir.call(void 0, docs, options)
|
|
60
60
|
};
|
|
61
61
|
}
|
|
62
62
|
function getFarmDocsAdapterStylesheets(options) {
|
|
@@ -123,7 +123,7 @@ async function listFarmDocsAdapterPages(docs, options) {
|
|
|
123
123
|
if (typeof serverModule.listFarmDocsPages !== "function") return null;
|
|
124
124
|
const listPages = serverModule.listFarmDocsPages;
|
|
125
125
|
const pages = (await Promise.all(
|
|
126
|
-
|
|
126
|
+
_chunkWMTBBQHYcjs.getFarmDocsRoots.call(void 0, docs).map(
|
|
127
127
|
(root) => listPages(createFarmDocsAdapterRuntimeConfig(root, options), { rootDir: options.root })
|
|
128
128
|
)
|
|
129
129
|
)).flat();
|
|
@@ -162,7 +162,7 @@ async function createFarmDocsAdapterHandler(docs, options) {
|
|
|
162
162
|
};
|
|
163
163
|
if (multiRoot) {
|
|
164
164
|
return serverModule.createFarmDocsMultiRuntimeHandler(
|
|
165
|
-
|
|
165
|
+
_chunkWMTBBQHYcjs.getFarmDocsRoots.call(void 0, docs).map(
|
|
166
166
|
(root) => createFarmDocsAdapterRuntimeConfig(root, options, moduleConfig)
|
|
167
167
|
),
|
|
168
168
|
handlerOptions
|
|
@@ -308,22 +308,22 @@ function getDocsDescription(docs) {
|
|
|
308
308
|
return _optionalChain([docs, 'access', _15 => _15.config, 'access', _16 => _16.metadata, 'optionalAccess', _17 => _17.description]);
|
|
309
309
|
}
|
|
310
310
|
function getLoadedDocsPages(context) {
|
|
311
|
-
return
|
|
311
|
+
return _chunkWMTBBQHYcjs.discoverFarmDocsPages.call(void 0, context.contentDir, context.docs).filter((page) => !context.isPathGuarded(page.href)).map((page) => _chunkWMTBBQHYcjs.loadFarmDocsPage.call(void 0, context.contentDir, context.docs, page.slug)).filter((page) => Boolean(page));
|
|
312
312
|
}
|
|
313
313
|
function toDocsSourcePage(page) {
|
|
314
314
|
return {
|
|
315
|
-
...
|
|
315
|
+
..._chunkWMTBBQHYcjs.toFarmDocsMarkdownPage.call(void 0, page),
|
|
316
316
|
sourcePath: page.sourcePath
|
|
317
317
|
};
|
|
318
318
|
}
|
|
319
319
|
function toDocsSitemapPage(page) {
|
|
320
320
|
return {
|
|
321
|
-
...
|
|
321
|
+
..._chunkWMTBBQHYcjs.toFarmDocsMarkdownPage.call(void 0, page),
|
|
322
322
|
sourcePath: page.sourcePath
|
|
323
323
|
};
|
|
324
324
|
}
|
|
325
325
|
function toDocsLlmsPage(page) {
|
|
326
|
-
return
|
|
326
|
+
return _chunkWMTBBQHYcjs.toFarmDocsMarkdownPage.call(void 0, page);
|
|
327
327
|
}
|
|
328
328
|
function getDocsLlmsOptions(context, request) {
|
|
329
329
|
const configured = isRecord(context.docs.config.llmsTxt) ? context.docs.config.llmsTxt : {};
|
|
@@ -410,7 +410,7 @@ function renderAgentsDocument(context, request) {
|
|
|
410
410
|
function buildAgentSpec(context, request) {
|
|
411
411
|
const url = new URL(request.url);
|
|
412
412
|
const origin = url.origin;
|
|
413
|
-
const pages =
|
|
413
|
+
const pages = _chunkWMTBBQHYcjs.discoverFarmDocsPages.call(void 0, context.contentDir, context.docs).filter(
|
|
414
414
|
(page) => !context.isPathGuarded(page.href)
|
|
415
415
|
);
|
|
416
416
|
const spec = _chunkV3UOEWCBcjs.docsEngine.call(void 0, ).buildDocsAgentDiscoverySpec(getDocsDiscoveryOptions(context, request));
|
|
@@ -498,7 +498,7 @@ function buildPublicConfig(context) {
|
|
|
498
498
|
};
|
|
499
499
|
}
|
|
500
500
|
function buildDiagnostics(context) {
|
|
501
|
-
const pages =
|
|
501
|
+
const pages = _chunkWMTBBQHYcjs.discoverFarmDocsPages.call(void 0, context.contentDir, context.docs);
|
|
502
502
|
const diagnostics = _chunkV3UOEWCBcjs.docsEngine.call(void 0, ).buildDocsDiagnostics(context.docs.config, {
|
|
503
503
|
entry: context.docs.entry,
|
|
504
504
|
mcp: {
|
|
@@ -568,13 +568,13 @@ async function resolveAPIContext(options) {
|
|
|
568
568
|
config: options.config,
|
|
569
569
|
configPath: options.configPath
|
|
570
570
|
}));
|
|
571
|
-
const docs = isResolvedDocsConfig(docsInput) ? docsInput : await
|
|
571
|
+
const docs = isResolvedDocsConfig(docsInput) ? docsInput : await _chunkDUSHDZQLcjs.resolveDocsConfig.call(void 0, docsInput, { root, srcDir });
|
|
572
572
|
const guardedPaths = new Set(_nullishCoalesce(_optionalChain([runtimeConfig, 'optionalAccess', _24 => _24.guardedPaths]), () => ( [])));
|
|
573
573
|
return {
|
|
574
574
|
root,
|
|
575
575
|
srcDir,
|
|
576
576
|
docs,
|
|
577
|
-
contentDir:
|
|
577
|
+
contentDir: _chunkWMTBBQHYcjs.resolveFarmDocsContentDir.call(void 0, docs, { root, srcDir }),
|
|
578
578
|
diagnostics: options.diagnostics === true,
|
|
579
579
|
isPathGuarded: _nullishCoalesce(options.isPathGuarded, () => ( ((pathname) => guardedPaths.has(pathname))))
|
|
580
580
|
};
|
|
@@ -633,12 +633,12 @@ async function handleDocsAPIGet(request, context) {
|
|
|
633
633
|
if (format === "markdown" || url.pathname.endsWith(".md")) {
|
|
634
634
|
const pathParam = url.searchParams.get("path") || url.searchParams.get("slug");
|
|
635
635
|
const slug = normalizeDocsApiSlug(_nullishCoalesce(_nullishCoalesce(pathParam, () => ( pathTarget.slug)), () => ( "")), context.docs);
|
|
636
|
-
const page =
|
|
636
|
+
const page = _chunkWMTBBQHYcjs.loadFarmDocsPage.call(void 0, context.contentDir, context.docs, slug);
|
|
637
637
|
if (!page || context.isPathGuarded(page.href)) {
|
|
638
638
|
return text("Docs page not found\n", "text/plain; charset=utf-8", { status: 404 });
|
|
639
639
|
}
|
|
640
640
|
return text(
|
|
641
|
-
_chunkV3UOEWCBcjs.docsEngine.call(void 0, ).renderDocsMarkdownDocument(
|
|
641
|
+
_chunkV3UOEWCBcjs.docsEngine.call(void 0, ).renderDocsMarkdownDocument(_chunkWMTBBQHYcjs.toFarmDocsMarkdownPage.call(void 0, page), {
|
|
642
642
|
origin: new URL(request.url).origin,
|
|
643
643
|
llms: getDocsLlmsOptions(context, request),
|
|
644
644
|
sitemap: context.docs.config.sitemap
|
|
@@ -0,0 +1,254 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
|
|
2
|
+
|
|
3
|
+
var _chunkO2XFIPNLcjs = require('./chunk-O2XFIPNL.cjs');
|
|
4
|
+
|
|
5
|
+
// src/deployment-environment.ts
|
|
6
|
+
function isFarmProductionDeploymentEnvironment(env = process.env) {
|
|
7
|
+
const environment = normalizeEnvironment(env.VERCEL_ENV);
|
|
8
|
+
const targetEnvironment = normalizeEnvironment(env.VERCEL_TARGET_ENV);
|
|
9
|
+
if (environment && environment !== "production") return false;
|
|
10
|
+
if (targetEnvironment && targetEnvironment !== "production") return false;
|
|
11
|
+
if (isTrue(env.NETLIFY)) {
|
|
12
|
+
const context = normalizeEnvironment(env.CONTEXT);
|
|
13
|
+
if (context && context !== "production") return false;
|
|
14
|
+
}
|
|
15
|
+
if (isTrue(env.IS_PULL_REQUEST)) return false;
|
|
16
|
+
return true;
|
|
17
|
+
}
|
|
18
|
+
function isFarmPreviewDeploymentEnvironment(env) {
|
|
19
|
+
return resolveFarmPreviewDeployment(env, false);
|
|
20
|
+
}
|
|
21
|
+
function resolveFarmPreviewDeployment(env, builtAsPreview) {
|
|
22
|
+
const explicit = _optionalChain([env, 'optionalAccess', _ => _.FARM_PREVIEW]);
|
|
23
|
+
if (isTrue(explicit)) return true;
|
|
24
|
+
if (isFalse(explicit)) return false;
|
|
25
|
+
if (builtAsPreview || !env) return builtAsPreview;
|
|
26
|
+
if (normalizeEnvironment(env.VERCEL_ENV) === "preview") return true;
|
|
27
|
+
if (isTrue(env.NETLIFY)) {
|
|
28
|
+
const context = normalizeEnvironment(env.CONTEXT);
|
|
29
|
+
if (context === "deploy-preview" || context === "branch-deploy") return true;
|
|
30
|
+
}
|
|
31
|
+
return isTrue(env.IS_PULL_REQUEST);
|
|
32
|
+
}
|
|
33
|
+
function normalizeEnvironment(value) {
|
|
34
|
+
const normalized = _optionalChain([value, 'optionalAccess', _2 => _2.trim, 'call', _3 => _3(), 'access', _4 => _4.toLowerCase, 'call', _5 => _5()]);
|
|
35
|
+
return normalized || void 0;
|
|
36
|
+
}
|
|
37
|
+
function isTrue(value) {
|
|
38
|
+
return value !== void 0 && ["1", "true", "yes", "on"].includes(value.toLowerCase());
|
|
39
|
+
}
|
|
40
|
+
function isFalse(value) {
|
|
41
|
+
return value !== void 0 && ["0", "false", "no", "off"].includes(value.toLowerCase());
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
// src/product-telemetry.ts
|
|
45
|
+
var FARM_PRODUCTION_SITE_TELEMETRY_SCHEMA_VERSION = 1;
|
|
46
|
+
var FARM_PRODUCTION_SITE_TELEMETRY_EVENT_TYPE = "production_site_active";
|
|
47
|
+
var FARM_PRODUCTION_SITE_TELEMETRY_PACKAGE_NAME = "@farm.js/core";
|
|
48
|
+
var FARM_PRODUCTION_SITE_ATTESTATION_PATH = "/.well-known/farm-telemetry";
|
|
49
|
+
var FARM_PRODUCTION_SITE_ATTESTATION_EVENT_TYPE = "production_site_attestation";
|
|
50
|
+
var DEFAULT_SITE_TELEMETRY_ENDPOINT = "https://farmjs.dev/api/telemetry/v1/sites";
|
|
51
|
+
var REQUEST_TIMEOUT_MS = 3e3;
|
|
52
|
+
var REPORT_INTERVAL_MS = 24 * 60 * 60 * 1e3;
|
|
53
|
+
var RETRY_INTERVAL_MS = 5 * 60 * 1e3;
|
|
54
|
+
var MAX_ORIGINS_PER_INSTANCE = 32;
|
|
55
|
+
var SAFE_DETAIL_PATTERN = /^[0-9A-Za-z._-]{1,64}$/;
|
|
56
|
+
function detectFarmProductionSiteOrigin(value) {
|
|
57
|
+
try {
|
|
58
|
+
const url = value instanceof URL ? value : new URL(value);
|
|
59
|
+
return normalizeFarmProductionSiteOrigin(url.origin);
|
|
60
|
+
} catch (e) {
|
|
61
|
+
return void 0;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
function normalizeFarmProductionSiteOrigin(value) {
|
|
65
|
+
const candidate = value.trim();
|
|
66
|
+
if (!candidate || candidate.length > 2048) return void 0;
|
|
67
|
+
try {
|
|
68
|
+
const url = new URL(candidate);
|
|
69
|
+
const hostname = url.hostname.toLowerCase();
|
|
70
|
+
const isIpv4 = /^\d{1,3}(?:\.\d{1,3}){3}$/.test(hostname);
|
|
71
|
+
const isIpv6 = hostname.startsWith("[") && hostname.endsWith("]");
|
|
72
|
+
const isLocal = hostname === "localhost" || hostname.endsWith(".localhost") || hostname.endsWith(".local");
|
|
73
|
+
const isSingleLabel = !hostname.includes(".");
|
|
74
|
+
if (url.protocol !== "https:" || url.username || url.password || url.search || url.hash || url.pathname !== "/" || isIpv4 || isIpv6 || isLocal || isSingleLabel || hostname.endsWith(".")) {
|
|
75
|
+
return void 0;
|
|
76
|
+
}
|
|
77
|
+
return url.origin;
|
|
78
|
+
} catch (e2) {
|
|
79
|
+
return void 0;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
function createFarmProductionSiteReporter(options) {
|
|
83
|
+
const now = _nullishCoalesce(options.now, () => ( Date.now));
|
|
84
|
+
const reportIntervalMs = _nullishCoalesce(options.reportIntervalMs, () => ( REPORT_INTERVAL_MS));
|
|
85
|
+
const retryIntervalMs = _nullishCoalesce(options.retryIntervalMs, () => ( RETRY_INTERVAL_MS));
|
|
86
|
+
const send = _nullishCoalesce(options.fetch, () => ( globalThis.fetch));
|
|
87
|
+
const reportStates = /* @__PURE__ */ new Map();
|
|
88
|
+
let reportingSkipped;
|
|
89
|
+
const attestation = {
|
|
90
|
+
schemaVersion: FARM_PRODUCTION_SITE_TELEMETRY_SCHEMA_VERSION,
|
|
91
|
+
eventType: FARM_PRODUCTION_SITE_ATTESTATION_EVENT_TYPE,
|
|
92
|
+
packageName: FARM_PRODUCTION_SITE_TELEMETRY_PACKAGE_NAME,
|
|
93
|
+
packageVersion: sanitizeDetail(_chunkO2XFIPNLcjs.FARM_VERSION, "unknown"),
|
|
94
|
+
renderer: sanitizeDetail(options.renderer, "custom"),
|
|
95
|
+
deployTarget: sanitizeDetail(options.deployTarget, "custom")
|
|
96
|
+
};
|
|
97
|
+
return {
|
|
98
|
+
handleAttestation(request) {
|
|
99
|
+
if (!request.url.includes(FARM_PRODUCTION_SITE_ATTESTATION_PATH)) return null;
|
|
100
|
+
if (productionTelemetryDisabled()) return null;
|
|
101
|
+
let pathname;
|
|
102
|
+
try {
|
|
103
|
+
pathname = new URL(request.url).pathname;
|
|
104
|
+
} catch (e3) {
|
|
105
|
+
return null;
|
|
106
|
+
}
|
|
107
|
+
if (pathname !== FARM_PRODUCTION_SITE_ATTESTATION_PATH) return null;
|
|
108
|
+
if (request.method !== "GET" && request.method !== "HEAD") {
|
|
109
|
+
return new Response("Method Not Allowed", {
|
|
110
|
+
status: 405,
|
|
111
|
+
headers: {
|
|
112
|
+
allow: "GET, HEAD",
|
|
113
|
+
"cache-control": "no-store",
|
|
114
|
+
"content-type": "text/plain; charset=utf-8",
|
|
115
|
+
"x-content-type-options": "nosniff"
|
|
116
|
+
}
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
return new Response(request.method === "HEAD" ? null : JSON.stringify(attestation), {
|
|
120
|
+
status: 200,
|
|
121
|
+
headers: {
|
|
122
|
+
"cache-control": "no-store",
|
|
123
|
+
"content-type": "application/json; charset=utf-8",
|
|
124
|
+
"x-content-type-options": "nosniff"
|
|
125
|
+
}
|
|
126
|
+
});
|
|
127
|
+
},
|
|
128
|
+
report(requestUrl, waitUntil) {
|
|
129
|
+
if (reportingSkipped === void 0) {
|
|
130
|
+
reportingSkipped = productionTelemetryDisabled() ? "disabled" : isFarmProductionDeploymentEnvironment() ? false : "not-production";
|
|
131
|
+
if (reportingSkipped === "not-production") {
|
|
132
|
+
debug("production-site check-in skipped outside a production deployment");
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
if (reportingSkipped) return;
|
|
136
|
+
const siteUrl = detectFarmProductionSiteOrigin(requestUrl);
|
|
137
|
+
if (!siteUrl) return;
|
|
138
|
+
let state = reportStates.get(siteUrl);
|
|
139
|
+
if (!state) {
|
|
140
|
+
if (reportStates.size >= MAX_ORIGINS_PER_INSTANCE) return;
|
|
141
|
+
state = { nextReportAt: 0 };
|
|
142
|
+
reportStates.set(siteUrl, state);
|
|
143
|
+
}
|
|
144
|
+
const attemptedAt = now();
|
|
145
|
+
if (state.pending || attemptedAt < state.nextReportAt) return;
|
|
146
|
+
state.nextReportAt = attemptedAt + reportIntervalMs;
|
|
147
|
+
const payload = {
|
|
148
|
+
schemaVersion: FARM_PRODUCTION_SITE_TELEMETRY_SCHEMA_VERSION,
|
|
149
|
+
eventType: FARM_PRODUCTION_SITE_TELEMETRY_EVENT_TYPE,
|
|
150
|
+
siteUrl,
|
|
151
|
+
packageName: FARM_PRODUCTION_SITE_TELEMETRY_PACKAGE_NAME,
|
|
152
|
+
packageVersion: attestation.packageVersion,
|
|
153
|
+
renderer: attestation.renderer,
|
|
154
|
+
deployTarget: attestation.deployTarget
|
|
155
|
+
};
|
|
156
|
+
state.pending = deliver(send, resolveSiteTelemetryEndpoint(options.endpoint), payload).then((delivered) => {
|
|
157
|
+
if (!delivered) state.nextReportAt = now() + retryIntervalMs;
|
|
158
|
+
}).catch(() => {
|
|
159
|
+
state.nextReportAt = now() + retryIntervalMs;
|
|
160
|
+
}).finally(() => {
|
|
161
|
+
state.pending = void 0;
|
|
162
|
+
});
|
|
163
|
+
if (waitUntil) {
|
|
164
|
+
try {
|
|
165
|
+
waitUntil(state.pending);
|
|
166
|
+
} catch (e4) {
|
|
167
|
+
}
|
|
168
|
+
} else {
|
|
169
|
+
void state.pending;
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
async function deliver(send, endpoint, payload) {
|
|
175
|
+
if (!endpoint) {
|
|
176
|
+
debug("invalid or insecure production-site telemetry endpoint; check-in skipped");
|
|
177
|
+
return false;
|
|
178
|
+
}
|
|
179
|
+
const controller = new AbortController();
|
|
180
|
+
const timeout = setTimeout(() => controller.abort(), REQUEST_TIMEOUT_MS);
|
|
181
|
+
_optionalChain([timeout, 'access', _6 => _6.unref, 'optionalCall', _7 => _7()]);
|
|
182
|
+
try {
|
|
183
|
+
const response = await send(endpoint, {
|
|
184
|
+
method: "POST",
|
|
185
|
+
headers: { "content-type": "application/json" },
|
|
186
|
+
body: JSON.stringify(payload),
|
|
187
|
+
signal: controller.signal
|
|
188
|
+
});
|
|
189
|
+
if (!response.ok) {
|
|
190
|
+
debug(`production-site check-in rejected with HTTP ${response.status}`);
|
|
191
|
+
return false;
|
|
192
|
+
}
|
|
193
|
+
try {
|
|
194
|
+
const result = await response.json();
|
|
195
|
+
if (result && result.stored === false) {
|
|
196
|
+
debug("production-site check-in was accepted but not stored");
|
|
197
|
+
return false;
|
|
198
|
+
}
|
|
199
|
+
} catch (e5) {
|
|
200
|
+
}
|
|
201
|
+
return true;
|
|
202
|
+
} catch (e6) {
|
|
203
|
+
debug("production-site check-in failed");
|
|
204
|
+
return false;
|
|
205
|
+
} finally {
|
|
206
|
+
clearTimeout(timeout);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
function resolveSiteTelemetryEndpoint(explicit) {
|
|
210
|
+
const candidate = explicit || process.env.FARM_TELEMETRY_SITE_ENDPOINT;
|
|
211
|
+
if (!candidate) return DEFAULT_SITE_TELEMETRY_ENDPOINT;
|
|
212
|
+
try {
|
|
213
|
+
const url = new URL(candidate);
|
|
214
|
+
const hostname = url.hostname.toLowerCase().replace(/^\[|\]$/g, "");
|
|
215
|
+
const isLocal = ["localhost", "127.0.0.1", "::1"].includes(hostname);
|
|
216
|
+
if (url.protocol === "https:" || url.protocol === "http:" && isLocal) {
|
|
217
|
+
return url.toString();
|
|
218
|
+
}
|
|
219
|
+
} catch (e7) {
|
|
220
|
+
}
|
|
221
|
+
return void 0;
|
|
222
|
+
}
|
|
223
|
+
function productionTelemetryDisabled() {
|
|
224
|
+
if (process.env.DO_NOT_TRACK !== void 0 && !isFalse2(process.env.DO_NOT_TRACK)) return true;
|
|
225
|
+
if (isTrue2(process.env.FARM_TELEMETRY_DISABLED)) return true;
|
|
226
|
+
return isFalse2(process.env.FARM_TELEMETRY);
|
|
227
|
+
}
|
|
228
|
+
function sanitizeDetail(value, fallback) {
|
|
229
|
+
return value && SAFE_DETAIL_PATTERN.test(value) ? value : fallback;
|
|
230
|
+
}
|
|
231
|
+
function isTrue2(value) {
|
|
232
|
+
return value !== void 0 && ["1", "true", "yes", "on"].includes(value.toLowerCase());
|
|
233
|
+
}
|
|
234
|
+
function isFalse2(value) {
|
|
235
|
+
return value !== void 0 && ["0", "false", "no", "off"].includes(value.toLowerCase());
|
|
236
|
+
}
|
|
237
|
+
function debug(message) {
|
|
238
|
+
if (!isTrue2(process.env.FARM_TELEMETRY_DEBUG)) return;
|
|
239
|
+
process.stderr.write(`[farm.telemetry] ${message}
|
|
240
|
+
`);
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
|
|
244
|
+
|
|
245
|
+
|
|
246
|
+
|
|
247
|
+
|
|
248
|
+
|
|
249
|
+
|
|
250
|
+
|
|
251
|
+
|
|
252
|
+
|
|
253
|
+
|
|
254
|
+
exports.isFarmPreviewDeploymentEnvironment = isFarmPreviewDeploymentEnvironment; exports.resolveFarmPreviewDeployment = resolveFarmPreviewDeployment; exports.FARM_PRODUCTION_SITE_TELEMETRY_SCHEMA_VERSION = FARM_PRODUCTION_SITE_TELEMETRY_SCHEMA_VERSION; exports.FARM_PRODUCTION_SITE_TELEMETRY_EVENT_TYPE = FARM_PRODUCTION_SITE_TELEMETRY_EVENT_TYPE; exports.FARM_PRODUCTION_SITE_TELEMETRY_PACKAGE_NAME = FARM_PRODUCTION_SITE_TELEMETRY_PACKAGE_NAME; exports.FARM_PRODUCTION_SITE_ATTESTATION_PATH = FARM_PRODUCTION_SITE_ATTESTATION_PATH; exports.FARM_PRODUCTION_SITE_ATTESTATION_EVENT_TYPE = FARM_PRODUCTION_SITE_ATTESTATION_EVENT_TYPE; exports.detectFarmProductionSiteOrigin = detectFarmProductionSiteOrigin; exports.normalizeFarmProductionSiteOrigin = normalizeFarmProductionSiteOrigin; exports.createFarmProductionSiteReporter = createFarmProductionSiteReporter;
|