veryfront 0.1.782 → 0.1.784

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 (24) hide show
  1. package/esm/deno.js +1 -1
  2. package/esm/src/html/html-shell-generator.js +1 -1
  3. package/esm/src/html/hydration-script-builder/hydration-data-generator.d.ts +6 -1
  4. package/esm/src/html/hydration-script-builder/hydration-data-generator.d.ts.map +1 -1
  5. package/esm/src/html/hydration-script-builder/hydration-data-generator.js +11 -0
  6. package/esm/src/html/hydration-script-builder/templates/loader.d.ts.map +1 -1
  7. package/esm/src/html/hydration-script-builder/templates/loader.js +36 -0
  8. package/esm/src/html/hydration-script-builder/templates/renderer.d.ts.map +1 -1
  9. package/esm/src/html/hydration-script-builder/templates/renderer.js +3 -0
  10. package/esm/src/html/hydration-script-builder/templates/router.d.ts.map +1 -1
  11. package/esm/src/html/hydration-script-builder/templates/router.js +4 -0
  12. package/esm/src/html/hydration-script-builder/templates/spa-renderer.d.ts.map +1 -1
  13. package/esm/src/html/hydration-script-builder/templates/spa-renderer.js +3 -0
  14. package/esm/src/html/hydration-script-builder/types.d.ts +2 -0
  15. package/esm/src/html/hydration-script-builder/types.d.ts.map +1 -1
  16. package/esm/src/html/utils.d.ts.map +1 -1
  17. package/esm/src/html/utils.js +5 -12
  18. package/esm/src/release-assets/build-executor.d.ts.map +1 -1
  19. package/esm/src/release-assets/build-executor.js +57 -11
  20. package/esm/src/release-assets/manifest-schema.d.ts.map +1 -1
  21. package/esm/src/release-assets/manifest-schema.js +3 -2
  22. package/esm/src/utils/version-constant.d.ts +1 -1
  23. package/esm/src/utils/version-constant.js +1 -1
  24. 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.782",
3
+ "version": "0.1.784",
4
4
  "license": "Apache-2.0",
5
5
  "nodeModulesDir": "auto",
6
6
  "minimumDependencyAge": {
@@ -142,7 +142,7 @@ async function generateHTMLShellPartsImpl(meta, options, params, props, contentF
142
142
  pretty: useDevScripts,
143
143
  releaseAssetManifest: releaseManifest,
144
144
  });
145
- const hydrationDataJson = generateHydrationData(meta.slug || "", params ?? {}, props ?? {}, options, { pretty: useDevScripts });
145
+ const hydrationDataJson = generateHydrationData(meta.slug || "", params ?? {}, props ?? {}, { ...options, releaseAssetManifest: releaseManifest }, { pretty: useDevScripts });
146
146
  const nonce = options.nonce ?? "";
147
147
  const modeScripts = useDevScripts
148
148
  ? getDevScripts(meta.slug || "", options.config, params, props, nonce, {
@@ -1,6 +1,11 @@
1
1
  import type { ComponentProps } from "../../types/index.js";
2
+ import type { ReleaseAssetManifest } from "../../release-assets/manifest-schema.js";
2
3
  import type { HTMLGenerationOptions } from "../types.js";
3
- export declare function generateHydrationData(slug: string, params: Record<string, string | string[]>, props: ComponentProps, options: HTMLGenerationOptions, serializeOptions?: {
4
+ type HydrationOptions = HTMLGenerationOptions & {
5
+ releaseAssetManifest?: ReleaseAssetManifest | null;
6
+ };
7
+ export declare function generateHydrationData(slug: string, params: Record<string, string | string[]>, props: ComponentProps, options: HydrationOptions, serializeOptions?: {
4
8
  pretty?: boolean;
5
9
  }): string;
10
+ export {};
6
11
  //# sourceMappingURL=hydration-data-generator.d.ts.map
@@ -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;AAK3D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AA8BzD,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,qBAAqB,EAC9B,gBAAgB,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,GACtC,MAAM,CAgDR"}
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;AAcF,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"}
@@ -2,6 +2,7 @@ import { resolveRelativePath } from "../../modules/react-loader/path-resolver.js
2
2
  import { getExtensionName } from "../../utils/path-utils.js";
3
3
  import { determineClientModuleStrategy } from "../../rendering/rsc/client-module-strategy.js";
4
4
  import { jsonForInlineScript } from "../../security/client/html-sanitizer.js";
5
+ import { releaseAssetUrl } from "../../release-assets/constants.js";
5
6
  function toProjectRelativePath(absolutePath, projectDir) {
6
7
  if (!absolutePath)
7
8
  return "";
@@ -19,6 +20,15 @@ function inferPageType(pagePath) {
19
20
  return undefined;
20
21
  return PAGE_TYPE_EXTENSIONS.has(ext) ? ext : undefined;
21
22
  }
23
+ function buildReleaseAssetModules(manifest) {
24
+ if (!manifest)
25
+ return undefined;
26
+ const modules = {};
27
+ for (const [path, entry] of Object.entries(manifest.modules)) {
28
+ modules[path] = releaseAssetUrl(entry.contentHash, "js");
29
+ }
30
+ return Object.keys(modules).length > 0 ? modules : undefined;
31
+ }
22
32
  export function generateHydrationData(slug, params, props, options, serializeOptions) {
23
33
  const layouts = (options.nestedLayouts ?? [])
24
34
  .map((layout) => {
@@ -51,6 +61,7 @@ export function generateHydrationData(slug, params, props, options, serializeOpt
51
61
  isLocalProject: options.isLocalProject,
52
62
  environment: options.environment,
53
63
  }),
64
+ releaseAssetModules: buildReleaseAssetModules(options.releaseAssetManifest),
54
65
  frontmatter: options.frontmatter,
55
66
  layoutProps: options.layoutProps,
56
67
  // In dev mode, client uses createRoot instead of hydrateRoot to avoid
@@ -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,MA0GlC,CAAC"}
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"}
@@ -22,7 +22,41 @@ export const getLoaderScript = () => `
22
22
  return url + (url.includes('?') ? '&' : '?') + key + '=' + value;
23
23
  }
24
24
 
25
+ let __releaseAssetModules = null;
26
+ function setReleaseAssetModules(value) {
27
+ __releaseAssetModules =
28
+ value && typeof value === 'object' && !Array.isArray(value) ? value : null;
29
+ window.__veryfrontReleaseAssetModules = __releaseAssetModules;
30
+ }
31
+ window.__veryfrontSetReleaseAssetModules = setReleaseAssetModules;
32
+
33
+ function normalizeReleaseAssetModulePath(path) {
34
+ return String(path || '')
35
+ .replace(/^\\/?_vf_modules\\//, '')
36
+ .replace(/^\\/+/, '')
37
+ .replace(/[?#].*$/, '');
38
+ }
39
+
40
+ function resolveReleaseAssetModuleUrl(path) {
41
+ if (!__releaseAssetModules || __studioEmbed || __hmrRefreshTimestamp) return null;
42
+
43
+ const key = normalizeReleaseAssetModulePath(path);
44
+ if (__releaseAssetModules[key]) return __releaseAssetModules[key];
45
+
46
+ const withoutExt = key.replace(/\\.(tsx|ts|jsx|mdx|js|mjs)$/, '');
47
+ const extensions = ['.tsx', '.ts', '.jsx', '.mdx', '.js'];
48
+ for (const ext of extensions) {
49
+ const candidate = withoutExt + ext;
50
+ if (__releaseAssetModules[candidate]) return __releaseAssetModules[candidate];
51
+ }
52
+
53
+ return null;
54
+ }
55
+
25
56
  function pathToModuleUrl(path, studioEmbed) {
57
+ const releaseAssetUrl = resolveReleaseAssetModuleUrl(path);
58
+ if (releaseAssetUrl) return releaseAssetUrl;
59
+
26
60
  const pattern = /(pages|components|app|lib|layouts|shared|features)\\/(.+)\\.(tsx|ts|jsx|mdx)$/;
27
61
 
28
62
  const match =
@@ -49,12 +83,14 @@ export const getLoaderScript = () => `
49
83
  let __studioEmbed = false;
50
84
  function setStudioEmbed(value) {
51
85
  __studioEmbed = value;
86
+ window.__veryfrontStudioEmbed = value;
52
87
  }
53
88
  window.__veryfrontSetStudioEmbed = setStudioEmbed;
54
89
 
55
90
  let __hmrRefreshTimestamp = null;
56
91
  function setHMRRefreshTimestamp(timestamp) {
57
92
  __hmrRefreshTimestamp = timestamp;
93
+ window.__veryfrontHMRRefreshTimestamp = timestamp;
58
94
  }
59
95
  window.__veryfrontSetHMRRefreshTimestamp = setHMRRefreshTimestamp;
60
96
 
@@ -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,cAkN7B,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,cAqN7B,CAAC"}
@@ -33,6 +33,9 @@ export const getRendererScript = () => `
33
33
  if (data.studioEmbed && window.__veryfrontSetStudioEmbed) {
34
34
  window.__veryfrontSetStudioEmbed(true);
35
35
  }
36
+ if (data.releaseAssetModules && window.__veryfrontSetReleaseAssetModules) {
37
+ window.__veryfrontSetReleaseAssetModules(data.releaseAssetModules);
38
+ }
36
39
 
37
40
  try {
38
41
  let pageModule;
@@ -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,cA+qB3B,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,cAmrB3B,CAAC"}
@@ -401,6 +401,10 @@ export const getRouterScript = () => `
401
401
  // Render page from page data
402
402
  // ============================================
403
403
  async function renderPageFromData(pageData, targetPath) {
404
+ if (pageData.releaseAssetModules && window.__veryfrontSetReleaseAssetModules) {
405
+ window.__veryfrontSetReleaseAssetModules(pageData.releaseAssetModules);
406
+ }
407
+
404
408
  perfStart('render:loadAll');
405
409
  const layoutPaths = (pageData.layouts || []).map((l) => l.path);
406
410
  const allPaths = [pageData.pagePath, ...layoutPaths];
@@ -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,MAgEvC,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,MAmEvC,CAAC;AAEF,eAAO,MAAM,kBAAkB,QAAO,MAoCrC,CAAC"}
@@ -19,6 +19,9 @@ export const getSpaRendererScript = () => `
19
19
  if (initialData.studioEmbed && window.__veryfrontSetStudioEmbed) {
20
20
  window.__veryfrontSetStudioEmbed(true);
21
21
  }
22
+ if (initialData.releaseAssetModules && window.__veryfrontSetReleaseAssetModules) {
23
+ window.__veryfrontSetReleaseAssetModules(initialData.releaseAssetModules);
24
+ }
22
25
 
23
26
  try {
24
27
  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 asset URLs keyed by logical source path. */
16
+ releaseAssetModules?: Record<string, string>;
15
17
  frontmatter?: Record<string, unknown>;
16
18
  layoutProps?: Record<string, Record<string, unknown>>;
17
19
  /**
@@ -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,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,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 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/src/html/utils.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AAcjF,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,OAAO,EACjB,OAAO,CAAC,EAAE,MAAM,GACf,MAAM,CAQR;AAaD,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,IAAI,EAAE,MAAM,CAAC;CACd;AA4DD,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAGrD,CAAC;AA6JF,UAAU,qBAAqB;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,oBAAoB,CAAC,EAAE,oBAAoB,GAAG,IAAI,CAAC;CACpD;AAmDD,wBAAsB,cAAc,CAClC,OAAO,CAAC,EAAE,qBAAqB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACvD,OAAO,CAAC,cAAc,CAAC,CA8DzB;AAED,wBAAsB,kBAAkB,CACtC,OAAO,CAAC,EAAE,qBAAqB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACvD,OAAO,CAAC,MAAM,CAAC,CAEjB;AAED,wBAAgB,mBAAmB,IAAI,IAAI,CAE1C;AAED,wBAAgB,mBAAmB,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAElF"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/src/html/utils.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AAcjF,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,OAAO,EACjB,OAAO,CAAC,EAAE,MAAM,GACf,MAAM,CAQR;AAaD,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,IAAI,EAAE,MAAM,CAAC;CACd;AA4DD,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAGrD,CAAC;AA6JF,UAAU,qBAAqB;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,oBAAoB,CAAC,EAAE,oBAAoB,GAAG,IAAI,CAAC;CACpD;AA2CD,wBAAsB,cAAc,CAClC,OAAO,CAAC,EAAE,qBAAqB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACvD,OAAO,CAAC,cAAc,CAAC,CA8DzB;AAED,wBAAsB,kBAAkB,CACtC,OAAO,CAAC,EAAE,qBAAqB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACvD,OAAO,CAAC,MAAM,CAAC,CAEjB;AAED,wBAAgB,mBAAmB,IAAI,IAAI,CAE1C;AAED,wBAAgB,mBAAmB,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAElF"}
@@ -196,18 +196,11 @@ function stableManifestDependencyKey(manifest) {
196
196
  })
197
197
  : "";
198
198
  }
199
- function applyManifestDependencies(imports, manifest) {
200
- if (!manifest)
201
- return imports;
202
- let rewritten = null;
203
- for (const specifier of Object.keys(imports)) {
204
- const entry = manifest.dependencies[specifier];
205
- if (!entry || entry.contentType !== "text/javascript")
206
- continue;
207
- rewritten ??= { ...imports };
208
- rewritten[specifier] = `${manifest.assetBasePath}/${entry.contentHash}.js`;
209
- }
210
- return rewritten ?? imports;
199
+ function applyManifestDependencies(imports, _manifest) {
200
+ // Framework dependency assets are recorded for future S7 vendoring, but they
201
+ // are not browser-safe until their own relative import closures are rewritten
202
+ // and uploaded. Keep import-map entries on their existing module URLs.
203
+ return imports;
211
204
  }
212
205
  function isImportMapOnlyOptions(options) {
213
206
  return !("projectDir" in options) &&
@@ -1 +1 @@
1
- {"version":3,"file":"build-executor.d.ts","sourceRoot":"","sources":["../../../src/src/release-assets/build-executor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"build-executor.d.ts","sourceRoot":"","sources":["../../../src/src/release-assets/build-executor.ts"],"names":[],"mappings":"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"}
@@ -162,23 +162,23 @@ function rewriteVfModuleImports(code, moduleAssets, knownPaths, dependencyUrls)
162
162
  return `${quote}${releaseAssetUrl(asset.contentHash, "js")}${quote}`;
163
163
  });
164
164
  }
165
- function buildDependencyUrlMap(dependencies) {
166
- const urls = new Map();
167
- for (const [specifier, moduleUrl] of Object.entries(PLATFORM_UTILITIES)) {
168
- const entry = dependencies[specifier];
169
- if (!entry)
170
- continue;
171
- urls.set(moduleUrl, releaseAssetUrl(entry.contentHash, "js"));
172
- }
173
- return urls;
165
+ function buildDependencyUrlMap(_dependencies) {
166
+ // Framework barrels can contain their own relative import closure. Keep those
167
+ // URLs on the module server until the builder rewrites and uploads the full
168
+ // framework closure, otherwise the browser resolves relatives under /_vf/assets.
169
+ return new Map();
174
170
  }
175
171
  async function finalizeProjectModules(transformedModules, knownPaths, dependencyUrls, uploadQueue, pendingBytes, gaps) {
176
172
  const finalized = new Map();
177
173
  const unresolvedCycles = new Set();
174
+ const cyclicModules = collectCyclicProjectModules(transformedModules, knownPaths, gaps);
175
+ const skippedModules = new Set(cyclicModules);
178
176
  async function finalize(logicalPath, stack) {
179
177
  const existing = finalized.get(logicalPath);
180
178
  if (existing)
181
179
  return existing;
180
+ if (cyclicModules.has(logicalPath))
181
+ return null;
182
182
  if (stack.includes(logicalPath)) {
183
183
  const cycle = [...stack.slice(stack.indexOf(logicalPath)), logicalPath].join("->");
184
184
  const gap = `cycle:${cycle}`;
@@ -204,14 +204,58 @@ async function finalizeProjectModules(transformedModules, knownPaths, dependency
204
204
  return entry;
205
205
  }
206
206
  for (const logicalPath of transformedModules.keys()) {
207
+ if (cyclicModules.has(logicalPath))
208
+ continue;
207
209
  const entry = await finalize(logicalPath, []);
208
210
  if (!entry) {
211
+ skippedModules.add(logicalPath);
209
212
  const gap = `oversized:${logicalPath}`;
210
213
  if (!gaps.includes(gap))
211
214
  gaps.push(gap);
212
215
  }
213
216
  }
214
- return Object.fromEntries(finalized);
217
+ return { modules: Object.fromEntries(finalized), skippedModules };
218
+ }
219
+ function collectCyclicProjectModules(transformedModules, knownPaths, gaps) {
220
+ const cyclic = new Set();
221
+ const visiting = new Set();
222
+ const visited = new Set();
223
+ const stack = [];
224
+ const recordedCycles = new Set();
225
+ function visit(logicalPath) {
226
+ if (visited.has(logicalPath))
227
+ return;
228
+ if (visiting.has(logicalPath)) {
229
+ const index = stack.indexOf(logicalPath);
230
+ if (index < 0)
231
+ return;
232
+ const cycleMembers = stack.slice(index);
233
+ for (const member of cycleMembers)
234
+ cyclic.add(member);
235
+ const gap = `cycle:${[...cycleMembers, logicalPath].join("->")}`;
236
+ if (!recordedCycles.has(gap)) {
237
+ recordedCycles.add(gap);
238
+ gaps.push(gap);
239
+ }
240
+ return;
241
+ }
242
+ const transformed = transformedModules.get(logicalPath);
243
+ if (!transformed)
244
+ return;
245
+ visiting.add(logicalPath);
246
+ stack.push(logicalPath);
247
+ const imports = collectVfModuleImports(transformed.code, knownPaths);
248
+ for (const importedPath of imports.values()) {
249
+ if (transformedModules.has(importedPath))
250
+ visit(importedPath);
251
+ }
252
+ stack.pop();
253
+ visiting.delete(logicalPath);
254
+ visited.add(logicalPath);
255
+ }
256
+ for (const logicalPath of transformedModules.keys())
257
+ visit(logicalPath);
258
+ return cyclic;
215
259
  }
216
260
  async function addPreparedJavaScriptAsset(logicalPath, code, uploadQueue, pendingBytes) {
217
261
  const bytes = new TextEncoder().encode(code);
@@ -404,10 +448,12 @@ async function runBuildInner(input, tempDir, client, transform) {
404
448
  }
405
449
  const dependencies = await buildFrameworkDependencies(input, tempDir, transform, uploadQueue, pendingBytes, gaps);
406
450
  const dependencyUrls = buildDependencyUrlMap(dependencies);
407
- const modules = await finalizeProjectModules(transformedModules, knownPaths, dependencyUrls, uploadQueue, pendingBytes, gaps);
451
+ const { modules, skippedModules } = await finalizeProjectModules(transformedModules, knownPaths, dependencyUrls, uploadQueue, pendingBytes, gaps);
408
452
  for (const logicalPath of transformedModules.keys()) {
409
453
  if (modules[logicalPath])
410
454
  continue;
455
+ if (skippedModules.has(logicalPath))
456
+ continue;
411
457
  logger.warn("Module exceeds max size, skipping", {
412
458
  path: logicalPath,
413
459
  limit: RELEASE_ASSET_MAX_SIZE_BYTES,
@@ -1 +1 @@
1
- {"version":3,"file":"manifest-schema.d.ts","sourceRoot":"","sources":["../../../src/src/release-assets/manifest-schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAmB,MAAM,+BAA+B,CAAC;AAkClF,eAAO,MAAM,6BAA6B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmBzC,CAAC;AAMF,MAAM,MAAM,oBAAoB,GAAG,WAAW,CAC5C,UAAU,CAAC,OAAO,6BAA6B,CAAC,CACjD,CAAC;AACF,MAAM,MAAM,iBAAiB,GAAG,oBAAoB,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC;AACxE,MAAM,MAAM,oBAAoB,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC;AACvE,MAAM,MAAM,sBAAsB,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC;AAE5E,8EAA8E;AAC9E,MAAM,MAAM,yBAAyB,GACjC,QAAQ,GACR,UAAU,GACV,SAAS,GACT,OAAO,GACP,QAAQ,GACR,YAAY,CAAC;AAEjB,0DAA0D;AAC1D,MAAM,WAAW,4BAA4B;IAC3C,KAAK,EAAE,yBAAyB,CAAC;IACjC,gBAAgB,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,oBAAoB,GAAG,IAAI,CAAC;CACvC;AAED;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,OAAO,GAAG,oBAAoB,GAAG,IAAI,CAuBrF"}
1
+ {"version":3,"file":"manifest-schema.d.ts","sourceRoot":"","sources":["../../../src/src/release-assets/manifest-schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAmB,MAAM,+BAA+B,CAAC;AAkClF,eAAO,MAAM,6BAA6B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoBzC,CAAC;AAMF,MAAM,MAAM,oBAAoB,GAAG,WAAW,CAC5C,UAAU,CAAC,OAAO,6BAA6B,CAAC,CACjD,CAAC;AACF,MAAM,MAAM,iBAAiB,GAAG,oBAAoB,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC;AACxE,MAAM,MAAM,oBAAoB,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC;AACvE,MAAM,MAAM,sBAAsB,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC;AAE5E,8EAA8E;AAC9E,MAAM,MAAM,yBAAyB,GACjC,QAAQ,GACR,UAAU,GACV,SAAS,GACT,OAAO,GACP,QAAQ,GACR,YAAY,CAAC;AAEjB,0DAA0D;AAC1D,MAAM,WAAW,4BAA4B;IAC3C,KAAK,EAAE,yBAAyB,CAAC;IACjC,gBAAgB,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,oBAAoB,GAAG,IAAI,CAAC;CACvC;AAED;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,OAAO,GAAG,oBAAoB,GAAG,IAAI,CAuBrF"}
@@ -51,8 +51,9 @@ export const getReleaseAssetManifestSchema = defineSchema((v) => v.object({
51
51
  modules: v.record(v.string(), v.object(assetEntryShape(v))),
52
52
  css: v.array(v.object(cssEntryShape(v))),
53
53
  routes: v.record(v.string(), v.object(routeEntryShape(v))),
54
- // `dependencies` is reserved for S7 vendoring always {} in v1, but the
55
- // validator accepts entries shaped like `modules` values keyed by specifier.
54
+ // `dependencies` records framework dependency artifacts for future S7
55
+ // vendoring. HTML keeps import-map entries on module URLs until those
56
+ // artifacts include their own rewritten import closures.
56
57
  dependencies: v.record(v.string(), v.object(assetEntryShape(v))),
57
58
  fallback: v.object(fallbackShape(v)),
58
59
  }));
@@ -1,3 +1,3 @@
1
1
  /** Shared version value. */
2
- export declare const VERSION = "0.1.782";
2
+ export declare const VERSION = "0.1.784";
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.782";
4
+ export const VERSION = "0.1.784";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "veryfront",
3
- "version": "0.1.782",
3
+ "version": "0.1.784",
4
4
  "description": "The simplest way to build AI-powered apps",
5
5
  "keywords": [
6
6
  "react",