@uniformdev/canvas-next-rsc 19.173.1-alpha.17 → 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.
- package/dist/UniformComposition-0pvEHduc.d.mts +64 -0
- package/dist/UniformComposition-0pvEHduc.d.ts +77 -0
- package/dist/UniformComposition-38e22896.d.ts +74 -0
- package/dist/UniformComposition-B-Z17dUt.d.ts +56 -43
- package/dist/UniformComposition-D4tBQ2U4.d.mts +64 -0
- package/dist/UniformComposition-D4tBQ2U4.d.ts +77 -0
- package/dist/UniformComposition-Dw55RFP6.d.mts +67 -0
- package/dist/UniformComposition-Dw55RFP6.d.ts +67 -0
- package/dist/UniformComposition-d178d865.d.ts +77 -0
- package/dist/actions/updateContext.d.ts +2 -0
- package/dist/actions/updateContext.js +17 -0
- package/dist/client/canvasClient.d.ts +5 -0
- package/dist/client/canvasClient.js +53 -0
- package/dist/client/manifestClient.d.ts +209 -0
- package/dist/client/manifestClient.js +33 -0
- package/dist/client/projectMapClient.d.ts +5 -0
- package/dist/client/projectMapClient.js +17 -0
- package/dist/client/routeClient.d.ts +5 -0
- package/dist/client/routeClient.js +68 -0
- package/dist/component.d.mts +23 -5
- package/dist/component.d.ts +23 -5
- package/dist/component.js +67 -25
- package/dist/component.mjs +66 -23
- package/dist/components/DefaultNotImplementedComponent.d.ts +4 -0
- package/dist/components/DefaultNotImplementedComponent.js +45 -0
- package/dist/components/GoogleTagManagerAnalytics.d.ts +3 -0
- package/dist/components/GoogleTagManagerAnalytics.js +44 -0
- package/dist/components/UniformComponent.d.ts +35 -0
- package/dist/components/UniformComponent.js +14 -0
- package/dist/components/UniformComposition.d.ts +47 -0
- package/dist/components/UniformComposition.js +35 -0
- package/dist/components/UniformContext.d.ts +13 -0
- package/dist/components/UniformContext.js +19 -0
- package/dist/components/UniformRichText.d.ts +42 -0
- package/dist/components/UniformRichText.js +15 -0
- package/dist/components/UniformRichTextNode.d.ts +14 -0
- package/dist/components/UniformRichTextNode.js +49 -0
- package/dist/components/UniformScript.d.ts +5 -0
- package/dist/components/UniformScript.js +49 -0
- package/dist/components/UniformSlot.d.ts +48 -0
- package/dist/components/UniformSlot.js +38 -0
- package/dist/components/UniformText.d.ts +10 -0
- package/dist/components/UniformText.js +5 -0
- package/dist/components/__tests__/evaluateComposition.spec.d.ts +1 -0
- package/dist/components/__tests__/evaluateComposition.spec.js +80 -0
- package/dist/components/convertComponentToProps.d.ts +18 -0
- package/dist/components/convertComponentToProps.js +22 -0
- package/dist/components/evaluateComposition.d.ts +32 -0
- package/dist/components/evaluateComposition.js +183 -0
- package/dist/components/getEnrichmentTags.d.ts +5 -0
- package/dist/components/getEnrichmentTags.js +13 -0
- package/dist/components/getUniformContext.d.ts +10 -0
- package/dist/components/getUniformContext.js +17 -0
- package/dist/components/nodes/HeadingRichTextNode.d.ts +2 -0
- package/dist/components/nodes/HeadingRichTextNode.js +6 -0
- package/dist/components/nodes/LinebreakRichTextNode.d.ts +2 -0
- package/dist/components/nodes/LinebreakRichTextNode.js +4 -0
- package/dist/components/nodes/LinkRichTextNode.d.ts +2 -0
- package/dist/components/nodes/LinkRichTextNode.js +6 -0
- package/dist/components/nodes/ListItemRichTextNode.d.ts +2 -0
- package/dist/components/nodes/ListItemRichTextNode.js +5 -0
- package/dist/components/nodes/ListRichTextNode.d.ts +2 -0
- package/dist/components/nodes/ListRichTextNode.js +6 -0
- package/dist/components/nodes/ParagraphRichTextNode.d.ts +2 -0
- package/dist/components/nodes/ParagraphRichTextNode.js +6 -0
- package/dist/components/nodes/TabRichTextNode.d.ts +2 -0
- package/dist/components/nodes/TabRichTextNode.js +4 -0
- package/dist/components/nodes/TextRichTextNode.d.ts +2 -0
- package/dist/components/nodes/TextRichTextNode.js +9 -0
- package/dist/components/renderComponent.d.ts +26 -0
- package/dist/components/renderComponent.js +52 -0
- package/dist/components/resolvePath.d.ts +5 -0
- package/dist/components/resolvePath.js +34 -0
- package/dist/components/retrieveRoute.d.ts +198 -0
- package/dist/components/retrieveRoute.js +146 -0
- package/dist/components/types.d.ts +15 -0
- package/dist/components/types.js +1 -0
- package/dist/config/helpers.d.ts +23 -0
- package/dist/config/helpers.js +34 -0
- package/dist/config/models.d.ts +51 -0
- package/dist/config/models.js +1 -0
- package/dist/config/uniform.server.config.d.ts +3 -0
- package/dist/config/uniform.server.config.js +4 -0
- package/dist/cookie/index.d.ts +12 -0
- package/dist/cookie/index.js +21 -0
- package/dist/handler/createPreviewGETRouteHandler.d.ts +1 -0
- package/dist/handler/createPreviewGETRouteHandler.js +43 -0
- package/dist/handler/createPreviewPOSTRouteHandler.d.ts +1 -0
- package/dist/handler/createPreviewPOSTRouteHandler.js +88 -0
- package/dist/handler/createUniformRouteHandler.d.ts +4 -0
- package/dist/handler/createUniformRouteHandler.js +10 -0
- package/dist/handler/helpers.d.ts +17 -0
- package/dist/handler/helpers.js +148 -0
- package/dist/handler/messages/handleCompositionChanged.d.ts +2 -0
- package/dist/handler/messages/handleCompositionChanged.js +9 -0
- package/dist/handler/messages/handleCompositionDeleted.d.ts +2 -0
- package/dist/handler/messages/handleCompositionDeleted.js +9 -0
- package/dist/handler/messages/handleCompositionPublished.d.ts +2 -0
- package/dist/handler/messages/handleCompositionPublished.js +9 -0
- package/dist/handler/messages/handleManifestPublished.d.ts +2 -0
- package/dist/handler/messages/handleManifestPublished.js +10 -0
- package/dist/handler/messages/handleProjectMapNodeDelete.d.ts +2 -0
- package/dist/handler/messages/handleProjectMapNodeDelete.js +21 -0
- package/dist/handler/messages/handleProjectMapNodeInsert.d.ts +2 -0
- package/dist/handler/messages/handleProjectMapNodeInsert.js +21 -0
- package/dist/handler/messages/handleProjectMapNodeUpdate.d.ts +2 -0
- package/dist/handler/messages/handleProjectMapNodeUpdate.js +22 -0
- package/dist/handler/messages/handleRedirectDelete.d.ts +2 -0
- package/dist/handler/messages/handleRedirectDelete.js +15 -0
- package/dist/handler/messages/handleRedirectInsert.d.ts +2 -0
- package/dist/handler/messages/handleRedirectInsert.js +15 -0
- package/dist/handler/messages/handleRedirectUpdate.d.ts +2 -0
- package/dist/handler/messages/handleRedirectUpdate.js +15 -0
- package/dist/handler.js +2 -1
- package/dist/handler.mjs +2 -1
- package/dist/hooks/useForgetMe.d.ts +4 -0
- package/dist/hooks/useForgetMe.js +10 -0
- package/dist/hooks/useToggleConsent.d.ts +7 -0
- package/dist/hooks/useToggleConsent.js +22 -0
- package/dist/hooks/useUniformContext.d.ts +1 -0
- package/dist/hooks/useUniformContext.js +3 -0
- package/dist/index.d.mts +38 -38
- package/dist/index.d.ts +38 -38
- package/dist/index.esm.js +51 -19
- package/dist/index.js +78 -50
- package/dist/index.mjs +51 -19
- package/dist/models/index.d.ts +30 -0
- package/dist/models/index.js +1 -0
- package/dist/register/componentStore.d.ts +1 -0
- package/dist/register/componentStore.js +2 -0
- package/dist/register/componentStoreResolver.d.ts +4 -0
- package/dist/register/componentStoreResolver.js +5 -0
- package/dist/register/createComponentStore.d.ts +12 -0
- package/dist/register/createComponentStore.js +13 -0
- package/dist/register/createComponentStoreResolver.d.ts +12 -0
- package/dist/register/createComponentStoreResolver.js +9 -0
- package/dist/register/getTypeWithVariant.d.ts +1 -0
- package/dist/register/getTypeWithVariant.js +1 -0
- package/dist/register/registerUniformComponent.d.ts +10 -0
- package/dist/register/registerUniformComponent.js +8 -0
- package/dist/resolve/resolveChildren.d.ts +17 -0
- package/dist/resolve/resolveChildren.js +20 -0
- package/dist/score/index.d.ts +3 -0
- package/dist/score/index.js +114 -0
- package/dist/utils/__tests__/apply.spec.d.ts +1 -0
- package/dist/utils/__tests__/apply.spec.js +358 -0
- package/dist/utils/__tests__/diff.spec.d.ts +1 -0
- package/dist/utils/__tests__/diff.spec.js +394 -0
- package/dist/utils/apply.d.ts +10 -0
- package/dist/utils/apply.js +124 -0
- package/dist/utils/comp.d.ts +25 -0
- package/dist/utils/comp.js +65 -0
- package/dist/utils/diff.d.ts +58 -0
- package/dist/utils/diff.js +144 -0
- package/dist/utils/draft.d.ts +20 -0
- package/dist/utils/draft.js +22 -0
- package/dist/utils/tag.d.ts +2 -0
- package/dist/utils/tag.js +7 -0
- package/dist/utils/url.d.ts +1 -0
- package/dist/utils/url.js +10 -0
- package/package.json +20 -20
|
@@ -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,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,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,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;
|