@uniformdev/canvas-next-rsc 19.69.0 → 19.73.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 (156) hide show
  1. package/dist/UniformComposition-38e22896.d.ts +61 -0
  2. package/dist/component.d.mts +76 -0
  3. package/dist/component.d.ts +76 -0
  4. package/dist/component.js +218 -0
  5. package/dist/component.mjs +182 -0
  6. package/dist/config.d.mts +6 -0
  7. package/dist/config.d.ts +6 -1
  8. package/dist/config.js +56 -29
  9. package/dist/config.mjs +41 -0
  10. package/dist/handler.d.mts +12 -0
  11. package/dist/handler.d.ts +12 -2
  12. package/dist/handler.js +703 -2
  13. package/dist/handler.mjs +682 -0
  14. package/dist/{client/manifestClient.d.ts → index.d.mts} +100 -18
  15. package/dist/index.d.ts +243 -23
  16. package/dist/index.esm.js +977 -0
  17. package/dist/index.js +1013 -29
  18. package/dist/index.mjs +977 -0
  19. package/package.json +23 -15
  20. package/dist/actions/updateContext.d.ts +0 -2
  21. package/dist/actions/updateContext.js +0 -17
  22. package/dist/client/canvasClient.d.ts +0 -5
  23. package/dist/client/canvasClient.js +0 -53
  24. package/dist/client/manifestClient.js +0 -33
  25. package/dist/client/projectMapClient.d.ts +0 -5
  26. package/dist/client/projectMapClient.js +0 -17
  27. package/dist/client/routeClient.d.ts +0 -5
  28. package/dist/client/routeClient.js +0 -68
  29. package/dist/components/DefaultNotImplementedComponent.d.ts +0 -2
  30. package/dist/components/DefaultNotImplementedComponent.js +0 -45
  31. package/dist/components/GoogleTagManagerAnalytics.d.ts +0 -3
  32. package/dist/components/GoogleTagManagerAnalytics.js +0 -44
  33. package/dist/components/UniformComponent.d.ts +0 -25
  34. package/dist/components/UniformComponent.js +0 -14
  35. package/dist/components/UniformComposition.d.ts +0 -40
  36. package/dist/components/UniformComposition.js +0 -35
  37. package/dist/components/UniformContext.d.ts +0 -8
  38. package/dist/components/UniformContext.js +0 -19
  39. package/dist/components/UniformRichText.d.ts +0 -38
  40. package/dist/components/UniformRichText.js +0 -15
  41. package/dist/components/UniformRichTextNode.d.ts +0 -10
  42. package/dist/components/UniformRichTextNode.js +0 -49
  43. package/dist/components/UniformScript.d.ts +0 -3
  44. package/dist/components/UniformScript.js +0 -49
  45. package/dist/components/UniformSlot.d.ts +0 -40
  46. package/dist/components/UniformSlot.js +0 -38
  47. package/dist/components/UniformText.d.ts +0 -6
  48. package/dist/components/UniformText.js +0 -5
  49. package/dist/components/__tests__/evaluateComposition.spec.d.ts +0 -1
  50. package/dist/components/__tests__/evaluateComposition.spec.js +0 -80
  51. package/dist/components/convertComponentToProps.d.ts +0 -14
  52. package/dist/components/convertComponentToProps.js +0 -22
  53. package/dist/components/evaluateComposition.d.ts +0 -22
  54. package/dist/components/evaluateComposition.js +0 -183
  55. package/dist/components/getEnrichmentTags.d.ts +0 -3
  56. package/dist/components/getEnrichmentTags.js +0 -13
  57. package/dist/components/getUniformContext.d.ts +0 -6
  58. package/dist/components/getUniformContext.js +0 -17
  59. package/dist/components/nodes/HeadingRichTextNode.d.ts +0 -2
  60. package/dist/components/nodes/HeadingRichTextNode.js +0 -6
  61. package/dist/components/nodes/LinebreakRichTextNode.d.ts +0 -2
  62. package/dist/components/nodes/LinebreakRichTextNode.js +0 -4
  63. package/dist/components/nodes/LinkRichTextNode.d.ts +0 -2
  64. package/dist/components/nodes/LinkRichTextNode.js +0 -6
  65. package/dist/components/nodes/ListItemRichTextNode.d.ts +0 -2
  66. package/dist/components/nodes/ListItemRichTextNode.js +0 -5
  67. package/dist/components/nodes/ListRichTextNode.d.ts +0 -2
  68. package/dist/components/nodes/ListRichTextNode.js +0 -6
  69. package/dist/components/nodes/ParagraphRichTextNode.d.ts +0 -2
  70. package/dist/components/nodes/ParagraphRichTextNode.js +0 -6
  71. package/dist/components/nodes/TabRichTextNode.d.ts +0 -2
  72. package/dist/components/nodes/TabRichTextNode.js +0 -4
  73. package/dist/components/nodes/TextRichTextNode.d.ts +0 -2
  74. package/dist/components/nodes/TextRichTextNode.js +0 -9
  75. package/dist/components/renderComponent.d.ts +0 -15
  76. package/dist/components/renderComponent.js +0 -52
  77. package/dist/components/resolvePath.d.ts +0 -5
  78. package/dist/components/resolvePath.js +0 -34
  79. package/dist/components/retrieveRoute.d.ts +0 -141
  80. package/dist/components/retrieveRoute.js +0 -146
  81. package/dist/components/types.d.ts +0 -11
  82. package/dist/components/types.js +0 -1
  83. package/dist/config/helpers.d.ts +0 -17
  84. package/dist/config/helpers.js +0 -34
  85. package/dist/config/models.d.ts +0 -51
  86. package/dist/config/models.js +0 -1
  87. package/dist/cookie/index.d.ts +0 -12
  88. package/dist/cookie/index.js +0 -21
  89. package/dist/handler/createPreviewGETRouteHandler.d.ts +0 -1
  90. package/dist/handler/createPreviewGETRouteHandler.js +0 -43
  91. package/dist/handler/createPreviewPOSTRouteHandler.d.ts +0 -1
  92. package/dist/handler/createPreviewPOSTRouteHandler.js +0 -88
  93. package/dist/handler/createUniformRouteHandler.d.ts +0 -4
  94. package/dist/handler/createUniformRouteHandler.js +0 -10
  95. package/dist/handler/helpers.d.ts +0 -19
  96. package/dist/handler/helpers.js +0 -148
  97. package/dist/handler/messages/handleCompositionChanged.d.ts +0 -2
  98. package/dist/handler/messages/handleCompositionChanged.js +0 -9
  99. package/dist/handler/messages/handleCompositionDeleted.d.ts +0 -2
  100. package/dist/handler/messages/handleCompositionDeleted.js +0 -9
  101. package/dist/handler/messages/handleCompositionPublished.d.ts +0 -2
  102. package/dist/handler/messages/handleCompositionPublished.js +0 -9
  103. package/dist/handler/messages/handleManifestPublished.d.ts +0 -2
  104. package/dist/handler/messages/handleManifestPublished.js +0 -10
  105. package/dist/handler/messages/handleProjectMapNodeDelete.d.ts +0 -2
  106. package/dist/handler/messages/handleProjectMapNodeDelete.js +0 -21
  107. package/dist/handler/messages/handleProjectMapNodeInsert.d.ts +0 -2
  108. package/dist/handler/messages/handleProjectMapNodeInsert.js +0 -21
  109. package/dist/handler/messages/handleProjectMapNodeUpdate.d.ts +0 -2
  110. package/dist/handler/messages/handleProjectMapNodeUpdate.js +0 -22
  111. package/dist/handler/messages/handleRedirectDelete.d.ts +0 -2
  112. package/dist/handler/messages/handleRedirectDelete.js +0 -15
  113. package/dist/handler/messages/handleRedirectInsert.d.ts +0 -2
  114. package/dist/handler/messages/handleRedirectInsert.js +0 -15
  115. package/dist/handler/messages/handleRedirectUpdate.d.ts +0 -2
  116. package/dist/handler/messages/handleRedirectUpdate.js +0 -15
  117. package/dist/hooks/useForgetMe.d.ts +0 -4
  118. package/dist/hooks/useForgetMe.js +0 -10
  119. package/dist/hooks/useToggleConsent.d.ts +0 -7
  120. package/dist/hooks/useToggleConsent.js +0 -22
  121. package/dist/hooks/useUniformContext.d.ts +0 -1
  122. package/dist/hooks/useUniformContext.js +0 -3
  123. package/dist/models/index.d.ts +0 -30
  124. package/dist/models/index.js +0 -1
  125. package/dist/register/componentStore.d.ts +0 -1
  126. package/dist/register/componentStore.js +0 -2
  127. package/dist/register/componentStoreResolver.d.ts +0 -2
  128. package/dist/register/componentStoreResolver.js +0 -5
  129. package/dist/register/createComponentStore.d.ts +0 -12
  130. package/dist/register/createComponentStore.js +0 -13
  131. package/dist/register/createComponentStoreResolver.d.ts +0 -9
  132. package/dist/register/createComponentStoreResolver.js +0 -9
  133. package/dist/register/getTypeWithVariant.d.ts +0 -1
  134. package/dist/register/getTypeWithVariant.js +0 -1
  135. package/dist/register/registerUniformComponent.d.ts +0 -6
  136. package/dist/register/registerUniformComponent.js +0 -8
  137. package/dist/resolve/resolveChildren.d.ts +0 -10
  138. package/dist/resolve/resolveChildren.js +0 -20
  139. package/dist/score/index.d.ts +0 -3
  140. package/dist/score/index.js +0 -114
  141. package/dist/utils/__tests__/apply.spec.d.ts +0 -1
  142. package/dist/utils/__tests__/apply.spec.js +0 -358
  143. package/dist/utils/__tests__/diff.spec.d.ts +0 -1
  144. package/dist/utils/__tests__/diff.spec.js +0 -394
  145. package/dist/utils/apply.d.ts +0 -6
  146. package/dist/utils/apply.js +0 -124
  147. package/dist/utils/comp.d.ts +0 -16
  148. package/dist/utils/comp.js +0 -65
  149. package/dist/utils/diff.d.ts +0 -44
  150. package/dist/utils/diff.js +0 -144
  151. package/dist/utils/draft.d.ts +0 -12
  152. package/dist/utils/draft.js +0 -22
  153. package/dist/utils/tag.d.ts +0 -2
  154. package/dist/utils/tag.js +0 -7
  155. package/dist/utils/url.d.ts +0 -1
  156. package/dist/utils/url.js +0 -10
@@ -0,0 +1,682 @@
1
+ // src/handler/createPreviewGETRouteHandler.ts
2
+ import {
3
+ CANVAS_DRAFT_STATE as CANVAS_DRAFT_STATE2,
4
+ IN_CONTEXT_EDITOR_PLAYGROUND_QUERY_STRING_PARAM,
5
+ IN_CONTEXT_EDITOR_QUERY_STRING_PARAM as IN_CONTEXT_EDITOR_QUERY_STRING_PARAM2
6
+ } from "@uniformdev/canvas";
7
+ import { draftMode as draftMode2 } from "next/headers";
8
+ import { redirect } from "next/navigation";
9
+
10
+ // src/utils/route.ts
11
+ import {
12
+ CANVAS_DRAFT_STATE,
13
+ CANVAS_EDITOR_STATE,
14
+ CANVAS_PUBLISHED_STATE
15
+ } from "@uniformdev/canvas";
16
+ import { getBaseUrl, getServerConfig as getServerConfig2, resolvePath } from "@uniformdev/canvas-next-rsc-shared";
17
+ import { getTargetVariableExpandedUrl } from "@uniformdev/redirect";
18
+
19
+ // src/config/helpers.ts
20
+ import { getServerConfig } from "@uniformdev/canvas-next-rsc-shared";
21
+
22
+ // src/utils/draft.ts
23
+ import { IN_CONTEXT_EDITOR_QUERY_STRING_PARAM } from "@uniformdev/canvas";
24
+ import { draftMode } from "next/headers";
25
+ var isDraftModeEnabled = ({
26
+ searchParams
27
+ }) => {
28
+ if (isDevelopmentEnvironment()) {
29
+ return isIncontextEditingEnabled({ searchParams });
30
+ }
31
+ let draftModeEnabled = false;
32
+ try {
33
+ draftModeEnabled = draftMode().isEnabled;
34
+ } catch (e) {
35
+ }
36
+ return draftModeEnabled || isIncontextEditingEnabled({ searchParams });
37
+ };
38
+ var isIncontextEditingEnabled = ({
39
+ searchParams
40
+ }) => {
41
+ const containsKey = typeof (searchParams == null ? void 0 : searchParams[IN_CONTEXT_EDITOR_QUERY_STRING_PARAM]) !== "undefined";
42
+ return containsKey;
43
+ };
44
+ var isOnVercelPreviewEnvironment = () => {
45
+ return process.env.VERCEL_ENV === "preview";
46
+ };
47
+ var isDevelopmentEnvironment = () => {
48
+ return process.env.NODE_ENV === "development" || process.env.NODE_ENV === "test";
49
+ };
50
+
51
+ // src/config/helpers.ts
52
+ var shouldCacheBeDisabled = (options) => {
53
+ if (isDraftModeEnabled(options)) {
54
+ return { disabled: true, reason: "DRAFT" };
55
+ }
56
+ if (isIncontextEditingEnabled(options)) {
57
+ return { disabled: true, reason: "INCONTEXT" };
58
+ }
59
+ if (isDevelopmentEnvironment()) {
60
+ return { disabled: true, reason: "DEV" };
61
+ }
62
+ return {
63
+ disabled: false,
64
+ reason: void 0
65
+ };
66
+ };
67
+ var getCanvasCacheStrategy = (options) => {
68
+ const { disabled, reason } = shouldCacheBeDisabled(options);
69
+ const config = getServerConfig();
70
+ if (disabled) {
71
+ if (reason === "DEV" && config.canvasCache) {
72
+ console.warn("Canvas cache (disabled) has been overridden by canvasCache config.");
73
+ return config.canvasCache;
74
+ }
75
+ return {
76
+ type: "no-cache"
77
+ };
78
+ }
79
+ if (config.canvasCache) {
80
+ return config.canvasCache;
81
+ }
82
+ return {
83
+ type: "force-cache"
84
+ };
85
+ };
86
+
87
+ // src/env/index.ts
88
+ var env = {
89
+ getProjectId: () => {
90
+ return process.env.UNIFORM_PROJECT_ID;
91
+ },
92
+ getApiKey: () => {
93
+ return process.env.UNIFORM_API_KEY;
94
+ },
95
+ getApiHost: () => {
96
+ return process.env.UNIFORM_API_HOST || process.env.UNIFORM_CLI_BASE_URL;
97
+ },
98
+ getEdgeApiHost: () => {
99
+ return process.env.UNIFORM_EDGE_API_HOST || process.env.UNIFORM_CLI_BASE_EDGE_URL;
100
+ }
101
+ };
102
+
103
+ // src/utils/tag.ts
104
+ var buildPathTag = (path) => {
105
+ const actualPath = path.startsWith("/") ? path : `/${path}`;
106
+ return `path:${actualPath}`.toLowerCase();
107
+ };
108
+ var buildCompositionTag = (compositionId) => {
109
+ return `composition:${compositionId}`.toLowerCase();
110
+ };
111
+
112
+ // src/clients/shared.ts
113
+ var determineFetchCacheOptions = (mode) => {
114
+ let cache = void 0;
115
+ let revalidate = void 0;
116
+ if (mode.type === "revalidate") {
117
+ cache = void 0;
118
+ revalidate = mode.interval;
119
+ } else {
120
+ cache = mode.type;
121
+ }
122
+ return {
123
+ cache,
124
+ revalidate
125
+ };
126
+ };
127
+
128
+ // src/clients/routeClient.ts
129
+ import { RouteClient } from "@uniformdev/canvas";
130
+ var getRouteClient = (options) => {
131
+ const client = new RouteClient({
132
+ projectId: env.getProjectId(),
133
+ apiKey: env.getApiKey(),
134
+ edgeApiHost: env.getEdgeApiHost(),
135
+ fetch: (req, init) => {
136
+ let requestedUrl;
137
+ if (typeof req === "string") {
138
+ requestedUrl = new URL(req);
139
+ } else if (req instanceof URL) {
140
+ requestedUrl = req;
141
+ } else {
142
+ requestedUrl = new URL(req.url);
143
+ }
144
+ const tags = [];
145
+ if (requestedUrl) {
146
+ const pathKey = "path";
147
+ const path = requestedUrl.searchParams.get(pathKey);
148
+ if (path) {
149
+ const pieces = path.split("/");
150
+ for (let i = 0; i < pieces.length; i++) {
151
+ const segmentPieces = pieces.slice(0, i + 1);
152
+ const segment = segmentPieces.join("/");
153
+ tags.push(buildPathTag(segment));
154
+ }
155
+ }
156
+ }
157
+ const { cache, revalidate } = determineFetchCacheOptions(options.cache);
158
+ return fetch(req, {
159
+ ...init,
160
+ headers: {
161
+ ...init == null ? void 0 : init.headers,
162
+ "x-bypass-cache": "true"
163
+ },
164
+ cache,
165
+ next: {
166
+ revalidate,
167
+ tags: tags.length ? tags : void 0
168
+ }
169
+ });
170
+ }
171
+ });
172
+ return client;
173
+ };
174
+ var getDefaultRouteClient = ({ searchParams }) => {
175
+ return getRouteClient({
176
+ cache: getCanvasCacheStrategy({
177
+ searchParams
178
+ })
179
+ });
180
+ };
181
+
182
+ // src/utils/route.ts
183
+ var retrieveRouteByPath = async ({
184
+ path,
185
+ state,
186
+ searchParams
187
+ }) => {
188
+ var _a;
189
+ const client = getDefaultRouteClient({
190
+ searchParams
191
+ });
192
+ return await client.getRoute({
193
+ path,
194
+ state,
195
+ withComponentIDs: true,
196
+ withContentSourceMap: isOnVercelPreviewEnvironment() && ((_a = getServerConfig2().experimental) == null ? void 0 : _a.vercelVisualEditing)
197
+ });
198
+ };
199
+ var resolveRedirectHref = (resolveResult, path) => {
200
+ let href;
201
+ if (resolveResult.redirect.targetProjectMapNodeId) {
202
+ const requestUrl = `${getBaseUrl()}${path}`;
203
+ const expandedUrl = getTargetVariableExpandedUrl(requestUrl, resolveResult.redirect);
204
+ const url = new URL(expandedUrl);
205
+ href = url.pathname;
206
+ } else {
207
+ href = resolveResult.redirect.targetUrl;
208
+ }
209
+ return href;
210
+ };
211
+
212
+ // src/handler/createPreviewGETRouteHandler.ts
213
+ var getQueryParam = (req, paramName) => {
214
+ const value = req.nextUrl.searchParams.get(paramName);
215
+ if (typeof value === "undefined") {
216
+ return void 0;
217
+ }
218
+ return Array.isArray(value) ? value[0] : value;
219
+ };
220
+ var createPreviewGETRouteHandler = (options) => {
221
+ return async (request) => {
222
+ const isConfigCheck = getQueryParam(request, "is_config_check") === "true";
223
+ if (isConfigCheck) {
224
+ return Response.json(
225
+ {
226
+ hasPlayground: Boolean(options == null ? void 0 : options.playgroundPath),
227
+ isUsingCustomFullPathResolver: false
228
+ },
229
+ {
230
+ headers: {
231
+ "Access-Control-Allow-Origin": process.env.UNIFORM_CLI_BASE_URL || "http://uniform.app"
232
+ }
233
+ }
234
+ );
235
+ }
236
+ if (request.headers.get("sec-fetch-mode") === "no-cors") {
237
+ return new Response(null, { status: 204 });
238
+ }
239
+ if (!process.env.UNIFORM_PREVIEW_SECRET) {
240
+ return new Response("No preview secret is configured", { status: 401 });
241
+ }
242
+ const { searchParams } = new URL(request.url);
243
+ const secret = searchParams.get("secret");
244
+ const path = searchParams.get("path");
245
+ const isPlayground = searchParams.get(IN_CONTEXT_EDITOR_PLAYGROUND_QUERY_STRING_PARAM) === "true";
246
+ const id = searchParams.get("id");
247
+ if (secret !== process.env.UNIFORM_PREVIEW_SECRET) {
248
+ return new Response("Invalid preview secret", { status: 401 });
249
+ }
250
+ if (!isPlayground) {
251
+ if (!path) {
252
+ return new Response("Path not provided", { status: 401 });
253
+ }
254
+ const resolveResult = await retrieveRouteByPath({
255
+ path,
256
+ state: CANVAS_DRAFT_STATE2,
257
+ searchParams: {
258
+ // about to be in draft mode so pretend for now.
259
+ [IN_CONTEXT_EDITOR_QUERY_STRING_PARAM2]: "true"
260
+ }
261
+ });
262
+ draftMode2().enable();
263
+ if (resolveResult.type === "redirect") {
264
+ const href = resolveRedirectHref(resolveResult, path);
265
+ if (resolveResult.redirect.targetProjectMapNodeId) {
266
+ redirect(`${href}?${IN_CONTEXT_EDITOR_QUERY_STRING_PARAM2}=true`);
267
+ } else {
268
+ redirect(href);
269
+ }
270
+ }
271
+ if (resolveResult.type === "notFound") {
272
+ return new Response("Invalid path", { status: 401 });
273
+ }
274
+ redirect(`${path}?${IN_CONTEXT_EDITOR_QUERY_STRING_PARAM2}=true`);
275
+ } else {
276
+ if (!(options == null ? void 0 : options.playgroundPath)) {
277
+ return new Response("No playground path is configured", { status: 401 });
278
+ }
279
+ draftMode2().enable();
280
+ redirect(`${options.playgroundPath}?id=${id}&${IN_CONTEXT_EDITOR_QUERY_STRING_PARAM2}=true`);
281
+ }
282
+ };
283
+ };
284
+
285
+ // src/handler/createPreviewOPTIONSRouteHandler.ts
286
+ var createPreviewOPTIONSRouteHandler = () => {
287
+ return async () => {
288
+ return new Response(null, {
289
+ headers: {
290
+ "Access-Control-Allow-Origin": process.env.UNIFORM_CLI_BASE_URL || "http://uniform.app",
291
+ "Access-Control-Allow-Methods": "GET, POST, OPTIONS",
292
+ "Access-Control-Allow-Headers": "*"
293
+ }
294
+ });
295
+ };
296
+ };
297
+
298
+ // src/handler/createPreviewPOSTRouteHandler.ts
299
+ import { revalidateTag } from "next/cache";
300
+
301
+ // src/handler/helpers.ts
302
+ import { getServerConfig as getServerConfig3 } from "@uniformdev/canvas-next-rsc-shared";
303
+ import { parseConnectionString } from "@vercel/edge-config";
304
+ import { Webhook } from "svix";
305
+
306
+ // src/clients/projectMapClient.ts
307
+ import { ProjectMapClient } from "@uniformdev/project-map";
308
+ var getProjectMapClient = (options) => {
309
+ const manifestClient = new ProjectMapClient({
310
+ apiHost: env.getApiHost(),
311
+ apiKey: env.getApiKey(),
312
+ projectId: env.getProjectId(),
313
+ fetch: (req, init) => {
314
+ const { cache, revalidate } = determineFetchCacheOptions(options.cache);
315
+ return fetch(req, {
316
+ ...init,
317
+ headers: {
318
+ ...init == null ? void 0 : init.headers,
319
+ "x-bypass-cache": "true"
320
+ },
321
+ cache,
322
+ next: {
323
+ revalidate
324
+ }
325
+ });
326
+ }
327
+ });
328
+ return manifestClient;
329
+ };
330
+
331
+ // src/handler/helpers.ts
332
+ var isSvixMessage = async (request) => {
333
+ const requiredHeaders = ["svix-id", "svix-timestamp", "svix-signature"];
334
+ const hasAllRequiredHeaders = requiredHeaders.every((header) => request.headers.has(header));
335
+ if (!hasAllRequiredHeaders) {
336
+ return {
337
+ looksLikeMessage: false,
338
+ validation: false
339
+ };
340
+ }
341
+ if (typeof process.env.UNIFORM_WEBHOOK_SECRET !== "undefined") {
342
+ const payload = await request.clone().text();
343
+ const headers = Object.fromEntries(request.headers.entries());
344
+ const wh = new Webhook(process.env.UNIFORM_WEBHOOK_SECRET);
345
+ try {
346
+ wh.verify(payload, headers);
347
+ } catch (err) {
348
+ return {
349
+ looksLikeMessage: true,
350
+ validation: false
351
+ };
352
+ }
353
+ }
354
+ return {
355
+ looksLikeMessage: true,
356
+ validation: true
357
+ };
358
+ };
359
+ var processCompositionChange = async (compositionId) => {
360
+ const projectMapClient = getProjectMapClient({
361
+ cache: {
362
+ type: "no-cache"
363
+ }
364
+ });
365
+ const { nodes } = await projectMapClient.getNodes({
366
+ compositionId
367
+ });
368
+ const tags = [];
369
+ if (nodes) {
370
+ for (let i = 0; i < nodes.length; i++) {
371
+ const node = nodes[i];
372
+ await processEdgeConfigChange({
373
+ source_url: node.path
374
+ });
375
+ tags.push(...buildProjectMapNodePaths(node.path));
376
+ }
377
+ }
378
+ tags.push(buildCompositionTag(compositionId));
379
+ return {
380
+ tags
381
+ };
382
+ };
383
+ var buildProjectMapNodePaths = (path) => {
384
+ const tags = [];
385
+ const isDynamic = path.includes(":");
386
+ if (!isDynamic) {
387
+ tags.push(buildPathTag(path));
388
+ } else {
389
+ const pieces = path.split("/");
390
+ const invalidatePieces = [];
391
+ for (let j = 0; j < pieces.length; j++) {
392
+ const piece = pieces[j];
393
+ if (piece.startsWith(":")) {
394
+ break;
395
+ }
396
+ invalidatePieces.push(piece);
397
+ }
398
+ const toInvalidate = invalidatePieces.join("/");
399
+ tags.push(buildPathTag(toInvalidate));
400
+ }
401
+ return tags;
402
+ };
403
+ var getPathName = (url) => {
404
+ try {
405
+ const { pathname } = new URL(url);
406
+ return pathname;
407
+ } catch (e) {
408
+ return url;
409
+ }
410
+ };
411
+ var processRedirectChange = async (sourceUrl) => {
412
+ const tags = [];
413
+ const pathName = getPathName(sourceUrl);
414
+ tags.push(buildPathTag(pathName));
415
+ return {
416
+ tags
417
+ };
418
+ };
419
+ var processEdgeConfigChange = async ({ source_url }) => {
420
+ var _a, _b;
421
+ if (!process.env.UNIFORM_VERCEL_EDGE_CONFIG_TOKEN) {
422
+ console.warn("UNIFORM_VERCEL_EDGE_CONFIG_TOKEN is not set, skipping edge redirect upsert");
423
+ return;
424
+ }
425
+ const config = getServerConfig3();
426
+ const routeClient = getRouteClient({
427
+ cache: {
428
+ type: "no-cache"
429
+ }
430
+ });
431
+ const route = await routeClient.getRoute({
432
+ path: source_url
433
+ });
434
+ let valueToStore = void 0;
435
+ const shouldSaveRedirect = route.type === "redirect" && ((_a = config.experimental) == null ? void 0 : _a.edgeRedirects);
436
+ const shouldSaveComposition = route.type === "composition" && ((_b = config.experimental) == null ? void 0 : _b.edgeCompositions);
437
+ if (shouldSaveRedirect || shouldSaveComposition) {
438
+ valueToStore = route;
439
+ }
440
+ const sourcePath = getPathName(source_url);
441
+ const soucrcePathKey = buildPathTag(sourcePath);
442
+ const { id } = parseConnectionString(process.env.EDGE_CONFIG) || {};
443
+ if (!id) {
444
+ console.warn("EDGE_CONFIG is not set or not a connection string, skipping edge redirect upsert");
445
+ return;
446
+ }
447
+ const url = new URL(`https://api.vercel.com/v1/edge-config/${id}/items`);
448
+ if (process.env.UNIFORM_VERCEL_EDGE_CONFIG_TEAM_ID) {
449
+ url.searchParams.set("teamId", process.env.UNIFORM_VERCEL_EDGE_CONFIG_TEAM_ID);
450
+ }
451
+ const response = await fetch(url.toString(), {
452
+ method: "PATCH",
453
+ headers: {
454
+ "Content-Type": "application/json",
455
+ Authorization: `Bearer ${process.env.UNIFORM_VERCEL_EDGE_CONFIG_TOKEN}`
456
+ },
457
+ body: JSON.stringify({
458
+ items: [
459
+ {
460
+ operation: valueToStore ? "upsert" : "delete",
461
+ key: soucrcePathKey.replace(/\W+/g, ""),
462
+ value: valueToStore != null ? valueToStore : null
463
+ }
464
+ ]
465
+ })
466
+ });
467
+ if (!response.ok) {
468
+ console.warn(`Failed to upsert edge redirect for ${source_url}`, await response.text());
469
+ }
470
+ };
471
+
472
+ // src/handler/messages/handleCompositionChanged.ts
473
+ import { CompositionChangedDefinition } from "@uniformdev/webhooks";
474
+ var handleCompositionChanged = async (body) => {
475
+ const parsed = CompositionChangedDefinition.schema.safeParse(body);
476
+ if (!parsed.success) {
477
+ return void 0;
478
+ }
479
+ return processCompositionChange(parsed.data.id);
480
+ };
481
+
482
+ // src/handler/messages/handleCompositionDeleted.ts
483
+ import { CompositionDeletedDefinition } from "@uniformdev/webhooks";
484
+ var handleCompositionDeleted = async (body) => {
485
+ const parsed = CompositionDeletedDefinition.schema.safeParse(body);
486
+ if (!parsed.success) {
487
+ return void 0;
488
+ }
489
+ return processCompositionChange(parsed.data.id);
490
+ };
491
+
492
+ // src/handler/messages/handleCompositionPublished.ts
493
+ import { CompositionPublishedDefinition } from "@uniformdev/webhooks";
494
+ var handleCompositionPublished = async (body) => {
495
+ const parsed = CompositionPublishedDefinition.schema.safeParse(body);
496
+ if (!parsed.success) {
497
+ return void 0;
498
+ }
499
+ return processCompositionChange(parsed.data.id);
500
+ };
501
+
502
+ // src/handler/messages/handleManifestPublished.ts
503
+ import { ManifestPublishedDefinition } from "@uniformdev/webhooks";
504
+ var handleManifestPublished = async (body) => {
505
+ const parsed = ManifestPublishedDefinition.schema.safeParse(body);
506
+ if (!parsed.success) {
507
+ return void 0;
508
+ }
509
+ return {
510
+ tags: ["manifest"]
511
+ };
512
+ };
513
+
514
+ // src/handler/messages/handleProjectMapNodeDelete.ts
515
+ import { getServerConfig as getServerConfig4 } from "@uniformdev/canvas-next-rsc-shared";
516
+ import { ProjectMapNodeDeleteDefinition } from "@uniformdev/webhooks";
517
+ var handleProjectMapNodeDelete = async (body) => {
518
+ var _a;
519
+ const parsed = ProjectMapNodeDeleteDefinition.schema.safeParse(body);
520
+ if (!parsed.success) {
521
+ return void 0;
522
+ }
523
+ const tags = [];
524
+ tags.push(...buildProjectMapNodePaths(parsed.data.path));
525
+ const config = getServerConfig4();
526
+ if ((_a = config.experimental) == null ? void 0 : _a.edgeCompositions) {
527
+ await processEdgeConfigChange({
528
+ source_url: parsed.data.path
529
+ });
530
+ }
531
+ return {
532
+ tags
533
+ };
534
+ };
535
+
536
+ // src/handler/messages/handleProjectMapNodeInsert.ts
537
+ import { getServerConfig as getServerConfig5 } from "@uniformdev/canvas-next-rsc-shared";
538
+ import { ProjectMapNodeInsertDefinition } from "@uniformdev/webhooks";
539
+ var handleProjectMapNodeInsert = async (body) => {
540
+ var _a;
541
+ const parsed = ProjectMapNodeInsertDefinition.schema.safeParse(body);
542
+ if (!parsed.success) {
543
+ return void 0;
544
+ }
545
+ const tags = [];
546
+ tags.push(...buildProjectMapNodePaths(parsed.data.path));
547
+ const config = getServerConfig5();
548
+ if ((_a = config.experimental) == null ? void 0 : _a.edgeCompositions) {
549
+ await processEdgeConfigChange({
550
+ source_url: parsed.data.path
551
+ });
552
+ }
553
+ return {
554
+ tags
555
+ };
556
+ };
557
+
558
+ // src/handler/messages/handleProjectMapNodeUpdate.ts
559
+ import { getServerConfig as getServerConfig6 } from "@uniformdev/canvas-next-rsc-shared";
560
+ import { ProjectMapNodeUpdateDefinition } from "@uniformdev/webhooks";
561
+ var handleProjectMapNodeUpdate = async (body) => {
562
+ var _a;
563
+ const parsed = ProjectMapNodeUpdateDefinition.schema.safeParse(body);
564
+ if (!parsed.success) {
565
+ return void 0;
566
+ }
567
+ const tags = [];
568
+ tags.push(...buildProjectMapNodePaths(parsed.data.path));
569
+ tags.push(...buildProjectMapNodePaths(parsed.data.previous_path));
570
+ const config = getServerConfig6();
571
+ if ((_a = config.experimental) == null ? void 0 : _a.edgeCompositions) {
572
+ await processEdgeConfigChange({
573
+ source_url: parsed.data.path
574
+ });
575
+ }
576
+ return {
577
+ tags
578
+ };
579
+ };
580
+
581
+ // src/handler/messages/handleRedirectDelete.ts
582
+ import { getServerConfig as getServerConfig7 } from "@uniformdev/canvas-next-rsc-shared";
583
+ import { RedirectDeleteDefinition } from "@uniformdev/webhooks";
584
+ var handleRedirectDelete = async (body) => {
585
+ var _a;
586
+ const parsed = RedirectDeleteDefinition.schema.safeParse(body);
587
+ if (!parsed.success) {
588
+ return void 0;
589
+ }
590
+ const config = getServerConfig7();
591
+ if ((_a = config.experimental) == null ? void 0 : _a.edgeRedirects) {
592
+ await processEdgeConfigChange(parsed.data);
593
+ }
594
+ return processRedirectChange(parsed.data.source_url);
595
+ };
596
+
597
+ // src/handler/messages/handleRedirectInsert.ts
598
+ import { getServerConfig as getServerConfig8 } from "@uniformdev/canvas-next-rsc-shared";
599
+ import { RedirectInsertDefinition } from "@uniformdev/webhooks";
600
+ var handleRedirectInsert = async (body) => {
601
+ var _a;
602
+ const parsed = RedirectInsertDefinition.schema.safeParse(body);
603
+ if (!parsed.success) {
604
+ return void 0;
605
+ }
606
+ const config = getServerConfig8();
607
+ if ((_a = config.experimental) == null ? void 0 : _a.edgeRedirects) {
608
+ await processEdgeConfigChange(parsed.data);
609
+ }
610
+ return processRedirectChange(parsed.data.source_url);
611
+ };
612
+
613
+ // src/handler/messages/handleRedirectUpdate.ts
614
+ import { getServerConfig as getServerConfig9 } from "@uniformdev/canvas-next-rsc-shared";
615
+ import { RedirectUpdateDefinition } from "@uniformdev/webhooks";
616
+ var handleRedirectUpdate = async (body) => {
617
+ var _a;
618
+ const parsed = RedirectUpdateDefinition.schema.safeParse(body);
619
+ if (!parsed.success) {
620
+ return void 0;
621
+ }
622
+ const config = getServerConfig9();
623
+ if ((_a = config.experimental) == null ? void 0 : _a.edgeRedirects) {
624
+ await processEdgeConfigChange(parsed.data);
625
+ }
626
+ return processRedirectChange(parsed.data.source_url);
627
+ };
628
+
629
+ // src/handler/createPreviewPOSTRouteHandler.ts
630
+ var createPreviewPOSTRouteHandler = () => {
631
+ return async (request) => {
632
+ const { looksLikeMessage, validation } = await isSvixMessage(request);
633
+ if (looksLikeMessage) {
634
+ if (!validation) {
635
+ return new Response("This looks like a webhook request but the validation failed.", { status: 401 });
636
+ }
637
+ return handleSvixMessage(request);
638
+ }
639
+ return new Response("This is not a webhook request.", { status: 401 });
640
+ };
641
+ };
642
+ var handleSvixMessage = async (request) => {
643
+ const handlers = [
644
+ handleProjectMapNodeUpdate,
645
+ handleProjectMapNodeInsert,
646
+ handleProjectMapNodeDelete,
647
+ handleCompositionDeleted,
648
+ handleCompositionChanged,
649
+ handleCompositionPublished,
650
+ handleRedirectInsert,
651
+ handleRedirectUpdate,
652
+ handleRedirectDelete,
653
+ handleManifestPublished
654
+ ];
655
+ let tags = void 0;
656
+ const jsonBody = await request.json();
657
+ for (let i = 0; i < handlers.length; i++) {
658
+ const handler = handlers[i];
659
+ const result = await handler(jsonBody);
660
+ if (result) {
661
+ tags = result.tags;
662
+ break;
663
+ }
664
+ }
665
+ if (tags == null ? void 0 : tags.length) {
666
+ for (let i = 0; i < tags.length; i++) {
667
+ const tag = tags[i];
668
+ revalidateTag(tag);
669
+ }
670
+ }
671
+ return new Response(
672
+ JSON.stringify({
673
+ handled: typeof tags !== "undefined",
674
+ tags
675
+ })
676
+ );
677
+ };
678
+ export {
679
+ createPreviewGETRouteHandler,
680
+ createPreviewOPTIONSRouteHandler,
681
+ createPreviewPOSTRouteHandler
682
+ };