vinext 1.3.1 → 1.4.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 (234) hide show
  1. package/README.md +5 -2
  2. package/THIRD_PARTY_LICENSES.md +47 -0
  3. package/dist/_virtual/_rolldown/runtime.js +3 -2
  4. package/dist/build/prerender.js +1 -1
  5. package/dist/build/report.d.ts +0 -14
  6. package/dist/build/report.js +1 -51
  7. package/dist/check.js +1 -1
  8. package/dist/cli.js +3 -0
  9. package/dist/client/dev-error-overlay.js +1 -1
  10. package/dist/client/navigation-runtime.d.ts +13 -1
  11. package/dist/client/navigation-runtime.js +1 -1
  12. package/dist/config/next-config.d.ts +19 -0
  13. package/dist/config/next-config.js +64 -1
  14. package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/dbcs-codec.js +327 -0
  15. package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/dbcs-data.js +123 -0
  16. package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/index.js +29 -0
  17. package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/internal.js +134 -0
  18. package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/sbcs-codec.js +50 -0
  19. package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/sbcs-data-generated.js +455 -0
  20. package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/sbcs-data.js +147 -0
  21. package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/tables/big5-added.json.js +169 -0
  22. package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/tables/cp936.json.js +2584 -0
  23. package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/tables/cp949.json.js +2220 -0
  24. package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/tables/cp950.json.js +227 -0
  25. package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/tables/eucjp.json.js +425 -0
  26. package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/tables/gb18030-ranges.json.js +427 -0
  27. package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/tables/gbk-added.json.js +229 -0
  28. package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/tables/shiftjis.json.js +292 -0
  29. package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/utf16.js +106 -0
  30. package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/utf7.js +182 -0
  31. package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/lib/bom-handling.js +42 -0
  32. package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/lib/extend-node.js +147 -0
  33. package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/lib/index.js +94 -0
  34. package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/lib/streams.js +95 -0
  35. package/dist/deps/.pnpm/safer-buffer@2.1.2/deps/safer-buffer/safer.js +45 -0
  36. package/dist/entries/app-rsc-entry.js +17 -48
  37. package/dist/entries/app-rsc-manifest.js +3 -4
  38. package/dist/entries/app-ssr-entry.js +1 -0
  39. package/dist/entries/pages-server-entry.js +33 -8
  40. package/dist/index.js +83 -70
  41. package/dist/init-cloudflare.d.ts +1 -3
  42. package/dist/init-cloudflare.js +10 -48
  43. package/dist/init-platform.d.ts +2 -0
  44. package/dist/init-platform.js +4 -0
  45. package/dist/plugins/extensionless-dynamic-import.js +6 -2
  46. package/dist/plugins/next-intl-catalog.d.ts +12 -0
  47. package/dist/plugins/next-intl-catalog.js +85 -0
  48. package/dist/plugins/pages-node-externals.d.ts +1 -0
  49. package/dist/plugins/pages-node-externals.js +1 -1
  50. package/dist/plugins/use-cache-callable.d.ts +1 -1
  51. package/dist/plugins/use-cache-callable.js +136 -94
  52. package/dist/routing/app-route-graph.d.ts +6 -0
  53. package/dist/routing/app-route-graph.js +9 -1
  54. package/dist/server/api-handler.js +19 -4
  55. package/dist/server/app-bfcache-identity.js +1 -1
  56. package/dist/server/app-browser-entry.js +79 -63
  57. package/dist/server/app-browser-history-controller.d.ts +5 -4
  58. package/dist/server/app-browser-history-controller.js +93 -15
  59. package/dist/server/app-browser-navigation-controller.d.ts +2 -2
  60. package/dist/server/app-browser-navigation-controller.js +1 -2
  61. package/dist/server/app-browser-rsc-redirect.js +4 -4
  62. package/dist/server/app-browser-server-action-client.d.ts +2 -0
  63. package/dist/server/app-browser-server-action-client.js +4 -3
  64. package/dist/server/app-browser-state.d.ts +2 -4
  65. package/dist/server/app-browser-state.js +9 -4
  66. package/dist/server/app-browser-supplemental-refresh.js +16 -1
  67. package/dist/server/app-browser-visible-commit.d.ts +1 -1
  68. package/dist/server/app-browser-visible-commit.js +2 -12
  69. package/dist/server/app-elements-wire.d.ts +6 -38
  70. package/dist/server/app-elements-wire.js +4 -41
  71. package/dist/server/app-elements.d.ts +2 -2
  72. package/dist/server/app-elements.js +2 -2
  73. package/dist/server/app-history-state.d.ts +2 -2
  74. package/dist/server/app-history-state.js +5 -2
  75. package/dist/server/app-mounted-layouts.d.ts +21 -0
  76. package/dist/server/app-mounted-layouts.js +67 -0
  77. package/dist/server/app-optimistic-routing.d.ts +19 -1
  78. package/dist/server/app-optimistic-routing.js +42 -2
  79. package/dist/server/app-page-boundary-render.js +7 -6
  80. package/dist/server/app-page-boundary.js +2 -2
  81. package/dist/server/app-page-cache-finalizer.d.ts +12 -1
  82. package/dist/server/app-page-cache-finalizer.js +70 -29
  83. package/dist/server/app-page-cache.d.ts +13 -1
  84. package/dist/server/app-page-cache.js +31 -9
  85. package/dist/server/app-page-dispatch.d.ts +5 -10
  86. package/dist/server/app-page-dispatch.js +84 -154
  87. package/dist/server/app-page-element-builder.d.ts +2 -2
  88. package/dist/server/app-page-element-builder.js +10 -9
  89. package/dist/server/app-page-execution.d.ts +17 -52
  90. package/dist/server/app-page-execution.js +99 -95
  91. package/dist/server/app-page-head.d.ts +13 -0
  92. package/dist/server/app-page-head.js +44 -16
  93. package/dist/server/app-page-http-access-fallback-metadata.d.ts +1 -0
  94. package/dist/server/app-page-http-access-fallback-metadata.js +2 -2
  95. package/dist/server/app-page-layout-gate.d.ts +35 -0
  96. package/dist/server/app-page-layout-gate.js +50 -0
  97. package/dist/server/app-page-params.d.ts +0 -1
  98. package/dist/server/app-page-params.js +1 -14
  99. package/dist/server/app-page-probe.d.ts +3 -21
  100. package/dist/server/app-page-probe.js +4 -37
  101. package/dist/server/app-page-render.d.ts +2 -12
  102. package/dist/server/app-page-render.js +89 -220
  103. package/dist/server/app-page-request.d.ts +1 -3
  104. package/dist/server/app-page-request.js +1 -1
  105. package/dist/server/app-page-response.js +3 -3
  106. package/dist/server/app-page-route-wiring.d.ts +13 -6
  107. package/dist/server/app-page-route-wiring.js +67 -61
  108. package/dist/server/app-page-rsc-render-status.d.ts +27 -1
  109. package/dist/server/app-page-rsc-render-status.js +121 -13
  110. package/dist/server/app-page-stream.d.ts +2 -0
  111. package/dist/server/app-page-stream.js +2 -2
  112. package/dist/server/app-pages-bridge.d.ts +4 -0
  113. package/dist/server/app-pages-bridge.js +7 -3
  114. package/dist/server/app-render-dependency.d.ts +11 -4
  115. package/dist/server/app-render-dependency.js +86 -38
  116. package/dist/server/app-request-stage-dispatch.js +1 -1
  117. package/dist/server/app-route-handler-cache.js +2 -2
  118. package/dist/server/app-route-handler-dispatch.js +14 -9
  119. package/dist/server/app-route-handler-execution.js +8 -3
  120. package/dist/server/app-route-handler-policy.d.ts +1 -1
  121. package/dist/server/app-route-handler-policy.js +3 -3
  122. package/dist/server/app-route-handler-response.js +1 -1
  123. package/dist/server/app-route-handler-runtime.js +17 -4
  124. package/dist/server/app-rsc-cache-busting.d.ts +2 -2
  125. package/dist/server/app-rsc-cache-busting.js +4 -4
  126. package/dist/server/app-rsc-error-handler.d.ts +2 -1
  127. package/dist/server/app-rsc-error-handler.js +9 -1
  128. package/dist/server/app-rsc-errors.d.ts +8 -0
  129. package/dist/server/app-rsc-errors.js +8 -1
  130. package/dist/server/app-rsc-handler.d.ts +5 -5
  131. package/dist/server/app-rsc-handler.js +30 -24
  132. package/dist/server/app-rsc-request-normalization.d.ts +0 -4
  133. package/dist/server/app-rsc-request-normalization.js +1 -4
  134. package/dist/server/app-rsc-response-finalizer.js +2 -2
  135. package/dist/server/app-rsc-response-stage.js +5 -3
  136. package/dist/server/app-server-action-execution.d.ts +3 -1
  137. package/dist/server/app-server-action-execution.js +7 -4
  138. package/dist/server/app-ssr-entry.d.ts +2 -0
  139. package/dist/server/app-ssr-entry.js +9 -8
  140. package/dist/server/app-ssr-stream.js +1 -1
  141. package/dist/server/app-visited-response-cache.d.ts +36 -1
  142. package/dist/server/app-visited-response-cache.js +46 -5
  143. package/dist/server/app-worker-stages.d.ts +25 -3
  144. package/dist/server/app-worker-stages.js +45 -6
  145. package/dist/server/artifact-compatibility.d.ts +0 -1
  146. package/dist/server/artifact-compatibility.js +1 -10
  147. package/dist/server/cache-proof.d.ts +1 -115
  148. package/dist/server/cache-proof.js +1 -544
  149. package/dist/server/cacheability-request.js +13 -8
  150. package/dist/server/dev-server.js +4 -3
  151. package/dist/server/headers.d.ts +6 -3
  152. package/dist/server/headers.js +9 -5
  153. package/dist/server/isr-cache.d.ts +8 -2
  154. package/dist/server/isr-cache.js +26 -1
  155. package/dist/server/metadata-route-response.js +32 -15
  156. package/dist/server/multi-stage.d.ts +52 -11
  157. package/dist/server/multi-stage.js +13 -1
  158. package/dist/server/navigation-planner.js +1 -1
  159. package/dist/server/pages-api-route.js +28 -19
  160. package/dist/server/pages-media-type.d.ts +21 -1
  161. package/dist/server/pages-media-type.js +69 -5
  162. package/dist/server/pages-node-compat.js +52 -27
  163. package/dist/server/pages-page-handler.js +11 -20
  164. package/dist/server/pages-request-pipeline.d.ts +8 -0
  165. package/dist/server/pages-request-pipeline.js +2 -2
  166. package/dist/server/pages-request-stage-entry.js +14 -12
  167. package/dist/server/pages-response-stage-entry.js +9 -3
  168. package/dist/server/prod-server.js +5 -1
  169. package/dist/server/request-pipeline.d.ts +6 -0
  170. package/dist/server/request-pipeline.js +21 -1
  171. package/dist/server/shared-cache-identity.d.ts +23 -0
  172. package/dist/server/shared-cache-identity.js +36 -0
  173. package/dist/server/worker-stages.d.ts +16 -3
  174. package/dist/server/worker-stages.js +23 -4
  175. package/dist/shims/cache-handler.js +2 -2
  176. package/dist/shims/cache-request-state.d.ts +17 -20
  177. package/dist/shims/cache-request-state.js +16 -21
  178. package/dist/shims/cache-runtime.js +27 -11
  179. package/dist/shims/cache.d.ts +8 -7
  180. package/dist/shims/cache.js +17 -19
  181. package/dist/shims/cacheability-classification.d.ts +2 -0
  182. package/dist/shims/cdn-cache.d.ts +22 -5
  183. package/dist/shims/client-page-root.js +2 -2
  184. package/dist/shims/dynamic.js +9 -6
  185. package/dist/shims/error-boundary.js +2 -2
  186. package/dist/shims/fetch-cache-state.d.ts +5 -1
  187. package/dist/shims/fetch-cache-state.js +1 -3
  188. package/dist/shims/fetch-cache.d.ts +2 -1
  189. package/dist/shims/fetch-cache.js +34 -24
  190. package/dist/shims/form.js +2 -2
  191. package/dist/shims/headers.d.ts +8 -23
  192. package/dist/shims/headers.js +17 -67
  193. package/dist/shims/internal/navigation-untracked.js +1 -1
  194. package/dist/shims/link.js +3 -1
  195. package/dist/shims/metadata.d.ts +23 -21
  196. package/dist/shims/metadata.js +62 -24
  197. package/dist/shims/navigation-server.js +1 -1
  198. package/dist/shims/navigation.d.ts +74 -7
  199. package/dist/shims/navigation.js +183 -29
  200. package/dist/shims/navigation.react-server.js +2 -2
  201. package/dist/shims/request-state-types.d.ts +2 -2
  202. package/dist/shims/slot.d.ts +12 -0
  203. package/dist/shims/slot.js +37 -9
  204. package/dist/shims/unified-request-context.d.ts +1 -1
  205. package/dist/shims/unified-request-context.js +2 -3
  206. package/dist/utils/cache-control-metadata.d.ts +5 -0
  207. package/dist/utils/cache-control-metadata.js +9 -1
  208. package/dist/utils/project.d.ts +2 -2
  209. package/dist/utils/project.js +3 -16
  210. package/dist/utils/regex.d.ts +5 -0
  211. package/dist/utils/regex.js +11 -1
  212. package/dist/utils/text-stream.d.ts +10 -5
  213. package/dist/utils/text-stream.js +6 -6
  214. package/package.json +2 -1
  215. package/dist/build/layout-classification-types.d.ts +0 -60
  216. package/dist/build/layout-classification-types.js +0 -1
  217. package/dist/build/layout-classification.d.ts +0 -62
  218. package/dist/build/layout-classification.js +0 -98
  219. package/dist/build/route-classification-injector.d.ts +0 -33
  220. package/dist/build/route-classification-injector.js +0 -59
  221. package/dist/build/route-classification-manifest.d.ts +0 -54
  222. package/dist/build/route-classification-manifest.js +0 -143
  223. package/dist/server/app-browser-client-reuse-manifest.d.ts +0 -11
  224. package/dist/server/app-browser-client-reuse-manifest.js +0 -101
  225. package/dist/server/app-layout-param-observation.d.ts +0 -42
  226. package/dist/server/app-layout-param-observation.js +0 -168
  227. package/dist/server/client-reuse-manifest.d.ts +0 -103
  228. package/dist/server/client-reuse-manifest.js +0 -209
  229. package/dist/server/skip-cache-proof.d.ts +0 -60
  230. package/dist/server/skip-cache-proof.js +0 -168
  231. package/dist/server/static-layout-client-reuse-proof.d.ts +0 -14
  232. package/dist/server/static-layout-client-reuse-proof.js +0 -33
  233. package/dist/utils/sorted-array.d.ts +0 -8
  234. package/dist/utils/sorted-array.js +0 -20
@@ -1,60 +0,0 @@
1
- import { ArtifactCompatibilityEnvelope, ArtifactCompatibilityEvaluationOptions } from "./artifact-compatibility.js";
2
- import { StaticLayoutArtifactReuseDecision } from "./cache-proof.js";
3
- import { ClientReuseManifestEntry, ClientReuseManifestEntryRejection, ClientReuseManifestParseResult, ClientReuseManifestRejection, ClientReuseManifestSkipDisposition, ClientReuseManifestTraceFields } from "./client-reuse-manifest.js";
4
- import { createStaticLayoutClientReuseArtifactCompatibility, createStaticLayoutClientReusePayloadHash, createStaticLayoutClientReuseRouteId } from "./static-layout-client-reuse-proof.js";
5
- //#region src/server/skip-cache-proof.d.ts
6
- export type SkipCacheInvalidationProof = Readonly<{
7
- kind: "invalidated";
8
- invalidationEpoch: string | null;
9
- }> | Readonly<{
10
- kind: "unknown";
11
- }> | Readonly<{
12
- kind: "valid";
13
- }>;
14
- type SkipCacheArtifactProof = Readonly<{
15
- compatibility: ArtifactCompatibilityEnvelope;
16
- invalidation: SkipCacheInvalidationProof;
17
- payloadHash: string | null;
18
- }>;
19
- type SkipCacheCrossCheckAcceptanceCode = "SKIP_CACHE_CROSS_CHECK_PASSED";
20
- type SkipCacheCrossCheckVerified = Readonly<{
21
- code: SkipCacheCrossCheckAcceptanceCode;
22
- entryId: string;
23
- fields: ClientReuseManifestTraceFields;
24
- kind: "verified";
25
- skipDisposition: ClientReuseManifestSkipDisposition;
26
- }>;
27
- type SkipCacheCrossCheckRejected = Readonly<{
28
- kind: "rejected";
29
- rejection: ClientReuseManifestEntryRejection;
30
- skipDisposition: ClientReuseManifestSkipDisposition;
31
- }>;
32
- type SkipCacheCrossCheckResult = SkipCacheCrossCheckRejected | SkipCacheCrossCheckVerified;
33
- type CrossCheckClientReuseManifestEntryWithCacheInput = Readonly<{
34
- artifact: SkipCacheArtifactProof;
35
- cacheDecision: StaticLayoutArtifactReuseDecision | null;
36
- entry: ClientReuseManifestEntry;
37
- }> & ArtifactCompatibilityEvaluationOptions;
38
- type ClientReuseSkipTransportPlan = Readonly<{
39
- entryRejections: readonly ClientReuseManifestEntryRejection[];
40
- kind: "renderAndSend";
41
- manifestRejection?: ClientReuseManifestRejection;
42
- skipDisposition: ClientReuseManifestSkipDisposition;
43
- skipIneligibleEntryIds: readonly string[];
44
- skippedEntryIds: readonly string[];
45
- }> | Readonly<{
46
- entryRejections: readonly ClientReuseManifestEntryRejection[];
47
- kind: "skip";
48
- skipDisposition: ClientReuseManifestSkipDisposition;
49
- skipIneligibleEntryIds: readonly string[];
50
- skippedEntryIds: readonly string[];
51
- }>;
52
- type CreateClientReuseSkipTransportPlanInput = Readonly<{
53
- manifest: ClientReuseManifestParseResult;
54
- maxWireEntriesToVerify?: number;
55
- verifyEntry: (entry: ClientReuseManifestEntry) => SkipCacheCrossCheckResult;
56
- }>;
57
- export declare function crossCheckClientReuseManifestEntryWithCache(input: CrossCheckClientReuseManifestEntryWithCacheInput): SkipCacheCrossCheckResult;
58
- export declare function createClientReuseSkipTransportPlan(input: CreateClientReuseSkipTransportPlanInput): ClientReuseSkipTransportPlan;
59
- //#endregion
60
- export { createStaticLayoutClientReuseArtifactCompatibility, createStaticLayoutClientReusePayloadHash, createStaticLayoutClientReuseRouteId };
@@ -1,168 +0,0 @@
1
- import { ARTIFACT_COMPATIBILITY_PROOF_FIELDS, evaluateArtifactCompatibility } from "./artifact-compatibility.js";
2
- import { createClientReusePayloadHash } from "./client-reuse-manifest.js";
3
- import { createStaticLayoutClientReuseArtifactCompatibility, createStaticLayoutClientReusePayloadHash, createStaticLayoutClientReuseRouteId } from "./static-layout-client-reuse-proof.js";
4
- //#region src/server/skip-cache-proof.ts
5
- function createDisabledSkipDisposition() {
6
- return {
7
- code: "SKIP_MODEL_DISABLED",
8
- enabled: false,
9
- mode: "renderAndSend"
10
- };
11
- }
12
- function createStaticLayoutSkipDisposition(skippedEntryIds) {
13
- return {
14
- code: "SKIP_STATIC_LAYOUT_VERIFIED",
15
- enabled: true,
16
- mode: "skipStaticLayout",
17
- skippedEntryIds: [...skippedEntryIds]
18
- };
19
- }
20
- function rejectSkipCacheCrossCheck(entry, code, fields = {}) {
21
- return {
22
- kind: "rejected",
23
- rejection: {
24
- code,
25
- entryId: entry.id,
26
- fields
27
- },
28
- skipDisposition: createDisabledSkipDisposition()
29
- };
30
- }
31
- function collectArtifactCompatibilityProofMismatches(artifactCompatibility, proofCompatibility) {
32
- const mismatchedFields = [];
33
- for (const field of ARTIFACT_COMPATIBILITY_PROOF_FIELDS) if (artifactCompatibility[field] !== proofCompatibility[field]) mismatchedFields.push(field);
34
- return mismatchedFields;
35
- }
36
- function isExactArtifactCompatibility(artifactCompatibility, entryCompatibility) {
37
- return collectArtifactCompatibilityProofMismatches(artifactCompatibility, entryCompatibility).length === 0;
38
- }
39
- function assertNever(value) {
40
- throw new Error(`Unhandled skip/cache proof state: ${String(value)}`);
41
- }
42
- function createRenderAndSendPlan(options) {
43
- return {
44
- kind: "renderAndSend",
45
- entryRejections: options.entryRejections ?? [],
46
- ...options.manifestRejection ? { manifestRejection: options.manifestRejection } : {},
47
- skipDisposition: createDisabledSkipDisposition(),
48
- skipIneligibleEntryIds: options.skipIneligibleEntryIds ?? [],
49
- skippedEntryIds: []
50
- };
51
- }
52
- function createVerificationBudgetExceededRejection(totalWireEntries, maxWireEntriesToVerify) {
53
- return {
54
- code: "SKIP_VERIFICATION_BUDGET_EXCEEDED",
55
- fields: {
56
- totalWireEntries,
57
- maxWireEntriesToVerify
58
- }
59
- };
60
- }
61
- function crossCheckInvalidationProof(entry, invalidation) {
62
- switch (invalidation.kind) {
63
- case "valid": return null;
64
- case "unknown": return rejectSkipCacheCrossCheck(entry, "SKIP_CACHE_INVALIDATION_UNKNOWN");
65
- case "invalidated": return rejectSkipCacheCrossCheck(entry, "SKIP_CACHE_INVALIDATED", { invalidationEpoch: invalidation.invalidationEpoch });
66
- default: return assertNever(invalidation);
67
- }
68
- }
69
- function crossCheckClientReuseManifestEntryWithCache(input) {
70
- const { cacheDecision, entry } = input;
71
- if (cacheDecision === null) return rejectSkipCacheCrossCheck(entry, "SKIP_CACHE_PROOF_MISSING");
72
- if (cacheDecision.kind === "fallback") return rejectSkipCacheCrossCheck(entry, "SKIP_CACHE_PROOF_REJECTED", {
73
- cacheProofCode: cacheDecision.fallback.code,
74
- cacheProofMode: cacheDecision.fallback.mode,
75
- cacheProofScope: cacheDecision.fallback.scope
76
- });
77
- const { proof } = cacheDecision;
78
- if (entry.kind !== "layout" || proof.reuseClass !== "static-layout") return rejectSkipCacheCrossCheck(entry, "SKIP_CACHE_REUSE_CLASS_UNSUPPORTED", {
79
- entryKind: entry.kind,
80
- reuseClass: proof.reuseClass
81
- });
82
- if (entry.id !== proof.candidateOutput.layoutId) return rejectSkipCacheCrossCheck(entry, "SKIP_CACHE_ENTRY_ID_MISMATCH", {
83
- cacheEntryId: proof.candidateOutput.layoutId,
84
- manifestEntryId: entry.id
85
- });
86
- const artifactProofMismatches = collectArtifactCompatibilityProofMismatches(input.artifact.compatibility, proof.candidateArtifactCompatibility);
87
- if (artifactProofMismatches.length > 0) return rejectSkipCacheCrossCheck(entry, "SKIP_CACHE_ARTIFACT_PROOF_MISMATCH", { mismatchedFields: artifactProofMismatches });
88
- const artifactCompatibility = evaluateArtifactCompatibility(input.artifact.compatibility, entry.artifactCompatibility, { compatibilityMap: input.compatibilityMap });
89
- if (artifactCompatibility.kind === "unknown") return rejectSkipCacheCrossCheck(entry, "SKIP_CACHE_ARTIFACT_COMPATIBILITY_UNKNOWN", {
90
- compatibilityFallback: artifactCompatibility.fallback,
91
- reason: artifactCompatibility.reason
92
- });
93
- if (artifactCompatibility.kind === "incompatible") return rejectSkipCacheCrossCheck(entry, "SKIP_CACHE_ARTIFACT_COMPATIBILITY_INCOMPATIBLE", {
94
- compatibilityFallback: artifactCompatibility.fallback,
95
- reason: artifactCompatibility.reason
96
- });
97
- if (entry.variantCacheKey !== proof.variant.cacheKey) return rejectSkipCacheCrossCheck(entry, "SKIP_CACHE_VARIANT_MISMATCH", {
98
- cacheVariantCacheKeyHash: createClientReusePayloadHash(proof.variant.cacheKey),
99
- entryVariantCacheKeyHash: createClientReusePayloadHash(entry.variantCacheKey)
100
- });
101
- if (input.artifact.payloadHash === null) return rejectSkipCacheCrossCheck(entry, "SKIP_CACHE_PAYLOAD_HASH_MISSING");
102
- if (entry.payloadHash !== input.artifact.payloadHash) return rejectSkipCacheCrossCheck(entry, "SKIP_CACHE_PAYLOAD_HASH_MISMATCH", {
103
- cachePayloadHash: input.artifact.payloadHash,
104
- entryPayloadHash: entry.payloadHash
105
- });
106
- const invalidationRejection = crossCheckInvalidationProof(entry, input.artifact.invalidation);
107
- if (invalidationRejection) return invalidationRejection;
108
- const skipDisposition = isExactArtifactCompatibility(input.artifact.compatibility, entry.artifactCompatibility) ? createStaticLayoutSkipDisposition([entry.id]) : createDisabledSkipDisposition();
109
- return {
110
- kind: "verified",
111
- code: "SKIP_CACHE_CROSS_CHECK_PASSED",
112
- entryId: entry.id,
113
- fields: {
114
- entryKind: entry.kind,
115
- reuseClass: proof.reuseClass,
116
- variantCacheKeyHash: createClientReusePayloadHash(proof.variant.cacheKey)
117
- },
118
- skipDisposition
119
- };
120
- }
121
- function createClientReuseSkipTransportPlan(input) {
122
- const { manifest } = input;
123
- if (manifest.kind === "absent") return createRenderAndSendPlan({});
124
- if (manifest.kind === "rejected") return createRenderAndSendPlan({ manifestRejection: manifest.rejection });
125
- const maxWireEntriesToVerify = input.maxWireEntriesToVerify ?? 8;
126
- if (!Number.isSafeInteger(maxWireEntriesToVerify) || maxWireEntriesToVerify < 0) throw new RangeError("maxWireEntriesToVerify must be a non-negative safe integer");
127
- const totalWireEntries = manifest.manifest.entries.length + manifest.entryRejections.length;
128
- if (totalWireEntries > maxWireEntriesToVerify) return createRenderAndSendPlan({
129
- entryRejections: manifest.entryRejections,
130
- manifestRejection: createVerificationBudgetExceededRejection(totalWireEntries, maxWireEntriesToVerify)
131
- });
132
- const skippedEntryIds = [];
133
- const skipIneligibleEntryIds = [];
134
- const entryRejections = [...manifest.entryRejections];
135
- for (const entry of manifest.manifest.entries) {
136
- const verification = input.verifyEntry(entry);
137
- if (verification.kind === "rejected") {
138
- entryRejections.push(verification.rejection);
139
- continue;
140
- }
141
- if (verification.entryId !== entry.id) {
142
- entryRejections.push({
143
- code: "SKIP_CACHE_ENTRY_ID_MISMATCH",
144
- entryId: entry.id,
145
- fields: {
146
- verifierEntryId: verification.entryId,
147
- manifestEntryId: entry.id
148
- }
149
- });
150
- continue;
151
- }
152
- if (verification.skipDisposition.enabled) skippedEntryIds.push(entry.id);
153
- else skipIneligibleEntryIds.push(entry.id);
154
- }
155
- if (skippedEntryIds.length === 0) return createRenderAndSendPlan({
156
- entryRejections,
157
- skipIneligibleEntryIds
158
- });
159
- return {
160
- kind: "skip",
161
- entryRejections,
162
- skipDisposition: createStaticLayoutSkipDisposition(skippedEntryIds),
163
- skipIneligibleEntryIds,
164
- skippedEntryIds
165
- };
166
- }
167
- //#endregion
168
- export { createClientReuseSkipTransportPlan, createStaticLayoutClientReuseArtifactCompatibility, createStaticLayoutClientReusePayloadHash, createStaticLayoutClientReuseRouteId, crossCheckClientReuseManifestEntryWithCache };
@@ -1,14 +0,0 @@
1
- import { ArtifactCompatibilityEnvelope } from "./artifact-compatibility.js";
2
- //#region src/server/static-layout-client-reuse-proof.d.ts
3
- type StaticLayoutClientReuseProofInput = Readonly<{
4
- artifactCompatibility: ArtifactCompatibilityEnvelope;
5
- layoutId: string;
6
- rootBoundaryId: string | null;
7
- routeId: string;
8
- variantCacheKey: string;
9
- }>;
10
- export declare function createStaticLayoutClientReuseRouteId(layoutId: string): string;
11
- export declare function createStaticLayoutClientReusePayloadHash(input: StaticLayoutClientReuseProofInput): string;
12
- export declare function createStaticLayoutClientReuseArtifactCompatibility(input: StaticLayoutClientReuseProofInput): ArtifactCompatibilityEnvelope;
13
- //#endregion
14
- export {};
@@ -1,33 +0,0 @@
1
- import { ARTIFACT_COMPATIBILITY_PROOF_FIELDS } from "./artifact-compatibility.js";
2
- import { createClientReusePayloadHash } from "./client-reuse-manifest.js";
3
- //#region src/server/static-layout-client-reuse-proof.ts
4
- function createStaticLayoutClientReuseRouteId(layoutId) {
5
- return `static-layout:${createClientReusePayloadHash(layoutId)}`;
6
- }
7
- function createCanonicalProofPairs(input) {
8
- return ARTIFACT_COMPATIBILITY_PROOF_FIELDS.map((field) => [field, input.artifactCompatibility[field]]);
9
- }
10
- function createStaticLayoutClientReusePayloadHash(input) {
11
- return createClientReusePayloadHash(JSON.stringify({
12
- artifactCompatibilityPairs: createCanonicalProofPairs(input),
13
- layoutId: input.layoutId,
14
- rootBoundaryId: input.rootBoundaryId,
15
- variantCacheKey: input.variantCacheKey
16
- }));
17
- }
18
- function createStaticLayoutClientReuseArtifactCompatibility(input) {
19
- return {
20
- ...input.artifactCompatibility,
21
- graphVersion: `static-layout-graph:${createClientReusePayloadHash(JSON.stringify({
22
- layoutId: input.layoutId,
23
- rootBoundaryId: input.rootBoundaryId
24
- }))}`,
25
- renderEpoch: `static-layout:${createClientReusePayloadHash(JSON.stringify({
26
- layoutId: input.layoutId,
27
- rootBoundaryId: input.rootBoundaryId,
28
- variantCacheKey: input.variantCacheKey
29
- }))}`
30
- };
31
- }
32
- //#endregion
33
- export { createStaticLayoutClientReuseArtifactCompatibility, createStaticLayoutClientReusePayloadHash, createStaticLayoutClientReuseRouteId };
@@ -1,8 +0,0 @@
1
- //#region src/utils/sorted-array.d.ts
2
- type SortedStringPosition = Readonly<{
3
- found: boolean;
4
- index: number;
5
- }>;
6
- export declare function findSortedStringPosition(values: readonly string[], candidate: string): SortedStringPosition;
7
- //#endregion
8
- export {};
@@ -1,20 +0,0 @@
1
- //#region src/utils/sorted-array.ts
2
- function findSortedStringPosition(values, candidate) {
3
- let lower = 0;
4
- let upper = values.length;
5
- while (lower < upper) {
6
- const middle = lower + Math.floor((upper - lower) / 2);
7
- if (values[middle] === candidate) return {
8
- found: true,
9
- index: middle
10
- };
11
- if (values[middle] < candidate) lower = middle + 1;
12
- else upper = middle;
13
- }
14
- return {
15
- found: false,
16
- index: lower
17
- };
18
- }
19
- //#endregion
20
- export { findSortedStringPosition };