@uniformdev/canvas-next-rsc 19.61.1-alpha.10 → 19.61.1-alpha.18

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/index.js CHANGED
@@ -1,29 +1,1011 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- import { UniformComposition as BaseUniformComposition, } from './components/UniformComposition';
3
- // Canvas Components
4
- export { GoogleTagManagerAnalytics } from './components/GoogleTagManagerAnalytics';
5
- export { UniformSlot } from './components/UniformSlot';
6
- // Parameter Components
7
- export { UniformText } from './components/UniformText';
8
- // Hooks
9
- export { useForgetMe } from './hooks/useForgetMe';
10
- export { useToggleConsent } from './hooks/useToggleConsent';
11
- export { useUniformContext } from './hooks/useUniformContext';
12
- // Component Registry
13
- export { componentStore } from './register/componentStore';
14
- export { registerUniformComponent } from './register/registerUniformComponent';
15
- // Context
16
- export { getUniformContext } from './components/getUniformContext';
17
- // Clients
18
- export { getCanvasClient } from './client/canvasClient';
19
- export { getManifestClient } from './client/manifestClient';
20
- export { getProjectMapClient } from './client/projectMapClient';
21
- export { getRouteClient } from './client/routeClient';
22
- export { resolveComposition } from './components/retrieveRoute';
23
- // actions
24
- export { updateContextAction } from './actions/updateContext';
25
- export const UniformComposition = (props) => _jsx(BaseUniformComposition, { ...props });
26
- export const UniformCompositionCustom = (props) => (_jsx(BaseUniformComposition, { ...props }));
27
- export { UniformRichText } from './components/UniformRichText';
28
- export { isDraftModeEnabled, isIncontextEditingEnabled, isOnVercelPreviewEnvironment } from './utils/draft';
29
- export { CANVAS_DRAFT_STATE, CANVAS_PUBLISHED_STATE, IN_CONTEXT_EDITOR_QUERY_STRING_PARAM, } from '@uniformdev/canvas';
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+
30
+ // src/index.ts
31
+ var src_exports = {};
32
+ __export(src_exports, {
33
+ ContextUpdateTransfer: () => ContextUpdateTransfer,
34
+ UniformComposition: () => UniformComposition,
35
+ UniformContext: () => UniformContext,
36
+ UniformPlayground: () => UniformPlayground,
37
+ createServerUniformContext: () => createServerUniformContext,
38
+ createStaticParams: () => createStaticParams,
39
+ generateStaticParams: () => generateStaticParams,
40
+ getCanvasClient: () => getCanvasClient,
41
+ getDefaultCanvasClient: () => getDefaultCanvasClient,
42
+ getDefaultManifestClient: () => getDefaultManifestClient,
43
+ getDefaultProjectMapClient: () => getDefaultProjectMapClient,
44
+ getDefaultRouteClient: () => getDefaultRouteClient,
45
+ getManifest: () => getManifest,
46
+ getManifestClient: () => getManifestClient,
47
+ getProjectMapClient: () => getProjectMapClient,
48
+ getRouteClient: () => getRouteClient,
49
+ isDevelopmentEnvironment: () => isDevelopmentEnvironment,
50
+ isDraftModeEnabled: () => isDraftModeEnabled,
51
+ isIncontextEditingEnabled: () => isIncontextEditingEnabled,
52
+ isOnVercelPreviewEnvironment: () => isOnVercelPreviewEnvironment,
53
+ resolveComposition: () => resolveComposition,
54
+ retrieveRoute: () => retrieveRoute
55
+ });
56
+ module.exports = __toCommonJS(src_exports);
57
+ var import_server_only = require("server-only");
58
+
59
+ // src/clients/canvasClient.ts
60
+ var import_canvas2 = require("@uniformdev/canvas");
61
+
62
+ // src/config/helpers.ts
63
+ var import_canvas_next_rsc_shared = require("@uniformdev/canvas-next-rsc-shared");
64
+
65
+ // src/utils/draft.ts
66
+ var import_canvas = require("@uniformdev/canvas");
67
+ var import_headers = require("next/headers");
68
+ var isDraftModeEnabled = ({
69
+ searchParams
70
+ }) => {
71
+ if (isDevelopmentEnvironment()) {
72
+ return isIncontextEditingEnabled({ searchParams });
73
+ }
74
+ let draftModeEnabled = false;
75
+ try {
76
+ draftModeEnabled = (0, import_headers.draftMode)().isEnabled;
77
+ } catch (e) {
78
+ }
79
+ return draftModeEnabled || isIncontextEditingEnabled({ searchParams });
80
+ };
81
+ var isIncontextEditingEnabled = ({
82
+ searchParams
83
+ }) => {
84
+ const containsKey = typeof (searchParams == null ? void 0 : searchParams[import_canvas.IN_CONTEXT_EDITOR_QUERY_STRING_PARAM]) !== "undefined";
85
+ return containsKey;
86
+ };
87
+ var isOnVercelPreviewEnvironment = () => {
88
+ return process.env.VERCEL_ENV === "preview";
89
+ };
90
+ var isDevelopmentEnvironment = () => {
91
+ return process.env.NODE_ENV === "development" || process.env.NODE_ENV === "test";
92
+ };
93
+
94
+ // src/config/helpers.ts
95
+ var shouldCacheBeDisabled = (options) => {
96
+ if (isDraftModeEnabled(options)) {
97
+ return { disabled: true, reason: "DRAFT" };
98
+ }
99
+ if (isIncontextEditingEnabled(options)) {
100
+ return { disabled: true, reason: "INCONTEXT" };
101
+ }
102
+ if (isDevelopmentEnvironment()) {
103
+ return { disabled: true, reason: "DEV" };
104
+ }
105
+ return {
106
+ disabled: false,
107
+ reason: void 0
108
+ };
109
+ };
110
+ var getCanvasCacheStrategy = (options) => {
111
+ const { disabled, reason } = shouldCacheBeDisabled(options);
112
+ const config = (0, import_canvas_next_rsc_shared.getServerConfig)();
113
+ if (disabled) {
114
+ if (reason === "DEV" && config.canvasCache) {
115
+ console.warn("Canvas cache (disabled) has been overridden by canvasCache config.");
116
+ return config.canvasCache;
117
+ }
118
+ return {
119
+ type: "no-cache"
120
+ };
121
+ }
122
+ if (config.canvasCache) {
123
+ return config.canvasCache;
124
+ }
125
+ return {
126
+ type: "force-cache"
127
+ };
128
+ };
129
+ var getManifestCacheStrategy = (options) => {
130
+ const { disabled, reason } = shouldCacheBeDisabled(options);
131
+ const config = (0, import_canvas_next_rsc_shared.getServerConfig)();
132
+ if (disabled) {
133
+ if (reason === "DEV" && config.manifestCache) {
134
+ console.warn("Manifest cache (disabled) has been overridden by manifestCache config.");
135
+ return config.manifestCache;
136
+ }
137
+ return {
138
+ type: "no-cache"
139
+ };
140
+ }
141
+ if (config.manifestCache) {
142
+ return config.manifestCache;
143
+ }
144
+ return {
145
+ type: "force-cache"
146
+ };
147
+ };
148
+ var getProjectMapCacheStrategy = (options) => {
149
+ const { disabled, reason } = shouldCacheBeDisabled(options);
150
+ const config = (0, import_canvas_next_rsc_shared.getServerConfig)();
151
+ if (disabled) {
152
+ if (reason === "DEV" && config.projectMapCache) {
153
+ console.warn("Project map cache (disabled) has been overridden by projectMapCache config.");
154
+ return config.projectMapCache;
155
+ }
156
+ return {
157
+ type: "no-cache"
158
+ };
159
+ }
160
+ if (config.projectMapCache) {
161
+ return config.projectMapCache;
162
+ }
163
+ return {
164
+ type: "force-cache"
165
+ };
166
+ };
167
+
168
+ // src/env/index.ts
169
+ var env = {
170
+ getProjectId: () => {
171
+ return process.env.UNIFORM_PROJECT_ID;
172
+ },
173
+ getApiKey: () => {
174
+ return process.env.UNIFORM_API_KEY;
175
+ },
176
+ getApiHost: () => {
177
+ return process.env.UNIFORM_API_HOST || process.env.UNIFORM_CLI_BASE_URL;
178
+ },
179
+ getEdgeApiHost: () => {
180
+ return process.env.UNIFORM_EDGE_API_HOST || process.env.UNIFORM_CLI_BASE_EDGE_URL;
181
+ }
182
+ };
183
+
184
+ // src/utils/tag.ts
185
+ var buildPathTag = (path) => {
186
+ const actualPath = path.startsWith("/") ? path : `/${path}`;
187
+ return `path:${actualPath}`.toLowerCase();
188
+ };
189
+ var buildCompositionTag = (compositionId) => {
190
+ return `composition:${compositionId}`.toLowerCase();
191
+ };
192
+
193
+ // src/clients/shared.ts
194
+ var determineFetchCacheOptions = (mode) => {
195
+ let cache = void 0;
196
+ let revalidate = void 0;
197
+ if (mode.type === "revalidate") {
198
+ cache = void 0;
199
+ revalidate = mode.interval;
200
+ } else {
201
+ cache = mode.type;
202
+ }
203
+ return {
204
+ cache,
205
+ revalidate
206
+ };
207
+ };
208
+
209
+ // src/clients/canvasClient.ts
210
+ var getCanvasClient = (options) => {
211
+ return new import_canvas2.CanvasClient({
212
+ projectId: env.getProjectId(),
213
+ apiHost: env.getApiHost(),
214
+ apiKey: env.getApiKey(),
215
+ edgeApiHost: env.getEdgeApiHost(),
216
+ fetch: (req, init) => {
217
+ let requestedUrl;
218
+ if (typeof req === "string") {
219
+ requestedUrl = new URL(req);
220
+ } else if (req instanceof URL) {
221
+ requestedUrl = req;
222
+ } else {
223
+ requestedUrl = new URL(req.url);
224
+ }
225
+ const tags = [];
226
+ if (requestedUrl) {
227
+ const compositionIdKey = "compositionId";
228
+ const compositionIdsKey = "compositionIDs";
229
+ const compositionId = requestedUrl.searchParams.get(compositionIdKey);
230
+ const compositionIds = requestedUrl.searchParams.get(compositionIdsKey);
231
+ if (compositionId) {
232
+ tags.push(buildCompositionTag(compositionId));
233
+ }
234
+ if (compositionIds) {
235
+ const ids = compositionIds.split(",");
236
+ for (let i = 0; i < ids.length; i++) {
237
+ tags.push(buildCompositionTag(ids[i]));
238
+ }
239
+ }
240
+ }
241
+ const { cache, revalidate } = determineFetchCacheOptions(options.cache);
242
+ return fetch(req, {
243
+ ...init,
244
+ cache,
245
+ headers: {
246
+ ...init == null ? void 0 : init.headers,
247
+ "x-bypass-cache": "true"
248
+ },
249
+ next: {
250
+ revalidate
251
+ }
252
+ });
253
+ }
254
+ });
255
+ };
256
+ var getDefaultCanvasClient = ({
257
+ searchParams
258
+ }) => {
259
+ return getCanvasClient({
260
+ cache: getCanvasCacheStrategy({
261
+ searchParams
262
+ })
263
+ });
264
+ };
265
+
266
+ // src/clients/manifestClient.ts
267
+ var import_api = require("@uniformdev/context/api");
268
+ var getManifestClient = (options) => {
269
+ const manifestClient = new import_api.ManifestClient({
270
+ apiHost: env.getApiHost(),
271
+ apiKey: env.getApiKey(),
272
+ projectId: env.getProjectId(),
273
+ fetch: (req, init) => {
274
+ const { cache, revalidate } = determineFetchCacheOptions(options.cache);
275
+ return fetch(req, {
276
+ ...init,
277
+ headers: {
278
+ ...init == null ? void 0 : init.headers,
279
+ "x-bypass-cache": "true"
280
+ },
281
+ cache,
282
+ next: {
283
+ revalidate,
284
+ tags: ["manifest"]
285
+ }
286
+ });
287
+ }
288
+ });
289
+ return manifestClient;
290
+ };
291
+ var getDefaultManifestClient = ({
292
+ searchParams
293
+ }) => {
294
+ return getManifestClient({
295
+ cache: getManifestCacheStrategy({
296
+ searchParams
297
+ })
298
+ });
299
+ };
300
+ var getManifest = ({ searchParams }) => {
301
+ const manifestClient = getDefaultManifestClient({
302
+ searchParams
303
+ });
304
+ return manifestClient.get();
305
+ };
306
+
307
+ // src/clients/projectMapClient.ts
308
+ var import_project_map = require("@uniformdev/project-map");
309
+ var getProjectMapClient = (options) => {
310
+ const manifestClient = new import_project_map.ProjectMapClient({
311
+ apiHost: env.getApiHost(),
312
+ apiKey: env.getApiKey(),
313
+ projectId: env.getProjectId(),
314
+ fetch: (req, init) => {
315
+ const { cache, revalidate } = determineFetchCacheOptions(options.cache);
316
+ return fetch(req, {
317
+ ...init,
318
+ headers: {
319
+ ...init == null ? void 0 : init.headers,
320
+ "x-bypass-cache": "true"
321
+ },
322
+ cache,
323
+ next: {
324
+ revalidate
325
+ }
326
+ });
327
+ }
328
+ });
329
+ return manifestClient;
330
+ };
331
+ var getDefaultProjectMapClient = ({
332
+ searchParams
333
+ }) => {
334
+ return getProjectMapClient({
335
+ cache: getProjectMapCacheStrategy({
336
+ searchParams
337
+ })
338
+ });
339
+ };
340
+
341
+ // src/clients/routeClient.ts
342
+ var import_canvas3 = require("@uniformdev/canvas");
343
+ var getRouteClient = (options) => {
344
+ const client = new import_canvas3.RouteClient({
345
+ projectId: env.getProjectId(),
346
+ apiKey: env.getApiKey(),
347
+ edgeApiHost: env.getEdgeApiHost(),
348
+ fetch: (req, init) => {
349
+ let requestedUrl;
350
+ if (typeof req === "string") {
351
+ requestedUrl = new URL(req);
352
+ } else if (req instanceof URL) {
353
+ requestedUrl = req;
354
+ } else {
355
+ requestedUrl = new URL(req.url);
356
+ }
357
+ const tags = [];
358
+ if (requestedUrl) {
359
+ const pathKey = "path";
360
+ const path = requestedUrl.searchParams.get(pathKey);
361
+ if (path) {
362
+ const pieces = path.split("/");
363
+ for (let i = 0; i < pieces.length; i++) {
364
+ const segmentPieces = pieces.slice(0, i + 1);
365
+ const segment = segmentPieces.join("/");
366
+ tags.push(buildPathTag(segment));
367
+ }
368
+ }
369
+ }
370
+ const { cache, revalidate } = determineFetchCacheOptions(options.cache);
371
+ return fetch(req, {
372
+ ...init,
373
+ headers: {
374
+ ...init == null ? void 0 : init.headers,
375
+ "x-bypass-cache": "true"
376
+ },
377
+ cache,
378
+ next: {
379
+ revalidate,
380
+ tags: tags.length ? tags : void 0
381
+ }
382
+ });
383
+ }
384
+ });
385
+ return client;
386
+ };
387
+ var getDefaultRouteClient = ({ searchParams }) => {
388
+ return getRouteClient({
389
+ cache: getCanvasCacheStrategy({
390
+ searchParams
391
+ })
392
+ });
393
+ };
394
+
395
+ // src/components/ContextUpdateTransfer.tsx
396
+ var import_canvas_next_rsc_client = require("@uniformdev/canvas-next-rsc-client");
397
+ var import_react = __toESM(require("react"));
398
+ var ContextUpdateTransfer = async ({
399
+ update,
400
+ serverContext
401
+ }) => {
402
+ const result = typeof update === "function" ? await update() : update;
403
+ if (!result) {
404
+ return null;
405
+ }
406
+ if (serverContext) {
407
+ await serverContext.__INTERNAL__.update(result);
408
+ }
409
+ return /* @__PURE__ */ import_react.default.createElement(import_canvas_next_rsc_client.ContextUpdateTransferClient, { ts: (/* @__PURE__ */ new Date()).valueOf(), update: result });
410
+ };
411
+
412
+ // src/components/generateStaticParams.ts
413
+ var createStaticParams = async (options) => {
414
+ var _a, _b;
415
+ const { expand } = options != null ? options : {};
416
+ const client = getProjectMapClient({
417
+ cache: {
418
+ type: "no-cache"
419
+ }
420
+ });
421
+ const { nodes } = await client.getNodes({});
422
+ const resolvedPaths = [];
423
+ if (nodes) {
424
+ for (let i = 0; i < nodes.length; i++) {
425
+ const node = nodes[i];
426
+ const isDynamic = node.path.includes(":");
427
+ if (!isDynamic) {
428
+ resolvedPaths.push(node.path);
429
+ } else if (expand) {
430
+ const expandedPaths = (_a = await expand(node)) != null ? _a : [];
431
+ resolvedPaths.push(...expandedPaths);
432
+ }
433
+ }
434
+ }
435
+ return (_b = resolvedPaths == null ? void 0 : resolvedPaths.map((path) => {
436
+ return {
437
+ path: path.split("/").filter(Boolean)
438
+ };
439
+ })) != null ? _b : [];
440
+ };
441
+ async function generateStaticParams() {
442
+ return createStaticParams();
443
+ }
444
+
445
+ // src/components/UniformComposition.ts
446
+ var import_canvas7 = require("@uniformdev/canvas");
447
+ var import_canvas_next_rsc_client4 = require("@uniformdev/canvas-next-rsc-client");
448
+ var import_canvas_next_rsc_shared6 = require("@uniformdev/canvas-next-rsc-shared");
449
+ var import_core = require("@uniformdev/canvas-react/core");
450
+ var import_headers3 = require("next/headers");
451
+ var import_navigation = require("next/navigation");
452
+ var import_react6 = require("react");
453
+
454
+ // src/context/createServerUniformContext.ts
455
+ var import_canvas_next_rsc_shared2 = require("@uniformdev/canvas-next-rsc-shared");
456
+ var import_context = require("@uniformdev/context");
457
+ var import_headers2 = require("next/headers");
458
+ var createServerUniformContext = async (options) => {
459
+ const manifest = await getManifest(options);
460
+ const context = createServerUniformContextFromManifest({
461
+ ...options || {},
462
+ manifest
463
+ });
464
+ return context;
465
+ };
466
+ var createServerUniformContextFromManifest = async (options) => {
467
+ var _a;
468
+ const context = (0, import_canvas_next_rsc_shared2.createUniformContext)({
469
+ ...options || {},
470
+ serverCookieValue: (_a = (0, import_headers2.cookies)().get(import_context.UNIFORM_DEFAULT_COOKIE_NAME)) == null ? void 0 : _a.value
471
+ });
472
+ return {
473
+ ...context,
474
+ __INTERNAL__: {
475
+ update: (...props) => context.update(...props)
476
+ }
477
+ };
478
+ };
479
+
480
+ // src/utils/route.ts
481
+ var import_canvas4 = require("@uniformdev/canvas");
482
+ var import_canvas_next_rsc_shared3 = require("@uniformdev/canvas-next-rsc-shared");
483
+ var import_redirect = require("@uniformdev/redirect");
484
+ var retrieveRoute = async ({
485
+ params,
486
+ searchParams
487
+ }) => {
488
+ const { type, value } = (0, import_canvas_next_rsc_shared3.resolvePath)({
489
+ params
490
+ });
491
+ const states = determineState({
492
+ searchParams
493
+ });
494
+ let result;
495
+ for (let i = 0; i < states.length; i++) {
496
+ const state = states[i];
497
+ if (type === "path") {
498
+ try {
499
+ result = await retrieveRouteByPath({
500
+ path: value,
501
+ state,
502
+ searchParams
503
+ });
504
+ } catch (e) {
505
+ console.warn(`Failed to retrieve route by path: ${value} with state ${state}`, e);
506
+ }
507
+ } else if (type === "slug") {
508
+ const canvasClient = getDefaultCanvasClient({
509
+ searchParams
510
+ });
511
+ try {
512
+ const composition = await canvasClient.getCompositionBySlug({
513
+ slug: value,
514
+ state
515
+ });
516
+ result = {
517
+ type: "composition",
518
+ compositionApiResponse: composition,
519
+ matchedRoute: "slug"
520
+ };
521
+ } catch (e) {
522
+ console.warn(`Failed to retrieve composition by slug: ${value} with state ${state}`, e);
523
+ }
524
+ }
525
+ if ((result == null ? void 0 : result.type) !== "notFound") {
526
+ break;
527
+ }
528
+ }
529
+ return result || {
530
+ type: "notFound"
531
+ };
532
+ };
533
+ var retrieveRouteByPath = async ({
534
+ path,
535
+ state,
536
+ searchParams
537
+ }) => {
538
+ var _a;
539
+ const client = getDefaultRouteClient({
540
+ searchParams
541
+ });
542
+ return await client.getRoute({
543
+ path,
544
+ state,
545
+ withComponentIDs: true,
546
+ withContentSourceMap: isOnVercelPreviewEnvironment() && ((_a = (0, import_canvas_next_rsc_shared3.getServerConfig)().experimental) == null ? void 0 : _a.vercelVisualEditing)
547
+ });
548
+ };
549
+ var resolveRedirectHref = (resolveResult, path) => {
550
+ let href;
551
+ if (resolveResult.redirect.targetProjectMapNodeId) {
552
+ const requestUrl = `${(0, import_canvas_next_rsc_shared3.getBaseUrl)()}${path}`;
553
+ const expandedUrl = (0, import_redirect.getTargetVariableExpandedUrl)(requestUrl, resolveResult.redirect);
554
+ const url = new URL(expandedUrl);
555
+ href = url.pathname;
556
+ } else {
557
+ href = resolveResult.redirect.targetUrl;
558
+ }
559
+ return href;
560
+ };
561
+ var determineState = ({ searchParams }) => {
562
+ const draftMode2 = isDraftModeEnabled({ searchParams });
563
+ const previewEnvironment = isOnVercelPreviewEnvironment();
564
+ const isDevelopment = isDevelopmentEnvironment();
565
+ const isCanvasEditing = isIncontextEditingEnabled({
566
+ searchParams
567
+ });
568
+ let states;
569
+ if (isCanvasEditing) {
570
+ states = [import_canvas4.CANVAS_EDITOR_STATE, import_canvas4.CANVAS_DRAFT_STATE];
571
+ } else {
572
+ states = draftMode2 || previewEnvironment || isDevelopment ? [import_canvas4.CANVAS_DRAFT_STATE] : [import_canvas4.CANVAS_PUBLISHED_STATE];
573
+ }
574
+ return states;
575
+ };
576
+
577
+ // src/components/ContextUpdateTrigger.tsx
578
+ var import_canvas_next_rsc_client2 = require("@uniformdev/canvas-next-rsc-client");
579
+ var import_react2 = __toESM(require("react"));
580
+ var ContextUpdateTrigger = () => {
581
+ return /* @__PURE__ */ import_react2.default.createElement(import_canvas_next_rsc_client2.ClientContextUpdate, null);
582
+ };
583
+
584
+ // src/components/PersonalizeClientWrapper.tsx
585
+ var import_canvas_next_rsc_client3 = require("@uniformdev/canvas-next-rsc-client");
586
+ var import_canvas_next_rsc_shared4 = require("@uniformdev/canvas-next-rsc-shared");
587
+ var import_react3 = __toESM(require("react"));
588
+ var PersonalizeClientWrapper = (props) => {
589
+ const { indexes } = (0, import_canvas_next_rsc_shared4.runPersonalization)({
590
+ ...props,
591
+ contextInstance: void 0
592
+ });
593
+ return /* @__PURE__ */ import_react3.default.createElement(import_canvas_next_rsc_client3.PersonalizeClient, { ...props, indexes });
594
+ };
595
+
596
+ // src/components/PersonalizeServer.ts
597
+ var import_canvas5 = require("@uniformdev/canvas");
598
+ var import_canvas_next_rsc_shared5 = require("@uniformdev/canvas-next-rsc-shared");
599
+ var import_react4 = require("react");
600
+ var PersonalizeServer = (props) => {
601
+ var _a;
602
+ const { indexes } = (0, import_canvas_next_rsc_shared5.runPersonalization)(props);
603
+ const slot = (_a = props.slots) == null ? void 0 : _a[import_canvas5.CANVAS_PERSONALIZE_SLOT];
604
+ const components = indexes.map((index) => {
605
+ const component = slot.items[index];
606
+ return component;
607
+ });
608
+ return (0, import_react4.createElement)(import_react4.Fragment, void 0, components);
609
+ };
610
+
611
+ // src/components/TestServer.ts
612
+ var import_canvas6 = require("@uniformdev/canvas");
613
+ var import_react5 = require("react");
614
+ var TestServer = ({ test, component, contextInstance, slots }) => {
615
+ var _a, _b, _c;
616
+ const slot = ((_a = component.slots) == null ? void 0 : _a[import_canvas6.CANVAS_TEST_SLOT]) || [];
617
+ const { result } = contextInstance.test({
618
+ name: test,
619
+ variations: slot.map((v, i) => {
620
+ var _a2, _b2, _c2;
621
+ const contextTag = (_b2 = (_a2 = v.parameters) == null ? void 0 : _a2[import_canvas6.CANVAS_TEST_VARIANT_PARAM]) == null ? void 0 : _b2.value;
622
+ const id = (_c2 = contextTag == null ? void 0 : contextTag.id) != null ? _c2 : "testId" in v ? v.testId : `ab-${i}-${v.type}`;
623
+ return {
624
+ id,
625
+ testDistribution: contextTag == null ? void 0 : contextTag.testDistribution,
626
+ index: i
627
+ };
628
+ })
629
+ });
630
+ const components = result ? (_c = (_b = slots == null ? void 0 : slots[import_canvas6.CANVAS_TEST_SLOT]) == null ? void 0 : _b.items[result.index]) != null ? _c : null : null;
631
+ return (0, import_react5.createElement)(import_react5.Fragment, void 0, components);
632
+ };
633
+
634
+ // src/components/UniformComposition.ts
635
+ var UniformComposition = async ({
636
+ resolveComponent,
637
+ route,
638
+ ...props
639
+ }) => {
640
+ let searchParams;
641
+ let serverContext = void 0;
642
+ if (props.mode === "static") {
643
+ searchParams = void 0;
644
+ } else if (props.mode === "server") {
645
+ serverContext = props.serverContext || await createServerUniformContext({
646
+ searchParams: props.searchParams
647
+ });
648
+ searchParams = props.searchParams;
649
+ }
650
+ const { value: path } = (0, import_canvas_next_rsc_shared6.resolvePath)(props);
651
+ if (!route || route.type === "notFound") {
652
+ (0, import_navigation.notFound)();
653
+ }
654
+ if (route.type === "redirect") {
655
+ const href = resolveRedirectHref(route, path);
656
+ (0, import_navigation.redirect)(href);
657
+ }
658
+ const state = route.compositionApiResponse.state;
659
+ if (state === import_canvas7.CANVAS_DRAFT_STATE || state === import_canvas7.CANVAS_EDITOR_STATE) {
660
+ (0, import_canvas7.walkNodeTree)(route.compositionApiResponse.composition, (node) => {
661
+ if (node.type === "component" && node.node.parameters) {
662
+ Object.keys(node.node.parameters).forEach((key) => {
663
+ const parameter = node.node.parameters[key];
664
+ if (parameter.type === "text") {
665
+ const contextualParameter = parameter;
666
+ contextualParameter._contextualEditing = {
667
+ isEditable: true
668
+ };
669
+ }
670
+ });
671
+ }
672
+ });
673
+ }
674
+ const compositionContext = {
675
+ composition: route.compositionApiResponse.composition,
676
+ matchedRoute: route.matchedRoute,
677
+ searchParams,
678
+ dynamicInputs: route.dynamicInputs,
679
+ type: "composition",
680
+ isContextualEditing: isIncontextEditingEnabled({ searchParams }),
681
+ isDraftMode: isDraftModeEnabled({ searchParams }),
682
+ state: route.compositionApiResponse.state,
683
+ path
684
+ };
685
+ const resolved = resolveComposition({
686
+ composition: route.compositionApiResponse.composition,
687
+ resolveComponent,
688
+ serverContext,
689
+ compositionContext,
690
+ mode: props.mode
691
+ });
692
+ let transfer = null;
693
+ if (props.mode === "server") {
694
+ const headersValue = (0, import_headers3.headers)();
695
+ const missingQuirkValue = "unknown";
696
+ transfer = (0, import_react6.createElement)(ContextUpdateTransfer, {
697
+ serverContext,
698
+ update: {
699
+ params: props.params,
700
+ searchParams,
701
+ cookies: (0, import_headers3.cookies)().getAll().reduce((acc, cookie) => {
702
+ acc[cookie.name] = cookie.value;
703
+ return acc;
704
+ }, {}),
705
+ quirks: {
706
+ "vc-country": headersValue.get("x-vercel-ip-country") || missingQuirkValue,
707
+ "vc-region": headersValue.get("x-vercel-ip-country-region") || missingQuirkValue,
708
+ "vc-city": headersValue.get("x-vercel-ip-city") || missingQuirkValue
709
+ }
710
+ }
711
+ });
712
+ } else if (props.mode === "static") {
713
+ transfer = (0, import_react6.createElement)(ContextUpdateTrigger);
714
+ }
715
+ return (0, import_react6.createElement)(import_react6.Fragment, void 0, transfer, resolved);
716
+ };
717
+ var isServerComponent = ({
718
+ component,
719
+ serverContext
720
+ }) => {
721
+ var _a, _b;
722
+ if (component.type === import_canvas7.CANVAS_PERSONALIZE_TYPE) {
723
+ return serverContext && ((_a = (0, import_canvas_next_rsc_shared6.getServerConfig)().evaluation) == null ? void 0 : _a.personalization) !== "client";
724
+ }
725
+ if (component.type === import_canvas7.CANVAS_TEST_TYPE) {
726
+ return serverContext && ((_b = (0, import_canvas_next_rsc_shared6.getServerConfig)().evaluation) == null ? void 0 : _b.testing) !== "client";
727
+ }
728
+ };
729
+ var resolveSystemComponent = ({
730
+ component,
731
+ serverContext
732
+ }) => {
733
+ const server = isServerComponent({
734
+ component,
735
+ serverContext
736
+ });
737
+ if (component.type === import_canvas7.CANVAS_PERSONALIZE_TYPE) {
738
+ return server ? PersonalizeServer : PersonalizeClientWrapper;
739
+ }
740
+ if (component.type === import_canvas7.CANVAS_TEST_TYPE) {
741
+ return server ? TestServer : import_canvas_next_rsc_client4.TestClient;
742
+ }
743
+ return null;
744
+ };
745
+ var resolveSlots = ({
746
+ component,
747
+ root,
748
+ resolveComponent,
749
+ serverContext,
750
+ compositionContext,
751
+ mode
752
+ }) => {
753
+ const slots = {};
754
+ if (component.slots) {
755
+ Object.keys(component.slots).forEach((slotName, slotIndex) => {
756
+ const resolved = resolveComponents({
757
+ target: {
758
+ type: "slot",
759
+ components: component.slots[slotName],
760
+ root,
761
+ parent: component
762
+ },
763
+ slotName,
764
+ slotIndex,
765
+ resolveComponent,
766
+ serverContext,
767
+ compositionContext,
768
+ mode
769
+ });
770
+ if (resolved) {
771
+ slots[slotName] = {
772
+ name: slotName,
773
+ items: resolved
774
+ };
775
+ }
776
+ });
777
+ }
778
+ return slots;
779
+ };
780
+ var resolveComposition = (props) => {
781
+ const [resolved] = resolveComponents({
782
+ ...props,
783
+ target: {
784
+ type: "root",
785
+ composition: props.composition
786
+ },
787
+ slotName: void 0,
788
+ slotIndex: void 0,
789
+ compositionContext: props.compositionContext
790
+ });
791
+ return resolved;
792
+ };
793
+ var resolveComponents = ({
794
+ serverContext,
795
+ target,
796
+ slotName,
797
+ slotIndex,
798
+ resolveComponent,
799
+ compositionContext,
800
+ mode
801
+ }) => {
802
+ const isRoot = !slotName && typeof slotIndex !== "number";
803
+ let root;
804
+ let parent = void 0;
805
+ let components;
806
+ if (target.type === "root") {
807
+ root = target.composition;
808
+ components = [target.composition];
809
+ } else {
810
+ root = target.root;
811
+ components = target.components;
812
+ parent = target.parent;
813
+ }
814
+ const resolved = components.map((component, componentIndex) => {
815
+ var _a, _b;
816
+ const isServer = isServerComponent({
817
+ component,
818
+ serverContext
819
+ });
820
+ const systemComponent = resolveSystemComponent({
821
+ component,
822
+ serverContext
823
+ });
824
+ const { component: regularComponent, includeContext } = resolveComponent({ component }) || {
825
+ component: null
826
+ };
827
+ if (!systemComponent && !regularComponent) {
828
+ return null;
829
+ }
830
+ const slots = resolveSlots({
831
+ component,
832
+ root,
833
+ resolveComponent,
834
+ serverContext,
835
+ compositionContext,
836
+ mode
837
+ });
838
+ const resolvedComponent = systemComponent || regularComponent;
839
+ const parameters = (_a = component.parameters) != null ? _a : {};
840
+ const enrichmentTags = (_b = parameters[import_canvas7.CANVAS_ENRICHMENT_TAG_PARAM]) == null ? void 0 : _b.value;
841
+ const componentProps = {
842
+ key: `${slotName}-${componentIndex}-component`,
843
+ ...Object.keys(parameters).reduce((acc, cur) => {
844
+ acc[cur] = parameters[cur].value;
845
+ return acc;
846
+ }, {}),
847
+ component,
848
+ slots,
849
+ contextInstance: isServer || includeContext ? serverContext : void 0,
850
+ context: compositionContext
851
+ };
852
+ const element = (0, import_react6.createElement)(resolvedComponent, componentProps);
853
+ let tagElement = null;
854
+ if (enrichmentTags == null ? void 0 : enrichmentTags.length) {
855
+ tagElement = (0, import_react6.createElement)(ContextUpdateTransfer, {
856
+ key: `${slotName}-${componentIndex}-tags`,
857
+ update: {
858
+ enrichments: enrichmentTags
859
+ },
860
+ serverContext
861
+ });
862
+ }
863
+ let childNode;
864
+ if (compositionContext.isContextualEditing) {
865
+ const elements = [element];
866
+ if (tagElement) {
867
+ elements.push(tagElement);
868
+ }
869
+ childNode = (0, import_react6.createElement)(
870
+ import_core.PureContextualEditingComponentWrapper,
871
+ {
872
+ key: `${slotName}-${componentIndex}-wrapper`,
873
+ isPlaceholder: false,
874
+ parentComponent: parent,
875
+ component,
876
+ slotName,
877
+ indexInSlot: componentIndex,
878
+ slotChildrenCount: components.length,
879
+ isReadOnly: "false"
880
+ },
881
+ elements
882
+ );
883
+ } else if (mode === "static") {
884
+ const elements = [element];
885
+ if (tagElement) {
886
+ elements.push(tagElement);
887
+ }
888
+ childNode = (0, import_react6.createElement)(
889
+ import_canvas_next_rsc_client4.ClientContextualEditingComponentWrapper,
890
+ {
891
+ key: `${slotName}-${componentIndex}-wrapper`,
892
+ isPlaceholder: false,
893
+ parentComponent: parent,
894
+ component,
895
+ slotName,
896
+ indexInSlot: componentIndex,
897
+ slotChildrenCount: components.length,
898
+ isReadOnly: "false"
899
+ },
900
+ elements
901
+ );
902
+ } else {
903
+ const elements = [element];
904
+ if (tagElement) {
905
+ elements.push(tagElement);
906
+ }
907
+ childNode = elements;
908
+ }
909
+ return (0, import_react6.createElement)(
910
+ import_react6.Fragment,
911
+ {
912
+ key: !isRoot ? `${slotName}-${componentIndex}` : void 0
913
+ },
914
+ childNode
915
+ );
916
+ });
917
+ return resolved;
918
+ };
919
+
920
+ // src/components/UniformContext.tsx
921
+ var import_canvas_next_rsc_client5 = require("@uniformdev/canvas-next-rsc-client");
922
+ var import_react7 = require("react");
923
+ var import_react8 = __toESM(require("react"));
924
+ var UniformContext = async ({
925
+ clientContextComponent,
926
+ children
927
+ }) => {
928
+ const manifest = await getManifest({
929
+ searchParams: {}
930
+ });
931
+ const ContextComponent = clientContextComponent || import_canvas_next_rsc_client5.DefaultUniformClientContext;
932
+ return /* @__PURE__ */ import_react8.default.createElement(import_react8.default.Fragment, null, children, /* @__PURE__ */ import_react8.default.createElement(ContextComponent, { manifest }), /* @__PURE__ */ import_react8.default.createElement(import_react7.Suspense, { fallback: /* @__PURE__ */ import_react8.default.createElement(import_react8.default.Fragment, null) }, /* @__PURE__ */ import_react8.default.createElement(import_canvas_next_rsc_client5.UniformScript, null)));
933
+ };
934
+
935
+ // src/components/UniformPlayground.tsx
936
+ var import_canvas8 = require("@uniformdev/canvas");
937
+ var import_navigation2 = require("next/navigation");
938
+ var import_react9 = __toESM(require("react"));
939
+ var UniformPlayground = async ({ searchParams, ...rest }) => {
940
+ if (!isDraftModeEnabled({ searchParams })) {
941
+ return /* @__PURE__ */ import_react9.default.createElement("div", null, /* @__PURE__ */ import_react9.default.createElement("h1", null, "Playground is only available in draft mode"));
942
+ }
943
+ const id = searchParams["id"];
944
+ if (!id) {
945
+ (0, import_navigation2.notFound)();
946
+ }
947
+ const canvasClient = getCanvasClient({
948
+ cache: {
949
+ type: "no-cache"
950
+ }
951
+ });
952
+ const possibleStates = [import_canvas8.CANVAS_EDITOR_STATE, import_canvas8.CANVAS_DRAFT_STATE];
953
+ let composition = void 0;
954
+ for (let i = 0; i < possibleStates.length; i++) {
955
+ const state = possibleStates[i];
956
+ try {
957
+ composition = await canvasClient.getCompositionById({
958
+ compositionId: id,
959
+ state,
960
+ withComponentIDs: true
961
+ });
962
+ } catch (e) {
963
+ console.warn(`Failed to get composition ${id} with state ${state}`, e);
964
+ }
965
+ if (composition) {
966
+ break;
967
+ }
968
+ }
969
+ if (!composition) {
970
+ (0, import_navigation2.notFound)();
971
+ }
972
+ return /* @__PURE__ */ import_react9.default.createElement(
973
+ UniformComposition,
974
+ {
975
+ mode: "server",
976
+ params: {},
977
+ searchParams,
978
+ route: {
979
+ type: "composition",
980
+ compositionApiResponse: composition,
981
+ matchedRoute: "composition"
982
+ },
983
+ ...rest
984
+ }
985
+ );
986
+ };
987
+ // Annotate the CommonJS export names for ESM import in node:
988
+ 0 && (module.exports = {
989
+ ContextUpdateTransfer,
990
+ UniformComposition,
991
+ UniformContext,
992
+ UniformPlayground,
993
+ createServerUniformContext,
994
+ createStaticParams,
995
+ generateStaticParams,
996
+ getCanvasClient,
997
+ getDefaultCanvasClient,
998
+ getDefaultManifestClient,
999
+ getDefaultProjectMapClient,
1000
+ getDefaultRouteClient,
1001
+ getManifest,
1002
+ getManifestClient,
1003
+ getProjectMapClient,
1004
+ getRouteClient,
1005
+ isDevelopmentEnvironment,
1006
+ isDraftModeEnabled,
1007
+ isIncontextEditingEnabled,
1008
+ isOnVercelPreviewEnvironment,
1009
+ resolveComposition,
1010
+ retrieveRoute
1011
+ });