@enonic/nextjs-adapter 0.0.1-alpha.3 → 0.0.1-alpha.4
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/ComponentRegistry.d.ts +61 -0
- package/ComponentRegistry.js +115 -0
- package/UrlProcessor.d.ts +21 -0
- package/UrlProcessor.js +54 -0
- package/baseMappings.d.ts +1 -0
- package/baseMappings.js +38 -0
- package/guillotine/fetchContent.d.ts +82 -0
- package/guillotine/fetchContent.js +644 -0
- package/guillotine/getMetaData.d.ts +91 -0
- package/guillotine/getMetaData.js +128 -0
- package/index.d.ts +2 -0
- package/index.js +2 -0
- package/package.json +1 -1
- package/utils.d.ts +64 -0
- package/utils.js +146 -0
- package/views/BaseComponent.d.ts +25 -0
- package/views/BaseComponent.jsx +114 -0
- package/views/BaseContent.d.ts +4 -0
- package/views/BaseContent.jsx +41 -0
- package/views/BaseLayout.d.ts +17 -0
- package/views/BaseLayout.jsx +24 -0
- package/views/BaseMacro.d.ts +16 -0
- package/views/BaseMacro.jsx +85 -0
- package/views/BasePage.d.ts +19 -0
- package/views/BasePage.jsx +34 -0
- package/views/BasePart.d.ts +19 -0
- package/views/BasePart.jsx +24 -0
- package/views/Empty.d.ts +3 -0
- package/views/Empty.jsx +3 -0
- package/views/Fragment.d.ts +10 -0
- package/views/Fragment.jsx +25 -0
- package/views/MainView.d.ts +4 -0
- package/views/MainView.jsx +14 -0
- package/views/Region.d.ts +20 -0
- package/views/Region.jsx +57 -0
- package/views/RichTextView.d.ts +15 -0
- package/views/RichTextView.jsx +55 -0
- package/views/SingleComponent.d.ts +5 -0
- package/views/SingleComponent.jsx +11 -0
- package/views/Text.d.ts +9 -0
- package/views/Text.jsx +4 -0
- package/views/macros/DefaultMacro.d.ts +4 -0
- package/views/macros/DefaultMacro.jsx +3 -0
- package/views/macros/DisableMacro.d.ts +3 -0
- package/views/macros/DisableMacro.jsx +2 -0
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import { PageComponent } from './guillotine/getMetaData';
|
|
3
|
+
import { Context } from './guillotine/fetchContent';
|
|
4
|
+
/**
|
|
5
|
+
* Object that configures the handling of a particular content type. All attributes are optional (see examples below), and missing values will fall back to default behavior:
|
|
6
|
+
* - 'query' (used in fetchContent.ts) Guillotine query for fetching content data, may also have a function that supplies guillotine variables. So, 'query' can EITHER be only a query string, OR also add a get-guillotine-variables function. In the latter case, 'query' can be an object with 'query' and 'variables' attributes, or an array where the query string is first and the get-variables function is second. Either way, the get-variables function takes two arguments: path (content path, mandatory) and context (next.js-supplied Context from getServerSideProps etc. Optional, and requires that fetchContent is called with the context, of course).
|
|
7
|
+
* - 'props' (used in fetchContent.ts) is a function for processing props after fetching them
|
|
8
|
+
* - 'view' (used in BasePage.tsx) is a React component: top-level content-type-specific rendering with the props first fetched from guillotine (and then optionally preprocessed with the function in 'props').
|
|
9
|
+
*/
|
|
10
|
+
export interface ComponentDefinition {
|
|
11
|
+
catchAll?: boolean;
|
|
12
|
+
query?: SelectedQueryMaybeVariablesFunc;
|
|
13
|
+
configQuery?: string;
|
|
14
|
+
processor?: DataProcessor;
|
|
15
|
+
view?: React.FunctionComponent<any>;
|
|
16
|
+
}
|
|
17
|
+
export declare type DataProcessor = (data: any, context?: Context) => Promise<Record<string, any>>;
|
|
18
|
+
export declare type VariablesGetter = (path: string, context?: Context, config?: any) => VariablesGetterResult;
|
|
19
|
+
export declare type VariablesGetterResult = {
|
|
20
|
+
[variables: string]: any;
|
|
21
|
+
path: string;
|
|
22
|
+
};
|
|
23
|
+
export declare type SelectedQueryMaybeVariablesFunc = string | {
|
|
24
|
+
query: string;
|
|
25
|
+
variables: VariablesGetter;
|
|
26
|
+
} | [
|
|
27
|
+
string,
|
|
28
|
+
VariablesGetter
|
|
29
|
+
];
|
|
30
|
+
export declare const CATCH_ALL = "*";
|
|
31
|
+
export declare class ComponentRegistry {
|
|
32
|
+
private static contentTypes;
|
|
33
|
+
private static pages;
|
|
34
|
+
private static components;
|
|
35
|
+
private static parts;
|
|
36
|
+
private static layouts;
|
|
37
|
+
private static macros;
|
|
38
|
+
private static commonQuery;
|
|
39
|
+
static getByComponent(component: PageComponent): ComponentDefinition | undefined;
|
|
40
|
+
static setCommonQuery(query: SelectedQueryMaybeVariablesFunc): void;
|
|
41
|
+
static getCommonQuery(): SelectedQueryMaybeVariablesFunc;
|
|
42
|
+
static addMacro(name: string, obj: ComponentDefinition): void;
|
|
43
|
+
static getMacro(name: string): ComponentDefinition | undefined;
|
|
44
|
+
static getMacros(): [string, ComponentDefinition][];
|
|
45
|
+
static getParts(): [string, ComponentDefinition][];
|
|
46
|
+
static getLayouts(): [string, ComponentDefinition][];
|
|
47
|
+
static getPages(): [string, ComponentDefinition][];
|
|
48
|
+
static addContentType(name: string, obj: ComponentDefinition): void;
|
|
49
|
+
static getContentType(name: string): ComponentDefinition | undefined;
|
|
50
|
+
static addPage(name: string, obj: ComponentDefinition): void;
|
|
51
|
+
static getPage(name: string): ComponentDefinition | undefined;
|
|
52
|
+
static addPart(name: string, obj: ComponentDefinition): void;
|
|
53
|
+
static getPart(name: string): ComponentDefinition | undefined;
|
|
54
|
+
static addLayout(name: string, obj: ComponentDefinition): void;
|
|
55
|
+
static getLayout(name: string): ComponentDefinition | undefined;
|
|
56
|
+
static addComponent(name: string, obj: ComponentDefinition): void;
|
|
57
|
+
static getComponent(name: string): ComponentDefinition | undefined;
|
|
58
|
+
private static getSelector;
|
|
59
|
+
private static getType;
|
|
60
|
+
private static addType;
|
|
61
|
+
}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import { XP_COMPONENT_TYPE } from './utils';
|
|
2
|
+
function toSelectorName(type) {
|
|
3
|
+
switch (type) {
|
|
4
|
+
case XP_COMPONENT_TYPE.PAGE:
|
|
5
|
+
return 'page';
|
|
6
|
+
case XP_COMPONENT_TYPE.LAYOUT:
|
|
7
|
+
return 'layout';
|
|
8
|
+
case XP_COMPONENT_TYPE.PART:
|
|
9
|
+
return 'part';
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
export const CATCH_ALL = '*';
|
|
13
|
+
export class ComponentRegistry {
|
|
14
|
+
static getByComponent(component) {
|
|
15
|
+
const selName = toSelectorName(component.type);
|
|
16
|
+
const cmpData = component[component.type];
|
|
17
|
+
const desc = cmpData && 'descriptor' in cmpData ? cmpData.descriptor : component.path;
|
|
18
|
+
return selName && desc ? this.getType(selName, desc) : undefined;
|
|
19
|
+
}
|
|
20
|
+
static setCommonQuery(query) {
|
|
21
|
+
this.commonQuery = query;
|
|
22
|
+
}
|
|
23
|
+
static getCommonQuery() {
|
|
24
|
+
return this.commonQuery;
|
|
25
|
+
}
|
|
26
|
+
static addMacro(name, obj) {
|
|
27
|
+
return ComponentRegistry.addType('macro', name, obj);
|
|
28
|
+
}
|
|
29
|
+
static getMacro(name) {
|
|
30
|
+
return ComponentRegistry.getType('macro', name);
|
|
31
|
+
}
|
|
32
|
+
static getMacros() {
|
|
33
|
+
return Object.entries(this.macros);
|
|
34
|
+
}
|
|
35
|
+
static getParts() {
|
|
36
|
+
return Object.entries(this.parts);
|
|
37
|
+
}
|
|
38
|
+
static getLayouts() {
|
|
39
|
+
return Object.entries(this.layouts);
|
|
40
|
+
}
|
|
41
|
+
static getPages() {
|
|
42
|
+
return Object.entries(this.pages);
|
|
43
|
+
}
|
|
44
|
+
static addContentType(name, obj) {
|
|
45
|
+
return ComponentRegistry.addType('contentType', name, obj);
|
|
46
|
+
}
|
|
47
|
+
static getContentType(name) {
|
|
48
|
+
return ComponentRegistry.getType('contentType', name);
|
|
49
|
+
}
|
|
50
|
+
static addPage(name, obj) {
|
|
51
|
+
return ComponentRegistry.addType('page', name, obj);
|
|
52
|
+
}
|
|
53
|
+
static getPage(name) {
|
|
54
|
+
return ComponentRegistry.getType('page', name);
|
|
55
|
+
}
|
|
56
|
+
static addPart(name, obj) {
|
|
57
|
+
return ComponentRegistry.addType('part', name, obj);
|
|
58
|
+
}
|
|
59
|
+
static getPart(name) {
|
|
60
|
+
return ComponentRegistry.getType('part', name);
|
|
61
|
+
}
|
|
62
|
+
static addLayout(name, obj) {
|
|
63
|
+
return ComponentRegistry.addType('layout', name, obj);
|
|
64
|
+
}
|
|
65
|
+
static getLayout(name) {
|
|
66
|
+
return ComponentRegistry.getType('layout', name);
|
|
67
|
+
}
|
|
68
|
+
static addComponent(name, obj) {
|
|
69
|
+
return ComponentRegistry.addType('component', name, obj);
|
|
70
|
+
}
|
|
71
|
+
static getComponent(name) {
|
|
72
|
+
return ComponentRegistry.getType('component', name);
|
|
73
|
+
}
|
|
74
|
+
static getSelector(name) {
|
|
75
|
+
switch (name) {
|
|
76
|
+
case 'contentType':
|
|
77
|
+
return this.contentTypes;
|
|
78
|
+
case 'page':
|
|
79
|
+
return this.pages;
|
|
80
|
+
case 'component':
|
|
81
|
+
return this.components;
|
|
82
|
+
case 'layout':
|
|
83
|
+
return this.layouts;
|
|
84
|
+
case 'part':
|
|
85
|
+
return this.parts;
|
|
86
|
+
case 'macro':
|
|
87
|
+
return this.macros;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
static getType(selectorName, typeName, useCatchAll = true) {
|
|
91
|
+
const selector = ComponentRegistry.getSelector(selectorName);
|
|
92
|
+
let type = selector[typeName];
|
|
93
|
+
if (type) {
|
|
94
|
+
type.catchAll = false;
|
|
95
|
+
}
|
|
96
|
+
else if (!type && useCatchAll) {
|
|
97
|
+
type = selector[CATCH_ALL];
|
|
98
|
+
if (type) {
|
|
99
|
+
type.catchAll = true;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
return type;
|
|
103
|
+
}
|
|
104
|
+
static addType(selectorName, name, obj) {
|
|
105
|
+
const selector = ComponentRegistry.getSelector(selectorName);
|
|
106
|
+
const curr = selector[name];
|
|
107
|
+
selector[name] = curr ? Object.assign(curr, obj) : obj;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
ComponentRegistry.contentTypes = {};
|
|
111
|
+
ComponentRegistry.pages = {};
|
|
112
|
+
ComponentRegistry.components = {};
|
|
113
|
+
ComponentRegistry.parts = {};
|
|
114
|
+
ComponentRegistry.layouts = {};
|
|
115
|
+
ComponentRegistry.macros = {};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { ImageData, LinkData, MetaData } from './guillotine/getMetaData';
|
|
2
|
+
export declare class UrlProcessor {
|
|
3
|
+
static IMG_TAG: string;
|
|
4
|
+
static LINK_TAG: string;
|
|
5
|
+
static MACRO_TAG: string;
|
|
6
|
+
static IMG_ATTR: string;
|
|
7
|
+
static LINK_ATTR: string;
|
|
8
|
+
static MACRO_ATTR: string;
|
|
9
|
+
private static IMG_ATMT_REGEXP;
|
|
10
|
+
private static endSlashPattern;
|
|
11
|
+
private static startSlashPattern;
|
|
12
|
+
private static siteKey;
|
|
13
|
+
static process(url: string, meta: MetaData): string;
|
|
14
|
+
static setSiteKey(key: string): void;
|
|
15
|
+
static isMediaLink(ref: string, linkData: LinkData[]): boolean;
|
|
16
|
+
static isContentImage(ref: string, linkData: ImageData[]): boolean;
|
|
17
|
+
private static stripApiUrl;
|
|
18
|
+
private static isPageUrl;
|
|
19
|
+
private static getApiUrl;
|
|
20
|
+
}
|
|
21
|
+
export declare const getUrl: any;
|
package/UrlProcessor.js
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { commonChars, RENDER_MODE, SITE_KEY } from './utils';
|
|
2
|
+
export class UrlProcessor {
|
|
3
|
+
static process(url, meta) {
|
|
4
|
+
let result;
|
|
5
|
+
if (!meta || !this.isPageUrl(url) && meta.renderMode === RENDER_MODE.NEXT) {
|
|
6
|
+
// keep content urls absolute in next mode for everything but page urls
|
|
7
|
+
result = url;
|
|
8
|
+
}
|
|
9
|
+
else {
|
|
10
|
+
const apiUrl = this.getApiUrl(meta);
|
|
11
|
+
const strippedUrl = this.stripApiUrl(url, apiUrl);
|
|
12
|
+
result = ((meta === null || meta === void 0 ? void 0 : meta.baseUrl) || '') + strippedUrl;
|
|
13
|
+
}
|
|
14
|
+
return result;
|
|
15
|
+
}
|
|
16
|
+
static setSiteKey(key) {
|
|
17
|
+
this.siteKey = key;
|
|
18
|
+
}
|
|
19
|
+
static isMediaLink(ref, linkData) {
|
|
20
|
+
var _a;
|
|
21
|
+
return ((_a = linkData.find(data => data.ref === ref)) === null || _a === void 0 ? void 0 : _a.media) !== null;
|
|
22
|
+
}
|
|
23
|
+
static isContentImage(ref, linkData) {
|
|
24
|
+
var _a;
|
|
25
|
+
return ((_a = linkData.find(data => data.ref === ref)) === null || _a === void 0 ? void 0 : _a.image) !== null;
|
|
26
|
+
}
|
|
27
|
+
static stripApiUrl(url, apiUrl) {
|
|
28
|
+
const common = commonChars(url, apiUrl);
|
|
29
|
+
const remaining = common.length > 0 ? url.substring(common.length) : url;
|
|
30
|
+
return (remaining.length > 0 && remaining.charAt(0) === '/') ? remaining.substring(1) : remaining;
|
|
31
|
+
}
|
|
32
|
+
static isPageUrl(url) {
|
|
33
|
+
return !this.IMG_ATMT_REGEXP.test(url);
|
|
34
|
+
}
|
|
35
|
+
static getApiUrl(meta) {
|
|
36
|
+
var _a, _b;
|
|
37
|
+
let combinedUrl = ((_a = meta.apiUrl) === null || _a === void 0 ? void 0 : _a.replace(this.endSlashPattern, '')) || '';
|
|
38
|
+
if ((_b = this.siteKey) === null || _b === void 0 ? void 0 : _b.length) {
|
|
39
|
+
combinedUrl += '/' + this.siteKey.replace(this.startSlashPattern, '');
|
|
40
|
+
}
|
|
41
|
+
return combinedUrl;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
UrlProcessor.IMG_TAG = 'img';
|
|
45
|
+
UrlProcessor.LINK_TAG = 'a';
|
|
46
|
+
UrlProcessor.MACRO_TAG = 'editor-macro';
|
|
47
|
+
UrlProcessor.IMG_ATTR = 'data-image-ref';
|
|
48
|
+
UrlProcessor.LINK_ATTR = 'data-link-ref';
|
|
49
|
+
UrlProcessor.MACRO_ATTR = 'data-macro-ref';
|
|
50
|
+
UrlProcessor.IMG_ATMT_REGEXP = /_\/image\/|_\/attachment\//;
|
|
51
|
+
UrlProcessor.endSlashPattern = /\/+$/;
|
|
52
|
+
UrlProcessor.startSlashPattern = /^\/+/;
|
|
53
|
+
UrlProcessor.setSiteKey(SITE_KEY);
|
|
54
|
+
export const getUrl = UrlProcessor.process.bind(UrlProcessor);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/baseMappings.js
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { ComponentRegistry } from './ComponentRegistry';
|
|
2
|
+
import { FRAGMENT_CONTENTTYPE_NAME, XP_COMPONENT_TYPE } from './utils';
|
|
3
|
+
import FragmentView from './views/Fragment';
|
|
4
|
+
import BasePage from './views/BasePage';
|
|
5
|
+
import BasePart from './views/BasePart';
|
|
6
|
+
import BaseLayout from './views/BaseLayout';
|
|
7
|
+
import TextView from './views/Text';
|
|
8
|
+
import DefaultMacro from './views/macros/DefaultMacro';
|
|
9
|
+
import DisableMacro from './views/macros/DisableMacro';
|
|
10
|
+
// Base Content Types
|
|
11
|
+
ComponentRegistry.addContentType(FRAGMENT_CONTENTTYPE_NAME, {
|
|
12
|
+
view: FragmentView,
|
|
13
|
+
});
|
|
14
|
+
// Base Components
|
|
15
|
+
ComponentRegistry.addComponent(XP_COMPONENT_TYPE.PAGE, {
|
|
16
|
+
view: BasePage,
|
|
17
|
+
});
|
|
18
|
+
ComponentRegistry.addComponent(XP_COMPONENT_TYPE.PART, {
|
|
19
|
+
view: BasePart,
|
|
20
|
+
});
|
|
21
|
+
ComponentRegistry.addComponent(XP_COMPONENT_TYPE.LAYOUT, {
|
|
22
|
+
view: BaseLayout,
|
|
23
|
+
});
|
|
24
|
+
ComponentRegistry.addComponent(XP_COMPONENT_TYPE.FRAGMENT, {
|
|
25
|
+
view: FragmentView,
|
|
26
|
+
});
|
|
27
|
+
ComponentRegistry.addComponent(XP_COMPONENT_TYPE.TEXT, {
|
|
28
|
+
view: TextView,
|
|
29
|
+
});
|
|
30
|
+
// Macro mappings
|
|
31
|
+
ComponentRegistry.addMacro('system:embed', {
|
|
32
|
+
view: DefaultMacro,
|
|
33
|
+
configQuery: '{body}',
|
|
34
|
+
});
|
|
35
|
+
ComponentRegistry.addMacro('system:disable', {
|
|
36
|
+
view: DisableMacro,
|
|
37
|
+
configQuery: '{body}',
|
|
38
|
+
});
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
/// <reference types="node" />
|
|
3
|
+
import { MetaData, PageComponent } from './getMetaData';
|
|
4
|
+
import { RENDER_MODE, XP_REQUEST_TYPE } from '../utils';
|
|
5
|
+
import { ComponentRegistry } from '../ComponentRegistry';
|
|
6
|
+
import { ParsedUrlQuery } from 'node:querystring';
|
|
7
|
+
import { type GetServerSidePropsContext } from 'next';
|
|
8
|
+
import { IncomingMessage } from 'http';
|
|
9
|
+
import { type NextApiRequestCookies } from 'next/dist/server/api-utils';
|
|
10
|
+
export declare type AdapterConstants = {
|
|
11
|
+
APP_NAME: string;
|
|
12
|
+
APP_NAME_DASHED: string;
|
|
13
|
+
SITE_KEY: string;
|
|
14
|
+
getXPRequestType: (context?: Context) => XP_REQUEST_TYPE;
|
|
15
|
+
getRenderMode: (context?: Context) => RENDER_MODE;
|
|
16
|
+
getSingleComponentPath: (context?: Context) => string | undefined;
|
|
17
|
+
};
|
|
18
|
+
declare type Result = {
|
|
19
|
+
error?: {
|
|
20
|
+
code: string;
|
|
21
|
+
message: string;
|
|
22
|
+
} | null;
|
|
23
|
+
};
|
|
24
|
+
declare type GuillotineResult = Result & {
|
|
25
|
+
[dataKey: string]: any;
|
|
26
|
+
};
|
|
27
|
+
export declare type FetchContentResult = Result & {
|
|
28
|
+
data: Record<string, any> | null;
|
|
29
|
+
common: Record<string, any> | null;
|
|
30
|
+
meta: MetaData;
|
|
31
|
+
page: PageComponent | null;
|
|
32
|
+
};
|
|
33
|
+
declare type FetcherConfig<T extends AdapterConstants> = T & {
|
|
34
|
+
componentRegistry: typeof ComponentRegistry;
|
|
35
|
+
};
|
|
36
|
+
export interface ServerSideParams extends ParsedUrlQuery {
|
|
37
|
+
contentPath?: string[];
|
|
38
|
+
mode?: string;
|
|
39
|
+
}
|
|
40
|
+
export interface PreviewParams {
|
|
41
|
+
contentPath: string[];
|
|
42
|
+
headers: Record<string, string>;
|
|
43
|
+
}
|
|
44
|
+
export declare type Context = GetServerSidePropsContext<ServerSideParams, PreviewParams>;
|
|
45
|
+
export interface MinimalContext {
|
|
46
|
+
req: IncomingMessage & {
|
|
47
|
+
cookies: NextApiRequestCookies;
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Sends one query to the guillotine API and asks for content type, then uses the type to select a second query and variables, which is sent to the API and fetches content data.
|
|
52
|
+
* @param contentPath string or string array: pre-split or slash-delimited _path to a content available on the API
|
|
53
|
+
* @returns FetchContentResult object: {data?: T, error?: {code, message}}
|
|
54
|
+
*/
|
|
55
|
+
export declare type ContentFetcher = (contentPath: string | string[], context: Context) => Promise<FetchContentResult>;
|
|
56
|
+
export declare type ContentApiBaseBody = {
|
|
57
|
+
query?: string;
|
|
58
|
+
variables?: {
|
|
59
|
+
path?: string;
|
|
60
|
+
};
|
|
61
|
+
};
|
|
62
|
+
/** Generic fetch */
|
|
63
|
+
export declare const fetchFromApi: (apiUrl: string, body: {}, method?: string) => Promise<any>;
|
|
64
|
+
/** Guillotine-specialized fetch, using the generic fetch above */
|
|
65
|
+
export declare const fetchGuillotine: (contentApiUrl: string, body: ContentApiBaseBody, xpContentPath: string) => Promise<GuillotineResult>;
|
|
66
|
+
/**
|
|
67
|
+
* Configures, builds and returns a general fetchContent function.
|
|
68
|
+
* @param adapterConstants Object containing attributes imported from enonic-connecion-config.js: constants and function concerned with connection to the XP backend. Easiest: caller imports enonic-connection-config and just passes that entire object here as adapterConstants.
|
|
69
|
+
* @param componentRegistry ComponentRegistry object from ComponentRegistry.ts, holding user type mappings that are set in typesRegistration.ts file
|
|
70
|
+
* @returns ContentFetcher
|
|
71
|
+
*/
|
|
72
|
+
export declare const buildContentFetcher: <T extends AdapterConstants>(config: FetcherConfig<T>) => ContentFetcher;
|
|
73
|
+
/**
|
|
74
|
+
* Default fetchContent function, built with params from imports.
|
|
75
|
+
* It runs custom content-type-specific guillotine calls against an XP guillotine endpoint, returns content data, error and some meta data
|
|
76
|
+
* Sends one query to the guillotine API and asks for content type, then uses the type to select a second query and variables, which is sent to the API and fetches content data.
|
|
77
|
+
* @param contentPath string or string array: local (site-relative) path to a content available on the API (by XP _path - obtainable by running contentPath through getXpPath). Pre-split into string array, or already a slash-delimited string.
|
|
78
|
+
* @param context object from Next, contains .query info
|
|
79
|
+
* @returns FetchContentResult object: {data?: T, error?: {code, message}}
|
|
80
|
+
*/
|
|
81
|
+
export declare const fetchContent: ContentFetcher;
|
|
82
|
+
export {};
|