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