@bleedingdev/modern-js-app-tools-extensions 3.9.0-ultramodern.13 → 3.9.0-ultramodern.14

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 (42) hide show
  1. package/dist/cjs/cloudflare/worker-manifest.js +13 -4
  2. package/dist/cjs/cloudflare/wrangler-config.js +35 -7
  3. package/dist/cjs/cloudflare-builder.js +235 -14
  4. package/dist/cjs/cloudflare-output-contract.js +31 -2
  5. package/dist/cjs/cloudflare-output-verifier/worker-bundles.js +10 -5
  6. package/dist/cjs/templates/cloudflare-entry.004-rendering-css.mjs +4 -0
  7. package/dist/cjs/templates/cloudflare-entry.005-worker-dispatch.mjs +46 -0
  8. package/dist/cjs/templates/cloudflare-entry.006-fetch-handler.mjs +9 -2
  9. package/dist/cjs/templates/cloudflare-worker-route-data.mjs +1069 -0
  10. package/dist/esm/cloudflare/worker-manifest.mjs +13 -4
  11. package/dist/esm/cloudflare/wrangler-config.mjs +35 -7
  12. package/dist/esm/cloudflare-builder.mjs +229 -17
  13. package/dist/esm/cloudflare-output-contract.mjs +24 -1
  14. package/dist/esm/cloudflare-output-verifier/worker-bundles.mjs +11 -6
  15. package/dist/esm/templates/cloudflare-entry.004-rendering-css.mjs +4 -0
  16. package/dist/esm/templates/cloudflare-entry.005-worker-dispatch.mjs +46 -0
  17. package/dist/esm/templates/cloudflare-entry.006-fetch-handler.mjs +9 -2
  18. package/dist/esm/templates/cloudflare-worker-route-data.mjs +1069 -0
  19. package/dist/esm-node/cloudflare/worker-manifest.mjs +13 -4
  20. package/dist/esm-node/cloudflare/wrangler-config.mjs +35 -7
  21. package/dist/esm-node/cloudflare-builder.mjs +229 -17
  22. package/dist/esm-node/cloudflare-output-contract.mjs +24 -1
  23. package/dist/esm-node/cloudflare-output-verifier/worker-bundles.mjs +11 -6
  24. package/dist/esm-node/templates/cloudflare-entry.004-rendering-css.mjs +4 -0
  25. package/dist/esm-node/templates/cloudflare-entry.005-worker-dispatch.mjs +46 -0
  26. package/dist/esm-node/templates/cloudflare-entry.006-fetch-handler.mjs +9 -2
  27. package/dist/esm-node/templates/cloudflare-worker-route-data.mjs +1069 -0
  28. package/dist/types/cloudflare/wrangler-config.d.ts +6 -0
  29. package/dist/types/cloudflare-builder.d.ts +44 -1
  30. package/dist/types/cloudflare-output-contract.d.ts +3 -1
  31. package/dist/types/cloudflare-output-verifier/worker-bundles.d.ts +2 -2
  32. package/dist/types/templates/cloudflare-worker-route-data.d.mts +14 -0
  33. package/package.json +17 -13
  34. package/src/cloudflare/worker-manifest.ts +19 -3
  35. package/src/cloudflare/wrangler-config.ts +86 -10
  36. package/src/cloudflare-builder.ts +447 -12
  37. package/src/cloudflare-output-contract.ts +34 -2
  38. package/src/cloudflare-output-verifier/worker-bundles.ts +27 -11
  39. package/src/templates/cloudflare-entry.004-rendering-css.mjs +4 -0
  40. package/src/templates/cloudflare-entry.005-worker-dispatch.mjs +46 -0
  41. package/src/templates/cloudflare-entry.006-fetch-handler.mjs +9 -2
  42. package/src/templates/cloudflare-worker-route-data.mjs +1069 -0
@@ -52,6 +52,52 @@ async function getRequestHandler(workerModule) {
52
52
  );
53
53
  }
54
54
 
55
+ const ROUTE_DATA_REQUEST_PARAM = '__loader';
56
+
57
+ // Route data requests (`?__loader=`) are answered by the entry's route data
58
+ // worker, like the Node server's data handler. Without a match the request
59
+ // falls through to page rendering, as it does on Node.
60
+ async function dispatchRouteDataRequest(route, request) {
61
+ const routeDataWorkerPath = route.routeDataWorker;
62
+ if (
63
+ !routeDataWorkerPath ||
64
+ !new URL(request.url).searchParams.has(ROUTE_DATA_REQUEST_PARAM)
65
+ ) {
66
+ return undefined;
67
+ }
68
+
69
+ const routeDataWorkerModule = await loadWorkerModule(routeDataWorkerPath);
70
+ const handleRouteDataRequest = routeDataWorkerModule
71
+ ? getRuntimeModule(routeDataWorkerModule).handleRouteDataRequest
72
+ : undefined;
73
+
74
+ if (typeof handleRouteDataRequest !== 'function') {
75
+ return new Response(
76
+ `Route data worker bundle has no handleRouteDataRequest export: ${routeDataWorkerPath}`,
77
+ {
78
+ status: 500,
79
+ headers: {
80
+ 'content-type': 'text/plain; charset=utf-8',
81
+ 'x-modern-js-route-data-worker': routeDataWorkerPath,
82
+ },
83
+ },
84
+ );
85
+ }
86
+
87
+ return handleRouteDataRequest({
88
+ request,
89
+ serverRoutes: MODERN_WORKER_MANIFEST.routeSpec.routes,
90
+ context: {
91
+ loaderContext: new Map(),
92
+ monitors: createNoopMonitors(),
93
+ reporter: {
94
+ reportTiming: () => {},
95
+ },
96
+ },
97
+ onTiming() {},
98
+ });
99
+ }
100
+
55
101
  async function dispatchRouteWorker(route, request, env, ctx) {
56
102
  const workerPath = route.worker;
57
103
  if (!workerPath) {
@@ -62,11 +62,18 @@ export default {
62
62
  }
63
63
 
64
64
  if (route?.worker) {
65
- const renderableRequest = createRenderableRequest(request);
65
+ // Route data requests keep their method, as on the Node server.
66
+ const routeDataResponse = await dispatchRouteDataRequest(route, request);
66
67
 
67
68
  return finalizeResponseForRequest(
68
69
  withAppCorsHeaders(
69
- await dispatchRouteWorker(route, renderableRequest, env, ctx),
70
+ routeDataResponse ??
71
+ (await dispatchRouteWorker(
72
+ route,
73
+ createRenderableRequest(request),
74
+ env,
75
+ ctx,
76
+ )),
70
77
  request,
71
78
  ),
72
79
  request,