veryfront 0.1.1114 → 0.1.1116

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 (48) hide show
  1. package/esm/cli/commands/deploy/command.d.ts +3 -0
  2. package/esm/cli/commands/deploy/command.d.ts.map +1 -1
  3. package/esm/cli/commands/deploy/command.js +4 -4
  4. package/esm/cli/commands/up/command.d.ts +3 -0
  5. package/esm/cli/commands/up/command.d.ts.map +1 -1
  6. package/esm/cli/commands/up/command.js +4 -2
  7. package/esm/cli/skills/loader.d.ts +4 -4
  8. package/esm/cli/skills/loader.d.ts.map +1 -1
  9. package/esm/cli/skills/loader.js +6 -6
  10. package/esm/deno.js +1 -1
  11. package/esm/src/agent/hosted/chat-preparation.d.ts.map +1 -1
  12. package/esm/src/agent/hosted/chat-preparation.js +1 -0
  13. package/esm/src/agent/hosted/chat-request-parser.d.ts +1 -0
  14. package/esm/src/agent/hosted/chat-request-parser.d.ts.map +1 -1
  15. package/esm/src/agent/hosted/chat-request-parser.js +42 -7
  16. package/esm/src/agent/hosted/chat-runtime-contract.d.ts +1 -0
  17. package/esm/src/agent/hosted/chat-runtime-contract.d.ts.map +1 -1
  18. package/esm/src/agent/hosted/default-chat-runtime.d.ts +1 -0
  19. package/esm/src/agent/hosted/default-chat-runtime.d.ts.map +1 -1
  20. package/esm/src/agent/hosted/default-chat-runtime.js +16 -1
  21. package/esm/src/agent/runtime/index.d.ts.map +1 -1
  22. package/esm/src/agent/runtime/index.js +4 -8
  23. package/esm/src/agent/service/auth.d.ts +1 -0
  24. package/esm/src/agent/service/auth.d.ts.map +1 -1
  25. package/esm/src/agent/service/auth.js +14 -0
  26. package/esm/src/agent/service/routes.d.ts +1 -0
  27. package/esm/src/agent/service/routes.d.ts.map +1 -1
  28. package/esm/src/data/server-data-fetcher.d.ts.map +1 -1
  29. package/esm/src/data/server-data-fetcher.js +5 -1
  30. package/esm/src/html/hydration-script-builder/templates/router.d.ts.map +1 -1
  31. package/esm/src/html/hydration-script-builder/templates/router.js +87 -24
  32. package/esm/src/integrations/remote-tools.d.ts.map +1 -1
  33. package/esm/src/integrations/remote-tools.js +5 -2
  34. package/esm/src/rendering/orchestrator/pipeline.d.ts.map +1 -1
  35. package/esm/src/rendering/orchestrator/pipeline.js +26 -8
  36. package/esm/src/rendering/script-page-handling.js +1 -1
  37. package/esm/src/routing/api/module-loader/external-import-rewriter.js +1 -1
  38. package/esm/src/sandbox/lazy-sandbox.d.ts +1 -0
  39. package/esm/src/sandbox/lazy-sandbox.d.ts.map +1 -1
  40. package/esm/src/sandbox/lazy-sandbox.js +21 -5
  41. package/esm/src/server/handlers/request/module/page-data-endpoint-handler.d.ts.map +1 -1
  42. package/esm/src/server/handlers/request/module/page-data-endpoint-handler.js +6 -3
  43. package/esm/src/transforms/npm-import-rewrites.d.ts +3 -3
  44. package/esm/src/transforms/npm-import-rewrites.d.ts.map +1 -1
  45. package/esm/src/transforms/npm-import-rewrites.js +29 -14
  46. package/esm/src/utils/version-constant.d.ts +1 -1
  47. package/esm/src/utils/version-constant.js +1 -1
  48. package/package.json +5 -5
@@ -72,6 +72,18 @@ function decodeBase64Url(input) {
72
72
  function isRecord(value) {
73
73
  return typeof value === "object" && value !== null && !Array.isArray(value);
74
74
  }
75
+ async function readProjectSlugFromAccessResponse(response) {
76
+ try {
77
+ const body = await response.json();
78
+ if (!isRecord(body))
79
+ return undefined;
80
+ const slug = typeof body.slug === "string" ? body.slug.trim() : "";
81
+ return slug || undefined;
82
+ }
83
+ catch {
84
+ return undefined;
85
+ }
86
+ }
75
87
  function parseJsonObject(json) {
76
88
  const parsed = JSON.parse(json);
77
89
  return isRecord(parsed) ? parsed : null;
@@ -262,9 +274,11 @@ export function createHostedServiceAuth(options) {
262
274
  },
263
275
  };
264
276
  }
277
+ const projectSlug = await readProjectSlugFromAccessResponse(response);
265
278
  return {
266
279
  success: true,
267
280
  projectId,
281
+ ...(projectSlug ? { projectSlug } : {}),
268
282
  };
269
283
  }
270
284
  catch (error) {
@@ -50,6 +50,7 @@ export type HostedAgentServiceRouteSetOptions<TExecution extends object> = {
50
50
  authenticateRequest: (request: Request) => Promise<HostedServiceAuthenticatedRequest | Response>;
51
51
  verifyProjectAccess: (projectId: string, authToken: string) => Promise<{
52
52
  success: true;
53
+ projectSlug?: string;
53
54
  } | {
54
55
  success: false;
55
56
  error: {
@@ -1 +1 @@
1
- {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../../../src/src/agent/service/routes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../../../src/src/agent/service/routes.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"server-data-fetcher.d.ts","sourceRoot":"","sources":["../../../src/src/data/server-data-fetcher.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAcxE;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,2DAA2D;IAC3D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,2CAA2C;IAC3C,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,qBAAa,iBAAiB;IAC5B,KAAK,CACH,UAAU,EAAE,YAAY,EACxB,OAAO,EAAE,WAAW,EACpB,OAAO,CAAC,EAAE,sBAAsB,GAC/B,OAAO,CAAC,UAAU,CAAC;IAuFtB;;OAEG;YACW,aAAa;IAqE3B;;;OAGG;IACH,OAAO,CAAC,QAAQ;CAGjB"}
1
+ {"version":3,"file":"server-data-fetcher.d.ts","sourceRoot":"","sources":["../../../src/src/data/server-data-fetcher.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAcxE;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,2DAA2D;IAC3D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,2CAA2C;IAC3C,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,qBAAa,iBAAiB;IAC5B,KAAK,CACH,UAAU,EAAE,YAAY,EACxB,OAAO,EAAE,WAAW,EACpB,OAAO,CAAC,EAAE,sBAAsB,GAC/B,OAAO,CAAC,UAAU,CAAC;IA2FtB;;OAEG;YACW,aAAa;IAqE3B;;;OAGG;IACH,OAAO,CAAC,QAAQ;CAGjB"}
@@ -15,7 +15,9 @@ export class ServerDataFetcher {
15
15
  }
16
16
  const pathname = context.url?.pathname ?? "unknown";
17
17
  const projectId = context.request?.headers?.get("x-project-id") ?? "default";
18
- const circuitBreaker = getCircuitBreaker(`data-fetch:${projectId}`, {
18
+ const isPrefetch = context.request?.headers?.get("x-veryfront-prefetch") === "1";
19
+ const breakerNamespace = isPrefetch ? "data-prefetch" : "data-fetch";
20
+ const circuitBreaker = getCircuitBreaker(`${breakerNamespace}:${projectId}`, {
19
21
  failureThreshold: 5,
20
22
  resetTimeoutMs: 30_000,
21
23
  successThreshold: 2,
@@ -55,6 +57,7 @@ export class ServerDataFetcher {
55
57
  serverLogger.warn("DATA_FETCH_CIRCUIT_OPEN circuit breaker open, failing fast", {
56
58
  pathname,
57
59
  projectId,
60
+ breakerNamespace,
58
61
  retryAfterMs: error.nextAttemptMs,
59
62
  });
60
63
  throw error;
@@ -79,6 +82,7 @@ export class ServerDataFetcher {
79
82
  "data.pathname": pathname,
80
83
  "data.timeout_ms": DATA_FETCH_TIMEOUT_MS,
81
84
  "data.project_id": projectId,
85
+ "data.prefetch": isPrefetch,
82
86
  "data.isolated": useIsolation,
83
87
  });
84
88
  }
@@ -1 +1 @@
1
- {"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../../../../src/src/html/hydration-script-builder/templates/router.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,eAAe,cA6oC3B,CAAC"}
1
+ {"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../../../../src/src/html/hydration-script-builder/templates/router.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,eAAe,cA4sC3B,CAAC"}
@@ -39,6 +39,7 @@ export const getRouterScript = () => `
39
39
  const IDLE_PREFETCH_DELAY_MS = 1200;
40
40
  const IDLE_PREFETCH_MAX_LINKS = 4;
41
41
  const VIEWPORT_PREFETCH_MAX_LINKS = 8;
42
+ const PAGE_DATA_PREFETCH_CONCURRENCY = 2;
42
43
  const VIEWPORT_PREFETCH_ROOT_MARGIN = '200px';
43
44
  const MAX_ROUTE_TIMINGS = 100;
44
45
  const MAX_SERVER_TIMING_LENGTH = 1024;
@@ -54,6 +55,10 @@ export const getRouterScript = () => `
54
55
  log(reason + ' failed:', path, message);
55
56
  }
56
57
 
58
+ function isAbortError(error) {
59
+ return error?.name === 'AbortError';
60
+ }
61
+
57
62
  function getDocumentNonce() {
58
63
  const element = document.querySelector('script[nonce], style[nonce], link[nonce]');
59
64
  if (!element) return undefined;
@@ -407,11 +412,16 @@ export const getRouterScript = () => `
407
412
  async function fetchWithRetry(url, options, maxRetries = MAX_RETRIES) {
408
413
  for (let attempt = 0; attempt <= maxRetries; attempt++) {
409
414
  const controller = new AbortController();
415
+ const callerSignal = options.signal;
416
+ const abortFromCaller = () => controller.abort();
417
+ if (callerSignal?.aborted) controller.abort();
418
+ callerSignal?.addEventListener('abort', abortFromCaller, { once: true });
410
419
  const timeout = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);
411
420
 
412
421
  try {
413
422
  const response = await fetch(url, { ...options, signal: controller.signal });
414
423
  clearTimeout(timeout);
424
+ callerSignal?.removeEventListener('abort', abortFromCaller);
415
425
 
416
426
  if (response.ok) return response;
417
427
 
@@ -424,8 +434,9 @@ export const getRouterScript = () => `
424
434
  return response;
425
435
  } catch (error) {
426
436
  clearTimeout(timeout);
437
+ callerSignal?.removeEventListener('abort', abortFromCaller);
427
438
 
428
- if (error.name === 'AbortError' && options.signal?.aborted) throw error;
439
+ if (error.name === 'AbortError' && callerSignal?.aborted) throw error;
429
440
  if (attempt === maxRetries) throw error;
430
441
 
431
442
  log('Fetch failed, retrying...', error.message);
@@ -450,10 +461,13 @@ export const getRouterScript = () => `
450
461
  log('Fetching page data:', path);
451
462
  perfStart('fetch:' + path);
452
463
 
464
+ const headers = options.prefetch
465
+ ? { 'X-Veryfront-Prefetch': '1' }
466
+ : { 'X-Veryfront-Navigation': 'spa' };
453
467
  const response = await fetchWithRetry(endpoint, {
454
- headers: { 'X-Veryfront-Navigation': 'spa' },
468
+ headers,
455
469
  signal
456
- });
470
+ }, options.prefetch ? 0 : MAX_RETRIES);
457
471
 
458
472
  if (!response.ok) {
459
473
  perfEnd('fetch:' + path);
@@ -504,11 +518,13 @@ export const getRouterScript = () => `
504
518
 
505
519
  function startPageDataFetch(path, signal, options = {}) {
506
520
  const request = fetchPageDataFresh(path, signal, options).finally(() => {
507
- if (pendingPageDataFetches.get(path) === request) {
521
+ if (options.trackPending !== false && pendingPageDataFetches.get(path) === request) {
508
522
  pendingPageDataFetches.delete(path);
509
523
  }
510
524
  });
511
- pendingPageDataFetches.set(path, request);
525
+ if (options.trackPending !== false) {
526
+ pendingPageDataFetches.set(path, request);
527
+ }
512
528
  return request;
513
529
  }
514
530
 
@@ -555,12 +571,15 @@ export const getRouterScript = () => `
555
571
  });
556
572
  }
557
573
 
558
- async function fetchPageDataForPrefetch(path) {
574
+ async function fetchPageDataForPrefetch(path, signal) {
559
575
  if (getCachedPageData(path)) return;
560
- return fetchPageDataDeduped(path)
576
+ return startPageDataFetch(path, signal, { prefetch: true, trackPending: false })
561
577
  .then((data) => preloadModulesForPageData(data, path))
562
578
  .catch((error) => {
563
- logBackgroundFetchFailure('Page data prefetch', path, error);
579
+ if (!isAbortError(error)) {
580
+ logBackgroundFetchFailure('Page data prefetch', path, error);
581
+ }
582
+ throw error;
564
583
  });
565
584
  }
566
585
 
@@ -578,6 +597,9 @@ export const getRouterScript = () => `
578
597
 
579
598
  if (isNavigating) return;
580
599
  isNavigating = true;
600
+ const [navigationPath] = href.split('#');
601
+ removeQueuedPrefetch(navigationPath || href);
602
+ abortActiveSpeculativePrefetches();
581
603
 
582
604
  currentAbortController = new AbortController();
583
605
  const signal = currentAbortController.signal;
@@ -654,6 +676,7 @@ export const getRouterScript = () => `
654
676
  } finally {
655
677
  isNavigating = false;
656
678
  currentAbortController = null;
679
+ processPageDataPrefetchQueue();
657
680
  }
658
681
  }
659
682
 
@@ -810,6 +833,9 @@ export const getRouterScript = () => `
810
833
  const observedPrefetchLinks = new WeakSet();
811
834
  const prefetchedPaths = new Set();
812
835
  const inFlightPrefetches = new Set();
836
+ const queuedPrefetchPaths = new Set();
837
+ const pageDataPrefetchQueue = [];
838
+ const activePageDataPrefetchControllers = new Map();
813
839
 
814
840
  function cancelScheduledPrefetch() {
815
841
  if (prefetchTimeout) {
@@ -895,9 +921,58 @@ export const getRouterScript = () => `
895
921
  }
896
922
  }
897
923
 
924
+ function removeQueuedPrefetch(path) {
925
+ queuedPrefetchPaths.delete(path);
926
+ for (let i = pageDataPrefetchQueue.length - 1; i >= 0; i--) {
927
+ if (pageDataPrefetchQueue[i] === path) pageDataPrefetchQueue.splice(i, 1);
928
+ }
929
+ }
930
+
931
+ function abortActiveSpeculativePrefetches() {
932
+ for (const controller of activePageDataPrefetchControllers.values()) {
933
+ controller.abort();
934
+ }
935
+ }
936
+
937
+ function processPageDataPrefetchQueue() {
938
+ if (isNavigating) return;
939
+
940
+ while (
941
+ activePageDataPrefetchControllers.size < PAGE_DATA_PREFETCH_CONCURRENCY &&
942
+ pageDataPrefetchQueue.length > 0
943
+ ) {
944
+ const href = pageDataPrefetchQueue.shift();
945
+ queuedPrefetchPaths.delete(href);
946
+
947
+ if (prefetchedPaths.has(href) || inFlightPrefetches.has(href) || getCachedPageData(href)) {
948
+ continue;
949
+ }
950
+
951
+ if (prefetchedPaths.size >= MAX_PREFETCH_PATHS) {
952
+ const oldest = prefetchedPaths.values().next().value;
953
+ if (oldest) prefetchedPaths.delete(oldest);
954
+ }
955
+
956
+ const controller = new AbortController();
957
+ prefetchedPaths.add(href);
958
+ inFlightPrefetches.add(href);
959
+ activePageDataPrefetchControllers.set(href, controller);
960
+
961
+ fetchPageDataForPrefetch(href, controller.signal)
962
+ .catch(() => {
963
+ prefetchedPaths.delete(href);
964
+ })
965
+ .finally(() => {
966
+ inFlightPrefetches.delete(href);
967
+ activePageDataPrefetchControllers.delete(href);
968
+ processPageDataPrefetchQueue();
969
+ });
970
+ }
971
+ }
972
+
898
973
  function prefetchPage(href) {
899
974
  if (isNavigating) return;
900
- if (prefetchedPaths.has(href) || inFlightPrefetches.has(href)) return;
975
+ if (prefetchedPaths.has(href) || inFlightPrefetches.has(href) || queuedPrefetchPaths.has(href)) return;
901
976
 
902
977
  const cachedPageData = getCachedPageData(href);
903
978
  if (cachedPageData) {
@@ -907,21 +982,9 @@ export const getRouterScript = () => `
907
982
  return;
908
983
  }
909
984
 
910
- if (prefetchedPaths.size >= MAX_PREFETCH_PATHS) {
911
- const oldest = prefetchedPaths.values().next().value;
912
- if (oldest) prefetchedPaths.delete(oldest);
913
- }
914
-
915
- prefetchedPaths.add(href);
916
- inFlightPrefetches.add(href);
917
-
918
- fetchPageDataForPrefetch(href)
919
- .catch(() => {
920
- prefetchedPaths.delete(href);
921
- })
922
- .finally(() => {
923
- inFlightPrefetches.delete(href);
924
- });
985
+ queuedPrefetchPaths.add(href);
986
+ pageDataPrefetchQueue.push(href);
987
+ processPageDataPrefetchQueue();
925
988
  }
926
989
 
927
990
  function prefetchEligibleRouteLinks(limit) {
@@ -1 +1 @@
1
- {"version":3,"file":"remote-tools.d.ts","sourceRoot":"","sources":["../../../src/src/integrations/remote-tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAYH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAsBvD,KAAK,qCAAqC,GAAG;IAC3C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAwKF;;;;;;;GAOG;AACH,wBAAsB,mCAAmC,IAAI,OAAO,CAClE,cAAc,EAAE,CACjB,CAwBA;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEjE;AAED;;;GAGG;AACH,wBAAsB,4BAA4B,CAChD,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,OAAO,CAAC,EAAE,qCAAqC,GAC9C,OAAO,CAAC,OAAO,CAAC,CA4BlB"}
1
+ {"version":3,"file":"remote-tools.d.ts","sourceRoot":"","sources":["../../../src/src/integrations/remote-tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAYH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAsBvD,KAAK,qCAAqC,GAAG;IAC3C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AA2KF;;;;;;;GAOG;AACH,wBAAsB,mCAAmC,IAAI,OAAO,CAClE,cAAc,EAAE,CACjB,CAwBA;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEjE;AAED;;;GAGG;AACH,wBAAsB,4BAA4B,CAChD,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,OAAO,CAAC,EAAE,qCAAqC,GAC9C,OAAO,CAAC,OAAO,CAAC,CA4BlB"}
@@ -45,8 +45,11 @@ function normalizeProjectSlug(projectSlug) {
45
45
  return normalized || undefined;
46
46
  }
47
47
  function resolveRequestProjectSlug() {
48
- const requestProjectSlug = normalizeProjectSlug(getCurrentRequestContext()?.projectSlug);
49
- return requestProjectSlug ?? normalizeProjectSlug(getEnvironmentConfig().projectSlug);
48
+ const requestContext = getCurrentRequestContext();
49
+ if (requestContext) {
50
+ return normalizeProjectSlug(requestContext.projectSlug);
51
+ }
52
+ return normalizeProjectSlug(getEnvironmentConfig().projectSlug);
50
53
  }
51
54
  // ---------------------------------------------------------------------------
52
55
  // API communication
@@ -1 +1 @@
1
- {"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../../../../src/src/rendering/orchestrator/pipeline.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAUH,OAAO,EAIL,KAAK,iBAAiB,EACvB,MAAM,iCAAiC,CAAC;AASzC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAE7D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AA4DhF,OAAO,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAE1D;;;;GAIG;AACH,MAAM,WAAW,wBAAwB;IACvC,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;IACxE,aAAa,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACrF;AAED,MAAM,WAAW,oBAAoB;IACnC,YAAY,EAAE,YAAY,CAAC;IAC3B,gBAAgB,EAAE,wBAAwB,CAAC;IAC3C,YAAY,EAAE,YAAY,CAAC;IAC3B,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,eAAe,EAAE,eAAe,CAAC;IACjC,OAAO,EAAE,cAAc,CAAC;IACxB,IAAI,EAAE,aAAa,GAAG,YAAY,CAAC;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,yEAAyE;IACzE,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,yEAAyE;IACzE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2EAA2E;IAC3E,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,wEAAwE;IACxE,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,6CAA6C;IAC7C,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAChC,8EAA8E;IAC9E,iBAAiB,CAAC,EAAE,OAAO,qBAAqB,EAAE,sBAAsB,CAAC;CAC1E;AA0BD,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,kBAAkB,CAAqB;IAC/C,OAAO,CAAC,mBAAmB,CAAgC;gBAE/C,MAAM,EAAE,oBAAoB;IAcxC,OAAO,CAAC,eAAe;IAQvB,OAAO,CAAC,oBAAoB;IA0B5B;;;;OAIG;YACW,yBAAyB;IAWvC;;;OAGG;IACH,gBAAgB,IAAI,IAAI;IAKxB,OAAO,CAAC,UAAU;YAOJ,0BAA0B;IAaxC;;;;;;;;;OASG;YACW,qBAAqB;IA6EnC;;;OAGG;YACW,mBAAmB;IAoHjC,OAAO,CAAC,uBAAuB;IAkCzB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;IAyT9E,+EAA+E;IACzE,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,gBAAgB,CAAC;YAsHzE,kBAAkB;YA2ClB,cAAc;IAW5B,OAAO,CAAC,uBAAuB;YAYjB,kBAAkB;IAyFhC,OAAO,CAAC,kBAAkB;YAQZ,uBAAuB;IAmBrC;;;;;;OAMG;IACH,OAAO,CAAC,aAAa;CAStB"}
1
+ {"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../../../../src/src/rendering/orchestrator/pipeline.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAUH,OAAO,EAIL,KAAK,iBAAiB,EACvB,MAAM,iCAAiC,CAAC;AASzC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAE7D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AA4DhF,OAAO,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAE1D;;;;GAIG;AACH,MAAM,WAAW,wBAAwB;IACvC,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;IACxE,aAAa,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACrF;AAED,MAAM,WAAW,oBAAoB;IACnC,YAAY,EAAE,YAAY,CAAC;IAC3B,gBAAgB,EAAE,wBAAwB,CAAC;IAC3C,YAAY,EAAE,YAAY,CAAC;IAC3B,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,eAAe,EAAE,eAAe,CAAC;IACjC,OAAO,EAAE,cAAc,CAAC;IACxB,IAAI,EAAE,aAAa,GAAG,YAAY,CAAC;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,yEAAyE;IACzE,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,yEAAyE;IACzE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2EAA2E;IAC3E,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,wEAAwE;IACxE,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,6CAA6C;IAC7C,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAChC,8EAA8E;IAC9E,iBAAiB,CAAC,EAAE,OAAO,qBAAqB,EAAE,sBAAsB,CAAC;CAC1E;AAqCD,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,kBAAkB,CAAqB;IAC/C,OAAO,CAAC,mBAAmB,CAAgC;gBAE/C,MAAM,EAAE,oBAAoB;IAcxC,OAAO,CAAC,eAAe;IAQvB,OAAO,CAAC,oBAAoB;IA0B5B;;;;OAIG;YACW,yBAAyB;IAWvC;;;OAGG;IACH,gBAAgB,IAAI,IAAI;IAKxB,OAAO,CAAC,UAAU;YAOJ,0BAA0B;IAaxC;;;;;;;;;OASG;YACW,qBAAqB;IA6EnC;;;OAGG;YACW,mBAAmB;IAoHjC,OAAO,CAAC,uBAAuB;IAkCzB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;IAqU9E,+EAA+E;IACzE,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,gBAAgB,CAAC;YAsHzE,kBAAkB;YA2ClB,cAAc;IAW5B,OAAO,CAAC,uBAAuB;YAYjB,kBAAkB;IA6FhC,OAAO,CAAC,kBAAkB;YAQZ,uBAAuB;IAmBrC;;;;;;OAMG;IACH,OAAO,CAAC,aAAa;CAStB"}
@@ -51,6 +51,11 @@ const renderPipelineLog = logger.component("render-pipeline");
51
51
  const resolvePageDataLog = logger.component("resolve-page-data");
52
52
  // Re-export test helper for backward compatibility
53
53
  export { __injectCssCacheForTests } from "./css-cache.js";
54
+ const PRE_RESOLVED_DATA = Symbol("veryfront.preResolvedData");
55
+ function stripInternalRenderOptions(options) {
56
+ const { [PRE_RESOLVED_DATA]: _preResolvedData, ...publicOptions } = options;
57
+ return publicOptions;
58
+ }
54
59
  export class RenderPipeline {
55
60
  config;
56
61
  dataFetcher;
@@ -336,7 +341,18 @@ export class RenderPipeline {
336
341
  : {};
337
342
  let layoutDataMap = new Map();
338
343
  const dataFetchStart = performance.now();
339
- if (options?.url && (options.request || options.staticDataOnly)) {
344
+ const internalPreResolvedData = options?.[PRE_RESOLVED_DATA];
345
+ const renderInputOptions = internalPreResolvedData && options
346
+ ? stripInternalRenderOptions(options)
347
+ : options;
348
+ if (internalPreResolvedData) {
349
+ resolvedParams = internalPreResolvedData.params;
350
+ dataFetchingProps = Object.keys(internalPreResolvedData.pageProps).length > 0
351
+ ? internalPreResolvedData.pageProps
352
+ : undefined;
353
+ layoutDataMap = internalPreResolvedData.layoutProps;
354
+ }
355
+ else if (options?.url && (options.request || options.staticDataOnly)) {
340
356
  await profilePhase("render.data_fetching", () => withSpan("render.data_fetching", async () => {
341
357
  try {
342
358
  const dataResolution = await this.resolveDataFetching(slug, pageInfo.entity.path, layoutResult.nestedLayouts, options);
@@ -361,13 +377,13 @@ export class RenderPipeline {
361
377
  const hasResolvedParams = Object.keys(resolvedParams).length > 0;
362
378
  const mergedOptions = (dataFetchingProps || hasResolvedParams)
363
379
  ? {
364
- ...options,
380
+ ...renderInputOptions,
365
381
  ...(hasResolvedParams ? { params: resolvedParams } : {}),
366
382
  ...(dataFetchingProps
367
- ? { props: { ...options?.props, ...dataFetchingProps } }
383
+ ? { props: { ...renderInputOptions?.props, ...dataFetchingProps } }
368
384
  : {}),
369
385
  }
370
- : options;
386
+ : renderInputOptions;
371
387
  const bundlePrepStart = performance.now();
372
388
  const pageBundleResult = await profilePhase("render.prepare_bundles", () => withSpan("render.prepare_bundles", () => this.config.pageRenderer.preparePageBundles(pageInfo, slug, cacheResult?.cachedModule, mergedOptions), { "render.slug": slug }));
373
389
  timing.bundlePrep = Math.round(performance.now() - bundlePrepStart);
@@ -512,7 +528,7 @@ export class RenderPipeline {
512
528
  const appPath = pageIslandPlan
513
529
  ? undefined
514
530
  : await profilePhase("page_data.resolve_app_path", () => this.resolveAppPath());
515
- const { css, cssAction, cssError } = await profilePhase("page_data.resolve_css", () => this.resolvePageDataCss(slug, options, projectUpdatedAt));
531
+ const { css, cssAction, cssError } = await profilePhase("page_data.resolve_css", () => this.resolvePageDataCss(slug, options, projectUpdatedAt, dataResolution));
516
532
  resolvePageDataLog.debug("Resolved page data", {
517
533
  slug,
518
534
  pagePath,
@@ -593,7 +609,7 @@ export class RenderPipeline {
593
609
  const wrappedAdapter = fs.getUnderlyingAdapter();
594
610
  return wrappedAdapter.getProjectData?.()?.updated_at;
595
611
  }
596
- async resolvePageDataCss(slug, options, projectUpdatedAt) {
612
+ async resolvePageDataCss(slug, options, projectUpdatedAt, dataResolution) {
597
613
  if (this.hasReadyReleaseCss(options)) {
598
614
  return { css: undefined, cssAction: "clear", cssError: undefined };
599
615
  }
@@ -604,12 +620,14 @@ export class RenderPipeline {
604
620
  return { css: cachedCss, cssAction: undefined, cssError: undefined };
605
621
  }
606
622
  try {
607
- const renderResult = await profilePhase("page_data.css.render_html", () => withTimeout(this.renderPage(slug, {
623
+ const cssRenderOptions = {
608
624
  ...options,
609
625
  delivery: "string",
610
626
  skipCacheCheck: true,
611
627
  skipCachePersist: true,
612
- }), CSS_SSR_TIMEOUT_MS, `CSS SSR for ${slug}`));
628
+ [PRE_RESOLVED_DATA]: dataResolution,
629
+ };
630
+ const renderResult = await profilePhase("page_data.css.render_html", () => withTimeout(this.renderPage(slug, cssRenderOptions), CSS_SSR_TIMEOUT_MS, `CSS SSR for ${slug}`));
613
631
  if (!renderResult?.html) {
614
632
  return { css: undefined, cssAction: undefined, cssError: undefined };
615
633
  }
@@ -261,5 +261,5 @@ async function loadScriptModule(modulePath, projectDir, adapter) {
261
261
  const resolveDir = dirname(normalizedPath) || projectDir;
262
262
  const transpiled = await transpileWithEsbuild(source, modulePath, resolveDir);
263
263
  logger.debug(`Transpiled ${modulePath}`);
264
- return importFromTempFile(fs, rewriteNpmImports(transpiled));
264
+ return importFromTempFile(fs, rewriteNpmImports(transpiled, projectDir));
265
265
  }
@@ -419,7 +419,7 @@ export async function rewriteExternalImports(code, projectDir, fs, userDeps = ne
419
419
  }
420
420
  }
421
421
  if (isDeno) {
422
- transformed = rewriteNpmImports(transformed);
422
+ transformed = rewriteNpmImports(transformed, projectDir);
423
423
  transformed = rewriteDenoNodeBuiltinImports(transformed);
424
424
  // Rewrite user-installed npm dependencies.
425
425
  // In non-compiled Deno: use npm: specifiers (resolved by Deno's npm support).
@@ -99,6 +99,7 @@ export declare class LazySandbox {
99
99
  private waitForExecStartRetry;
100
100
  private reprovisionAfterExecStartFailure;
101
101
  private resolveRuntimeEndpointFor;
102
+ private shouldUseInternalDataPlane;
102
103
  private resolveDataPlaneRoute;
103
104
  private requireSessionId;
104
105
  private authHeaders;
@@ -1 +1 @@
1
- {"version":3,"file":"lazy-sandbox.d.ts","sourceRoot":"","sources":["../../../src/src/sandbox/lazy-sandbox.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"lazy-sandbox.d.ts","sourceRoot":"","sources":["../../../src/src/sandbox/lazy-sandbox.ts"],"names":[],"mappings":"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"}
@@ -422,7 +422,9 @@ export class LazySandbox {
422
422
  const readySession = session.status === "running"
423
423
  ? session
424
424
  : await this.waitForReadySession(session.id);
425
- await this.waitForRuntimeDataPlaneReady(readySession);
425
+ if (this.shouldUseInternalDataPlane(readySession.endpoint, readySession.id)) {
426
+ await this.waitForRuntimeDataPlaneReady(readySession);
427
+ }
426
428
  return readySession.endpoint;
427
429
  }
428
430
  async attachExistingSession(sessionId) {
@@ -653,14 +655,28 @@ export class LazySandbox {
653
655
  return this.resolveRuntimeEndpointOption?.({ endpoint, sessionId }) ??
654
656
  resolveDefaultSandboxRuntimeEndpoint({ endpoint });
655
657
  }
658
+ shouldUseInternalDataPlane(endpoint, sessionId) {
659
+ if (!this.resolveRuntimeEndpointOption) {
660
+ return false;
661
+ }
662
+ const runtimeEndpoint = this.resolveRuntimeEndpointFor(endpoint, sessionId);
663
+ return normalizeDataPlaneBaseUrl(runtimeEndpoint) !== normalizeDataPlaneBaseUrl(endpoint);
664
+ }
656
665
  resolveDataPlaneRoute() {
657
666
  const endpoint = this.requireEndpoint();
658
667
  const sessionId = this.requireSessionId();
668
+ if (!this.resolveRuntimeEndpointOption) {
669
+ return {
670
+ baseUrl: sandboxSessionRoute(this.apiUrl, sessionId),
671
+ kind: "proxy",
672
+ };
673
+ }
659
674
  const runtimeEndpoint = this.resolveRuntimeEndpointFor(endpoint, sessionId);
660
- const normalizedEndpoint = normalizeDataPlaneBaseUrl(endpoint);
661
- const normalizedRuntimeEndpoint = normalizeDataPlaneBaseUrl(runtimeEndpoint);
662
- if (normalizedRuntimeEndpoint !== normalizedEndpoint) {
663
- return { baseUrl: normalizedRuntimeEndpoint, kind: "internal" };
675
+ if (normalizeDataPlaneBaseUrl(runtimeEndpoint) !== normalizeDataPlaneBaseUrl(endpoint)) {
676
+ return {
677
+ baseUrl: normalizeDataPlaneBaseUrl(runtimeEndpoint),
678
+ kind: "internal",
679
+ };
664
680
  }
665
681
  return {
666
682
  baseUrl: sandboxSessionRoute(this.apiUrl, sessionId),
@@ -1 +1 @@
1
- {"version":3,"file":"page-data-endpoint-handler.d.ts","sourceRoot":"","sources":["../../../../../../src/src/server/handlers/request/module/page-data-endpoint-handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAEpE,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AA8EhE,wBAAgB,oCAAoC,IAAI,IAAI,CAE3D;AAED,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,OAAO,EACZ,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,cAAc,EACnB,qBAAqB,EAAE,CAAC,GAAG,EAAE,cAAc,KAAK,eAAe,EAC/D,OAAO,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,aAAa,EAC9C,eAAe,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,MAAM,GAC1C,OAAO,CAAC,aAAa,CAAC,CA6GxB"}
1
+ {"version":3,"file":"page-data-endpoint-handler.d.ts","sourceRoot":"","sources":["../../../../../../src/src/server/handlers/request/module/page-data-endpoint-handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAEpE,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AA8EhE,wBAAgB,oCAAoC,IAAI,IAAI,CAE3D;AAED,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,OAAO,EACZ,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,cAAc,EACnB,qBAAqB,EAAE,CAAC,GAAG,EAAE,cAAc,KAAK,eAAe,EAC/D,OAAO,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,aAAa,EAC9C,eAAe,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,MAAM,GAC1C,OAAO,CAAC,aAAa,CAAC,CAgHxB"}
@@ -58,9 +58,12 @@ export function handlePageDataEndpoint(req, pathname, ctx, createResponseBuilder
58
58
  .replace(/\.json$/, "") || "";
59
59
  const url = new URL(req.url);
60
60
  const renderer = await getRendererForProject(ctx);
61
- const cacheKey = !isPageDataCacheEnabled() || requestHasCacheSensitiveState(req)
62
- ? null
63
- : buildPageDataCacheKey(ctx, slug, url);
61
+ const isSpeculativePrefetch = req.headers.get("x-veryfront-prefetch") === "1";
62
+ // The request reaches server-data hooks, so prefetch work cannot safely
63
+ // populate or join the foreground response cache/singleflight.
64
+ const canUsePageDataCache = isPageDataCacheEnabled() &&
65
+ !requestHasCacheSensitiveState(req) && !isSpeculativePrefetch;
66
+ const cacheKey = canUsePageDataCache ? buildPageDataCacheKey(ctx, slug, url) : null;
64
67
  const cachePolicy = cacheKey ? getPageDataCachePolicy(ctx) : null;
65
68
  const payload = cacheKey
66
69
  ? await resolveCachedPageData(cacheKey, () => withTimeoutThrow(renderer.resolvePageData(slug, { request: req, url }), PAGE_DATA_TIMEOUT_MS, `resolvePageData for ${slug}`), cachePolicy)
@@ -10,15 +10,15 @@ interface RewriteRule {
10
10
  declare function buildRules(importMap: Record<string, string>): RewriteRule[];
11
11
  /**
12
12
  * Returns rewrite rules derived from deno.json's import map.
13
- * Rules are cached after first call.
13
+ * Rules are cached per resolved project directory.
14
14
  */
15
- export declare function getNpmRewriteRules(): RewriteRule[];
15
+ export declare function getNpmRewriteRules(baseDir?: string): RewriteRule[];
16
16
  /**
17
17
  * Apply npm import rewrites to source code.
18
18
  * Rewrites bare specifiers to pinned npm: versions from deno.json.
19
19
  * No-op on Node.js where bare specifiers resolve via node_modules.
20
20
  */
21
- export declare function rewriteNpmImports(source: string): string;
21
+ export declare function rewriteNpmImports(source: string, baseDir?: string): string;
22
22
  /** Exported for testing */
23
23
  export { buildRules, REWRITABLE_PACKAGES };
24
24
  /** @internal Reset cached rules — only for testing */
@@ -1 +1 @@
1
- {"version":3,"file":"npm-import-rewrites.d.ts","sourceRoot":"","sources":["../../../src/src/transforms/npm-import-rewrites.ts"],"names":[],"mappings":"AAgBA;;;GAGG;AACH,QAAA,MAAM,mBAAmB,aAAc,CAAC;AAExC,UAAU,WAAW;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;CACrB;AAQD,iBAAS,UAAU,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,WAAW,EAAE,CA6BpE;AAcD;;;GAGG;AACH,wBAAgB,kBAAkB,IAAI,WAAW,EAAE,CAKlD;AAID;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAOxD;AAED,2BAA2B;AAC3B,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,CAAC;AAE3C,sDAAsD;AACtD,wBAAgB,WAAW,IAAI,IAAI,CAElC"}
1
+ {"version":3,"file":"npm-import-rewrites.d.ts","sourceRoot":"","sources":["../../../src/src/transforms/npm-import-rewrites.ts"],"names":[],"mappings":"AAgBA;;;GAGG;AACH,QAAA,MAAM,mBAAmB,aAAc,CAAC;AAExC,UAAU,WAAW;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;CACrB;AAQD,iBAAS,UAAU,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,WAAW,EAAE,CA6BpE;AAyBD;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,GAAE,MAAc,GAAG,WAAW,EAAE,CASzE;AAID;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,MAAc,GAAG,MAAM,CAOjF;AAED,2BAA2B;AAC3B,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,CAAC;AAE3C,sDAAsD;AACtD,wBAAgB,WAAW,IAAI,IAAI,CAElC"}