@webflow/cloud-app 0.1.0-beta.9 → 0.1.1-beta.bad4bbe.0

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 (84) hide show
  1. package/README.md +40 -91
  2. package/dist/assetVersionToken.d.ts +9 -0
  3. package/dist/assetVersionToken.d.ts.map +1 -0
  4. package/dist/assetVersionToken.js +37 -0
  5. package/dist/assetVersionToken.js.map +1 -0
  6. package/dist/bindings.d.ts.map +1 -1
  7. package/dist/bindings.js +3 -2
  8. package/dist/bindings.js.map +1 -1
  9. package/dist/config/package-json.d.ts +2 -2
  10. package/dist/diagnostics.d.ts +23 -0
  11. package/dist/diagnostics.d.ts.map +1 -0
  12. package/dist/diagnostics.js +31 -0
  13. package/dist/diagnostics.js.map +1 -0
  14. package/dist/frameworks/astro/adapter-patches/assert-adapter-nested-under-mount.d.ts +3 -3
  15. package/dist/frameworks/astro/adapter-patches/assert-adapter-nested-under-mount.js +3 -3
  16. package/dist/frameworks/astro/adapter-patches/ensure-compatible-cloudflare-adapter.d.ts +34 -0
  17. package/dist/frameworks/astro/adapter-patches/ensure-compatible-cloudflare-adapter.d.ts.map +1 -0
  18. package/dist/frameworks/astro/adapter-patches/ensure-compatible-cloudflare-adapter.js +89 -0
  19. package/dist/frameworks/astro/adapter-patches/ensure-compatible-cloudflare-adapter.js.map +1 -0
  20. package/dist/frameworks/astro/adapter-patches/resolve-cloudflare-adapter.d.ts +39 -0
  21. package/dist/frameworks/astro/adapter-patches/resolve-cloudflare-adapter.d.ts.map +1 -0
  22. package/dist/frameworks/astro/adapter-patches/resolve-cloudflare-adapter.js +93 -0
  23. package/dist/frameworks/astro/adapter-patches/resolve-cloudflare-adapter.js.map +1 -0
  24. package/dist/frameworks/astro/astro5.d.ts +1 -0
  25. package/dist/frameworks/astro/astro5.d.ts.map +1 -1
  26. package/dist/frameworks/astro/astro5.js +5 -0
  27. package/dist/frameworks/astro/astro5.js.map +1 -1
  28. package/dist/frameworks/astro/astro6.d.ts +1 -0
  29. package/dist/frameworks/astro/astro6.d.ts.map +1 -1
  30. package/dist/frameworks/astro/astro6.js +16 -9
  31. package/dist/frameworks/astro/astro6.js.map +1 -1
  32. package/dist/frameworks/astro/astro7.d.ts +1 -0
  33. package/dist/frameworks/astro/astro7.d.ts.map +1 -1
  34. package/dist/frameworks/astro/astro7.js +17 -9
  35. package/dist/frameworks/astro/astro7.js.map +1 -1
  36. package/dist/frameworks/astro/session-check.d.ts +27 -0
  37. package/dist/frameworks/astro/session-check.d.ts.map +1 -0
  38. package/dist/frameworks/astro/session-check.js +173 -0
  39. package/dist/frameworks/astro/session-check.js.map +1 -0
  40. package/dist/frameworks/astro/templates/astro.config.webflow.ts +124 -2
  41. package/dist/frameworks/astro/templates/v5/astro.config.mjs.template +1 -0
  42. package/dist/frameworks/astro/templates/v5/webflow-loader.ts +4 -1
  43. package/dist/frameworks/astro/templates/v6/astro.config.mjs.template +1 -0
  44. package/dist/frameworks/astro/templates/v6/webflow-loader.ts +4 -1
  45. package/dist/frameworks/astro/templates/v7/astro.config.mjs.template +1 -0
  46. package/dist/frameworks/astro/templates/v7/webflow-loader.ts +4 -1
  47. package/dist/frameworks/base.d.ts +19 -1
  48. package/dist/frameworks/base.d.ts.map +1 -1
  49. package/dist/frameworks/base.js +24 -0
  50. package/dist/frameworks/base.js.map +1 -1
  51. package/dist/frameworks/nextjs/index.d.ts +13 -0
  52. package/dist/frameworks/nextjs/index.d.ts.map +1 -1
  53. package/dist/frameworks/nextjs/index.js +41 -1
  54. package/dist/frameworks/nextjs/index.js.map +1 -1
  55. package/dist/frameworks/nextjs/supportPolicy.d.ts +28 -0
  56. package/dist/frameworks/nextjs/supportPolicy.d.ts.map +1 -0
  57. package/dist/frameworks/nextjs/supportPolicy.js +127 -0
  58. package/dist/frameworks/nextjs/supportPolicy.js.map +1 -0
  59. package/dist/frameworks/nextjs/templates/next.config.ts.template +1 -0
  60. package/dist/frameworks/nextjs/templates/next.config.webflow.ts +6 -1
  61. package/dist/frameworks/static/templates/wrangler.json +2 -1
  62. package/dist/frameworks/types.d.ts +14 -0
  63. package/dist/frameworks/types.d.ts.map +1 -1
  64. package/dist/index.d.ts +9 -0
  65. package/dist/index.d.ts.map +1 -1
  66. package/dist/index.js +25 -2
  67. package/dist/index.js.map +1 -1
  68. package/dist/pipeline.d.ts.map +1 -1
  69. package/dist/pipeline.js +25 -0
  70. package/dist/pipeline.js.map +1 -1
  71. package/dist/static-base-href.d.ts +31 -0
  72. package/dist/static-base-href.d.ts.map +1 -0
  73. package/dist/static-base-href.js +183 -0
  74. package/dist/static-base-href.js.map +1 -0
  75. package/dist/types.d.ts +2 -0
  76. package/dist/types.d.ts.map +1 -1
  77. package/dist/wrangler.d.ts.map +1 -1
  78. package/dist/wrangler.js +126 -5
  79. package/dist/wrangler.js.map +1 -1
  80. package/package.json +4 -4
  81. package/dist/frameworks/astro/adapter-patches/ensure-fixed-cloudflare-adapter.d.ts +0 -36
  82. package/dist/frameworks/astro/adapter-patches/ensure-fixed-cloudflare-adapter.d.ts.map +0 -1
  83. package/dist/frameworks/astro/adapter-patches/ensure-fixed-cloudflare-adapter.js +0 -94
  84. package/dist/frameworks/astro/adapter-patches/ensure-fixed-cloudflare-adapter.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-check.js","sourceRoot":"","sources":["../../../src/frameworks/astro/session-check.ts"],"names":[],"mappings":"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"}
@@ -6,6 +6,7 @@ type AstroIntegration = { name?: string; [key: string]: any };
6
6
  type AstroUserConfig = Record<string, any>;
7
7
 
8
8
  export type WebflowOverridesOptions = {
9
+ assetVersionToken?: string;
9
10
  mountPath: string;
10
11
  deployUrl: string;
11
12
  /** The result of `cloudflare({ ... })` from `@astrojs/cloudflare`. */
@@ -16,6 +17,122 @@ export type WebflowOverridesOptions = {
16
17
  reactDomServerAlias: Record<string, string> | undefined;
17
18
  };
18
19
 
20
+ interface AdapterRegistration {
21
+ client?: { assetQueryParams?: URLSearchParams; [key: string]: unknown };
22
+ [key: string]: unknown;
23
+ }
24
+
25
+ interface AdapterConfigDone {
26
+ setAdapter: (registration: AdapterRegistration) => void;
27
+ [key: string]: unknown;
28
+ }
29
+
30
+ /** Keep Cloudflare's adapter hooks while extending its client build metadata. */
31
+ function withAssetVersion(adapter: AstroIntegration, token: string | undefined): AstroIntegration {
32
+ if (!token) return adapter;
33
+ const originalHook = adapter.hooks?.['astro:config:done'];
34
+ if (typeof originalHook !== 'function')
35
+ throw new Error('Cloudflare adapter has no astro:config:done hook');
36
+ return {
37
+ ...adapter,
38
+ hooks: {
39
+ ...adapter.hooks,
40
+ 'astro:config:done': (context: AdapterConfigDone) =>
41
+ originalHook.call(adapter, {
42
+ ...context,
43
+ setAdapter: (registration: AdapterRegistration) => {
44
+ const params = new URLSearchParams(registration.client?.assetQueryParams);
45
+ params.set('dpl', token);
46
+ context.setAdapter({
47
+ ...registration,
48
+ client: { ...registration.client, assetQueryParams: params },
49
+ });
50
+ },
51
+ }),
52
+ },
53
+ };
54
+ }
55
+
56
+ /**
57
+ * Merge our injected `resolve.alias` into the user's instead of overwriting it.
58
+ *
59
+ * `injected` is the production + React 19 `react-dom/server -> .edge` alias, or
60
+ * `undefined` when no injection is needed. Vite matches `resolve.alias` in array
61
+ * order (first match wins) and turns an object into an array in key order, so:
62
+ *
63
+ * - nothing to inject: return the user's alias untouched (including `undefined`);
64
+ * - no user alias: return ours as a plain object (nothing can shadow it);
65
+ * - user alias (object or array): normalize to `{ find, replacement }` entries
66
+ * and PREPEND ours, so our `react-dom/server` override always wins -- even over
67
+ * a broad user alias like `react-dom` that would otherwise match
68
+ * `react-dom/server` first and shadow it. Object form is converted to array
69
+ * form (equivalent matching semantics in Vite), giving both forms the same
70
+ * precedence.
71
+ */
72
+ function mergeViteResolveAlias(
73
+ userAlias: unknown,
74
+ injected: Record<string, string> | undefined,
75
+ ): unknown {
76
+ if (!injected || Object.keys(injected).length === 0) {
77
+ return userAlias;
78
+ }
79
+
80
+ const injectedEntries = Object.entries(injected).map(([find, replacement]) => ({
81
+ find,
82
+ replacement,
83
+ }));
84
+
85
+ if (userAlias == null) {
86
+ return { ...injected };
87
+ }
88
+
89
+ const userEntries = Array.isArray(userAlias)
90
+ ? userAlias
91
+ : Object.entries(userAlias as Record<string, string>).map(([find, replacement]) => ({
92
+ find,
93
+ replacement,
94
+ }));
95
+
96
+ return [...injectedEntries, ...userEntries];
97
+ }
98
+
99
+ /**
100
+ * `build.*` keys that move where Astro writes its output.
101
+ *
102
+ * Each Astro builder hardcodes the paths packaging reads back --
103
+ * `getOutputDeployMetadata()` returns `dist/client` + `dist/server/entry.mjs`
104
+ * (`dist` + `dist/_worker.js/index.js` on Astro 5). Honouring a user's
105
+ * override would build into paths the deploy step never looks at: a packaging
106
+ * failure, or static assets silently missing from the deploy.
107
+ *
108
+ * These are dropped rather than pinned to Webflow values, so Astro's own
109
+ * resolution -- and the Cloudflare adapter's overrides of it -- stay exactly
110
+ * as they were before any user build option was preserved.
111
+ */
112
+ const OUTPUT_RELOCATING_BUILD_KEYS = ['client', 'server', 'serverEntry'] as const;
113
+
114
+ /**
115
+ * The user's `build` options minus anything that would relocate output.
116
+ *
117
+ * Warns per dropped key. This module runs inside the user's project during
118
+ * `astro build`, so the notice lands in the build log they can already read --
119
+ * without it, a dropped `build.client` would fail exactly the way the silent
120
+ * config clobber this function replaced used to fail.
121
+ */
122
+ function preservableBuildOptions(userBuild: AstroUserConfig['build']): AstroUserConfig['build'] {
123
+ const preserved = { ...userBuild };
124
+ for (const key of OUTPUT_RELOCATING_BUILD_KEYS) {
125
+ if (key in preserved) {
126
+ console.warn(
127
+ `[webflow] Ignoring build.${key}: Webflow Cloud packages build output ` +
128
+ `from Astro's default paths, so a custom location would not be deployed.`,
129
+ );
130
+ }
131
+ delete preserved[key];
132
+ }
133
+ return preserved;
134
+ }
135
+
19
136
  /**
20
137
  * Wrap the user's Astro config with Webflow Cloud's required overrides.
21
138
  * `userExport` is always provided — `{}` when the user ships no astro.config.*.
@@ -35,16 +152,21 @@ export function withWebflowOverrides(
35
152
  ...userExport,
36
153
  base: opts.mountPath,
37
154
  output: 'server',
38
- adapter: opts.adapter,
155
+ adapter: withAssetVersion(opts.adapter, opts.assetVersionToken),
39
156
  integrations,
40
157
  vite: {
41
158
  ...userExport.vite,
42
159
  resolve: {
43
160
  ...userExport.vite?.resolve,
44
- alias: opts.reactDomServerAlias,
161
+ alias: mergeViteResolveAlias(userExport.vite?.resolve?.alias, opts.reactDomServerAlias),
45
162
  },
46
163
  },
47
164
  build: {
165
+ // Preserve the user's build options -- `assetsPrefix` is the only key we
166
+ // need to own. Replacing the whole object silently dropped everything
167
+ // else they set, notably `format`, which decides whether a prerendered
168
+ // route is written as `foo/index.html` or `foo.html`.
169
+ ...preservableBuildOptions(userExport.build),
48
170
  assetsPrefix: opts.deployUrl + (opts.mountPath === '/' ? '' : opts.mountPath),
49
171
  },
50
172
  image: {
@@ -8,6 +8,7 @@ import { withWebflowOverrides } from './astro.config.webflow';
8
8
  export default defineConfig(
9
9
  withWebflowOverrides(userConfig, {
10
10
  mountPath: '${COSMIC_MOUNT_PATH}',
11
+ assetVersionToken: '${WEBFLOW_ASSET_VERSION_TOKEN}',
11
12
  deployUrl: '${COSMIC_DEPLOY_URL}',
12
13
  adapter: cloudflare({
13
14
  imageService: 'custom',
@@ -12,7 +12,10 @@
12
12
  */
13
13
 
14
14
  import type { ExternalImageService, ImageTransform, AstroConfig } from 'astro';
15
- import { normalizeSrc, isRemote, buildImageUrl, computeSrcSetWidths } from './webflow-image-url';
15
+ // The '.ts' extension is required: Astro's SSR module-runner resolves this
16
+ // file's imports under strict ESM during prerender, where an extensionless
17
+ // relative import fails with "Cannot find module './webflow-image-url'".
18
+ import { normalizeSrc, isRemote, buildImageUrl, computeSrcSetWidths } from './webflow-image-url.ts';
16
19
 
17
20
  // Default implementation copied from Astro's baseService
18
21
  function getTargetDimensions(options: ImageTransform) {
@@ -20,6 +20,7 @@ try {
20
20
  export default defineConfig(
21
21
  withWebflowOverrides(userConfig, {
22
22
  mountPath: '${COSMIC_MOUNT_PATH}',
23
+ assetVersionToken: '${WEBFLOW_ASSET_VERSION_TOKEN}',
23
24
  deployUrl: '${COSMIC_DEPLOY_URL}',
24
25
  adapter: cloudflare({
25
26
  imageService: 'custom',
@@ -12,7 +12,10 @@
12
12
  */
13
13
 
14
14
  import type { ExternalImageService, ImageTransform, AstroConfig } from 'astro';
15
- import { normalizeSrc, isRemote, buildImageUrl, computeSrcSetWidths } from './webflow-image-url';
15
+ // The '.ts' extension is required: Astro's SSR module-runner resolves this
16
+ // file's imports under strict ESM during prerender, where an extensionless
17
+ // relative import fails with "Cannot find module './webflow-image-url'".
18
+ import { normalizeSrc, isRemote, buildImageUrl, computeSrcSetWidths } from './webflow-image-url.ts';
16
19
 
17
20
  // Default implementation copied from Astro's baseService
18
21
  function getTargetDimensions(options: ImageTransform) {
@@ -20,6 +20,7 @@ try {
20
20
  export default defineConfig(
21
21
  withWebflowOverrides(userConfig, {
22
22
  mountPath: '${COSMIC_MOUNT_PATH}',
23
+ assetVersionToken: '${WEBFLOW_ASSET_VERSION_TOKEN}',
23
24
  deployUrl: '${COSMIC_DEPLOY_URL}',
24
25
  adapter: cloudflare({
25
26
  imageService: 'custom',
@@ -11,7 +11,10 @@
11
11
  */
12
12
 
13
13
  import type { ExternalImageService, ImageTransform, AstroConfig } from 'astro';
14
- import { normalizeSrc, isRemote, buildImageUrl, computeSrcSetWidths } from './webflow-image-url';
14
+ // The '.ts' extension is required: Astro's SSR module-runner resolves this
15
+ // file's imports under strict ESM during prerender, where an extensionless
16
+ // relative import fails with "Cannot find module './webflow-image-url'".
17
+ import { normalizeSrc, isRemote, buildImageUrl, computeSrcSetWidths } from './webflow-image-url.ts';
15
18
 
16
19
  // Default implementation copied from Astro's baseService
17
20
  function getTargetDimensions(options: ImageTransform) {
@@ -1,4 +1,4 @@
1
- import type { BuildContext, BuildOutput, FrameworkInfo, PackageJson, WebflowJson, DetectionResult, AdapterPackage, IntegrationPackage, WebflowLoaderConfig, NodeVersionRequirement } from './types';
1
+ import type { BuildContext, BuildOutput, FrameworkInfo, FrameworkSupportStatus, PackageJson, WebflowJson, DetectionResult, AdapterPackage, IntegrationPackage, WebflowLoaderConfig, NodeVersionRequirement } from './types';
2
2
  export declare abstract class FrameworkBuilder {
3
3
  /**
4
4
  * Canonical framework name (e.g. 'nextjs', 'astro', 'vite').
@@ -83,6 +83,12 @@ export declare abstract class FrameworkBuilder {
83
83
  * specific version is required.
84
84
  */
85
85
  abstract getNodeVersionRequirement(): NodeVersionRequirement | null;
86
+ /**
87
+ * Validate requirements that depend on the resolved, installed dependencies.
88
+ * Hosts driving builders directly must await this after the final dependency
89
+ * install and before executing the build command.
90
+ */
91
+ validateInstalledDependencies(): Promise<void>;
86
92
  /**
87
93
  * Post-build hook for any cleanup or modifications. Called after the build
88
94
  * command succeeds.
@@ -109,6 +115,18 @@ export declare abstract class FrameworkBuilder {
109
115
  * the deploy contract).
110
116
  */
111
117
  getFrameworkVersion(): string | undefined;
118
+ /**
119
+ * Optional framework support status (e.g. Next.js EOL window). Default null;
120
+ * frameworks that track support override. Called after dependencies are
121
+ * installed so the concrete installed version is available.
122
+ */
123
+ getFrameworkSupport(): FrameworkSupportStatus | null;
124
+ /**
125
+ * Emit an out-of-support warning (via `log`) and record version / supported
126
+ * tags (via `telemetry`) when {@link getFrameworkSupport} returns a status.
127
+ * Default no-op; Next.js overrides.
128
+ */
129
+ reportFrameworkSupport(): FrameworkSupportStatus | null;
112
130
  /** Check if a dependency exists in package.json (deps or devDeps). */
113
131
  protected hasDependency(name: string): boolean;
114
132
  /** Get a dependency version from package.json (deps or devDeps). */
@@ -1 +1 @@
1
- {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/frameworks/base.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EACV,YAAY,EACZ,WAAW,EACX,aAAa,EACb,WAAW,EACX,WAAW,EACX,eAAe,EACf,cAAc,EACd,kBAAkB,EAClB,mBAAmB,EACnB,sBAAsB,EACvB,MAAM,SAAS,CAAC;AAEjB,8BAAsB,gBAAgB;IACpC;;;OAGG;IACH,MAAM,CAAC,aAAa,SAAM;IAE1B,SAAS,CAAC,GAAG,EAAE,YAAY,CAAC;gBAEhB,GAAG,EAAE,YAAY;IAQ7B;;OAEG;IACH,QAAQ,KAAK,IAAI,IAAI,aAAa,CAAC;IAEnC;;;;;OAKG;IACH,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,WAAW,EAAE,YAAY,CAAC,EAAE,WAAW,GAAG,eAAe;IAIrF;;;;;;;OAOG;IACH,MAAM,CAAC,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAInD;;;;;OAKG;IACH,MAAM,CAAC,uBAAuB,IAAI,WAAW;IAI7C;;;;OAIG;IACH,QAAQ,CAAC,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAElC;;OAEG;IACH,QAAQ,CAAC,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC;IAE7C;;;OAGG;IACH,QAAQ,CAAC,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAEvC;;;;;OAKG;IACH,QAAQ,CAAC,eAAe,IAAI,MAAM,GAAG,IAAI;IAEzC;;;OAGG;IACH,uBAAuB,IAAI,WAAW;IAItC,yDAAyD;IACzD,QAAQ,CAAC,uBAAuB,IAAI,MAAM;IAM1C;;;OAGG;IACH,QAAQ,CAAC,oBAAoB,IAAI,cAAc,GAAG,IAAI;IAEtD;;;OAGG;IACH,QAAQ,CAAC,uBAAuB,IAAI,kBAAkB,EAAE;IAExD;;;OAGG;IACH,QAAQ,CAAC,gBAAgB,IAAI,mBAAmB,GAAG,IAAI;IAEvD;;;OAGG;IACH,QAAQ,CAAC,yBAAyB,IAAI,sBAAsB,GAAG,IAAI;IAMnE;;;OAGG;IACG,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAIhC;;;OAGG;IACH,wBAAwB,IAAI,MAAM,EAAE;IAIpC;;;OAGG;IACH,qBAAqB,IAAI,MAAM,EAAE;IAIjC;;;;;;;;;OASG;IACH,mBAAmB,IAAI,MAAM,GAAG,SAAS;IAQzC,sEAAsE;IACtE,SAAS,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAK9C,oEAAoE;IACpE,SAAS,CAAC,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAKhE;;;;;OAKG;IACH,SAAS,CAAC,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAMtE,gCAAgC;IAChC,SAAS,KAAK,GAAG,wBAEhB;IAED,wCAAwC;IACxC,SAAS,KAAK,UAAU,+BAEvB;IAED,mCAAmC;IACnC,SAAS,KAAK,SAAS,2BAEtB;IAED,oCAAoC;IACpC,SAAS,KAAK,EAAE,gCAEf;IAED,4DAA4D;IAC5D,SAAS,KAAK,GAAG,WAEhB;CACF"}
1
+ {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/frameworks/base.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EACV,YAAY,EACZ,WAAW,EACX,aAAa,EACb,sBAAsB,EACtB,WAAW,EACX,WAAW,EACX,eAAe,EACf,cAAc,EACd,kBAAkB,EAClB,mBAAmB,EACnB,sBAAsB,EACvB,MAAM,SAAS,CAAC;AAEjB,8BAAsB,gBAAgB;IACpC;;;OAGG;IACH,MAAM,CAAC,aAAa,SAAM;IAE1B,SAAS,CAAC,GAAG,EAAE,YAAY,CAAC;gBAEhB,GAAG,EAAE,YAAY;IAQ7B;;OAEG;IACH,QAAQ,KAAK,IAAI,IAAI,aAAa,CAAC;IAEnC;;;;;OAKG;IACH,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,WAAW,EAAE,YAAY,CAAC,EAAE,WAAW,GAAG,eAAe;IAIrF;;;;;;;OAOG;IACH,MAAM,CAAC,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAInD;;;;;OAKG;IACH,MAAM,CAAC,uBAAuB,IAAI,WAAW;IAI7C;;;;OAIG;IACH,QAAQ,CAAC,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAElC;;OAEG;IACH,QAAQ,CAAC,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC;IAE7C;;;OAGG;IACH,QAAQ,CAAC,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAEvC;;;;;OAKG;IACH,QAAQ,CAAC,eAAe,IAAI,MAAM,GAAG,IAAI;IAEzC;;;OAGG;IACH,uBAAuB,IAAI,WAAW;IAItC,yDAAyD;IACzD,QAAQ,CAAC,uBAAuB,IAAI,MAAM;IAM1C;;;OAGG;IACH,QAAQ,CAAC,oBAAoB,IAAI,cAAc,GAAG,IAAI;IAEtD;;;OAGG;IACH,QAAQ,CAAC,uBAAuB,IAAI,kBAAkB,EAAE;IAExD;;;OAGG;IACH,QAAQ,CAAC,gBAAgB,IAAI,mBAAmB,GAAG,IAAI;IAEvD;;;OAGG;IACH,QAAQ,CAAC,yBAAyB,IAAI,sBAAsB,GAAG,IAAI;IAMnE;;;;OAIG;IACG,6BAA6B,IAAI,OAAO,CAAC,IAAI,CAAC;IAIpD;;;OAGG;IACG,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAIhC;;;OAGG;IACH,wBAAwB,IAAI,MAAM,EAAE;IAIpC;;;OAGG;IACH,qBAAqB,IAAI,MAAM,EAAE;IAIjC;;;;;;;;;OASG;IACH,mBAAmB,IAAI,MAAM,GAAG,SAAS;IAIzC;;;;OAIG;IACH,mBAAmB,IAAI,sBAAsB,GAAG,IAAI;IAIpD;;;;OAIG;IACH,sBAAsB,IAAI,sBAAsB,GAAG,IAAI;IAQvD,sEAAsE;IACtE,SAAS,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAK9C,oEAAoE;IACpE,SAAS,CAAC,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAKhE;;;;;OAKG;IACH,SAAS,CAAC,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAMtE,gCAAgC;IAChC,SAAS,KAAK,GAAG,wBAEhB;IAED,wCAAwC;IACxC,SAAS,KAAK,UAAU,+BAEvB;IAED,mCAAmC;IACnC,SAAS,KAAK,SAAS,2BAEtB;IAED,oCAAoC;IACpC,SAAS,KAAK,EAAE,gCAEf;IAED,4DAA4D;IAC5D,SAAS,KAAK,GAAG,WAEhB;CACF"}
@@ -91,6 +91,14 @@ class FrameworkBuilder {
91
91
  // ═══════════════════════════════════════════════════════════════════════════
92
92
  // OPTIONAL METHODS WITH DEFAULT IMPLEMENTATIONS
93
93
  // ═══════════════════════════════════════════════════════════════════════════
94
+ /**
95
+ * Validate requirements that depend on the resolved, installed dependencies.
96
+ * Hosts driving builders directly must await this after the final dependency
97
+ * install and before executing the build command.
98
+ */
99
+ async validateInstalledDependencies() {
100
+ // Default: no-op
101
+ }
94
102
  /**
95
103
  * Post-build hook for any cleanup or modifications. Called after the build
96
104
  * command succeeds.
@@ -125,6 +133,22 @@ class FrameworkBuilder {
125
133
  getFrameworkVersion() {
126
134
  return undefined;
127
135
  }
136
+ /**
137
+ * Optional framework support status (e.g. Next.js EOL window). Default null;
138
+ * frameworks that track support override. Called after dependencies are
139
+ * installed so the concrete installed version is available.
140
+ */
141
+ getFrameworkSupport() {
142
+ return null;
143
+ }
144
+ /**
145
+ * Emit an out-of-support warning (via `log`) and record version / supported
146
+ * tags (via `telemetry`) when {@link getFrameworkSupport} returns a status.
147
+ * Default no-op; Next.js overrides.
148
+ */
149
+ reportFrameworkSupport() {
150
+ return null;
151
+ }
128
152
  // ═══════════════════════════════════════════════════════════════════════════
129
153
  // PROTECTED HELPER METHODS
130
154
  // ═══════════════════════════════════════════════════════════════════════════
@@ -1 +1 @@
1
- {"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/frameworks/base.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;;;;GAMG;AACH,+CAAiC;AAejC,MAAsB,gBAAgB;IACpC;;;OAGG;IACH,MAAM,CAAC,aAAa,GAAG,EAAE,CAAC;IAEhB,GAAG,CAAe;IAE5B,YAAY,GAAiB;QAC3B,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;IACjB,CAAC;IAWD;;;;;OAKG;IACH,MAAM,CAAC,MAAM,CAAC,YAAyB,EAAE,YAA0B;QACjE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;IAC7B,CAAC;IAED;;;;;;;OAOG;IACH,MAAM,CAAC,qBAAqB,CAAC,IAAY;QACvC,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,uBAAuB;QAC5B,MAAM,IAAI,KAAK,CAAC,uEAAuE,CAAC,CAAC;IAC3F,CAAC;IA4BD;;;OAGG;IACH,uBAAuB;QACrB,OAAQ,IAAI,CAAC,WAAuC,CAAC,uBAAuB,EAAE,CAAC;IACjF,CAAC;IAiCD,8EAA8E;IAC9E,gDAAgD;IAChD,8EAA8E;IAE9E;;;OAGG;IACH,KAAK,CAAC,SAAS;QACb,iBAAiB;IACnB,CAAC;IAED;;;OAGG;IACH,wBAAwB;QACtB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED;;;OAGG;IACH,qBAAqB;QACnB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED;;;;;;;;;OASG;IACH,mBAAmB;QACjB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,8EAA8E;IAC9E,2BAA2B;IAC3B,8EAA8E;IAE9E,sEAAsE;IAC5D,aAAa,CAAC,IAAY;QAClC,MAAM,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC;QACjC,OAAO,IAAI,IAAI,CAAC,WAAW,CAAC,YAAY,IAAI,EAAE,CAAC,IAAI,IAAI,IAAI,CAAC,WAAW,CAAC,eAAe,IAAI,EAAE,CAAC,CAAC;IACjG,CAAC;IAED,oEAAoE;IAC1D,oBAAoB,CAAC,IAAY;QACzC,MAAM,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC;QACjC,OAAO,WAAW,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,IAAI,WAAW,CAAC,eAAe,EAAE,CAAC,IAAI,CAAC,CAAC;IACjF,CAAC;IAED;;;;;OAKG;IACO,uBAAuB,CAAC,OAAe;QAC/C,MAAM,IAAI,GAAG,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;QAChD,IAAI,CAAC,IAAI;YAAE,OAAO,SAAS,CAAC;QAC5B,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IACtC,CAAC;IAED,gCAAgC;IAChC,IAAc,GAAG;QACf,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;IACtB,CAAC;IAED,wCAAwC;IACxC,IAAc,UAAU;QACtB,OAAO,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC;IAC7B,CAAC;IAED,mCAAmC;IACnC,IAAc,SAAS;QACrB,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC;IAC5B,CAAC;IAED,oCAAoC;IACpC,IAAc,EAAE;QACd,OAAO,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;IACrB,CAAC;IAED,4DAA4D;IAC5D,IAAc,GAAG;QACf,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;IACtB,CAAC;;AApNH,4CAqNC"}
1
+ {"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/frameworks/base.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import { FrameworkBuilder } from '../base';
2
2
  import type { BuildOutput, FrameworkInfo, PackageJson, WebflowJson, DetectionResult, AdapterPackage, IntegrationPackage, WebflowLoaderConfig, NodeVersionRequirement } from '../types';
3
+ import type { FrameworkSupportStatus } from '../types';
3
4
  export declare class NextJsBuilder extends FrameworkBuilder {
4
5
  static frameworkName: string;
5
6
  get info(): FrameworkInfo;
@@ -25,8 +26,20 @@ export declare class NextJsBuilder extends FrameworkBuilder {
25
26
  */
26
27
  private ensureOpenNextConfig;
27
28
  prepareConfig(): Promise<void>;
29
+ validateInstalledDependencies(): Promise<void>;
28
30
  getBuildCommand(): string;
29
31
  getNodeVersionRequirement(): NodeVersionRequirement | null;
32
+ /**
33
+ * Read the installed Next.js version from node_modules and classify it
34
+ * against Webflow's support table. Call only after dependencies are installed.
35
+ */
36
+ getFrameworkSupport(): FrameworkSupportStatus | null;
37
+ /**
38
+ * Warn (log port) when the installed Next.js major is out of support.
39
+ * Telemetry tags are applied by the host on the build span (see pipeline).
40
+ * Safe to call when support is unknown (no-op).
41
+ */
42
+ reportFrameworkSupport(): FrameworkSupportStatus | null;
30
43
  static getOutputDeployMetadata(): BuildOutput;
31
44
  /**
32
45
  * Detect Next.js from built output: presence of `./worker.js` (the bundled
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/frameworks/nextjs/index.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,KAAK,EACV,WAAW,EACX,aAAa,EACb,WAAW,EACX,WAAW,EACX,eAAe,EACf,cAAc,EACd,kBAAkB,EAClB,mBAAmB,EACnB,sBAAsB,EACvB,MAAM,UAAU,CAAC;AAQlB,qBAAa,aAAc,SAAQ,gBAAgB;IACjD,OAAgB,aAAa,SAAY;IAMzC,IAAI,IAAI,IAAI,aAAa,CAOxB;IAEQ,mBAAmB,IAAI,MAAM,GAAG,SAAS;IAQlD;;OAEG;WACa,MAAM,CAAC,WAAW,EAAE,WAAW,EAAE,WAAW,CAAC,EAAE,WAAW,GAAG,eAAe;IA2BtF,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAmB/B,oBAAoB,IAAI,cAAc;IAStC,uBAAuB,IAAI,kBAAkB,EAAE;IAKzC,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC;IAiC1C,gBAAgB,IAAI,mBAAmB;IAQvC,qBAAqB,IAAI,MAAM,EAAE;IAIjC,uBAAuB,IAAI,MAAM;IAIjC,wBAAwB,IAAI,MAAM,EAAE;IAKpC,4CAA4C;IAC5C,OAAO,CAAC,kBAAkB;IAQ1B;;;;OAIG;IACH,OAAO,CAAC,oBAAoB;IAwBtB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IA6DpC,eAAe,IAAI,MAAM;IAIzB,yBAAyB,IAAI,sBAAsB,GAAG,IAAI;WAW1C,uBAAuB,IAAI,WAAW;IAUtD;;;;OAIG;WACa,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;CAG5D"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/frameworks/nextjs/index.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,KAAK,EACV,WAAW,EACX,aAAa,EACb,WAAW,EACX,WAAW,EACX,eAAe,EACf,cAAc,EACd,kBAAkB,EAClB,mBAAmB,EACnB,sBAAsB,EACvB,MAAM,UAAU,CAAC;AAElB,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AAYvD,qBAAa,aAAc,SAAQ,gBAAgB;IACjD,OAAgB,aAAa,SAAY;IAMzC,IAAI,IAAI,IAAI,aAAa,CAOxB;IAEQ,mBAAmB,IAAI,MAAM,GAAG,SAAS;IAQlD;;OAEG;WACa,MAAM,CAAC,WAAW,EAAE,WAAW,EAAE,WAAW,CAAC,EAAE,WAAW,GAAG,eAAe;IA2BtF,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAmB/B,oBAAoB,IAAI,cAAc;IAStC,uBAAuB,IAAI,kBAAkB,EAAE;IAKzC,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC;IAiC1C,gBAAgB,IAAI,mBAAmB;IAQvC,qBAAqB,IAAI,MAAM,EAAE;IAIjC,uBAAuB,IAAI,MAAM;IAIjC,wBAAwB,IAAI,MAAM,EAAE;IAKpC,4CAA4C;IAC5C,OAAO,CAAC,kBAAkB;IAQ1B;;;;OAIG;IACH,OAAO,CAAC,oBAAoB;IAwBtB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IA8DrB,6BAA6B,IAAI,OAAO,CAAC,IAAI,CAAC;IAI7D,eAAe,IAAI,MAAM;IAOzB,yBAAyB,IAAI,sBAAsB,GAAG,IAAI;IAO1D;;;OAGG;IACM,mBAAmB,IAAI,sBAAsB,GAAG,IAAI;IAY7D;;;;OAIG;IACM,sBAAsB,IAAI,sBAAsB,GAAG,IAAI;WAchD,uBAAuB,IAAI,WAAW;IAUtD;;;;OAIG;WACa,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;CAG5D"}
@@ -45,11 +45,13 @@ exports.NextJsBuilder = void 0;
45
45
  * - Build output: .open-next/assets (static) + .open-next/worker.js (worker)
46
46
  */
47
47
  const path = __importStar(require("node:path"));
48
+ const assetVersionToken_1 = require("../../assetVersionToken");
48
49
  const fs = __importStar(require("node:fs"));
49
50
  const base_1 = require("../base");
50
51
  const errors_1 = require("../errors");
51
52
  const utils_1 = require("../../utils");
52
53
  const adapter_resolver_1 = require("./adapter-resolver");
54
+ const supportPolicy_1 = require("./supportPolicy");
53
55
  /** Base path for Next.js templates. */
54
56
  const TEMPLATE_BASE = path.join(__dirname, 'templates');
55
57
  class NextJsBuilder extends base_1.FrameworkBuilder {
@@ -217,6 +219,7 @@ class NextJsBuilder extends base_1.FrameworkBuilder {
217
219
  await (0, utils_1.envsubst)(log, templatePath, destPath, {
218
220
  ...process.env,
219
221
  ...userEnv,
222
+ ...(0, assetVersionToken_1.assetVersionTemplateEnvironment)(this.ctx.assetVersionToken),
220
223
  });
221
224
  // Copy webflow-loader.ts.
222
225
  const loader = this.getWebflowLoader();
@@ -234,8 +237,14 @@ class NextJsBuilder extends base_1.FrameworkBuilder {
234
237
  // ───────────────────────────────────────────────────────────────────────────
235
238
  // BUILD
236
239
  // ───────────────────────────────────────────────────────────────────────────
240
+ async validateInstalledDependencies() {
241
+ (0, assetVersionToken_1.assertAssetVersionFrameworkSupport)(this.ctx.assetVersionToken, 'nextjs', this.ctx.cwd);
242
+ }
237
243
  getBuildCommand() {
238
- return 'opennextjs-cloudflare build';
244
+ // Always pass OpenNext's override so out-of-support majors (e.g. Next 15
245
+ // after 2026-10-21) still build. We warn + track separately via
246
+ // reportFrameworkSupport — see supportPolicy.ts.
247
+ return 'opennextjs-cloudflare build --dangerouslyUseUnsupportedNextVersion';
239
248
  }
240
249
  getNodeVersionRequirement() {
241
250
  return {
@@ -243,6 +252,37 @@ class NextJsBuilder extends base_1.FrameworkBuilder {
243
252
  severity: 'error',
244
253
  };
245
254
  }
255
+ /**
256
+ * Read the installed Next.js version from node_modules and classify it
257
+ * against Webflow's support table. Call only after dependencies are installed.
258
+ */
259
+ getFrameworkSupport() {
260
+ const installed = (0, supportPolicy_1.readInstalledNextVersion)(this.cwd);
261
+ if (!installed)
262
+ return null;
263
+ const status = (0, supportPolicy_1.getNextSupportStatus)(installed);
264
+ if (!status)
265
+ return null;
266
+ return {
267
+ version: status.version,
268
+ supported: status.supported,
269
+ supportEndedOn: status.supportEndedOn,
270
+ };
271
+ }
272
+ /**
273
+ * Warn (log port) when the installed Next.js major is out of support.
274
+ * Telemetry tags are applied by the host on the build span (see pipeline).
275
+ * Safe to call when support is unknown (no-op).
276
+ */
277
+ reportFrameworkSupport() {
278
+ const status = this.getFrameworkSupport();
279
+ if (!status)
280
+ return null;
281
+ if (!status.supported) {
282
+ this.log.warn((0, supportPolicy_1.formatNextOutOfSupportWarning)(status));
283
+ }
284
+ return status;
285
+ }
246
286
  // ───────────────────────────────────────────────────────────────────────────
247
287
  // OUTPUT
248
288
  // ───────────────────────────────────────────────────────────────────────────
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/frameworks/nextjs/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/frameworks/nextjs/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ /** End-of-support dates (UTC calendar day) keyed by Next.js major. */
2
+ export declare const NEXT_SUPPORT_ENDS: Record<number, string>;
3
+ export type NextSupportStatus = {
4
+ version: string;
5
+ major: number;
6
+ supported: boolean;
7
+ /** ISO date string from {@link NEXT_SUPPORT_ENDS} when unsupported; otherwise null. */
8
+ supportEndedOn: string | null;
9
+ };
10
+ /**
11
+ * Classify an installed Next.js version against {@link NEXT_SUPPORT_ENDS}.
12
+ * - Majors newer than the table (e.g. 17) count as supported.
13
+ * - Majors older than the oldest table entry (e.g. 11) count as unsupported.
14
+ * - Unparseable versions return null (caller skips warning / telemetry fields).
15
+ */
16
+ export declare function getNextSupportStatus(installedVersion: string, now?: Date): NextSupportStatus | null;
17
+ /**
18
+ * Read the concrete installed Next.js version from
19
+ * `node_modules/next/package.json` under `cwd`. Returns null when missing or
20
+ * unreadable — never falls back to the package.json range string.
21
+ */
22
+ export declare function readInstalledNextVersion(cwd: string): string | null;
23
+ /** User-facing warning when a Next.js major is past its support window. */
24
+ export declare function formatNextOutOfSupportWarning(status: {
25
+ version: string;
26
+ supportEndedOn: string | null;
27
+ }): string;
28
+ //# sourceMappingURL=supportPolicy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"supportPolicy.d.ts","sourceRoot":"","sources":["../../../src/frameworks/nextjs/supportPolicy.ts"],"names":[],"mappings":"AAYA,sEAAsE;AACtE,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAMpD,CAAC;AAMF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,OAAO,CAAC;IACnB,uFAAuF;IACvF,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,gBAAgB,EAAE,MAAM,EACxB,GAAG,GAAE,IAAiB,GACrB,iBAAiB,GAAG,IAAI,CAkC1B;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CASnE;AAED,2EAA2E;AAC3E,wBAAgB,6BAA6B,CAAC,MAAM,EAAE;IACpD,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B,GAAG,MAAM,CAOT"}
@@ -0,0 +1,127 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.NEXT_SUPPORT_ENDS = void 0;
40
+ exports.getNextSupportStatus = getNextSupportStatus;
41
+ exports.readInstalledNextVersion = readInstalledNextVersion;
42
+ exports.formatNextOutOfSupportWarning = formatNextOutOfSupportWarning;
43
+ /**
44
+ * Webflow's Next.js major support window.
45
+ *
46
+ * Mirrors OpenNext's date-based cutoff (2 years after each major's release) so
47
+ * we can warn and track out-of-support builds while still allowing them via
48
+ * `--dangerouslyUseUnsupportedNextVersion`. Owned here so CLI and server builds
49
+ * share one table.
50
+ */
51
+ const fs = __importStar(require("node:fs"));
52
+ const path = __importStar(require("node:path"));
53
+ const semver_1 = __importDefault(require("semver"));
54
+ /** End-of-support dates (UTC calendar day) keyed by Next.js major. */
55
+ exports.NEXT_SUPPORT_ENDS = {
56
+ 16: '2027-10-21',
57
+ 15: '2026-10-21',
58
+ 14: '2025-10-26',
59
+ 13: '2024-10-26',
60
+ 12: '2023-10-26',
61
+ };
62
+ const NEXT_SUPPORT_MAJORS = Object.keys(exports.NEXT_SUPPORT_ENDS).map(Number);
63
+ const OLDEST_NEXT_MAJOR = Math.min(...NEXT_SUPPORT_MAJORS);
64
+ const NEWEST_NEXT_MAJOR = Math.max(...NEXT_SUPPORT_MAJORS);
65
+ /**
66
+ * Classify an installed Next.js version against {@link NEXT_SUPPORT_ENDS}.
67
+ * - Majors newer than the table (e.g. 17) count as supported.
68
+ * - Majors older than the oldest table entry (e.g. 11) count as unsupported.
69
+ * - Unparseable versions return null (caller skips warning / telemetry fields).
70
+ */
71
+ function getNextSupportStatus(installedVersion, now = new Date()) {
72
+ const parsed = semver_1.default.parse(semver_1.default.coerce(installedVersion)?.version ?? null);
73
+ if (!parsed)
74
+ return null;
75
+ const major = parsed.major;
76
+ const supportEndedOn = exports.NEXT_SUPPORT_ENDS[major];
77
+ if (supportEndedOn === undefined) {
78
+ if (major > NEWEST_NEXT_MAJOR) {
79
+ return {
80
+ version: parsed.version,
81
+ major,
82
+ supported: true,
83
+ supportEndedOn: null,
84
+ };
85
+ }
86
+ // major < OLDEST_NEXT_MAJOR — left support at least as early as the oldest entry.
87
+ return {
88
+ version: parsed.version,
89
+ major,
90
+ supported: false,
91
+ supportEndedOn: exports.NEXT_SUPPORT_ENDS[OLDEST_NEXT_MAJOR],
92
+ };
93
+ }
94
+ const endMs = Date.parse(`${supportEndedOn}T00:00:00.000Z`);
95
+ const supported = now.getTime() < endMs;
96
+ return {
97
+ version: parsed.version,
98
+ major,
99
+ supported,
100
+ supportEndedOn: supported ? null : supportEndedOn,
101
+ };
102
+ }
103
+ /**
104
+ * Read the concrete installed Next.js version from
105
+ * `node_modules/next/package.json` under `cwd`. Returns null when missing or
106
+ * unreadable — never falls back to the package.json range string.
107
+ */
108
+ function readInstalledNextVersion(cwd) {
109
+ const pkgPath = path.join(cwd, 'node_modules', 'next', 'package.json');
110
+ try {
111
+ if (!fs.existsSync(pkgPath))
112
+ return null;
113
+ const raw = JSON.parse(fs.readFileSync(pkgPath, 'utf8'));
114
+ return typeof raw.version === 'string' && raw.version.length > 0 ? raw.version : null;
115
+ }
116
+ catch {
117
+ return null;
118
+ }
119
+ }
120
+ /** User-facing warning when a Next.js major is past its support window. */
121
+ function formatNextOutOfSupportWarning(status) {
122
+ const ended = status.supportEndedOn ?? 'unknown';
123
+ return (`⚠ Next.js ${status.version} is out of support since ${ended} and no longer ` +
124
+ `gets security fixes. Webflow Cloud will still build it for now. Upgrade to ` +
125
+ `Next.js 16: https://nextjs.org/docs/app/guides/upgrading/version-16`);
126
+ }
127
+ //# sourceMappingURL=supportPolicy.js.map