veryfront 0.1.833 → 0.1.835

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 (28) hide show
  1. package/esm/deno.js +1 -1
  2. package/esm/src/html/hydration-script-builder/hydration-data-generator.d.ts.map +1 -1
  3. package/esm/src/html/hydration-script-builder/hydration-data-generator.js +1 -0
  4. package/esm/src/html/hydration-script-builder/templates/loader.d.ts.map +1 -1
  5. package/esm/src/html/hydration-script-builder/templates/loader.js +17 -0
  6. package/esm/src/html/hydration-script-builder/templates/renderer.d.ts.map +1 -1
  7. package/esm/src/html/hydration-script-builder/templates/renderer.js +3 -0
  8. package/esm/src/html/hydration-script-builder/templates/router.d.ts.map +1 -1
  9. package/esm/src/html/hydration-script-builder/templates/router.js +6 -0
  10. package/esm/src/html/hydration-script-builder/templates/spa-renderer.d.ts.map +1 -1
  11. package/esm/src/html/hydration-script-builder/templates/spa-renderer.js +3 -0
  12. package/esm/src/html/hydration-script-builder/types.d.ts +2 -0
  13. package/esm/src/html/hydration-script-builder/types.d.ts.map +1 -1
  14. package/esm/src/modules/server/module-response-cache.d.ts +27 -0
  15. package/esm/src/modules/server/module-response-cache.d.ts.map +1 -0
  16. package/esm/src/modules/server/module-response-cache.js +105 -0
  17. package/esm/src/modules/server/module-server.d.ts.map +1 -1
  18. package/esm/src/modules/server/module-server.js +56 -5
  19. package/esm/src/release-assets/module-consumption.d.ts +8 -0
  20. package/esm/src/release-assets/module-consumption.d.ts.map +1 -1
  21. package/esm/src/release-assets/module-consumption.js +16 -2
  22. package/esm/src/rendering/orchestrator/pipeline.d.ts.map +1 -1
  23. package/esm/src/rendering/orchestrator/pipeline.js +1 -0
  24. package/esm/src/rendering/orchestrator/types.d.ts +2 -0
  25. package/esm/src/rendering/orchestrator/types.d.ts.map +1 -1
  26. package/esm/src/utils/version-constant.d.ts +1 -1
  27. package/esm/src/utils/version-constant.js +1 -1
  28. package/package.json +1 -1
package/esm/deno.js CHANGED
@@ -1,6 +1,6 @@
1
1
  export default {
2
2
  "name": "veryfront",
3
- "version": "0.1.833",
3
+ "version": "0.1.835",
4
4
  "license": "Apache-2.0",
5
5
  "nodeModulesDir": "auto",
6
6
  "minimumDependencyAge": {
@@ -1 +1 @@
1
- {"version":3,"file":"hydration-data-generator.d.ts","sourceRoot":"","sources":["../../../../src/src/html/hydration-script-builder/hydration-data-generator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAM3D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,yCAAyC,CAAC;AACpF,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AA8BzD,KAAK,gBAAgB,GAAG,qBAAqB,GAAG;IAC9C,oBAAoB,CAAC,EAAE,oBAAoB,GAAG,IAAI,CAAC;CACpD,CAAC;AAEF,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,EACzC,KAAK,EAAE,cAAc,EACrB,OAAO,EAAE,gBAAgB,EACzB,gBAAgB,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,GACtC,MAAM,CAiDR"}
1
+ {"version":3,"file":"hydration-data-generator.d.ts","sourceRoot":"","sources":["../../../../src/src/html/hydration-script-builder/hydration-data-generator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAM3D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,yCAAyC,CAAC;AACpF,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AA8BzD,KAAK,gBAAgB,GAAG,qBAAqB,GAAG;IAC9C,oBAAoB,CAAC,EAAE,oBAAoB,GAAG,IAAI,CAAC;CACpD,CAAC;AAEF,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,EACzC,KAAK,EAAE,cAAc,EACrB,OAAO,EAAE,gBAAgB,EACzB,gBAAgB,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,GACtC,MAAM,CAkDR"}
@@ -52,6 +52,7 @@ export function generateHydrationData(slug, params, props, options, serializeOpt
52
52
  isLocalProject: options.isLocalProject,
53
53
  environment: options.environment,
54
54
  }),
55
+ releaseId: options.releaseId,
55
56
  releaseAssetModules: buildReleaseAssetModules(options.releaseAssetManifest),
56
57
  frontmatter: options.frontmatter,
57
58
  layoutProps: options.layoutProps,
@@ -1 +1 @@
1
- {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../../../../src/src/html/hydration-script-builder/templates/loader.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,eAAe,QAAO,MA8IlC,CAAC"}
1
+ {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../../../../src/src/html/hydration-script-builder/templates/loader.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,eAAe,QAAO,MA8JlC,CAAC"}
@@ -1,6 +1,8 @@
1
+ import { VERSION } from "../../../utils/version.js";
1
2
  export const getLoaderScript = () => `
2
3
  // Note: DEBUG, log, logError are defined in router.ts which loads first
3
4
 
5
+ const VERYFRONT_RUNTIME_VERSION = '${VERSION}';
4
6
  const componentCache = new Map();
5
7
  const loadingPromises = new Map();
6
8
 
@@ -22,6 +24,20 @@ export const getLoaderScript = () => `
22
24
  return url + (url.includes('?') ? '&' : '?') + key + '=' + value;
23
25
  }
24
26
 
27
+ let __releaseId = null;
28
+ function setReleaseId(value) {
29
+ __releaseId = typeof value === 'string' && value ? value : null;
30
+ window.__veryfrontReleaseId = __releaseId;
31
+ }
32
+ window.__veryfrontSetReleaseId = setReleaseId;
33
+
34
+ function appendReleaseModuleVersion(url) {
35
+ if (!__releaseId || url.includes('vf_release=')) return url;
36
+ let versionedUrl = appendQueryParam(url, 'vf_release', encodeURIComponent(__releaseId));
37
+ versionedUrl = appendQueryParam(versionedUrl, 'vf_runtime', encodeURIComponent(VERYFRONT_RUNTIME_VERSION));
38
+ return versionedUrl;
39
+ }
40
+
25
41
  let __releaseAssetModules = null;
26
42
  function setReleaseAssetModules(value) {
27
43
  __releaseAssetModules =
@@ -76,6 +92,7 @@ export const getLoaderScript = () => `
76
92
 
77
93
  if (studioEmbed) url = appendQueryParam(url, 'studio_embed', 'true');
78
94
  if (__hmrRefreshTimestamp) url = appendQueryParam(url, 't', __hmrRefreshTimestamp);
95
+ if (!studioEmbed && !__hmrRefreshTimestamp) url = appendReleaseModuleVersion(url);
79
96
 
80
97
  return url;
81
98
  }
@@ -1 +1 @@
1
- {"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../../../../../src/src/html/hydration-script-builder/templates/renderer.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,iBAAiB,cAqN7B,CAAC"}
1
+ {"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../../../../../src/src/html/hydration-script-builder/templates/renderer.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,iBAAiB,cAwN7B,CAAC"}
@@ -33,6 +33,9 @@ export const getRendererScript = () => `
33
33
  if (data.studioEmbed && window.__veryfrontSetStudioEmbed) {
34
34
  window.__veryfrontSetStudioEmbed(true);
35
35
  }
36
+ if (window.__veryfrontSetReleaseId) {
37
+ window.__veryfrontSetReleaseId(data.releaseId || null);
38
+ }
36
39
  if (data.releaseAssetModules && window.__veryfrontSetReleaseAssetModules) {
37
40
  window.__veryfrontSetReleaseAssetModules(data.releaseAssetModules);
38
41
  }
@@ -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,cA6zB3B,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,cAm0B3B,CAAC"}
@@ -502,6 +502,9 @@ export const getRouterScript = () => `
502
502
  // Render page from page data
503
503
  // ============================================
504
504
  async function renderPageFromData(pageData, targetPath) {
505
+ if (window.__veryfrontSetReleaseId) {
506
+ window.__veryfrontSetReleaseId(pageData.releaseId || null);
507
+ }
505
508
  if (window.__veryfrontSetReleaseAssetModules) {
506
509
  window.__veryfrontSetReleaseAssetModules(pageData.releaseAssetModules || null);
507
510
  }
@@ -633,6 +636,9 @@ export const getRouterScript = () => `
633
636
 
634
637
  async function preloadModulesForPageData(pageData, path) {
635
638
  if (!pageData) return;
639
+ if (pageData.releaseId && window.__veryfrontSetReleaseId) {
640
+ window.__veryfrontSetReleaseId(pageData.releaseId);
641
+ }
636
642
  if (pageData.releaseAssetModules && window.__veryfrontSetReleaseAssetModules) {
637
643
  window.__veryfrontSetReleaseAssetModules(pageData.releaseAssetModules);
638
644
  }
@@ -1 +1 @@
1
- {"version":3,"file":"spa-renderer.d.ts","sourceRoot":"","sources":["../../../../../src/src/html/hydration-script-builder/templates/spa-renderer.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,oBAAoB,QAAO,MAmEvC,CAAC;AAEF,eAAO,MAAM,kBAAkB,QAAO,MAoCrC,CAAC"}
1
+ {"version":3,"file":"spa-renderer.d.ts","sourceRoot":"","sources":["../../../../../src/src/html/hydration-script-builder/templates/spa-renderer.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,oBAAoB,QAAO,MAsEvC,CAAC;AAEF,eAAO,MAAM,kBAAkB,QAAO,MAoCrC,CAAC"}
@@ -22,6 +22,9 @@ export const getSpaRendererScript = () => `
22
22
  if (initialData.releaseAssetModules && window.__veryfrontSetReleaseAssetModules) {
23
23
  window.__veryfrontSetReleaseAssetModules(initialData.releaseAssetModules);
24
24
  }
25
+ if (window.__veryfrontSetReleaseId) {
26
+ window.__veryfrontSetReleaseId(initialData.releaseId || null);
27
+ }
25
28
 
26
29
  try {
27
30
  const pageComponent = await loadComponent(initialData.pagePath);
@@ -12,6 +12,8 @@ export interface HydrationDataStructure {
12
12
  pagePath?: string;
13
13
  pageType?: "mdx" | "md" | "tsx" | "jsx" | "ts" | "js";
14
14
  clientModuleStrategy?: ClientModuleStrategy;
15
+ /** Production release id used to version fallback module URLs. */
16
+ releaseId?: string;
15
17
  /** Production release asset URLs keyed by logical source path. */
16
18
  releaseAssetModules?: Record<string, string>;
17
19
  frontmatter?: Record<string, unknown>;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/src/html/hydration-script-builder/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,+CAA+C,CAAC;AAE1F,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,KAAK,GAAG,KAAK,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,CAAC;IAC1C,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,KAAK,GAAG,IAAI,GAAG,IAAI,CAAC;IACtD,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;IAC5C,kEAAkE;IAClE,mBAAmB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7C,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtC,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACtD;;;;OAIG;IACH,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,6DAA6D;IAC7D,QAAQ,CAAC,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC9D,6EAA6E;IAC7E,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/src/html/hydration-script-builder/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,+CAA+C,CAAC;AAE1F,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,KAAK,GAAG,KAAK,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,CAAC;IAC1C,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,KAAK,GAAG,IAAI,GAAG,IAAI,CAAC;IACtD,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;IAC5C,kEAAkE;IAClE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kEAAkE;IAClE,mBAAmB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7C,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtC,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACtD;;;;OAIG;IACH,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,6DAA6D;IAC7D,QAAQ,CAAC,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC9D,6EAA6E;IAC7E,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB"}
@@ -0,0 +1,27 @@
1
+ import type { CacheBackend } from "../../cache/types.js";
2
+ export interface ReleaseModuleResponseCacheEntry {
3
+ body: string;
4
+ status: number;
5
+ headers: Array<[string, string]>;
6
+ }
7
+ export interface ReleaseModuleResponseCacheKeyOptions {
8
+ projectIdentity: string;
9
+ projectDir: string;
10
+ projectSlug?: string | null;
11
+ branch?: string | null;
12
+ releaseId: string;
13
+ runtimeVersion: string;
14
+ reactVersion?: string;
15
+ releaseDependencyManifestVersion?: number | null;
16
+ modulePath: string;
17
+ }
18
+ export interface ReleaseModuleResponseCacheHit {
19
+ entry: ReleaseModuleResponseCacheEntry;
20
+ source: "memory" | "distributed";
21
+ }
22
+ export declare function buildReleaseModuleResponseCacheKey(options: ReleaseModuleResponseCacheKeyOptions): string;
23
+ export declare function getReleaseModuleResponse(cacheKey: string): Promise<ReleaseModuleResponseCacheHit | undefined>;
24
+ export declare function rememberReleaseModuleResponse(cacheKey: string, entry: ReleaseModuleResponseCacheEntry): Promise<void>;
25
+ export declare function clearReleaseModuleResponseCache(): void;
26
+ export declare function __setReleaseModuleResponseDistributedCacheForTests(cache: CacheBackend | null | undefined): void;
27
+ //# sourceMappingURL=module-response-cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"module-response-cache.d.ts","sourceRoot":"","sources":["../../../../src/src/modules/server/module-response-cache.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAQzD,MAAM,WAAW,+BAA+B;IAC9C,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,oCAAoC;IACnD,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gCAAgC,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjD,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,6BAA6B;IAC5C,KAAK,EAAE,+BAA+B,CAAC;IACvC,MAAM,EAAE,QAAQ,GAAG,aAAa,CAAC;CAClC;AAiDD,wBAAgB,kCAAkC,CAChD,OAAO,EAAE,oCAAoC,GAC5C,MAAM,CAmBR;AAED,wBAAsB,wBAAwB,CAC5C,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,6BAA6B,GAAG,SAAS,CAAC,CAqBpD;AAED,wBAAsB,6BAA6B,CACjD,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,+BAA+B,GACrC,OAAO,CAAC,IAAI,CAAC,CAef;AAED,wBAAgB,+BAA+B,IAAI,IAAI,CAEtD;AAED,wBAAgB,kDAAkD,CAChE,KAAK,EAAE,YAAY,GAAG,IAAI,GAAG,SAAS,GACrC,IAAI,CAEN"}
@@ -0,0 +1,105 @@
1
+ import { registerLRUCache } from "../../cache/index.js";
2
+ import { CacheBackends, createDistributedCacheAccessor } from "../../cache/backend.js";
3
+ import { hashString } from "../../cache/hash.js";
4
+ import { LRUCache } from "../../utils/lru-wrapper.js";
5
+ import { TRANSFORM_DISTRIBUTED_TTL_SEC } from "../../utils/constants/cache.js";
6
+ const RELEASE_MODULE_RESPONSE_CACHE_MAX_ENTRIES = 10_000;
7
+ const RELEASE_MODULE_RESPONSE_CACHE_MAX_BYTES = 64 * 1024 * 1024;
8
+ const RELEASE_MODULE_RESPONSE_DISTRIBUTED_TTL_SEC = TRANSFORM_DISTRIBUTED_TTL_SEC;
9
+ const releaseModuleResponseCache = new LRUCache({
10
+ maxEntries: RELEASE_MODULE_RESPONSE_CACHE_MAX_ENTRIES,
11
+ maxSizeBytes: RELEASE_MODULE_RESPONSE_CACHE_MAX_BYTES,
12
+ });
13
+ registerLRUCache("module-server-release-response-cache", releaseModuleResponseCache);
14
+ const getDistributedModuleResponseCache = createDistributedCacheAccessor(() => CacheBackends.module(), "MODULE-RESPONSE-CACHE");
15
+ let injectedDistributedCache;
16
+ function parseDistributedEntry(raw) {
17
+ try {
18
+ const parsed = JSON.parse(raw);
19
+ if (typeof parsed.body !== "string")
20
+ return null;
21
+ if (typeof parsed.status !== "number")
22
+ return null;
23
+ if (!Array.isArray(parsed.headers) ||
24
+ !parsed.headers.every((entry) => Array.isArray(entry) &&
25
+ entry.length === 2 &&
26
+ typeof entry[0] === "string" &&
27
+ typeof entry[1] === "string"))
28
+ return null;
29
+ return {
30
+ body: parsed.body,
31
+ status: parsed.status,
32
+ headers: parsed.headers,
33
+ };
34
+ }
35
+ catch {
36
+ return null;
37
+ }
38
+ }
39
+ async function getDistributedCache() {
40
+ const cache = injectedDistributedCache !== undefined
41
+ ? injectedDistributedCache
42
+ : await getDistributedModuleResponseCache();
43
+ if (!cache)
44
+ return null;
45
+ return cache.type === "api" || cache.type === "redis" ? cache : null;
46
+ }
47
+ export function buildReleaseModuleResponseCacheKey(options) {
48
+ const projectScope = [
49
+ options.projectIdentity,
50
+ options.projectDir,
51
+ options.projectSlug ?? "",
52
+ options.branch ?? "",
53
+ ].join("\0");
54
+ return [
55
+ "module-server-release-response",
56
+ hashString(projectScope),
57
+ options.releaseId,
58
+ options.runtimeVersion,
59
+ options.reactVersion ?? "",
60
+ options.releaseDependencyManifestVersion == null
61
+ ? ""
62
+ : `release-dependency-manifest:${options.releaseDependencyManifestVersion}`,
63
+ options.modulePath,
64
+ ].join("\0");
65
+ }
66
+ export async function getReleaseModuleResponse(cacheKey) {
67
+ const localEntry = releaseModuleResponseCache.get(cacheKey);
68
+ if (localEntry) {
69
+ return { entry: localEntry, source: "memory" };
70
+ }
71
+ const distributedCache = await getDistributedCache();
72
+ if (!distributedCache)
73
+ return undefined;
74
+ try {
75
+ const raw = await distributedCache.get(cacheKey);
76
+ if (!raw)
77
+ return undefined;
78
+ const entry = parseDistributedEntry(raw);
79
+ if (!entry)
80
+ return undefined;
81
+ releaseModuleResponseCache.set(cacheKey, entry);
82
+ return { entry, source: "distributed" };
83
+ }
84
+ catch {
85
+ return undefined;
86
+ }
87
+ }
88
+ export async function rememberReleaseModuleResponse(cacheKey, entry) {
89
+ releaseModuleResponseCache.set(cacheKey, entry);
90
+ const distributedCache = await getDistributedCache();
91
+ if (!distributedCache)
92
+ return;
93
+ try {
94
+ await distributedCache.set(cacheKey, JSON.stringify(entry), RELEASE_MODULE_RESPONSE_DISTRIBUTED_TTL_SEC);
95
+ }
96
+ catch {
97
+ /* best-effort shared cache */
98
+ }
99
+ }
100
+ export function clearReleaseModuleResponseCache() {
101
+ releaseModuleResponseCache.clear();
102
+ }
103
+ export function __setReleaseModuleResponseDistributedCacheForTests(cache) {
104
+ injectedDistributedCache = cache;
105
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"module-server.d.ts","sourceRoot":"","sources":["../../../../src/src/modules/server/module-server.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAG5E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AA6CtE;;;;;;;;;GASG;AACH,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAwDrD,CAAC;AA4DF,MAAM,WAAW,mBAAmB;IAClC,yDAAyD;IACzD,SAAS,EAAE,MAAM,CAAC;IAClB,6BAA6B;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,sBAAsB;IACtB,OAAO,EAAE,cAAc,CAAC;IACxB,uBAAuB;IACvB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,+DAA+D;IAC/D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gFAAgF;IAChF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mDAAmD;IACnD,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,uDAAuD;IACvD,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B;;;OAGG;IACH,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B,yDAAyD;IACzD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,sFAAsF;IACtF,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,sDAAsD;AACtD,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,QAAQ,CAAC,CA+XzF;AAwWD;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAGrD"}
1
+ {"version":3,"file":"module-server.d.ts","sourceRoot":"","sources":["../../../../src/src/modules/server/module-server.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAG5E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAyDtE;;;;;;;;;GASG;AACH,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAwDrD,CAAC;AA6DF,MAAM,WAAW,mBAAmB;IAClC,yDAAyD;IACzD,SAAS,EAAE,MAAM,CAAC;IAClB,6BAA6B;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,sBAAsB;IACtB,OAAO,EAAE,cAAc,CAAC;IACxB,uBAAuB;IACvB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,+DAA+D;IAC/D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gFAAgF;IAChF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mDAAmD;IACnD,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,uDAAuD;IACvD,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B;;;OAGG;IACH,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B,yDAAyD;IACzD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,sFAAsF;IACtF,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,sDAAsD;AACtD,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,QAAQ,CAAC,CAubzF;AAwWD;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAGrD"}
@@ -8,7 +8,7 @@ import { getContentTypeForPath } from "../../server/handlers/utils/content-types
8
8
  import { createSecureFs } from "../../security/index.js";
9
9
  import { getErrorMessage } from "../../errors/veryfront-error.js";
10
10
  import { getApiBaseUrlEnv } from "../../config/env.js";
11
- import { profilePhase } from "../../observability/request-profiler.js";
11
+ import { markRequestProfilePhase, profilePhase, } from "../../observability/request-profiler.js";
12
12
  import { metrics } from "../../observability/simple-metrics/index.js";
13
13
  import { injectContext, withSpan } from "../../observability/tracing/otlp-setup.js";
14
14
  import { injectNodePositions } from "../../transforms/plugins/babel-node-positions.js";
@@ -20,9 +20,10 @@ import { FRAMEWORK_ROOT, resolveFrameworkSourcePath, } from "../../platform/comp
20
20
  import { getReactUrls, REACT_DEFAULT_VERSION } from "../../utils/constants/cdn.js";
21
21
  import { readLimitedCrossProjectSource } from "./cross-project-source-limit.js";
22
22
  import { sha256Short } from "../../cache/hash.js";
23
- import { rewriteReleaseDependencyImportsForModule } from "../../release-assets/module-consumption.js";
23
+ import { getReleaseDependencyRewriteManifestState, rewriteReleaseDependencyImportsForModule, } from "../../release-assets/module-consumption.js";
24
24
  import { RELEASE_ASSET_IMMUTABLE_MAX_AGE_SECONDS, RELEASE_MODULE_RUNTIME_VERSION_PARAM, RELEASE_MODULE_VERSION_PARAM, } from "../../release-assets/constants.js";
25
25
  import { buildSourceMissCacheKey, hasSourceMiss, rememberSourceMiss, } from "./module-source-resolution-cache.js";
26
+ import { buildReleaseModuleResponseCacheKey, getReleaseModuleResponse, rememberReleaseModuleResponse, } from "./module-response-cache.js";
26
27
  import { ensureFilenameDefaultExport } from "../loader-shared/filename-default-export.js";
27
28
  const logger = serverLogger.component("module-server");
28
29
  const PROJECT_FALLBACK_EMBEDDED_POLYFILLS = new Set(["deno"]);
@@ -111,7 +112,9 @@ function appendReleaseModuleVersion(url, releaseId) {
111
112
  return `${url}${separator}${params.toString()}`;
112
113
  }
113
114
  function shouldCacheReleaseVersionedModule(url, options, isSSR) {
114
- if (options.dev || isSSR || !options.releaseId)
115
+ if (options.dev || options.mode === "preview" || isSSR || !options.releaseId)
116
+ return false;
117
+ if (url.searchParams.get("studio_embed") === "true" || url.searchParams.has("t"))
115
118
  return false;
116
119
  return url.searchParams.get(RELEASE_MODULE_VERSION_PARAM) === options.releaseId &&
117
120
  url.searchParams.get(RELEASE_MODULE_RUNTIME_VERSION_PARAM) === VERSION;
@@ -319,6 +322,46 @@ export function serveModule(req, options) {
319
322
  projectSlug = parsedHost.slug;
320
323
  branch ??= parsedHost.branch;
321
324
  }
325
+ const isSSR = isSSRModuleRequest(req, url);
326
+ const canUseReleaseModuleResponseCache = method === "GET" || method === "HEAD";
327
+ const canCacheReleaseVersionedModule = canUseReleaseModuleResponseCache &&
328
+ shouldCacheReleaseVersionedModule(url, options, isSSR);
329
+ let releaseDependencyManifest = null;
330
+ let releaseDependencyManifestVersion = null;
331
+ let releaseDependencyManifestReady = true;
332
+ if (canCacheReleaseVersionedModule) {
333
+ const manifestState = await getReleaseDependencyRewriteManifestState(options.releaseId);
334
+ if (manifestState.enabled) {
335
+ releaseDependencyManifest = manifestState.manifest;
336
+ releaseDependencyManifestVersion = manifestState.manifest?.manifestVersion ?? null;
337
+ releaseDependencyManifestReady = manifestState.manifest !== null;
338
+ }
339
+ }
340
+ const releaseModuleResponseCacheKey = canCacheReleaseVersionedModule &&
341
+ releaseDependencyManifestReady
342
+ ? buildReleaseModuleResponseCacheKey({
343
+ projectIdentity: effectiveProjectId,
344
+ projectDir,
345
+ projectSlug,
346
+ branch,
347
+ releaseId: options.releaseId,
348
+ runtimeVersion: VERSION,
349
+ reactVersion,
350
+ releaseDependencyManifestVersion,
351
+ modulePath,
352
+ })
353
+ : null;
354
+ if (releaseModuleResponseCacheKey) {
355
+ const cachedResponse = await getReleaseModuleResponse(releaseModuleResponseCacheKey);
356
+ if (cachedResponse?.entry) {
357
+ markRequestProfilePhase("module.response_cache_hit");
358
+ if (cachedResponse.source === "distributed") {
359
+ markRequestProfilePhase("module.response_cache_distributed_hit");
360
+ }
361
+ return createModuleResponse(method, cachedResponse.entry.body, cachedResponse.entry.status, Object.fromEntries(cachedResponse.entry.headers));
362
+ }
363
+ markRequestProfilePhase("module.response_cache_miss");
364
+ }
322
365
  try {
323
366
  const findResult = await profilePhase("module.source_lookup", () => findSourceFile(secureFs, projectDir, filePathWithoutExt, {
324
367
  projectId: effectiveProjectId,
@@ -356,7 +399,6 @@ export function serveModule(req, options) {
356
399
  : await secureFs.readFile(sourceFile);
357
400
  }
358
401
  const userAgent = req.headers.get("user-agent") ?? "";
359
- const isSSR = isSSRModuleRequest(req, url);
360
402
  const studioEmbed = url.searchParams.get("studio_embed") === "true";
361
403
  const shouldInjectPositions = dev || options.mode === "preview";
362
404
  const isJsxFile = /\.(tsx|jsx)$/i.test(sourceFile);
@@ -408,18 +450,27 @@ export function serveModule(req, options) {
408
450
  if (!isSSR) {
409
451
  code = await rewriteReleaseDependencyImportsForModule(code, {
410
452
  releaseId: options.releaseId,
453
+ manifest: releaseDependencyManifest ?? undefined,
411
454
  readDependencySource: (path) => platformFs.readTextFile(path),
412
455
  });
413
456
  code = await addReleaseVersionToFallbackImports(code, options.releaseId);
414
457
  }
415
458
  }
416
459
  const headers = getModuleHeaders(modulePath, {
417
- cacheable: shouldCacheReleaseVersionedModule(url, options, isSSRModuleRequest(req, url)),
460
+ cacheable: releaseModuleResponseCacheKey !== null,
418
461
  });
419
462
  logger.debug("Request complete", {
420
463
  path: modulePath,
421
464
  durationMs: (performance.now() - startTime).toFixed(1),
422
465
  });
466
+ if (releaseModuleResponseCacheKey && method === "GET") {
467
+ void rememberReleaseModuleResponse(releaseModuleResponseCacheKey, {
468
+ body: code,
469
+ status: HTTP_OK,
470
+ headers: Object.entries(headers),
471
+ });
472
+ markRequestProfilePhase("module.response_cache_store");
473
+ }
423
474
  return createModuleResponse(method, code, HTTP_OK, headers);
424
475
  }
425
476
  catch (error) {
@@ -8,9 +8,17 @@
8
8
  *
9
9
  * @module release-assets/module-consumption
10
10
  */
11
+ import type { ReleaseAssetManifest } from "./manifest-schema.js";
11
12
  export interface RewriteReleaseDependencyImportsOptions {
12
13
  releaseId?: string | null;
13
14
  readDependencySource: (path: string) => Promise<string>;
15
+ manifest?: ReleaseAssetManifest | null;
14
16
  }
17
+ export interface ReleaseDependencyRewriteManifestState {
18
+ enabled: boolean;
19
+ manifest: ReleaseAssetManifest | null;
20
+ }
21
+ export declare function isReleaseDependencyImportMapRewriteEnabled(): boolean;
22
+ export declare function getReleaseDependencyRewriteManifestState(releaseId: string | null | undefined): Promise<ReleaseDependencyRewriteManifestState>;
15
23
  export declare function rewriteReleaseDependencyImportsForModule(code: string, options: RewriteReleaseDependencyImportsOptions): Promise<string>;
16
24
  //# sourceMappingURL=module-consumption.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"module-consumption.d.ts","sourceRoot":"","sources":["../../../src/src/release-assets/module-consumption.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAUH,MAAM,WAAW,sCAAsC;IACrD,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,oBAAoB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;CACzD;AAmDD,wBAAsB,wCAAwC,CAC5D,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,sCAAsC,GAC9C,OAAO,CAAC,MAAM,CAAC,CA2BjB"}
1
+ {"version":3,"file":"module-consumption.d.ts","sourceRoot":"","sources":["../../../src/src/release-assets/module-consumption.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAQH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAEjE,MAAM,WAAW,sCAAsC;IACrD,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,oBAAoB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACxD,QAAQ,CAAC,EAAE,oBAAoB,GAAG,IAAI,CAAC;CACxC;AAED,MAAM,WAAW,qCAAqC;IACpD,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,oBAAoB,GAAG,IAAI,CAAC;CACvC;AAED,wBAAgB,0CAA0C,IAAI,OAAO,CAEpE;AAED,wBAAsB,wCAAwC,CAC5D,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GACnC,OAAO,CAAC,qCAAqC,CAAC,CAShD;AAmDD,wBAAsB,wCAAwC,CAC5D,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,sCAAsC,GAC9C,OAAO,CAAC,MAAM,CAAC,CA6BjB"}
@@ -14,6 +14,18 @@ import { parseImports, replaceSpecifiers } from "../transforms/esm/lexer.js";
14
14
  import { extractSourceUrl } from "../transforms/esm/source-url-embed.js";
15
15
  import { RELEASE_ASSET_DEPENDENCY_IMPORT_MAP_ENV_FLAG, releaseAssetUrl } from "./constants.js";
16
16
  import { getReadyManifestForRenderAsync } from "./manifest-cache.js";
17
+ export function isReleaseDependencyImportMapRewriteEnabled() {
18
+ return getHostEnv(RELEASE_ASSET_DEPENDENCY_IMPORT_MAP_ENV_FLAG) === "1";
19
+ }
20
+ export async function getReleaseDependencyRewriteManifestState(releaseId) {
21
+ if (!releaseId || !isReleaseDependencyImportMapRewriteEnabled()) {
22
+ return { enabled: false, manifest: null };
23
+ }
24
+ return {
25
+ enabled: true,
26
+ manifest: await getReadyManifestForRenderAsync(releaseId),
27
+ };
28
+ }
17
29
  function dependencyAssetUrl(manifest, specifier) {
18
30
  const direct = manifest.dependencies[specifier] ??
19
31
  manifest.dependencies[specifier.replace(/[?#].*$/, "")];
@@ -63,11 +75,13 @@ async function sourceUrlForLocalHttpBundle(specifier, readDependencySource) {
63
75
  export async function rewriteReleaseDependencyImportsForModule(code, options) {
64
76
  if (!options.releaseId)
65
77
  return code;
66
- if (getHostEnv(RELEASE_ASSET_DEPENDENCY_IMPORT_MAP_ENV_FLAG) !== "1")
78
+ if (!isReleaseDependencyImportMapRewriteEnabled())
67
79
  return code;
68
80
  if (!code.includes("http") && !code.includes("veryfront-http-bundle"))
69
81
  return code;
70
- const manifest = await getReadyManifestForRenderAsync(options.releaseId);
82
+ const manifest = options.manifest !== undefined
83
+ ? options.manifest
84
+ : await getReadyManifestForRenderAsync(options.releaseId);
71
85
  if (!manifest || Object.keys(manifest.dependencies).length === 0)
72
86
  return code;
73
87
  const replacements = new Map();
@@ -1 +1 @@
1
- {"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../../../../src/src/rendering/orchestrator/pipeline.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAwBH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAEtE,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;AA+ChF,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,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;gBAEnC,MAAM,EAAE,oBAAoB;IAaxC;;;OAGG;IACH,gBAAgB,IAAI,IAAI;IAKxB,OAAO,CAAC,UAAU;YAIJ,0BAA0B;IAaxC;;;;;;;;;OASG;YACW,qBAAqB;IAyDnC;;;OAGG;YACW,mBAAmB;IA8GjC,OAAO,CAAC,uBAAuB;IAkCzB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;IAsS9E,+EAA+E;IACzE,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,gBAAgB,CAAC;YAiGzE,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;AAwBH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAEtE,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;AA+ChF,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,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;gBAEnC,MAAM,EAAE,oBAAoB;IAaxC;;;OAGG;IACH,gBAAgB,IAAI,IAAI;IAKxB,OAAO,CAAC,UAAU;YAIJ,0BAA0B;IAaxC;;;;;;;;;OASG;YACW,qBAAqB;IAyDnC;;;OAGG;YACW,mBAAmB;IA8GjC,OAAO,CAAC,uBAAuB;IAkCzB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;IAsS9E,+EAA+E;IACzE,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,gBAAgB,CAAC;YAkGzE,kBAAkB;YA2ClB,cAAc;IAW5B,OAAO,CAAC,uBAAuB;YAYjB,kBAAkB;IAyFhC,OAAO,CAAC,kBAAkB;YAQZ,uBAAuB;IAmBrC;;;;;;OAMG;IACH,OAAO,CAAC,aAAa;CAStB"}
@@ -454,6 +454,7 @@ export class RenderPipeline {
454
454
  layoutProps,
455
455
  buildVersion: createBuildVersion(projectUpdatedAt),
456
456
  appPath,
457
+ releaseId: options?.releaseId,
457
458
  releaseAssetModules: buildReleaseAssetModules(options?.releaseAssetManifest),
458
459
  headings,
459
460
  css,
@@ -81,6 +81,8 @@ export interface PageDataResponse {
81
81
  layoutProps: Record<string, Record<string, unknown>>;
82
82
  buildVersion: BuildVersion;
83
83
  appPath?: string;
84
+ /** Production release id used to version fallback module URLs. */
85
+ releaseId?: string;
84
86
  /** Production release asset URLs keyed by logical source path. */
85
87
  releaseAssetModules?: Record<string, string>;
86
88
  /** Headings extracted from MDX for sidebar/TOC navigation */
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/src/rendering/orchestrator/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/src/rendering/orchestrator/types.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,3 @@
1
1
  /** Shared version value. */
2
- export declare const VERSION = "0.1.833";
2
+ export declare const VERSION = "0.1.835";
3
3
  //# sourceMappingURL=version-constant.d.ts.map
@@ -1,4 +1,4 @@
1
1
  // Keep in sync with deno.json version.
2
2
  // scripts/release.ts updates this constant during releases.
3
3
  /** Shared version value. */
4
- export const VERSION = "0.1.833";
4
+ export const VERSION = "0.1.835";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "veryfront",
3
- "version": "0.1.833",
3
+ "version": "0.1.835",
4
4
  "description": "The simplest way to build AI-powered apps",
5
5
  "keywords": [
6
6
  "react",