@uniformdev/canvas-next-rsc 19.173.0 → 19.173.2-alpha.210

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 (161) hide show
  1. package/dist/UniformComposition-0pvEHduc.d.mts +64 -0
  2. package/dist/UniformComposition-0pvEHduc.d.ts +77 -0
  3. package/dist/UniformComposition-38e22896.d.ts +74 -0
  4. package/dist/UniformComposition-B-Z17dUt.d.ts +56 -43
  5. package/dist/UniformComposition-D4tBQ2U4.d.mts +64 -0
  6. package/dist/UniformComposition-D4tBQ2U4.d.ts +77 -0
  7. package/dist/UniformComposition-Dw55RFP6.d.mts +67 -0
  8. package/dist/UniformComposition-Dw55RFP6.d.ts +67 -0
  9. package/dist/UniformComposition-d178d865.d.ts +77 -0
  10. package/dist/actions/updateContext.d.ts +2 -0
  11. package/dist/actions/updateContext.js +17 -0
  12. package/dist/client/canvasClient.d.ts +5 -0
  13. package/dist/client/canvasClient.js +53 -0
  14. package/dist/client/manifestClient.d.ts +209 -0
  15. package/dist/client/manifestClient.js +33 -0
  16. package/dist/client/projectMapClient.d.ts +5 -0
  17. package/dist/client/projectMapClient.js +17 -0
  18. package/dist/client/routeClient.d.ts +5 -0
  19. package/dist/client/routeClient.js +68 -0
  20. package/dist/component.d.mts +23 -5
  21. package/dist/component.d.ts +23 -5
  22. package/dist/component.js +67 -25
  23. package/dist/component.mjs +66 -23
  24. package/dist/components/DefaultNotImplementedComponent.d.ts +4 -0
  25. package/dist/components/DefaultNotImplementedComponent.js +45 -0
  26. package/dist/components/GoogleTagManagerAnalytics.d.ts +3 -0
  27. package/dist/components/GoogleTagManagerAnalytics.js +44 -0
  28. package/dist/components/UniformComponent.d.ts +35 -0
  29. package/dist/components/UniformComponent.js +14 -0
  30. package/dist/components/UniformComposition.d.ts +47 -0
  31. package/dist/components/UniformComposition.js +35 -0
  32. package/dist/components/UniformContext.d.ts +13 -0
  33. package/dist/components/UniformContext.js +19 -0
  34. package/dist/components/UniformRichText.d.ts +42 -0
  35. package/dist/components/UniformRichText.js +15 -0
  36. package/dist/components/UniformRichTextNode.d.ts +14 -0
  37. package/dist/components/UniformRichTextNode.js +49 -0
  38. package/dist/components/UniformScript.d.ts +5 -0
  39. package/dist/components/UniformScript.js +49 -0
  40. package/dist/components/UniformSlot.d.ts +48 -0
  41. package/dist/components/UniformSlot.js +38 -0
  42. package/dist/components/UniformText.d.ts +10 -0
  43. package/dist/components/UniformText.js +5 -0
  44. package/dist/components/__tests__/evaluateComposition.spec.d.ts +1 -0
  45. package/dist/components/__tests__/evaluateComposition.spec.js +80 -0
  46. package/dist/components/convertComponentToProps.d.ts +18 -0
  47. package/dist/components/convertComponentToProps.js +22 -0
  48. package/dist/components/evaluateComposition.d.ts +32 -0
  49. package/dist/components/evaluateComposition.js +183 -0
  50. package/dist/components/getEnrichmentTags.d.ts +5 -0
  51. package/dist/components/getEnrichmentTags.js +13 -0
  52. package/dist/components/getUniformContext.d.ts +10 -0
  53. package/dist/components/getUniformContext.js +17 -0
  54. package/dist/components/nodes/HeadingRichTextNode.d.ts +2 -0
  55. package/dist/components/nodes/HeadingRichTextNode.js +6 -0
  56. package/dist/components/nodes/LinebreakRichTextNode.d.ts +2 -0
  57. package/dist/components/nodes/LinebreakRichTextNode.js +4 -0
  58. package/dist/components/nodes/LinkRichTextNode.d.ts +2 -0
  59. package/dist/components/nodes/LinkRichTextNode.js +6 -0
  60. package/dist/components/nodes/ListItemRichTextNode.d.ts +2 -0
  61. package/dist/components/nodes/ListItemRichTextNode.js +5 -0
  62. package/dist/components/nodes/ListRichTextNode.d.ts +2 -0
  63. package/dist/components/nodes/ListRichTextNode.js +6 -0
  64. package/dist/components/nodes/ParagraphRichTextNode.d.ts +2 -0
  65. package/dist/components/nodes/ParagraphRichTextNode.js +6 -0
  66. package/dist/components/nodes/TabRichTextNode.d.ts +2 -0
  67. package/dist/components/nodes/TabRichTextNode.js +4 -0
  68. package/dist/components/nodes/TextRichTextNode.d.ts +2 -0
  69. package/dist/components/nodes/TextRichTextNode.js +9 -0
  70. package/dist/components/renderComponent.d.ts +26 -0
  71. package/dist/components/renderComponent.js +52 -0
  72. package/dist/components/resolvePath.d.ts +5 -0
  73. package/dist/components/resolvePath.js +34 -0
  74. package/dist/components/retrieveRoute.d.ts +198 -0
  75. package/dist/components/retrieveRoute.js +146 -0
  76. package/dist/components/types.d.ts +15 -0
  77. package/dist/components/types.js +1 -0
  78. package/dist/config/helpers.d.ts +23 -0
  79. package/dist/config/helpers.js +34 -0
  80. package/dist/config/models.d.ts +51 -0
  81. package/dist/config/models.js +1 -0
  82. package/dist/config/uniform.server.config.d.ts +3 -0
  83. package/dist/config/uniform.server.config.js +4 -0
  84. package/dist/cookie/index.d.ts +12 -0
  85. package/dist/cookie/index.js +21 -0
  86. package/dist/handler/createPreviewGETRouteHandler.d.ts +1 -0
  87. package/dist/handler/createPreviewGETRouteHandler.js +43 -0
  88. package/dist/handler/createPreviewPOSTRouteHandler.d.ts +1 -0
  89. package/dist/handler/createPreviewPOSTRouteHandler.js +88 -0
  90. package/dist/handler/createUniformRouteHandler.d.ts +4 -0
  91. package/dist/handler/createUniformRouteHandler.js +10 -0
  92. package/dist/handler/helpers.d.ts +17 -0
  93. package/dist/handler/helpers.js +148 -0
  94. package/dist/handler/messages/handleCompositionChanged.d.ts +2 -0
  95. package/dist/handler/messages/handleCompositionChanged.js +9 -0
  96. package/dist/handler/messages/handleCompositionDeleted.d.ts +2 -0
  97. package/dist/handler/messages/handleCompositionDeleted.js +9 -0
  98. package/dist/handler/messages/handleCompositionPublished.d.ts +2 -0
  99. package/dist/handler/messages/handleCompositionPublished.js +9 -0
  100. package/dist/handler/messages/handleManifestPublished.d.ts +2 -0
  101. package/dist/handler/messages/handleManifestPublished.js +10 -0
  102. package/dist/handler/messages/handleProjectMapNodeDelete.d.ts +2 -0
  103. package/dist/handler/messages/handleProjectMapNodeDelete.js +21 -0
  104. package/dist/handler/messages/handleProjectMapNodeInsert.d.ts +2 -0
  105. package/dist/handler/messages/handleProjectMapNodeInsert.js +21 -0
  106. package/dist/handler/messages/handleProjectMapNodeUpdate.d.ts +2 -0
  107. package/dist/handler/messages/handleProjectMapNodeUpdate.js +22 -0
  108. package/dist/handler/messages/handleRedirectDelete.d.ts +2 -0
  109. package/dist/handler/messages/handleRedirectDelete.js +15 -0
  110. package/dist/handler/messages/handleRedirectInsert.d.ts +2 -0
  111. package/dist/handler/messages/handleRedirectInsert.js +15 -0
  112. package/dist/handler/messages/handleRedirectUpdate.d.ts +2 -0
  113. package/dist/handler/messages/handleRedirectUpdate.js +15 -0
  114. package/dist/handler.js +2 -1
  115. package/dist/handler.mjs +2 -1
  116. package/dist/hooks/useForgetMe.d.ts +4 -0
  117. package/dist/hooks/useForgetMe.js +10 -0
  118. package/dist/hooks/useToggleConsent.d.ts +7 -0
  119. package/dist/hooks/useToggleConsent.js +22 -0
  120. package/dist/hooks/useUniformContext.d.ts +1 -0
  121. package/dist/hooks/useUniformContext.js +3 -0
  122. package/dist/index.d.mts +38 -38
  123. package/dist/index.d.ts +38 -38
  124. package/dist/index.esm.js +51 -19
  125. package/dist/index.js +78 -50
  126. package/dist/index.mjs +51 -19
  127. package/dist/models/index.d.ts +30 -0
  128. package/dist/models/index.js +1 -0
  129. package/dist/register/componentStore.d.ts +1 -0
  130. package/dist/register/componentStore.js +2 -0
  131. package/dist/register/componentStoreResolver.d.ts +4 -0
  132. package/dist/register/componentStoreResolver.js +5 -0
  133. package/dist/register/createComponentStore.d.ts +12 -0
  134. package/dist/register/createComponentStore.js +13 -0
  135. package/dist/register/createComponentStoreResolver.d.ts +12 -0
  136. package/dist/register/createComponentStoreResolver.js +9 -0
  137. package/dist/register/getTypeWithVariant.d.ts +1 -0
  138. package/dist/register/getTypeWithVariant.js +1 -0
  139. package/dist/register/registerUniformComponent.d.ts +10 -0
  140. package/dist/register/registerUniformComponent.js +8 -0
  141. package/dist/resolve/resolveChildren.d.ts +17 -0
  142. package/dist/resolve/resolveChildren.js +20 -0
  143. package/dist/score/index.d.ts +3 -0
  144. package/dist/score/index.js +114 -0
  145. package/dist/utils/__tests__/apply.spec.d.ts +1 -0
  146. package/dist/utils/__tests__/apply.spec.js +358 -0
  147. package/dist/utils/__tests__/diff.spec.d.ts +1 -0
  148. package/dist/utils/__tests__/diff.spec.js +394 -0
  149. package/dist/utils/apply.d.ts +10 -0
  150. package/dist/utils/apply.js +124 -0
  151. package/dist/utils/comp.d.ts +25 -0
  152. package/dist/utils/comp.js +65 -0
  153. package/dist/utils/diff.d.ts +58 -0
  154. package/dist/utils/diff.js +144 -0
  155. package/dist/utils/draft.d.ts +20 -0
  156. package/dist/utils/draft.js +22 -0
  157. package/dist/utils/tag.d.ts +2 -0
  158. package/dist/utils/tag.js +7 -0
  159. package/dist/utils/url.d.ts +1 -0
  160. package/dist/utils/url.js +10 -0
  161. package/package.json +20 -20
@@ -0,0 +1,2 @@
1
+ import { RichTextRendererComponent } from '../types';
2
+ export declare const ParagraphRichTextNode: RichTextRendererComponent;
@@ -0,0 +1,6 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { isPureDirection, isPureTextAlign } from '@uniformdev/richtext';
3
+ export const ParagraphRichTextNode = ({ children, node }) => {
4
+ const { format, direction } = node;
5
+ return (_jsx("p", { dir: isPureDirection(direction) ? direction : undefined, style: isPureTextAlign(format) ? { textAlign: format } : undefined, children: children }));
6
+ };
@@ -0,0 +1,2 @@
1
+ import { RichTextRendererComponent } from '../types';
2
+ export declare const TabRichTextNode: RichTextRendererComponent;
@@ -0,0 +1,4 @@
1
+ import { Fragment as _Fragment, jsx as _jsx } from "react/jsx-runtime";
2
+ export const TabRichTextNode = () => {
3
+ return _jsx(_Fragment, { children: '\t' });
4
+ };
@@ -0,0 +1,2 @@
1
+ import { RichTextRendererComponent } from '../types';
2
+ export declare const TextRichTextNode: RichTextRendererComponent;
@@ -0,0 +1,9 @@
1
+ import { jsx as _jsx, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { getRichTextTagsFromTextFormat } from '@uniformdev/richtext';
3
+ export const TextRichTextNode = ({ node }) => {
4
+ const { text, format } = node;
5
+ const tags = getRichTextTagsFromTextFormat(format);
6
+ return (_jsx(_Fragment, { children: tags.length > 0
7
+ ? tags.reduceRight((children, Tag) => _jsx(Tag, { children: children }), text)
8
+ : text }));
9
+ };
@@ -0,0 +1,26 @@
1
+ import { ComponentInstance } from '@uniformdev/canvas';
2
+ import { SystemRenderConfig, UniformSlotProps } from '@uniformdev/canvas-react';
3
+ import { Key } from 'react';
4
+
5
+ import { CompositionContext } from './UniformComponent';
6
+ export declare function renderComponent({
7
+ component,
8
+ context,
9
+ resolveSystem,
10
+ key,
11
+ indexInSlot,
12
+ slotName,
13
+ parentComponent,
14
+ slotChildrenCount,
15
+ emptyPlaceholder,
16
+ }: {
17
+ component: ComponentInstance;
18
+ context: CompositionContext;
19
+ resolveSystem: SystemRenderConfig;
20
+ key?: Key;
21
+ indexInSlot?: number;
22
+ slotName?: string;
23
+ parentComponent?: ComponentInstance;
24
+ slotChildrenCount?: number;
25
+ emptyPlaceholder?: UniformSlotProps<any>['emptyPlaceholder'];
26
+ }): JSX.Element | null;
@@ -0,0 +1,52 @@
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { CANVAS_LOCALE_TAG_PARAM, CANVAS_PERSONALIZE_SLOT, CANVAS_PERSONALIZE_TYPE, CANVAS_TEST_SLOT, CANVAS_TEST_TYPE, IN_CONTEXT_EDITOR_COMPONENT_START_ROLE, isComponentPlaceholderId, } from '@uniformdev/canvas';
3
+ import { componentStoreResolver } from '../register/componentStoreResolver';
4
+ import { isIncontextEditingEnabled } from '../utils/draft';
5
+ import { convertComponentToProps } from './convertComponentToProps';
6
+ import { UniformComponent } from './UniformComponent';
7
+ export function renderComponent({ component, context, resolveSystem, key = 0, indexInSlot, slotName, parentComponent, slotChildrenCount, emptyPlaceholder, }) {
8
+ var _a, _b, _c, _d;
9
+ const RenderComponent = componentStoreResolver(component);
10
+ // custom handling for tests and personalizes
11
+ if (component.type === CANVAS_TEST_TYPE) {
12
+ return resolveSystem.test(component, key, (variantComponent, key) => {
13
+ var _a, _b;
14
+ return renderComponent({
15
+ component: variantComponent,
16
+ context,
17
+ resolveSystem,
18
+ key,
19
+ parentComponent: component,
20
+ slotName: CANVAS_TEST_SLOT,
21
+ slotChildrenCount: (_a = component === null || component === void 0 ? void 0 : component.slots) === null || _a === void 0 ? void 0 : _a[CANVAS_TEST_SLOT].length,
22
+ indexInSlot: (_b = component === null || component === void 0 ? void 0 : component.slots) === null || _b === void 0 ? void 0 : _b[CANVAS_TEST_SLOT].findIndex(({ _id }) => variantComponent._id === _id),
23
+ });
24
+ });
25
+ }
26
+ else if (component.type === CANVAS_PERSONALIZE_TYPE) {
27
+ return resolveSystem.personalization(component, key, (variantComponent, key) => {
28
+ var _a, _b;
29
+ return renderComponent({
30
+ component: variantComponent,
31
+ context,
32
+ resolveSystem,
33
+ key,
34
+ parentComponent: component,
35
+ slotName: CANVAS_PERSONALIZE_SLOT,
36
+ slotChildrenCount: (_a = component === null || component === void 0 ? void 0 : component.slots) === null || _a === void 0 ? void 0 : _a[CANVAS_PERSONALIZE_SLOT].length,
37
+ indexInSlot: (_b = component === null || component === void 0 ? void 0 : component.slots) === null || _b === void 0 ? void 0 : _b[CANVAS_PERSONALIZE_SLOT].findIndex(({ _id }) => variantComponent._id === _id),
38
+ });
39
+ });
40
+ }
41
+ else if (RenderComponent) {
42
+ const props = convertComponentToProps({
43
+ component,
44
+ context,
45
+ });
46
+ const shouldRenderContextualEditingTags = Boolean(component._id) && isIncontextEditingEnabled(context);
47
+ const isPlaceholder = isComponentPlaceholderId(component._id);
48
+ const isReadOnly = false;
49
+ return (_jsx(UniformComponent, { data: component, context: context, children: _jsxs(_Fragment, { children: [!shouldRenderContextualEditingTags ? null : (_jsx("script", { "data-role": IN_CONTEXT_EDITOR_COMPONENT_START_ROLE, "data-parent-id": parentComponent === null || parentComponent === void 0 ? void 0 : parentComponent._id, "data-parent-type": parentComponent === null || parentComponent === void 0 ? void 0 : parentComponent.type, "data-component-id": component._id, "data-slot-name": slotName !== null && slotName !== void 0 ? slotName : '', "data-component-index": indexInSlot !== null && indexInSlot !== void 0 ? indexInSlot : '', "data-total-components": slotChildrenCount !== null && slotChildrenCount !== void 0 ? slotChildrenCount : '', "data-component-name": component.type, "data-is-placeholder": isPlaceholder ? 'true' : undefined, "data-is-localized": ((_a = component.parameters) === null || _a === void 0 ? void 0 : _a[CANVAS_LOCALE_TAG_PARAM]) ? 'true' : undefined, "data-component-title": (_d = (_c = (_b = component.parameters) === null || _b === void 0 ? void 0 : _b.title) === null || _c === void 0 ? void 0 : _c.value) !== null && _d !== void 0 ? _d : '', "data-is-readonly": isReadOnly }, key)), isPlaceholder && emptyPlaceholder !== undefined ? (emptyPlaceholder) : (_jsx(RenderComponent, { ...props })), !shouldRenderContextualEditingTags ? null : _jsx("script", { "data-role": "component-end" })] }) }, key));
50
+ }
51
+ return null;
52
+ }
@@ -0,0 +1,5 @@
1
+ export declare const resolvePath: (options: {
2
+ params: {
3
+ slug: string | string[];
4
+ };
5
+ }) => string;
@@ -0,0 +1,34 @@
1
+ const resolveSlugFromString = (originalSlug) => {
2
+ if (!originalSlug) {
3
+ return [''];
4
+ }
5
+ const slug = decodeURIComponent(originalSlug);
6
+ if (slug.includes('/')) {
7
+ return slug.split('/');
8
+ }
9
+ return [slug || ''];
10
+ };
11
+ const resolveSlugFromArray = (slug) => {
12
+ const slugPieces = [];
13
+ for (let i = 0; i < slug.length; i++) {
14
+ const decoded = decodeURIComponent(slug[i]);
15
+ if (decoded.includes('/')) {
16
+ slugPieces.push(...decoded.split('/'));
17
+ }
18
+ else {
19
+ slugPieces.push(decoded);
20
+ }
21
+ }
22
+ return slugPieces;
23
+ };
24
+ export const resolvePath = (options) => {
25
+ const { params: { slug }, } = options;
26
+ const definedSlug = !Array.isArray(slug)
27
+ ? resolveSlugFromString(slug)
28
+ : resolveSlugFromArray(slug);
29
+ let joined = `/${Array.isArray(definedSlug) ? definedSlug.join('/') : definedSlug}`;
30
+ if (joined === '/index') {
31
+ joined = '/';
32
+ }
33
+ return joined;
34
+ };
@@ -0,0 +1,198 @@
1
+ import { ResolvedRouteGetResponse, RouteGetResponseRedirect } from '@uniformdev/canvas';
2
+
3
+ import { UniformCompositionProps } from './UniformComposition';
4
+ export type ResolveRouteOptions = {
5
+ path: string;
6
+ state?: number;
7
+ searchParams:
8
+ | {
9
+ [key: string]: string | undefined;
10
+ }
11
+ | undefined;
12
+ };
13
+ export declare const resolveComposition: ({
14
+ searchParams,
15
+ params,
16
+ update,
17
+ }: Pick<UniformCompositionProps, 'searchParams' | 'params' | 'update'>) => Promise<{
18
+ type: 'composition';
19
+ matchedRoute: string;
20
+ dynamicInputs?:
21
+ | {
22
+ [key: string]: string;
23
+ }
24
+ | undefined;
25
+ composition: {
26
+ type: string;
27
+ parameters?:
28
+ | {
29
+ [key: string]: {
30
+ value: unknown;
31
+ type: string;
32
+ connectedData?:
33
+ | {
34
+ pointer: string;
35
+ syntax: 'jptr';
36
+ }
37
+ | undefined;
38
+ };
39
+ }
40
+ | undefined;
41
+ variant?: string | undefined;
42
+ projectMapNodes?:
43
+ | {
44
+ id: string;
45
+ path: string;
46
+ projectMapId: string;
47
+ }[]
48
+ | undefined;
49
+ slots?:
50
+ | {
51
+ [key: string]: {
52
+ type: string;
53
+ parameters?:
54
+ | {
55
+ [key: string]: {
56
+ value: unknown;
57
+ type: string;
58
+ connectedData?:
59
+ | {
60
+ pointer: string;
61
+ syntax: 'jptr';
62
+ }
63
+ | undefined;
64
+ };
65
+ }
66
+ | undefined;
67
+ variant?: string | undefined;
68
+ slots?:
69
+ | {
70
+ [key: string]: any[];
71
+ }
72
+ | undefined;
73
+ _id?: string | undefined;
74
+ _pattern?: string | undefined;
75
+ _dataResources?:
76
+ | {
77
+ [key: string]: {
78
+ type: string;
79
+ isPatternParameter?: boolean | undefined;
80
+ ignorePatternParameterDefault?: boolean | undefined;
81
+ variables?:
82
+ | {
83
+ [key: string]: string;
84
+ }
85
+ | undefined;
86
+ };
87
+ }
88
+ | undefined;
89
+ _patternDataResources?:
90
+ | {
91
+ [key: string]: {
92
+ type: string;
93
+ isPatternParameter?: boolean | undefined;
94
+ ignorePatternParameterDefault?: boolean | undefined;
95
+ variables?:
96
+ | {
97
+ [key: string]: string;
98
+ }
99
+ | undefined;
100
+ };
101
+ }
102
+ | undefined;
103
+ _patternError?: 'NOTFOUND' | 'CYCLIC' | undefined;
104
+ _overrides?:
105
+ | {
106
+ [key: string]: {
107
+ parameters?:
108
+ | {
109
+ [key: string]: {
110
+ value: unknown;
111
+ type: string;
112
+ connectedData?:
113
+ | {
114
+ pointer: string;
115
+ syntax: 'jptr';
116
+ }
117
+ | undefined;
118
+ };
119
+ }
120
+ | undefined;
121
+ variant?: string | undefined;
122
+ };
123
+ }
124
+ | undefined;
125
+ _overridability?:
126
+ | {
127
+ parameters?:
128
+ | {
129
+ [key: string]: 'yes' | 'no';
130
+ }
131
+ | undefined;
132
+ variants?: boolean | undefined;
133
+ }
134
+ | undefined;
135
+ }[];
136
+ }
137
+ | undefined;
138
+ _id: string;
139
+ _slug?: string | null | undefined;
140
+ _name: string;
141
+ _dataResources?:
142
+ | {
143
+ [key: string]: {
144
+ type: string;
145
+ isPatternParameter?: boolean | undefined;
146
+ ignorePatternParameterDefault?: boolean | undefined;
147
+ variables?:
148
+ | {
149
+ [key: string]: string;
150
+ }
151
+ | undefined;
152
+ };
153
+ }
154
+ | undefined;
155
+ _overrides?:
156
+ | {
157
+ [key: string]: {
158
+ parameters?:
159
+ | {
160
+ [key: string]: {
161
+ value: unknown;
162
+ type: string;
163
+ connectedData?:
164
+ | {
165
+ pointer: string;
166
+ syntax: 'jptr';
167
+ }
168
+ | undefined;
169
+ };
170
+ }
171
+ | undefined;
172
+ variant?: string | undefined;
173
+ };
174
+ }
175
+ | undefined;
176
+ _overridability?:
177
+ | {
178
+ parameters?:
179
+ | {
180
+ [key: string]: 'yes' | 'no';
181
+ }
182
+ | undefined;
183
+ variants?: boolean | undefined;
184
+ }
185
+ | undefined;
186
+ };
187
+ cookieValue: string | undefined;
188
+ path: string;
189
+ searchParams:
190
+ | {
191
+ [key: string]: string | undefined;
192
+ }
193
+ | undefined;
194
+ isCanvasEditing: boolean;
195
+ seenComponents: import('../models').SeenUniformComponent[];
196
+ }>;
197
+ export declare const retrieveRoute: (data: ResolveRouteOptions) => Promise<ResolvedRouteGetResponse>;
198
+ export declare const resolveRedirectHref: (resolveResult: RouteGetResponseRedirect, path: string) => string;
@@ -0,0 +1,146 @@
1
+ import { CANVAS_DRAFT_STATE, CANVAS_EDITOR_STATE, CANVAS_PUBLISHED_STATE, } from '@uniformdev/canvas';
2
+ import { RedirectClient } from '@uniformdev/redirect';
3
+ import { get } from '@vercel/edge-config';
4
+ import { cookies, headers } from 'next/headers';
5
+ import { notFound, redirect } from 'next/navigation';
6
+ import { getManifestFromApi } from '../client/manifestClient';
7
+ import { getRouteClient } from '../client/routeClient';
8
+ import { getRouteRevalidateInterval, getServerConfig } from '../config/helpers';
9
+ import { isDevelopmentEnvironment, isDraftModeEnabled, isIncontextEditingEnabled, isOnVercelPreviewEnvironment, } from '../utils/draft';
10
+ import { buildPathTag } from '../utils/tag';
11
+ import { getBaseUrl } from '../utils/url';
12
+ import { evaluateComposition } from './evaluateComposition';
13
+ import { resolvePath } from './resolvePath';
14
+ export const resolveComposition = async ({ searchParams, params, update, }) => {
15
+ // prefetch manifest immediately
16
+ void getManifestFromApi({
17
+ searchParams,
18
+ });
19
+ const draftMode = isDraftModeEnabled({ searchParams });
20
+ const previewEnvironment = isOnVercelPreviewEnvironment();
21
+ const isDevelopment = isDevelopmentEnvironment();
22
+ const isCanvasEditing = isIncontextEditingEnabled({
23
+ searchParams,
24
+ });
25
+ // resolve the path from provided params
26
+ const path = resolvePath({
27
+ params,
28
+ });
29
+ let state;
30
+ if (isCanvasEditing) {
31
+ state = CANVAS_EDITOR_STATE;
32
+ }
33
+ else {
34
+ state = draftMode || previewEnvironment || isDevelopment ? CANVAS_DRAFT_STATE : CANVAS_PUBLISHED_STATE;
35
+ }
36
+ // resolve the route from the path
37
+ const resolveResult = await retrieveRoute({
38
+ path,
39
+ state,
40
+ searchParams,
41
+ });
42
+ // if the route is a redirect, redirect
43
+ if (resolveResult.type === 'redirect') {
44
+ const href = resolveRedirectHref(resolveResult, path);
45
+ redirect(href);
46
+ }
47
+ // if the route is not found, return 404
48
+ if (resolveResult.type === 'notFound') {
49
+ notFound();
50
+ }
51
+ const { compositionApiResponse, ...rest } = resolveResult;
52
+ // evaluate the composition
53
+ const { cookieValue, composition: evaluatedComposition, seenComponents, } = await evaluateComposition({
54
+ root: compositionApiResponse.composition,
55
+ params,
56
+ searchParams: searchParams !== null && searchParams !== void 0 ? searchParams : {},
57
+ dynamicInputs: rest.dynamicInputs,
58
+ headers: headers(),
59
+ cookies: cookies()
60
+ .getAll()
61
+ .reduce((acc, cookie) => {
62
+ acc[cookie.name] = cookie.value;
63
+ return acc;
64
+ }, {}),
65
+ update,
66
+ });
67
+ return {
68
+ composition: evaluatedComposition,
69
+ cookieValue,
70
+ path,
71
+ searchParams,
72
+ isCanvasEditing,
73
+ seenComponents,
74
+ ...rest,
75
+ };
76
+ };
77
+ export const retrieveRoute = async (data) => {
78
+ void resolveRouteByEdgeConfig(data);
79
+ void resolveRouteByRouteApi(data);
80
+ const edgeConfigValue = await resolveRouteByEdgeConfig(data);
81
+ let result;
82
+ if (edgeConfigValue) {
83
+ result = edgeConfigValue;
84
+ }
85
+ else {
86
+ const routeApiValue = await resolveRouteByRouteApi(data);
87
+ result = routeApiValue;
88
+ }
89
+ // fall back to draft if requesting editor state
90
+ if (result.type === 'notFound' && data.state === CANVAS_EDITOR_STATE) {
91
+ return retrieveRoute({
92
+ ...data,
93
+ state: CANVAS_DRAFT_STATE,
94
+ });
95
+ }
96
+ return result;
97
+ };
98
+ export const resolveRedirectHref = (resolveResult, path) => {
99
+ let href;
100
+ if (resolveResult.redirect.targetProjectMapNodeId) {
101
+ const requestUrl = `${getBaseUrl()}${path}`;
102
+ const expandedUrl = RedirectClient.getTargetVariableExpandedUrl(requestUrl, resolveResult.redirect);
103
+ const url = new URL(expandedUrl);
104
+ href = url.pathname;
105
+ }
106
+ else {
107
+ href = resolveResult.redirect.targetUrl;
108
+ }
109
+ return href;
110
+ };
111
+ const resolveRouteByEdgeConfig = async (data) => {
112
+ var _a;
113
+ const config = getServerConfig();
114
+ if (!((_a = config.experimental) === null || _a === void 0 ? void 0 : _a.edgeRedirects) || !process.env.EDGE_CONFIG) {
115
+ return undefined;
116
+ }
117
+ const sourcePathKey = buildPathTag(data.path);
118
+ const key = sourcePathKey.replace(/\W+/g, '');
119
+ let edgeConfig;
120
+ try {
121
+ edgeConfig = await get(key);
122
+ }
123
+ catch (e) {
124
+ // eslint-disable-next-line no-console
125
+ console.warn('Failed to retrieve edge config', e);
126
+ }
127
+ if (!edgeConfig) {
128
+ return undefined;
129
+ }
130
+ return edgeConfig;
131
+ };
132
+ const resolveRouteByRouteApi = async (data) => {
133
+ var _a;
134
+ const routeClient = getRouteClient({
135
+ revalidate: getRouteRevalidateInterval({
136
+ searchParams: data.searchParams,
137
+ }),
138
+ });
139
+ const routeResult = await routeClient.getRoute({
140
+ path: data.path,
141
+ state: data.state,
142
+ withComponentIDs: data.state === CANVAS_DRAFT_STATE || data.state === CANVAS_EDITOR_STATE,
143
+ withContentSourceMap: isOnVercelPreviewEnvironment() && ((_a = getServerConfig().experimental) === null || _a === void 0 ? void 0 : _a.vercelVisualEditing),
144
+ });
145
+ return routeResult;
146
+ };
@@ -0,0 +1,15 @@
1
+ import { RichTextNode } from '@uniformdev/richtext';
2
+ import React, { PropsWithChildren } from 'react';
3
+ export type RichTextComponentProps<TNode extends RichTextNode = RichTextNode> = {
4
+ node: TNode;
5
+ };
6
+ export type RichTextRendererComponent<TNode extends RichTextNode = RichTextNode> = React.ComponentType<
7
+ PropsWithChildren<RichTextComponentProps<TNode>>
8
+ >;
9
+ /**
10
+ * Function that maps a Rich Text node instance to its React component to render it.
11
+ * The resolver would commonly inspect the `type` of the component to decide.
12
+ */
13
+ export type RenderRichTextComponentResolver = (
14
+ node: RichTextNode
15
+ ) => RichTextRendererComponent | null | undefined;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,23 @@
1
+ import { UniformServerConfig } from './models';
2
+ export declare const getCanvasRevalidateInterval: (options: {
3
+ searchParams:
4
+ | {
5
+ [key: string]: string | undefined;
6
+ }
7
+ | undefined;
8
+ }) => number | undefined;
9
+ export declare const getManifestRevalidateInterval: (options: {
10
+ searchParams:
11
+ | {
12
+ [key: string]: string | undefined;
13
+ }
14
+ | undefined;
15
+ }) => number | undefined;
16
+ export declare const getRouteRevalidateInterval: (options: {
17
+ searchParams:
18
+ | {
19
+ [key: string]: string | undefined;
20
+ }
21
+ | undefined;
22
+ }) => number | undefined;
23
+ export declare const getServerConfig: () => UniformServerConfig;
@@ -0,0 +1,34 @@
1
+ import { isDraftModeEnabled, isOnVercelPreviewEnvironment } from '../utils/draft';
2
+ export const getCanvasRevalidateInterval = (options) => {
3
+ if (isDraftModeEnabled({ searchParams: options.searchParams }) || isOnVercelPreviewEnvironment()) {
4
+ return -1;
5
+ }
6
+ const config = getServerConfig();
7
+ return 'canvasRevalidateInterval' in config ? config.canvasRevalidateInterval : undefined;
8
+ };
9
+ export const getManifestRevalidateInterval = (options) => {
10
+ if (isDraftModeEnabled({ searchParams: options.searchParams }) || isOnVercelPreviewEnvironment()) {
11
+ return -1;
12
+ }
13
+ const config = getServerConfig();
14
+ return 'manifestRevalidateInterval' in config ? config.manifestRevalidateInterval : undefined;
15
+ };
16
+ export const getRouteRevalidateInterval = (options) => {
17
+ if (isDraftModeEnabled({ searchParams: options.searchParams }) || isOnVercelPreviewEnvironment()) {
18
+ return -1;
19
+ }
20
+ const config = getServerConfig();
21
+ return 'routeRevalidateInterval' in config ? config.routeRevalidateInterval : undefined;
22
+ };
23
+ export const getServerConfig = () => {
24
+ let serverConfig;
25
+ try {
26
+ serverConfig = require('uniform.server.config.js');
27
+ }
28
+ catch (e) {
29
+ serverConfig = {
30
+ defaultConsent: false,
31
+ };
32
+ }
33
+ return serverConfig;
34
+ };
@@ -0,0 +1,51 @@
1
+ export type UniformServerConfig = {
2
+ /**
3
+ * Sets the default value of storage consent for new unknown visitors.
4
+ *
5
+ * @default false
6
+ */
7
+ defaultConsent?: boolean;
8
+ /**
9
+ * Interval to revalidate the manifest at.
10
+ *
11
+ * @default 60
12
+ */
13
+ manifestRevalidateInterval?: number;
14
+ /**
15
+ * Interval to revalidate route data at.
16
+ *
17
+ * @default 10
18
+ */
19
+ routeRevalidateInterval?: number;
20
+ /**
21
+ * Interval to revalidate canvas data at.
22
+ *
23
+ * @default 10
24
+ */
25
+ canvasRevalidateInterval?: number;
26
+ /**
27
+ * 😅
28
+ */
29
+ experimental?: {
30
+ /**
31
+ * Enables edge cache of redirects.
32
+ *
33
+ * @default false
34
+ */
35
+ edgeRedirects?: boolean;
36
+ /**
37
+ * Enables edge cache of compositions.
38
+ *
39
+ * @default false
40
+ */
41
+ edgeCompositions?: boolean;
42
+ /**
43
+ * Dynamic tokens names that should be used for localization.
44
+ */
45
+ localeDynamicInputs?: string[];
46
+ /**
47
+ * Enables visual editing mode.
48
+ */
49
+ vercelVisualEditing?: boolean;
50
+ };
51
+ };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,3 @@
1
+ import { UniformServerConfig } from './models';
2
+ declare const config: UniformServerConfig;
3
+ export default config;
@@ -0,0 +1,4 @@
1
+ /** @type {import('@uniformdev/canvas-next-rsc/config').UniformServerConfig} */
2
+ module.exports = {
3
+ defaultConsent: true,
4
+ };
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Sets the Uniform cookie with the provided value.
3
+ */
4
+ export declare const setUniformCookie: (value: string) => void;
5
+ /**
6
+ * Determine if the Uniform cookie is present.
7
+ */
8
+ export declare const hasUniformCookie: () => boolean;
9
+ /**
10
+ * Gets the Uniform cookie value.
11
+ */
12
+ export declare const removeUniformCookie: () => void;