@farm.js/core 0.1.17 → 0.1.18
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/after.cjs +12 -225
- package/dist/agent-runtime.cjs +83 -2800
- package/dist/api/client.cjs +17 -4060
- package/dist/api/route-manager.cjs +34 -4354
- package/dist/api/runtime.cjs +29 -2696
- package/dist/api.cjs +88 -8434
- package/dist/app-markdown.cjs +39 -280
- package/dist/cache.cjs +38 -1560
- package/dist/chunk-22GUSVNJ.cjs +351 -0
- package/dist/chunk-2CQ74SP6.cjs +13 -0
- package/dist/chunk-2SJ4RQ6P.cjs +57 -0
- package/dist/chunk-3376ZTRC.cjs +1 -0
- package/dist/{chunk-YD4J4XCI.mjs → chunk-3XG26Z3J.mjs} +1 -1
- package/dist/chunk-4PNUXIVU.cjs +472 -0
- package/dist/chunk-4PPEPOZZ.cjs +21 -0
- package/dist/chunk-4ZFL5GFN.cjs +520 -0
- package/dist/chunk-5OVTOKGH.cjs +65 -0
- package/dist/chunk-5QIKR7RR.cjs +224 -0
- package/dist/chunk-5ZSWG4UX.cjs +127 -0
- package/dist/chunk-62YJ2IEB.cjs +238 -0
- package/dist/chunk-6EODJYCX.cjs +183 -0
- package/dist/chunk-6EXBPJ24.cjs +434 -0
- package/dist/chunk-6QQDAAAZ.cjs +38 -0
- package/dist/chunk-6V4TDWEC.cjs +455 -0
- package/dist/chunk-72ADZ6GQ.cjs +19 -0
- package/dist/chunk-75BRBIFP.cjs +172 -0
- package/dist/chunk-7W3CPVXS.cjs +24 -0
- package/dist/chunk-A6WIQH5Z.cjs +31 -0
- package/dist/chunk-AFOD3LYZ.cjs +377 -0
- package/dist/chunk-AMDMVWMI.cjs +39 -0
- package/dist/chunk-AORPIPNB.cjs +552 -0
- package/dist/chunk-ARJWXNQL.cjs +256 -0
- package/dist/chunk-AWRISO2H.cjs +2199 -0
- package/dist/chunk-AYJR42WX.cjs +711 -0
- package/dist/chunk-B4CH33IG.cjs +644 -0
- package/dist/chunk-BIDYX3SL.cjs +91 -0
- package/dist/chunk-BSTRERPP.cjs +40 -0
- package/dist/chunk-BYODCJD6.cjs +663 -0
- package/dist/chunk-C3VRMB6H.cjs +85 -0
- package/dist/chunk-C5GUTBZK.cjs +173 -0
- package/dist/chunk-CIAGU2X4.cjs +337 -0
- package/dist/chunk-CMGMGHUZ.cjs +27 -0
- package/dist/chunk-CXP5U3RW.cjs +54 -0
- package/dist/chunk-D2ULAULS.cjs +166 -0
- package/dist/chunk-D7JTOLFK.cjs +285 -0
- package/dist/chunk-DVM4FKZL.cjs +169 -0
- package/dist/chunk-DYEJQTDN.cjs +49 -0
- package/dist/chunk-E2BMSZ2W.cjs +151 -0
- package/dist/chunk-E3UK5IIB.cjs +593 -0
- package/dist/chunk-EM6SBQKM.cjs +470 -0
- package/dist/chunk-FJSWYIR7.cjs +482 -0
- package/dist/chunk-FK6GO24V.cjs +54 -0
- package/dist/chunk-FXUUWYAX.cjs +654 -0
- package/dist/chunk-G3HRIVEY.cjs +395 -0
- package/dist/chunk-G643DQCH.cjs +13 -0
- package/dist/chunk-G7HXGLEC.cjs +175 -0
- package/dist/chunk-GDSHDTJ4.cjs +152 -0
- package/dist/chunk-GNEO2XOF.cjs +2040 -0
- package/dist/{chunk-56DAX2BE.mjs → chunk-GYKJCFTS.mjs} +1 -1
- package/dist/chunk-H6G5INWM.cjs +1094 -0
- package/dist/chunk-HBTUGXHS.cjs +180 -0
- package/dist/chunk-HREOKQWT.cjs +45 -0
- package/dist/chunk-I4J452B7.cjs +435 -0
- package/dist/chunk-I57LW5VZ.cjs +94 -0
- package/dist/chunk-I7PUUDGY.cjs +389 -0
- package/dist/chunk-IAMRBF3Z.cjs +86 -0
- package/dist/chunk-IKNRN4VS.cjs +14214 -0
- package/dist/chunk-IQXFRNY2.cjs +169 -0
- package/dist/chunk-IXTFU4PL.cjs +2355 -0
- package/dist/chunk-J2OP5GG3.cjs +725 -0
- package/dist/chunk-J3LOGE4T.cjs +42 -0
- package/dist/chunk-J7FSKED3.cjs +93 -0
- package/dist/chunk-JDNHKPTD.cjs +22 -0
- package/dist/chunk-JSROZYYO.cjs +164 -0
- package/dist/chunk-K6FNHVDR.cjs +696 -0
- package/dist/chunk-KGZIORNL.cjs +43 -0
- package/dist/{chunk-MVIWBEJF.mjs → chunk-KPNVGRBL.mjs} +1 -1
- package/dist/chunk-KR6CKSXT.cjs +15 -0
- package/dist/chunk-KROWKCUH.cjs +185 -0
- package/dist/chunk-KVFPGF2M.cjs +46 -0
- package/dist/chunk-LCCBO7PJ.cjs +46 -0
- package/dist/chunk-LIUGYUX3.cjs +22 -0
- package/dist/chunk-LTNGXMQ6.cjs +55 -0
- package/dist/chunk-M2L4MYDQ.cjs +14 -0
- package/dist/chunk-MCJLA63J.cjs +1 -0
- package/dist/chunk-MKB2EGIR.cjs +148 -0
- package/dist/chunk-MQ3H6LT5.cjs +202 -0
- package/dist/chunk-MT763TDW.cjs +43 -0
- package/dist/chunk-MWSK6C4J.cjs +18 -0
- package/dist/chunk-MWWVKDW3.cjs +169 -0
- package/dist/chunk-NO3WWW3N.cjs +192 -0
- package/dist/chunk-NV3A5DXM.cjs +862 -0
- package/dist/chunk-NWOD6NIT.cjs +9 -0
- package/dist/chunk-NZKJGRB3.cjs +230 -0
- package/dist/chunk-OAVTUMJP.cjs +1496 -0
- package/dist/chunk-OHY2ZWUG.cjs +25 -0
- package/dist/chunk-OI6CMLWX.cjs +47 -0
- package/dist/chunk-OIEOCXKG.cjs +453 -0
- package/dist/chunk-OWOUTKIJ.cjs +558 -0
- package/dist/chunk-OX6O6WVA.cjs +74 -0
- package/dist/chunk-OXSIH4D6.cjs +476 -0
- package/dist/chunk-OYEUREB6.cjs +35 -0
- package/dist/chunk-PCOTGFSM.cjs +139 -0
- package/dist/chunk-PZYCPSCC.cjs +35 -0
- package/dist/chunk-QBK2AA4U.cjs +445 -0
- package/dist/chunk-QBPXNZGV.cjs +487 -0
- package/dist/chunk-QNPEUFHQ.cjs +27 -0
- package/dist/chunk-QZRVZSPN.cjs +236 -0
- package/dist/chunk-R5A5KNVX.cjs +20 -0
- package/dist/chunk-R5JIFR6B.cjs +42 -0
- package/dist/chunk-R6AIILII.cjs +193 -0
- package/dist/chunk-RG3ZOTG5.cjs +34 -0
- package/dist/chunk-ROUTX2E5.cjs +390 -0
- package/dist/chunk-RTHIVJ2G.cjs +54 -0
- package/dist/chunk-S3A45T7F.cjs +166 -0
- package/dist/chunk-S3JO3N4H.cjs +17 -0
- package/dist/chunk-SK35NQKK.cjs +27 -0
- package/dist/chunk-SU7MH53P.cjs +180 -0
- package/dist/chunk-SVRTJOUF.cjs +113 -0
- package/dist/chunk-SWN467MP.cjs +18 -0
- package/dist/chunk-SYQ3MOWW.cjs +73 -0
- package/dist/chunk-T5CERMEH.cjs +417 -0
- package/dist/chunk-TFAXUHWX.cjs +206 -0
- package/dist/chunk-TIWHTW3Q.cjs +24 -0
- package/dist/chunk-TKJZFIML.cjs +20 -0
- package/dist/chunk-TKNSDBBN.cjs +193 -0
- package/dist/chunk-TWGMSEHX.cjs +525 -0
- package/dist/chunk-TYQUSXUG.cjs +1357 -0
- package/dist/chunk-U4KT7QP3.cjs +23 -0
- package/dist/chunk-UJ2C4ICS.cjs +277 -0
- package/dist/chunk-UN5GHC5V.cjs +10244 -0
- package/dist/chunk-UQZ4AYTH.cjs +168 -0
- package/dist/chunk-US2QVW3E.cjs +36 -0
- package/dist/chunk-VB6UCX3V.cjs +421 -0
- package/dist/chunk-VEKFLAQM.cjs +300 -0
- package/dist/chunk-VQDBNVOO.cjs +14 -0
- package/dist/chunk-W4E7WMXE.cjs +71 -0
- package/dist/chunk-WJ3HK3LJ.cjs +1102 -0
- package/dist/chunk-WMAPPDMM.cjs +28 -0
- package/dist/chunk-WMOGFOUJ.cjs +223 -0
- package/dist/chunk-WPYFSQKK.cjs +37 -0
- package/dist/chunk-WZMNW2IW.cjs +1415 -0
- package/dist/chunk-XGC343EY.cjs +443 -0
- package/dist/chunk-XSKZORAS.cjs +727 -0
- package/dist/chunk-XWAWFQFS.cjs +82 -0
- package/dist/chunk-Y4YMF2NQ.cjs +460 -0
- package/dist/chunk-Y4YWHNKU.cjs +250 -0
- package/dist/chunk-Y53ZSFN6.cjs +504 -0
- package/dist/chunk-YA6LLTIJ.cjs +411 -0
- package/dist/chunk-YFPGHF5F.cjs +202 -0
- package/dist/chunk-YJRZR7VU.cjs +28 -0
- package/dist/chunk-YTAABQEV.cjs +1 -0
- package/dist/chunk-YX3DBN4M.cjs +18 -0
- package/dist/chunk-YZTASLPQ.cjs +64 -0
- package/dist/chunk-Z5HIWVDP.cjs +2173 -0
- package/dist/chunk-ZEG3OPIB.cjs +93 -0
- package/dist/chunk-ZMN3H73H.cjs +155 -0
- package/dist/client/lifecycle.cjs +6 -35
- package/dist/client-plugins.cjs +7 -448
- package/dist/client.cjs +171 -9808
- package/dist/config.cjs +8 -36
- package/dist/cron.cjs +24 -491
- package/dist/deferred.cjs +26 -475
- package/dist/deployment.cjs +39 -210
- package/dist/devtools-OUIPHVV6.cjs +388 -0
- package/dist/devtools-client-4WAPJY5L.cjs +254 -0
- package/dist/devtools-ui-5GBDIGMK.cjs +1296 -0
- package/dist/docs.cjs +46 -5657
- package/dist/env-types.cjs +5 -226
- package/dist/env.cjs +21 -338
- package/dist/environment/vite.cjs +8 -372
- package/dist/environment.cjs +12 -94
- package/dist/font.cjs +13 -63
- package/dist/headers.cjs +7 -123
- package/dist/i18n/client.cjs +55 -294
- package/dist/i18n/index.cjs +22 -209
- package/dist/i18n/server.cjs +22 -745
- package/dist/image/server.cjs +13 -729
- package/dist/image/sharp.cjs +33 -171
- package/dist/image.cjs +41 -85
- package/dist/index.cjs +1151 -68080
- package/dist/index.mjs +3 -3
- package/dist/instrumentation.cjs +12 -138
- package/dist/integration-orm-55F7CII5.cjs +13 -0
- package/dist/integrations.cjs +55 -4090
- package/dist/internal/app-markdown-runtime.cjs +27 -224
- package/dist/internal/build-runtime.cjs +120 -52259
- package/dist/internal/build-runtime.mjs +3 -3
- package/dist/internal/cli-runtime.cjs +67 -13811
- package/dist/internal/client-error-overlay.cjs +80 -733
- package/dist/internal/client-error-overlay.mjs +1 -1
- package/dist/internal/client-runtime.cjs +81 -913
- package/dist/internal/compression-runtime.cjs +8 -214
- package/dist/internal/config-runtime.cjs +42 -6547
- package/dist/internal/docs-precompiled-runtime.cjs +26 -46
- package/dist/internal/infra-analytics-runtime.cjs +10 -536
- package/dist/internal/isolated-boundary.cjs +14 -414
- package/dist/internal/metadata-image-runtime.cjs +7 -285
- package/dist/internal/product-telemetry-runtime.cjs +42 -97
- package/dist/internal/product-telemetry-runtime.mjs +1 -1
- package/dist/internal/production-node-env.cjs +6 -63
- package/dist/internal/production-runtime.cjs +418 -7133
- package/dist/internal/request-cookies.cjs +6 -54
- package/dist/json-ld.cjs +24 -50
- package/dist/layers-E4WPJNY5.cjs +17 -0
- package/dist/manager-G4B2IPYE.cjs +14 -0
- package/dist/markdown.cjs +21 -547
- package/dist/middleware.cjs +36 -2995
- package/dist/navigation.cjs +22 -2588
- package/dist/nitro-4I2MYLY2.cjs +652 -0
- package/dist/observability.cjs +22 -614
- package/dist/og.cjs +5 -28
- package/dist/plugin.cjs +106 -37442
- package/dist/plugin.mjs +2 -2
- package/dist/query/client.cjs +113 -449
- package/dist/query/index.cjs +26 -288
- package/dist/query/parsers.cjs +23 -247
- package/dist/query/server.cjs +36 -298
- package/dist/renderer/react/client.cjs +9 -43
- package/dist/renderer/react/server.cjs +40 -103
- package/dist/renderer/react/vite.cjs +7 -29
- package/dist/renderer-client.cjs +126 -4295
- package/dist/renderer.cjs +31 -249
- package/dist/request.cjs +5 -68
- package/dist/router.cjs +11 -474
- package/dist/routes.cjs +42 -2461
- package/dist/schema-dev-notice-MXSZMVDG.cjs +56 -0
- package/dist/schema.cjs +6 -33
- package/dist/search-client-G3RICOFU.cjs +13 -0
- package/dist/server-action-security.cjs +25 -541
- package/dist/server-fn-client.cjs +6 -337
- package/dist/server-fn.cjs +32 -1841
- package/dist/server-plugins.cjs +15 -884
- package/dist/server-query-client.cjs +15 -1883
- package/dist/server-query.cjs +16 -1838
- package/dist/server.cjs +296 -44681
- package/dist/server.mjs +2 -2
- package/dist/storage.cjs +57 -576
- package/dist/testing.cjs +89 -3186
- package/dist/theme/client.cjs +13 -108
- package/dist/theme/index.cjs +6 -68
- package/dist/theme/runtime.cjs +13 -78
- package/dist/theme/server.cjs +10 -179
- package/dist/version.cjs +4 -32
- package/dist/version.mjs +1 -1
- package/dist/vite.cjs +119 -37773
- package/dist/vite.mjs +2 -2
- package/dist/workflows.cjs +19 -1040
- package/package.json +1 -1
|
@@ -0,0 +1,85 @@
|
|
|
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
|
+
|
|
4
|
+
|
|
5
|
+
var _chunkY4YWHNKUcjs = require('./chunk-Y4YWHNKU.cjs');
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
var _chunkI7PUUDGYcjs = require('./chunk-I7PUUDGY.cjs');
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
var _chunkS3JO3N4Hcjs = require('./chunk-S3JO3N4H.cjs');
|
|
12
|
+
|
|
13
|
+
// src/server-query-client.ts
|
|
14
|
+
var _react = require('react');
|
|
15
|
+
function useServerQuery(query, input, options = {}) {
|
|
16
|
+
const cache = _chunkI7PUUDGYcjs.getFarmClientDataCache.call(void 0, );
|
|
17
|
+
const key = _chunkY4YWHNKUcjs.createServerQueryCallKey.call(void 0, query, input);
|
|
18
|
+
const inputRef = _react.useRef.call(void 0, input);
|
|
19
|
+
const optionsRef = _react.useRef.call(void 0, options);
|
|
20
|
+
const mountedKeyRef = _react.useRef.call(void 0, void 0);
|
|
21
|
+
const pendingInvalidationRef = _react.useRef.call(void 0, false);
|
|
22
|
+
inputRef.current = input;
|
|
23
|
+
optionsRef.current = options;
|
|
24
|
+
const subscribe = _react.useCallback.call(void 0,
|
|
25
|
+
(listener) => cache.subscribe(key, (event) => {
|
|
26
|
+
if (event === "invalidate") pendingInvalidationRef.current = true;
|
|
27
|
+
else if (_optionalChain([cache, 'access', _ => _.get, 'call', _2 => _2(key), 'optionalAccess', _3 => _3.fetching])) {
|
|
28
|
+
pendingInvalidationRef.current = false;
|
|
29
|
+
}
|
|
30
|
+
listener();
|
|
31
|
+
}),
|
|
32
|
+
[cache, key]
|
|
33
|
+
);
|
|
34
|
+
const getSnapshot = _react.useCallback.call(void 0, () => cache.get(key), [cache, key]);
|
|
35
|
+
const entry = _react.useSyncExternalStore.call(void 0, subscribe, getSnapshot, () => void 0);
|
|
36
|
+
const run = _react.useCallback.call(void 0,
|
|
37
|
+
(force = false) => {
|
|
38
|
+
pendingInvalidationRef.current = false;
|
|
39
|
+
return _chunkY4YWHNKUcjs.fetchServerQuery.call(void 0, query, inputRef.current, {
|
|
40
|
+
...optionsRef.current,
|
|
41
|
+
force
|
|
42
|
+
});
|
|
43
|
+
},
|
|
44
|
+
[query]
|
|
45
|
+
);
|
|
46
|
+
_react.useEffect.call(void 0, () => {
|
|
47
|
+
if (options.enabled === false) {
|
|
48
|
+
mountedKeyRef.current = void 0;
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
const firstReadForKey = mountedKeyRef.current !== key;
|
|
52
|
+
if (firstReadForKey) mountedKeyRef.current = key;
|
|
53
|
+
if (firstReadForKey && (!entry || cache.isStale(key)) || pendingInvalidationRef.current && _optionalChain([entry, 'optionalAccess', _4 => _4.invalidatedAt]) !== void 0 && !entry.fetching) {
|
|
54
|
+
void run().catch(() => void 0);
|
|
55
|
+
}
|
|
56
|
+
}, [cache, entry, key, options.enabled, run]);
|
|
57
|
+
_react.useEffect.call(void 0, () => {
|
|
58
|
+
if (options.enabled === false) return;
|
|
59
|
+
return _chunkY4YWHNKUcjs.attachRevalidationListeners.call(void 0,
|
|
60
|
+
() => {
|
|
61
|
+
if (cache.isStale(key)) void run().catch(() => void 0);
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
refetchOnWindowFocus: options.refetchOnWindowFocus,
|
|
65
|
+
refetchOnReconnect: options.refetchOnReconnect
|
|
66
|
+
}
|
|
67
|
+
);
|
|
68
|
+
}, [cache, key, options.enabled, options.refetchOnReconnect, options.refetchOnWindowFocus, run]);
|
|
69
|
+
const status = _nullishCoalesce(_optionalChain([entry, 'optionalAccess', _5 => _5.status]), () => ( (entry ? "success" : "idle")));
|
|
70
|
+
const fetching = _nullishCoalesce(_optionalChain([entry, 'optionalAccess', _6 => _6.fetching]), () => ( false));
|
|
71
|
+
return {
|
|
72
|
+
data: _optionalChain([entry, 'optionalAccess', _7 => _7.data]),
|
|
73
|
+
error: _nullishCoalesce(_optionalChain([entry, 'optionalAccess', _8 => _8.error]), () => ( null)),
|
|
74
|
+
status,
|
|
75
|
+
pending: status === "pending" && (_nullishCoalesce(_optionalChain([entry, 'optionalAccess', _9 => _9.updatedAt]), () => ( 0))) === 0,
|
|
76
|
+
fetching,
|
|
77
|
+
stale: cache.isStale(key),
|
|
78
|
+
refetch: /* @__PURE__ */ _chunkS3JO3N4Hcjs.__name.call(void 0, () => run(true), "refetch")
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
_chunkS3JO3N4Hcjs.__name.call(void 0, useServerQuery, "useServerQuery");
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
exports.useServerQuery = useServerQuery;
|
|
@@ -0,0 +1,173 @@
|
|
|
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 _chunkS3JO3N4Hcjs = require('./chunk-S3JO3N4H.cjs');
|
|
4
|
+
|
|
5
|
+
// src/deployment.ts
|
|
6
|
+
var FARM_DEPLOYMENT_ID_HEADER = "x-farm-deployment-id";
|
|
7
|
+
var FARM_DEPLOYMENT_MISMATCH_HEADER = "x-farm-deployment-mismatch";
|
|
8
|
+
var FARM_DEPLOYMENT_COOKIE = "__farm_deployment";
|
|
9
|
+
var FARM_DEPLOYMENT_MISMATCH_CODE = "FARM_DEPLOYMENT_MISMATCH";
|
|
10
|
+
var FARM_DEPLOYMENT_MISMATCH_STATUS = 409;
|
|
11
|
+
function getFarmPresetRuntime(preset) {
|
|
12
|
+
if (preset === "cloudflare" || preset === "cloudflare-pages" || preset === "cloudflare-module" || preset === "netlify-edge" || preset === "vercel-edge" || preset === "deno") {
|
|
13
|
+
return "edge";
|
|
14
|
+
}
|
|
15
|
+
if (preset === "node-server" || preset === "vercel" || preset === "netlify" || preset === "aws-lambda" || preset === "azure" || preset === "firebase" || preset === "bun" || preset === "self-host" || preset === "farm") {
|
|
16
|
+
return "node";
|
|
17
|
+
}
|
|
18
|
+
return "unknown";
|
|
19
|
+
}
|
|
20
|
+
_chunkS3JO3N4Hcjs.__name.call(void 0, getFarmPresetRuntime, "getFarmPresetRuntime");
|
|
21
|
+
var _FarmDeploymentMismatchError = class _FarmDeploymentMismatchError extends Error {
|
|
22
|
+
constructor(clientDeploymentId, serverDeploymentId) {
|
|
23
|
+
super("The application was updated while this page was open. Refresh before trying again.");
|
|
24
|
+
this.clientDeploymentId = clientDeploymentId;
|
|
25
|
+
this.serverDeploymentId = serverDeploymentId;
|
|
26
|
+
this.name = "FarmDeploymentMismatchError";
|
|
27
|
+
this.code = FARM_DEPLOYMENT_MISMATCH_CODE;
|
|
28
|
+
this.retryable = false;
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
_chunkS3JO3N4Hcjs.__name.call(void 0, _FarmDeploymentMismatchError, "FarmDeploymentMismatchError");
|
|
32
|
+
var FarmDeploymentMismatchError = _FarmDeploymentMismatchError;
|
|
33
|
+
function normalizeFarmDeploymentId(value) {
|
|
34
|
+
if (typeof value !== "string" || value.trim() === "") {
|
|
35
|
+
throw new TypeError("Farm deploymentId must be a non-empty string");
|
|
36
|
+
}
|
|
37
|
+
const normalized = value.trim();
|
|
38
|
+
if (normalized.length > 200 || /[\u0000-\u001f\u007f]/.test(normalized)) {
|
|
39
|
+
throw new TypeError("Farm deploymentId must be at most 200 characters without control bytes");
|
|
40
|
+
}
|
|
41
|
+
return normalized;
|
|
42
|
+
}
|
|
43
|
+
_chunkS3JO3N4Hcjs.__name.call(void 0, normalizeFarmDeploymentId, "normalizeFarmDeploymentId");
|
|
44
|
+
function createFarmDeploymentRequestHeaders(deploymentId, init) {
|
|
45
|
+
const headers = new Headers(init);
|
|
46
|
+
if (deploymentId) {
|
|
47
|
+
headers.set(FARM_DEPLOYMENT_ID_HEADER, deploymentId);
|
|
48
|
+
}
|
|
49
|
+
return headers;
|
|
50
|
+
}
|
|
51
|
+
_chunkS3JO3N4Hcjs.__name.call(void 0, createFarmDeploymentRequestHeaders, "createFarmDeploymentRequestHeaders");
|
|
52
|
+
function getFarmRequestDeploymentId(request) {
|
|
53
|
+
const headerValue = _optionalChain([request, 'access', _ => _.headers, 'access', _2 => _2.get, 'call', _3 => _3(FARM_DEPLOYMENT_ID_HEADER), 'optionalAccess', _4 => _4.trim, 'call', _5 => _5()]);
|
|
54
|
+
if (headerValue) return headerValue;
|
|
55
|
+
if (isSafeRequestMethod(request.method)) return void 0;
|
|
56
|
+
return readCookie(request.headers.get("cookie"), FARM_DEPLOYMENT_COOKIE);
|
|
57
|
+
}
|
|
58
|
+
_chunkS3JO3N4Hcjs.__name.call(void 0, getFarmRequestDeploymentId, "getFarmRequestDeploymentId");
|
|
59
|
+
function getFarmDeploymentMismatch(request, serverDeploymentId) {
|
|
60
|
+
if (!serverDeploymentId) return null;
|
|
61
|
+
const clientDeploymentId = getFarmRequestDeploymentId(request);
|
|
62
|
+
if (!clientDeploymentId || clientDeploymentId === serverDeploymentId) return null;
|
|
63
|
+
return { clientDeploymentId, serverDeploymentId };
|
|
64
|
+
}
|
|
65
|
+
_chunkS3JO3N4Hcjs.__name.call(void 0, getFarmDeploymentMismatch, "getFarmDeploymentMismatch");
|
|
66
|
+
function createFarmDeploymentMismatchResponse(mismatch) {
|
|
67
|
+
return new Response(
|
|
68
|
+
JSON.stringify({
|
|
69
|
+
error: FARM_DEPLOYMENT_MISMATCH_CODE,
|
|
70
|
+
message: "The application deployment changed. Refresh before retrying this request."
|
|
71
|
+
}),
|
|
72
|
+
{
|
|
73
|
+
status: FARM_DEPLOYMENT_MISMATCH_STATUS,
|
|
74
|
+
headers: {
|
|
75
|
+
"Cache-Control": "no-store",
|
|
76
|
+
"Content-Type": "application/json; charset=utf-8",
|
|
77
|
+
[FARM_DEPLOYMENT_ID_HEADER]: mismatch.serverDeploymentId,
|
|
78
|
+
[FARM_DEPLOYMENT_MISMATCH_HEADER]: "1"
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
);
|
|
82
|
+
}
|
|
83
|
+
_chunkS3JO3N4Hcjs.__name.call(void 0, createFarmDeploymentMismatchResponse, "createFarmDeploymentMismatchResponse");
|
|
84
|
+
function withFarmDeploymentResponse(response, deploymentId, options = {}) {
|
|
85
|
+
if (!deploymentId) return response;
|
|
86
|
+
const headers = new Headers(response.headers);
|
|
87
|
+
headers.set(FARM_DEPLOYMENT_ID_HEADER, deploymentId);
|
|
88
|
+
if (options.setCookie) {
|
|
89
|
+
headers.append(
|
|
90
|
+
"Set-Cookie",
|
|
91
|
+
createFarmDeploymentCookie(
|
|
92
|
+
deploymentId,
|
|
93
|
+
_nullishCoalesce(options.cookiePath, () => ( "/")),
|
|
94
|
+
_nullishCoalesce(options.secureCookie, () => ( false))
|
|
95
|
+
)
|
|
96
|
+
);
|
|
97
|
+
}
|
|
98
|
+
return new Response(response.body, {
|
|
99
|
+
status: response.status,
|
|
100
|
+
statusText: response.statusText,
|
|
101
|
+
headers
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
_chunkS3JO3N4Hcjs.__name.call(void 0, withFarmDeploymentResponse, "withFarmDeploymentResponse");
|
|
105
|
+
function getFarmResponseDeploymentId(response) {
|
|
106
|
+
return _optionalChain([response, 'access', _6 => _6.headers, 'access', _7 => _7.get, 'call', _8 => _8(FARM_DEPLOYMENT_ID_HEADER), 'optionalAccess', _9 => _9.trim, 'call', _10 => _10()]) || void 0;
|
|
107
|
+
}
|
|
108
|
+
_chunkS3JO3N4Hcjs.__name.call(void 0, getFarmResponseDeploymentId, "getFarmResponseDeploymentId");
|
|
109
|
+
function isFarmDeploymentMismatchResponse(response, clientDeploymentId) {
|
|
110
|
+
const serverDeploymentId = getFarmResponseDeploymentId(response);
|
|
111
|
+
if (clientDeploymentId && serverDeploymentId && clientDeploymentId !== serverDeploymentId) {
|
|
112
|
+
return true;
|
|
113
|
+
}
|
|
114
|
+
return response.status === FARM_DEPLOYMENT_MISMATCH_STATUS && response.headers.get(FARM_DEPLOYMENT_MISMATCH_HEADER) === "1";
|
|
115
|
+
}
|
|
116
|
+
_chunkS3JO3N4Hcjs.__name.call(void 0, isFarmDeploymentMismatchResponse, "isFarmDeploymentMismatchResponse");
|
|
117
|
+
function createFarmDeploymentMismatchError(response, clientDeploymentId) {
|
|
118
|
+
return new FarmDeploymentMismatchError(
|
|
119
|
+
clientDeploymentId,
|
|
120
|
+
getFarmResponseDeploymentId(response) || "unknown"
|
|
121
|
+
);
|
|
122
|
+
}
|
|
123
|
+
_chunkS3JO3N4Hcjs.__name.call(void 0, createFarmDeploymentMismatchError, "createFarmDeploymentMismatchError");
|
|
124
|
+
function createFarmDeploymentCookie(deploymentId, path = "/", secure = false) {
|
|
125
|
+
const normalizedPath = path.startsWith("/") ? path : `/${path}`;
|
|
126
|
+
return [
|
|
127
|
+
`${FARM_DEPLOYMENT_COOKIE}=${encodeURIComponent(deploymentId)}`,
|
|
128
|
+
`Path=${normalizedPath}`,
|
|
129
|
+
"HttpOnly",
|
|
130
|
+
"SameSite=Lax",
|
|
131
|
+
secure ? "Secure" : ""
|
|
132
|
+
].filter(Boolean).join("; ");
|
|
133
|
+
}
|
|
134
|
+
_chunkS3JO3N4Hcjs.__name.call(void 0, createFarmDeploymentCookie, "createFarmDeploymentCookie");
|
|
135
|
+
function readCookie(cookieHeader, name) {
|
|
136
|
+
if (!cookieHeader) return void 0;
|
|
137
|
+
for (const part of cookieHeader.split(";")) {
|
|
138
|
+
const separator = part.indexOf("=");
|
|
139
|
+
if (separator === -1 || part.slice(0, separator).trim() !== name) continue;
|
|
140
|
+
const value = part.slice(separator + 1).trim();
|
|
141
|
+
try {
|
|
142
|
+
return decodeURIComponent(value);
|
|
143
|
+
} catch (e) {
|
|
144
|
+
return value;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
return void 0;
|
|
148
|
+
}
|
|
149
|
+
_chunkS3JO3N4Hcjs.__name.call(void 0, readCookie, "readCookie");
|
|
150
|
+
function isSafeRequestMethod(method) {
|
|
151
|
+
return ["GET", "HEAD", "OPTIONS", "QUERY"].includes(method.toUpperCase());
|
|
152
|
+
}
|
|
153
|
+
_chunkS3JO3N4Hcjs.__name.call(void 0, isSafeRequestMethod, "isSafeRequestMethod");
|
|
154
|
+
|
|
155
|
+
|
|
156
|
+
|
|
157
|
+
|
|
158
|
+
|
|
159
|
+
|
|
160
|
+
|
|
161
|
+
|
|
162
|
+
|
|
163
|
+
|
|
164
|
+
|
|
165
|
+
|
|
166
|
+
|
|
167
|
+
|
|
168
|
+
|
|
169
|
+
|
|
170
|
+
|
|
171
|
+
|
|
172
|
+
|
|
173
|
+
exports.FARM_DEPLOYMENT_ID_HEADER = FARM_DEPLOYMENT_ID_HEADER; exports.FARM_DEPLOYMENT_MISMATCH_HEADER = FARM_DEPLOYMENT_MISMATCH_HEADER; exports.FARM_DEPLOYMENT_COOKIE = FARM_DEPLOYMENT_COOKIE; exports.FARM_DEPLOYMENT_MISMATCH_CODE = FARM_DEPLOYMENT_MISMATCH_CODE; exports.FARM_DEPLOYMENT_MISMATCH_STATUS = FARM_DEPLOYMENT_MISMATCH_STATUS; exports.getFarmPresetRuntime = getFarmPresetRuntime; exports.FarmDeploymentMismatchError = FarmDeploymentMismatchError; exports.normalizeFarmDeploymentId = normalizeFarmDeploymentId; exports.createFarmDeploymentRequestHeaders = createFarmDeploymentRequestHeaders; exports.getFarmRequestDeploymentId = getFarmRequestDeploymentId; exports.getFarmDeploymentMismatch = getFarmDeploymentMismatch; exports.createFarmDeploymentMismatchResponse = createFarmDeploymentMismatchResponse; exports.withFarmDeploymentResponse = withFarmDeploymentResponse; exports.getFarmResponseDeploymentId = getFarmResponseDeploymentId; exports.isFarmDeploymentMismatchResponse = isFarmDeploymentMismatchResponse; exports.createFarmDeploymentMismatchError = createFarmDeploymentMismatchError; exports.createFarmDeploymentCookie = createFarmDeploymentCookie;
|
|
@@ -0,0 +1,337 @@
|
|
|
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 _chunkTIWHTW3Qcjs = require('./chunk-TIWHTW3Q.cjs');
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
var _chunk2CQ74SP6cjs = require('./chunk-2CQ74SP6.cjs');
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
var _chunkWMAPPDMMcjs = require('./chunk-WMAPPDMM.cjs');
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
var _chunkS3JO3N4Hcjs = require('./chunk-S3JO3N4H.cjs');
|
|
14
|
+
|
|
15
|
+
// src/type-generator.ts
|
|
16
|
+
var _fs = require('fs');
|
|
17
|
+
var _module = require('module');
|
|
18
|
+
var _path = require('path');
|
|
19
|
+
var _esmodulelexer = require('es-module-lexer');
|
|
20
|
+
var moduleLexerInitialized = false;
|
|
21
|
+
var JSX_ROUTE_LOADERS = { ".jsx": "jsx", ".tsx": "tsx" };
|
|
22
|
+
var esbuildTransformSync;
|
|
23
|
+
function transformJSXRoute(content, loader, filePath) {
|
|
24
|
+
_nullishCoalesce(esbuildTransformSync, () => ( (esbuildTransformSync = _module.createRequire.call(void 0, typeof __filename === "string" ? __filename : _chunkS3JO3N4Hcjs.define_import_meta_default.url)(
|
|
25
|
+
"esbuild"
|
|
26
|
+
).transformSync)));
|
|
27
|
+
return esbuildTransformSync(content, { loader, sourcefile: filePath }).code;
|
|
28
|
+
}
|
|
29
|
+
_chunkS3JO3N4Hcjs.__name.call(void 0, transformJSXRoute, "transformJSXRoute");
|
|
30
|
+
var API_CLIENT_METHOD_SEGMENTS = /* @__PURE__ */ new Set([
|
|
31
|
+
"get",
|
|
32
|
+
"head",
|
|
33
|
+
"query",
|
|
34
|
+
"post",
|
|
35
|
+
"put",
|
|
36
|
+
"delete",
|
|
37
|
+
"patch",
|
|
38
|
+
"options"
|
|
39
|
+
]);
|
|
40
|
+
var _APITypeGenerator = class _APITypeGenerator {
|
|
41
|
+
constructor(appDir) {
|
|
42
|
+
this.appDirs = Array.isArray(appDir) ? [...appDir] : [appDir];
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Scan all API route files and extract route information
|
|
46
|
+
*/
|
|
47
|
+
scanAPIRoutes() {
|
|
48
|
+
const methodSources = /* @__PURE__ */ new Map();
|
|
49
|
+
for (const appDir of this.appDirs) {
|
|
50
|
+
const apiDir = _path.join.call(void 0, appDir, "api");
|
|
51
|
+
if (!_fs.existsSync.call(void 0, apiDir)) continue;
|
|
52
|
+
const discovered = [];
|
|
53
|
+
this.scanDirectory(apiDir, appDir, discovered);
|
|
54
|
+
for (const route of discovered) {
|
|
55
|
+
const routeMethods = _nullishCoalesce(methodSources.get(route.path), () => ( /* @__PURE__ */ new Map()));
|
|
56
|
+
for (const method of route.methods) {
|
|
57
|
+
routeMethods.set(method, route);
|
|
58
|
+
}
|
|
59
|
+
methodSources.set(route.path, routeMethods);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
const routes = [];
|
|
63
|
+
for (const [routePath, methods] of methodSources) {
|
|
64
|
+
const routesByFile = /* @__PURE__ */ new Map();
|
|
65
|
+
for (const [method, route] of methods) {
|
|
66
|
+
const existing = routesByFile.get(route.filePath);
|
|
67
|
+
if (existing) {
|
|
68
|
+
existing.methods.push(method);
|
|
69
|
+
} else {
|
|
70
|
+
routesByFile.set(route.filePath, {
|
|
71
|
+
...route,
|
|
72
|
+
path: routePath,
|
|
73
|
+
methods: [method]
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
routes.push(...routesByFile.values());
|
|
78
|
+
}
|
|
79
|
+
return routes.sort(
|
|
80
|
+
(left, right) => left.path.localeCompare(right.path) || left.filePath.localeCompare(right.filePath)
|
|
81
|
+
);
|
|
82
|
+
}
|
|
83
|
+
scanDirectory(dir, appDir, routes, basePath = "") {
|
|
84
|
+
const items = _fs.readdirSync.call(void 0, dir, { withFileTypes: true });
|
|
85
|
+
for (const item of items) {
|
|
86
|
+
const fullPath = _path.join.call(void 0, dir, item.name);
|
|
87
|
+
if (item.isDirectory()) {
|
|
88
|
+
const newBasePath = basePath ? `${basePath}/${item.name}` : item.name;
|
|
89
|
+
this.scanDirectory(fullPath, appDir, routes, newBasePath);
|
|
90
|
+
} else if (_chunk2CQ74SP6cjs.isFarmAPIRouteFileName.call(void 0, item.name)) {
|
|
91
|
+
const routeInfo = this.extractRouteInfo(fullPath, appDir, basePath);
|
|
92
|
+
if (routeInfo) {
|
|
93
|
+
routes.push(routeInfo);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
extractRouteInfo(filePath, appDir, basePath) {
|
|
99
|
+
try {
|
|
100
|
+
const content = _fs.readFileSync.call(void 0, filePath, "utf-8");
|
|
101
|
+
const methods = this.extractExportedMethods(content, filePath);
|
|
102
|
+
if (methods.length === 0) {
|
|
103
|
+
return null;
|
|
104
|
+
}
|
|
105
|
+
const relativePath = _path.relative.call(void 0, appDir, filePath);
|
|
106
|
+
const apiPath = basePath ? `/api/${basePath}` : "/api";
|
|
107
|
+
return {
|
|
108
|
+
path: apiPath,
|
|
109
|
+
methods,
|
|
110
|
+
filePath,
|
|
111
|
+
relativePath
|
|
112
|
+
};
|
|
113
|
+
} catch (error) {
|
|
114
|
+
console.warn(`Failed to read route file ${filePath}:`, error);
|
|
115
|
+
return null;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
extractExportedMethods(content, filePath) {
|
|
119
|
+
if (!moduleLexerInitialized) {
|
|
120
|
+
_esmodulelexer.initSync.call(void 0, );
|
|
121
|
+
moduleLexerInitialized = true;
|
|
122
|
+
}
|
|
123
|
+
const httpMethods = ["GET", "HEAD", "QUERY", "POST", "PUT", "DELETE", "PATCH", "OPTIONS"];
|
|
124
|
+
const loader = JSX_ROUTE_LOADERS[_path.extname.call(void 0, filePath)];
|
|
125
|
+
const source = loader ? transformJSXRoute(content, loader, filePath) : content;
|
|
126
|
+
const [, exports] = _esmodulelexer.parse.call(void 0, source);
|
|
127
|
+
const valueExports = new Set(
|
|
128
|
+
exports.filter((specifier) => !this.isTypeOnlyExportSpecifier(source, specifier.s)).map((specifier) => specifier.n)
|
|
129
|
+
);
|
|
130
|
+
return httpMethods.filter((method) => valueExports.has(method));
|
|
131
|
+
}
|
|
132
|
+
isTypeOnlyExportSpecifier(content, exportNameStart) {
|
|
133
|
+
let cursor = exportNameStart - 1;
|
|
134
|
+
while (cursor >= 0) {
|
|
135
|
+
while (cursor >= 0 && /\s/.test(content[cursor])) cursor--;
|
|
136
|
+
if (content.slice(cursor - 1, cursor + 1) === "*/") {
|
|
137
|
+
const commentStart = content.lastIndexOf("/*", cursor - 1);
|
|
138
|
+
if (commentStart >= 0) {
|
|
139
|
+
cursor = commentStart - 1;
|
|
140
|
+
continue;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
const lineStart = content.lastIndexOf("\n", cursor) + 1;
|
|
144
|
+
const lineCommentStart = content.indexOf("//", lineStart);
|
|
145
|
+
if (lineCommentStart >= 0 && lineCommentStart <= cursor) {
|
|
146
|
+
cursor = lineCommentStart - 1;
|
|
147
|
+
continue;
|
|
148
|
+
}
|
|
149
|
+
break;
|
|
150
|
+
}
|
|
151
|
+
const tokenEnd = cursor + 1;
|
|
152
|
+
while (cursor >= 0 && /[A-Za-z0-9_$]/.test(content[cursor])) cursor--;
|
|
153
|
+
return content.slice(cursor + 1, tokenEnd) === "type";
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Generate TypeScript code for the API router
|
|
157
|
+
*/
|
|
158
|
+
generateAPIRouter(routes, options = {}) {
|
|
159
|
+
const imports = [];
|
|
160
|
+
const pluginTypes = [];
|
|
161
|
+
if (_optionalChain([options, 'access', _ => _.pluginConfigs, 'optionalAccess', _2 => _2.length])) {
|
|
162
|
+
imports.push('import type { PluginAPIRouter } from "@farm.js/core/api";');
|
|
163
|
+
options.pluginConfigs.forEach((filePath, index) => {
|
|
164
|
+
const importPath = this.getRouteImportPath({ filePath }, options.outFile);
|
|
165
|
+
imports.push(`import type FarmPluginConfig${index} from ${JSON.stringify(importPath)};`);
|
|
166
|
+
pluginTypes.push(`PluginAPIRouter<typeof FarmPluginConfig${index}>`);
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
const routeGroups = /* @__PURE__ */ new Map();
|
|
170
|
+
for (const route of routes) {
|
|
171
|
+
const key = route.path;
|
|
172
|
+
if (!routeGroups.has(key)) {
|
|
173
|
+
routeGroups.set(key, []);
|
|
174
|
+
}
|
|
175
|
+
routeGroups.get(key).push(route);
|
|
176
|
+
}
|
|
177
|
+
const routeMethodsByPath = /* @__PURE__ */ new Map();
|
|
178
|
+
for (const [routePath, routeList] of routeGroups) {
|
|
179
|
+
const cleanPath = routePath === "/api" ? "" : routePath.replace(/^\/api\//, "");
|
|
180
|
+
routeMethodsByPath.set(
|
|
181
|
+
cleanPath,
|
|
182
|
+
new Set(routeList.flatMap((route) => route.methods.map((method) => method.toLowerCase())))
|
|
183
|
+
);
|
|
184
|
+
}
|
|
185
|
+
for (const route of _nullishCoalesce(options.pluginRoutes, () => ( []))) {
|
|
186
|
+
const cleanPath = route.path === "/api" ? "" : route.path.replace(/^\/api\//, "");
|
|
187
|
+
const methods = _nullishCoalesce(routeMethodsByPath.get(cleanPath), () => ( /* @__PURE__ */ new Set()));
|
|
188
|
+
methods.add(route.method.toLowerCase());
|
|
189
|
+
routeMethodsByPath.set(cleanPath, methods);
|
|
190
|
+
}
|
|
191
|
+
const createRouteTreeNode = /* @__PURE__ */ _chunkS3JO3N4Hcjs.__name.call(void 0, () => /* @__PURE__ */ Object.create(null), "createRouteTreeNode");
|
|
192
|
+
const nestedStructure = createRouteTreeNode();
|
|
193
|
+
const usedRouteNames = /* @__PURE__ */ new Map();
|
|
194
|
+
for (const [path, routeList] of routeGroups) {
|
|
195
|
+
const routeName = this.uniqueRouteName(path, usedRouteNames);
|
|
196
|
+
const cleanPath = path === "/api" ? "" : path.replace(/^\/api\//, "");
|
|
197
|
+
const parts = cleanPath ? cleanPath.split("/") : [];
|
|
198
|
+
const methodSources = /* @__PURE__ */ new Map();
|
|
199
|
+
for (const route of routeList) {
|
|
200
|
+
for (const method of route.methods) methodSources.set(method, route);
|
|
201
|
+
}
|
|
202
|
+
const allMethods = [...methodSources.keys()];
|
|
203
|
+
for (const method of allMethods) {
|
|
204
|
+
const importPath = this.getRouteImportPath(methodSources.get(method), options.outFile);
|
|
205
|
+
const importName = `${method}_${routeName}`;
|
|
206
|
+
imports.push(
|
|
207
|
+
`import type { ${method} as ${importName} } from ${JSON.stringify(importPath)};`
|
|
208
|
+
);
|
|
209
|
+
}
|
|
210
|
+
if (parts.length === 0) {
|
|
211
|
+
for (const method of allMethods) {
|
|
212
|
+
const importName = `${method}_${routeName}`;
|
|
213
|
+
const methodName = method.toLowerCase();
|
|
214
|
+
nestedStructure[methodName] = `typeof ${importName}`;
|
|
215
|
+
}
|
|
216
|
+
} else {
|
|
217
|
+
const hasMethodCollision = parts.some((part, index) => {
|
|
218
|
+
if (part === "$params" || index === 0 && part === "integrations") return true;
|
|
219
|
+
if (!API_CLIENT_METHOD_SEGMENTS.has(part)) return false;
|
|
220
|
+
const parentPath = parts.slice(0, index).join("/");
|
|
221
|
+
return _optionalChain([routeMethodsByPath, 'access', _3 => _3.get, 'call', _4 => _4(parentPath), 'optionalAccess', _5 => _5.has, 'call', _6 => _6(part)]) === true;
|
|
222
|
+
});
|
|
223
|
+
const typePath = hasMethodCollision ? [`/${cleanPath}`] : parts;
|
|
224
|
+
let current = nestedStructure;
|
|
225
|
+
for (let i = 0; i < typePath.length; i++) {
|
|
226
|
+
const part = typePath[i];
|
|
227
|
+
if (i === typePath.length - 1) {
|
|
228
|
+
current[part] = createRouteTreeNode();
|
|
229
|
+
for (const method of allMethods) {
|
|
230
|
+
const importName = `${method}_${routeName}`;
|
|
231
|
+
const methodName = method.toLowerCase();
|
|
232
|
+
current[part][methodName] = `typeof ${importName}`;
|
|
233
|
+
}
|
|
234
|
+
} else {
|
|
235
|
+
if (!Object.prototype.hasOwnProperty.call(current, part)) {
|
|
236
|
+
current[part] = createRouteTreeNode();
|
|
237
|
+
}
|
|
238
|
+
current = current[part];
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
const typeExports = this.structureToTypeString(nestedStructure, 1);
|
|
244
|
+
const manifest = /* @__PURE__ */ new Map();
|
|
245
|
+
const shapes = /* @__PURE__ */ new Map();
|
|
246
|
+
for (const route of routes) {
|
|
247
|
+
_chunkWMAPPDMMcjs.registerAPIRouteShape.call(void 0, shapes, route.path, route.filePath, "app");
|
|
248
|
+
const methods = _nullishCoalesce(manifest.get(route.path), () => ( /* @__PURE__ */ new Set()));
|
|
249
|
+
for (const method of route.methods) methods.add(method);
|
|
250
|
+
manifest.set(route.path, methods);
|
|
251
|
+
}
|
|
252
|
+
for (const route of _nullishCoalesce(options.pluginRoutes, () => ( []))) {
|
|
253
|
+
_chunkWMAPPDMMcjs.registerAPIRouteShape.call(void 0, shapes, route.path, `plugin:${route.path}`, "app");
|
|
254
|
+
const methods = _nullishCoalesce(manifest.get(route.path), () => ( /* @__PURE__ */ new Set()));
|
|
255
|
+
if (methods.has(route.method))
|
|
256
|
+
throw new Error(`Duplicate API route for ${route.method} ${route.path}`);
|
|
257
|
+
methods.add(route.method);
|
|
258
|
+
manifest.set(route.path, methods);
|
|
259
|
+
}
|
|
260
|
+
const routeManifest = [...manifest].sort(([a], [b]) => a.localeCompare(b)).map(([path, methods]) => ({ path, methods: [...methods].sort() }));
|
|
261
|
+
const manifestSource = routeManifest.length ? `[
|
|
262
|
+
${routeManifest.map(
|
|
263
|
+
({ path, methods }) => ` {
|
|
264
|
+
path: ${JSON.stringify(path)},
|
|
265
|
+
methods: [${methods.map((method) => JSON.stringify(method)).join(", ")}],
|
|
266
|
+
},`
|
|
267
|
+
).join("\n")}
|
|
268
|
+
]` : "[]";
|
|
269
|
+
return `/**
|
|
270
|
+
* Auto-generated API router types
|
|
271
|
+
* This file is automatically generated - do not edit manually
|
|
272
|
+
*
|
|
273
|
+
* Server modules are imported only as types. Runtime data contains paths and methods only.
|
|
274
|
+
*/
|
|
275
|
+
|
|
276
|
+
${imports.join("\n")}
|
|
277
|
+
|
|
278
|
+
// Type-only representation of your API routes
|
|
279
|
+
export type APIRouter = ${pluginTypes.length ? `${pluginTypes.join(" & ")} & ` : ""}{
|
|
280
|
+
${typeExports}
|
|
281
|
+
};
|
|
282
|
+
|
|
283
|
+
// Pass this schema-free manifest to createApiClients({ routes: apiRoutes }).
|
|
284
|
+
export const apiRoutes = ${manifestSource} as const;
|
|
285
|
+
`;
|
|
286
|
+
}
|
|
287
|
+
getRouteImportPath(route, outFile) {
|
|
288
|
+
if (!outFile) {
|
|
289
|
+
return `../app/${route.relativePath.replace(/\\/g, "/").replace(/\.(ts|tsx|js|jsx)$/, "")}`;
|
|
290
|
+
}
|
|
291
|
+
const relativeImport = _path.relative.call(void 0, _path.dirname.call(void 0, outFile), route.filePath).replace(/\\/g, "/").replace(/\.(ts|tsx|js|jsx)$/, "");
|
|
292
|
+
return relativeImport.startsWith(".") ? relativeImport : `./${relativeImport}`;
|
|
293
|
+
}
|
|
294
|
+
pathToRouteName(path) {
|
|
295
|
+
return (path === "/api" ? "root" : path.replace(/^\/api\//, "")).replace(/\//g, "_").replace(/[^a-zA-Z0-9_]/g, "_");
|
|
296
|
+
}
|
|
297
|
+
uniqueRouteName(path, usedNames) {
|
|
298
|
+
const base = this.pathToRouteName(path);
|
|
299
|
+
const seen = usedNames.get(base);
|
|
300
|
+
usedNames.set(base, (_nullishCoalesce(seen, () => ( 0))) + 1);
|
|
301
|
+
return seen ? `${base}_${seen + 1}` : base;
|
|
302
|
+
}
|
|
303
|
+
structureToTypeString(obj, indent) {
|
|
304
|
+
const spaces = " ".repeat(indent);
|
|
305
|
+
const lines = [];
|
|
306
|
+
for (const [key, value] of Object.entries(obj)) {
|
|
307
|
+
const propertyKey = this.toTypePropertyKey(key);
|
|
308
|
+
if (typeof value === "string") {
|
|
309
|
+
lines.push(`${spaces}${propertyKey}: ${value};`);
|
|
310
|
+
} else if (typeof value === "object") {
|
|
311
|
+
lines.push(`${spaces}${propertyKey}: {`);
|
|
312
|
+
lines.push(this.structureToTypeString(value, indent + 1));
|
|
313
|
+
lines.push(`${spaces}};`);
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
return lines.join("\n");
|
|
317
|
+
}
|
|
318
|
+
toTypePropertyKey(key) {
|
|
319
|
+
return /^[$A-Z_][0-9A-Z_$]*$/i.test(key) ? key : JSON.stringify(key);
|
|
320
|
+
}
|
|
321
|
+
/**
|
|
322
|
+
* Generate the API index file
|
|
323
|
+
*/
|
|
324
|
+
generateAPIIndex(outputPath) {
|
|
325
|
+
const routes = this.scanAPIRoutes();
|
|
326
|
+
const content = this.generateAPIRouter(routes, { outFile: outputPath });
|
|
327
|
+
_fs.mkdirSync.call(void 0, _path.dirname.call(void 0, outputPath), { recursive: true });
|
|
328
|
+
_chunkTIWHTW3Qcjs.writeFileIfChanged.call(void 0, outputPath, content);
|
|
329
|
+
console.log(`\u2705 Generated API types for ${routes.length} routes`);
|
|
330
|
+
}
|
|
331
|
+
};
|
|
332
|
+
_chunkS3JO3N4Hcjs.__name.call(void 0, _APITypeGenerator, "APITypeGenerator");
|
|
333
|
+
var APITypeGenerator = _APITypeGenerator;
|
|
334
|
+
|
|
335
|
+
|
|
336
|
+
|
|
337
|
+
exports.APITypeGenerator = APITypeGenerator;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); 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 _chunkS3JO3N4Hcjs = require('./chunk-S3JO3N4H.cjs');
|
|
4
|
+
|
|
5
|
+
// src/utils/runtime-env.ts
|
|
6
|
+
function getFarmRuntimeBindings() {
|
|
7
|
+
const runtimeBindings = globalThis.__env__;
|
|
8
|
+
return runtimeBindings && typeof runtimeBindings === "object" ? runtimeBindings : void 0;
|
|
9
|
+
}
|
|
10
|
+
_chunkS3JO3N4Hcjs.__name.call(void 0, getFarmRuntimeBindings, "getFarmRuntimeBindings");
|
|
11
|
+
function readFarmEnvironmentValue(name) {
|
|
12
|
+
const runtimeValue = _optionalChain([getFarmRuntimeBindings, 'call', _ => _(), 'optionalAccess', _2 => _2[name]]);
|
|
13
|
+
if (typeof runtimeValue === "string") return runtimeValue;
|
|
14
|
+
return typeof process !== "undefined" ? _optionalChain([process, 'access', _3 => _3.env, 'optionalAccess', _4 => _4[name]]) : void 0;
|
|
15
|
+
}
|
|
16
|
+
_chunkS3JO3N4Hcjs.__name.call(void 0, readFarmEnvironmentValue, "readFarmEnvironmentValue");
|
|
17
|
+
function isFarmDeployedRuntime() {
|
|
18
|
+
if (getFarmRuntimeBindings()) return true;
|
|
19
|
+
return readFarmEnvironmentValue("NODE_ENV") === "production";
|
|
20
|
+
}
|
|
21
|
+
_chunkS3JO3N4Hcjs.__name.call(void 0, isFarmDeployedRuntime, "isFarmDeployedRuntime");
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
exports.getFarmRuntimeBindings = getFarmRuntimeBindings; exports.readFarmEnvironmentValue = readFarmEnvironmentValue; exports.isFarmDeployedRuntime = isFarmDeployedRuntime;
|