@kontent-ai/delivery-sdk 16.4.3 → 16.4.5
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/.npmignore +15 -15
- package/LICENSE.md +9 -9
- package/dist/bundles/kontent-delivery.umd.js +5076 -4619
- package/dist/bundles/kontent-delivery.umd.js.map +1 -1
- package/dist/bundles/kontent-delivery.umd.min.js +1 -1
- package/dist/bundles/kontent-delivery.umd.min.js.map +1 -1
- package/dist/bundles/report.json +1 -1
- package/dist/bundles/report.min.json +1 -1
- package/dist/bundles/stats.json +7015 -5766
- package/dist/bundles/stats.min.json +11376 -10250
- package/dist/cjs/query/element/element-query.class.js +1 -1
- package/dist/cjs/query/element/element-query.class.js.map +1 -1
- package/dist/cjs/query/item/single-item-query.class.js +1 -1
- package/dist/cjs/query/item/single-item-query.class.js.map +1 -1
- package/dist/cjs/query/taxonomy/taxonomy-query.class.js +1 -1
- package/dist/cjs/query/taxonomy/taxonomy-query.class.js.map +1 -1
- package/dist/cjs/query/type/single-type-query.class.js +1 -1
- package/dist/cjs/query/type/single-type-query.class.js.map +1 -1
- package/dist/cjs/query/used-in/used-in-query.class.js +1 -1
- package/dist/cjs/query/used-in/used-in-query.class.js.map +1 -1
- package/dist/cjs/sdk-info.generated.js +1 -1
- package/dist/es6/query/element/element-query.class.js +1 -1
- package/dist/es6/query/element/element-query.class.js.map +1 -1
- package/dist/es6/query/item/single-item-query.class.js +1 -1
- package/dist/es6/query/item/single-item-query.class.js.map +1 -1
- package/dist/es6/query/taxonomy/taxonomy-query.class.js +1 -1
- package/dist/es6/query/taxonomy/taxonomy-query.class.js.map +1 -1
- package/dist/es6/query/type/single-type-query.class.js +1 -1
- package/dist/es6/query/type/single-type-query.class.js.map +1 -1
- package/dist/es6/query/used-in/used-in-query.class.js +1 -1
- package/dist/es6/query/used-in/used-in-query.class.js.map +1 -1
- package/dist/es6/sdk-info.generated.js +1 -1
- package/dist/esnext/query/element/element-query.class.js +1 -1
- package/dist/esnext/query/element/element-query.class.js.map +1 -1
- package/dist/esnext/query/item/single-item-query.class.js +1 -1
- package/dist/esnext/query/item/single-item-query.class.js.map +1 -1
- package/dist/esnext/query/taxonomy/taxonomy-query.class.js +1 -1
- package/dist/esnext/query/taxonomy/taxonomy-query.class.js.map +1 -1
- package/dist/esnext/query/type/single-type-query.class.js +1 -1
- package/dist/esnext/query/type/single-type-query.class.js.map +1 -1
- package/dist/esnext/query/used-in/used-in-query.class.js +1 -1
- package/dist/esnext/query/used-in/used-in-query.class.js.map +1 -1
- package/dist/esnext/sdk-info.generated.js +1 -1
- package/lib/client/delivery-client.factory.ts +9 -9
- package/lib/client/delivery-client.ts +163 -163
- package/lib/client/idelivery-client.interface.ts +110 -110
- package/lib/client/index.ts +3 -3
- package/lib/config/delivery-configs.ts +98 -98
- package/lib/config/index.ts +1 -1
- package/lib/contracts/contracts.ts +265 -265
- package/lib/contracts/index.ts +1 -1
- package/lib/elements/element-models.ts +89 -89
- package/lib/elements/element-resolver.ts +3 -3
- package/lib/elements/element-type.ts +16 -16
- package/lib/elements/elements.ts +70 -70
- package/lib/elements/index.ts +4 -4
- package/lib/images/image-url-transformation-builder.factory.ts +5 -5
- package/lib/images/image-url-transformation-builder.ts +181 -181
- package/lib/images/image.models.ts +4 -4
- package/lib/images/index.ts +3 -3
- package/lib/index.ts +12 -12
- package/lib/mappers/element.mapper.ts +504 -504
- package/lib/mappers/generic-element.mapper.ts +20 -20
- package/lib/mappers/index.ts +8 -8
- package/lib/mappers/item.mapper.ts +181 -181
- package/lib/mappers/language.mapper.ts +24 -24
- package/lib/mappers/sync.mapper.ts +32 -32
- package/lib/mappers/taxonomy.mapper.ts +77 -77
- package/lib/mappers/type.mapper.ts +76 -76
- package/lib/mappers/used-in.mapper.ts +20 -20
- package/lib/models/common/base-responses.ts +13 -13
- package/lib/models/common/common-models.ts +118 -118
- package/lib/models/common/filters.ts +280 -280
- package/lib/models/common/headers.ts +5 -5
- package/lib/models/common/index.ts +7 -7
- package/lib/models/common/pagination.class.ts +7 -7
- package/lib/models/common/parameters.ts +189 -189
- package/lib/models/common/sort-order.ts +1 -1
- package/lib/models/content-type-models.ts +42 -42
- package/lib/models/element-models.ts +51 -51
- package/lib/models/index.ts +9 -9
- package/lib/models/item-models.ts +192 -192
- package/lib/models/language-models.ts +17 -17
- package/lib/models/responses.ts +137 -137
- package/lib/models/sync-models.ts +18 -18
- package/lib/models/taxonomy-models.ts +25 -25
- package/lib/query/common/base-item-listing-query.class.ts +274 -274
- package/lib/query/common/base-listing-query.class.ts +95 -95
- package/lib/query/common/base-query.class.ts +148 -148
- package/lib/query/element/element-query.class.ts +47 -45
- package/lib/query/index.ts +13 -13
- package/lib/query/item/multiple-items-query.class.ts +183 -183
- package/lib/query/item/single-item-query.class.ts +106 -106
- package/lib/query/items-feed/items-feed-query.class.ts +191 -191
- package/lib/query/language/languages-query.class.ts +91 -91
- package/lib/query/sync/initialize-sync-query.class.ts +83 -83
- package/lib/query/sync/sync-changes-query.class.ts +56 -56
- package/lib/query/taxonomy/taxonomies-query.class.ts +82 -82
- package/lib/query/taxonomy/taxonomy-query.class.ts +50 -50
- package/lib/query/type/multiple-type-query.class.ts +95 -95
- package/lib/query/type/single-type-query.class.ts +45 -45
- package/lib/query/used-in/used-in-query.class.ts +128 -126
- package/lib/sdk-info.generated.ts +1 -1
- package/lib/services/base-delivery-query.service.ts +375 -375
- package/lib/services/delivery-query.service.ts +336 -336
- package/lib/services/index.ts +2 -2
- package/lib/services/mapping.service.ts +223 -223
- package/lib/utilities/codename.helper.ts +10 -10
- package/lib/utilities/delivery-url.helper.ts +11 -11
- package/lib/utilities/enum.helper.ts +38 -38
- package/lib/utilities/index.ts +3 -3
- package/package.json +96 -96
- package/readme.md +531 -531
|
@@ -1,20 +1,20 @@
|
|
|
1
|
-
import { Contracts } from '../contracts';
|
|
2
|
-
import { IGenericElement } from '../models';
|
|
3
|
-
|
|
4
|
-
export class GenericElementMapper {
|
|
5
|
-
mapElement(response: Contracts.IViewContentTypeElementContract): IGenericElement {
|
|
6
|
-
if (!response) {
|
|
7
|
-
throw Error(`Invalid response for mapping element`);
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
const element = response;
|
|
11
|
-
|
|
12
|
-
return {
|
|
13
|
-
codename: element.codename,
|
|
14
|
-
name: element.name,
|
|
15
|
-
type: element.type,
|
|
16
|
-
options: element.options ? element.options : [],
|
|
17
|
-
taxonomyGroup: element.taxonomy_group
|
|
18
|
-
};
|
|
19
|
-
}
|
|
20
|
-
}
|
|
1
|
+
import { Contracts } from '../contracts';
|
|
2
|
+
import { IGenericElement } from '../models';
|
|
3
|
+
|
|
4
|
+
export class GenericElementMapper {
|
|
5
|
+
mapElement(response: Contracts.IViewContentTypeElementContract): IGenericElement {
|
|
6
|
+
if (!response) {
|
|
7
|
+
throw Error(`Invalid response for mapping element`);
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
const element = response;
|
|
11
|
+
|
|
12
|
+
return {
|
|
13
|
+
codename: element.codename,
|
|
14
|
+
name: element.name,
|
|
15
|
+
type: element.type,
|
|
16
|
+
options: element.options ? element.options : [],
|
|
17
|
+
taxonomyGroup: element.taxonomy_group
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
}
|
package/lib/mappers/index.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
export * from './element.mapper';
|
|
2
|
-
export * from './item.mapper';
|
|
3
|
-
export * from './taxonomy.mapper';
|
|
4
|
-
export * from './type.mapper';
|
|
5
|
-
export * from './generic-element.mapper';
|
|
6
|
-
export * from './language.mapper';
|
|
7
|
-
export * from './used-in.mapper';
|
|
8
|
-
export * from './sync.mapper';
|
|
1
|
+
export * from './element.mapper';
|
|
2
|
+
export * from './item.mapper';
|
|
3
|
+
export * from './taxonomy.mapper';
|
|
4
|
+
export * from './type.mapper';
|
|
5
|
+
export * from './generic-element.mapper';
|
|
6
|
+
export * from './language.mapper';
|
|
7
|
+
export * from './used-in.mapper';
|
|
8
|
+
export * from './sync.mapper';
|
|
@@ -1,181 +1,181 @@
|
|
|
1
|
-
import { codenameHelper } from '../utilities';
|
|
2
|
-
import { IDeliveryClientConfig } from '../config';
|
|
3
|
-
import { Contracts } from '../contracts';
|
|
4
|
-
import {
|
|
5
|
-
IContentItem,
|
|
6
|
-
IContentItemsContainer,
|
|
7
|
-
IContentItemWithRawDataContainer,
|
|
8
|
-
IContentItemWithRawElements
|
|
9
|
-
} from '../models';
|
|
10
|
-
import { ElementMapper } from './element.mapper';
|
|
11
|
-
|
|
12
|
-
export interface IMapItemResult<
|
|
13
|
-
TContentItem extends IContentItem = IContentItem,
|
|
14
|
-
TLinkedItemType extends IContentItem = IContentItem
|
|
15
|
-
> {
|
|
16
|
-
item: TContentItem;
|
|
17
|
-
processedItems: IContentItemsContainer<TLinkedItemType>;
|
|
18
|
-
preparedItems: IContentItemWithRawDataContainer;
|
|
19
|
-
processingStartedForCodenames: string[];
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
export interface IMultipleItemsMapResult<
|
|
23
|
-
TContentItem extends IContentItem = IContentItem,
|
|
24
|
-
TLinkedItemType extends IContentItem = IContentItem
|
|
25
|
-
> {
|
|
26
|
-
items: TContentItem[];
|
|
27
|
-
linkedItems: IContentItemsContainer<TLinkedItemType>;
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
export interface ISingleItemMapResult<
|
|
31
|
-
TContentItem extends IContentItem = IContentItem,
|
|
32
|
-
TLinkedItemType extends IContentItem = IContentItem
|
|
33
|
-
> {
|
|
34
|
-
item: TContentItem;
|
|
35
|
-
linkedItems: IContentItemsContainer<TLinkedItemType>;
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
export class ItemMapper<TContentItemType extends IContentItem> {
|
|
39
|
-
private readonly elementMapper: ElementMapper<TContentItemType>;
|
|
40
|
-
|
|
41
|
-
constructor(readonly config: IDeliveryClientConfig) {
|
|
42
|
-
this.elementMapper = new ElementMapper(config);
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
/**
|
|
46
|
-
* Maps single item to its proper strongly typed model from the given response
|
|
47
|
-
* @param response Response used to map the item
|
|
48
|
-
* @param queryConfig Query configuration
|
|
49
|
-
*/
|
|
50
|
-
mapSingleItemFromResponse<TContentItem extends TContentItemType = TContentItemType>(
|
|
51
|
-
response: Contracts.IViewContentItemContract
|
|
52
|
-
): ISingleItemMapResult<TContentItem, TContentItemType> {
|
|
53
|
-
const mapResult = this.mapItems<TContentItem>({
|
|
54
|
-
mainItems: [response.item],
|
|
55
|
-
linkedItems: Object.values(response.modular_content)
|
|
56
|
-
});
|
|
57
|
-
|
|
58
|
-
return {
|
|
59
|
-
item: mapResult.items[0],
|
|
60
|
-
linkedItems: mapResult.linkedItems
|
|
61
|
-
};
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
/**
|
|
65
|
-
* Maps multiple items to their strongly typed model from the given response
|
|
66
|
-
* @param response Response used to map the item
|
|
67
|
-
* @param queryConfig Query configuration
|
|
68
|
-
*/
|
|
69
|
-
mapMultipleItemsFromResponse<TContentItem extends TContentItemType = TContentItemType>(
|
|
70
|
-
response: Contracts.IItemsWithModularContentContract
|
|
71
|
-
): IMultipleItemsMapResult<TContentItem, TContentItemType> {
|
|
72
|
-
const mapResult = this.mapItems<TContentItem>({
|
|
73
|
-
mainItems: response.items,
|
|
74
|
-
linkedItems: Object.values(response.modular_content)
|
|
75
|
-
});
|
|
76
|
-
|
|
77
|
-
return mapResult;
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
/**
|
|
81
|
-
* Maps item contracts to full models
|
|
82
|
-
*/
|
|
83
|
-
mapItems<TContentItem extends TContentItemType = TContentItemType>(data: {
|
|
84
|
-
mainItems: Contracts.IContentItemContract[];
|
|
85
|
-
linkedItems: Contracts.IContentItemContract[];
|
|
86
|
-
}): IMultipleItemsMapResult<TContentItem, TContentItemType> {
|
|
87
|
-
const processedItems: IContentItemsContainer<TContentItem> = {};
|
|
88
|
-
const preparedItems: IContentItemWithRawDataContainer = {};
|
|
89
|
-
const processingStartedForCodenames: string[] = [];
|
|
90
|
-
const mappedMainItems: TContentItem[] = [];
|
|
91
|
-
const mappedLinkedItems: IContentItemsContainer<TContentItem> = {};
|
|
92
|
-
const itemsToResolve: Contracts.IContentItemContract[] = [...data.mainItems, ...data.linkedItems];
|
|
93
|
-
|
|
94
|
-
// first prepare reference for all items
|
|
95
|
-
for (const item of itemsToResolve) {
|
|
96
|
-
preparedItems[codenameHelper.escapeCodenameInCodenameIndexer(item.system.codename)] = {
|
|
97
|
-
item: this.createContentItem(item),
|
|
98
|
-
rawItem: item
|
|
99
|
-
};
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
// then resolve main items
|
|
103
|
-
for (const item of data.mainItems) {
|
|
104
|
-
const itemResult = this.mapItem<TContentItem>({
|
|
105
|
-
item: preparedItems[codenameHelper.escapeCodenameInCodenameIndexer(item.system.codename)],
|
|
106
|
-
processedItems: processedItems,
|
|
107
|
-
preparedItems: preparedItems,
|
|
108
|
-
processingStartedForCodenames: processingStartedForCodenames
|
|
109
|
-
});
|
|
110
|
-
mappedMainItems.push(itemResult.item);
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
// and linked items
|
|
114
|
-
for (const item of data.linkedItems) {
|
|
115
|
-
const itemResult = this.mapItem<TContentItem>({
|
|
116
|
-
item: preparedItems[codenameHelper.escapeCodenameInCodenameIndexer(item.system.codename)],
|
|
117
|
-
processedItems: processedItems,
|
|
118
|
-
preparedItems: preparedItems,
|
|
119
|
-
processingStartedForCodenames: processingStartedForCodenames
|
|
120
|
-
});
|
|
121
|
-
|
|
122
|
-
mappedLinkedItems[item.system.codename] = itemResult.item;
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
return {
|
|
126
|
-
items: mappedMainItems,
|
|
127
|
-
linkedItems: mappedLinkedItems
|
|
128
|
-
};
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
/**
|
|
132
|
-
* Maps item contract to full model
|
|
133
|
-
*/
|
|
134
|
-
private mapItem<TContentItem extends TContentItemType = TContentItemType>(data: {
|
|
135
|
-
item: IContentItemWithRawElements;
|
|
136
|
-
processedItems: IContentItemsContainer<TContentItem>;
|
|
137
|
-
processingStartedForCodenames: string[];
|
|
138
|
-
preparedItems: IContentItemWithRawDataContainer;
|
|
139
|
-
}): IMapItemResult<TContentItem, TContentItemType> {
|
|
140
|
-
if (!data.item) {
|
|
141
|
-
throw Error(`Could not map item because its undefined`);
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
const result = this.elementMapper.mapElements<TContentItem>({
|
|
145
|
-
dataToMap: data.item,
|
|
146
|
-
preparedItems: data.preparedItems,
|
|
147
|
-
processingStartedForCodenames: [],
|
|
148
|
-
processedItems: data.processedItems
|
|
149
|
-
});
|
|
150
|
-
|
|
151
|
-
if (!result) {
|
|
152
|
-
throw Error(`Mapping of content item '${data.item.item.system.codename}' failed`);
|
|
153
|
-
}
|
|
154
|
-
return {
|
|
155
|
-
item: result.item,
|
|
156
|
-
processedItems: result.processedItems,
|
|
157
|
-
preparedItems: result.preparedItems,
|
|
158
|
-
processingStartedForCodenames: result.processingStartedForCodenames
|
|
159
|
-
};
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
private createContentItem(item: Contracts.IContentItemContract): IContentItem {
|
|
163
|
-
const contentItem: IContentItem = {
|
|
164
|
-
elements: {},
|
|
165
|
-
system: {
|
|
166
|
-
codename: item.system.codename,
|
|
167
|
-
collection: item.system.collection,
|
|
168
|
-
id: item.system.id,
|
|
169
|
-
language: item.system.language,
|
|
170
|
-
lastModified: item.system.last_modified,
|
|
171
|
-
name: item.system.name,
|
|
172
|
-
sitemapLocations: item.system.sitemap_locations,
|
|
173
|
-
type: item.system.type,
|
|
174
|
-
workflowStep: item.system.workflow_step ?? null,
|
|
175
|
-
workflow: item.system.workflow ?? null
|
|
176
|
-
}
|
|
177
|
-
};
|
|
178
|
-
|
|
179
|
-
return contentItem;
|
|
180
|
-
}
|
|
181
|
-
}
|
|
1
|
+
import { codenameHelper } from '../utilities';
|
|
2
|
+
import { IDeliveryClientConfig } from '../config';
|
|
3
|
+
import { Contracts } from '../contracts';
|
|
4
|
+
import {
|
|
5
|
+
IContentItem,
|
|
6
|
+
IContentItemsContainer,
|
|
7
|
+
IContentItemWithRawDataContainer,
|
|
8
|
+
IContentItemWithRawElements
|
|
9
|
+
} from '../models';
|
|
10
|
+
import { ElementMapper } from './element.mapper';
|
|
11
|
+
|
|
12
|
+
export interface IMapItemResult<
|
|
13
|
+
TContentItem extends IContentItem = IContentItem,
|
|
14
|
+
TLinkedItemType extends IContentItem = IContentItem
|
|
15
|
+
> {
|
|
16
|
+
item: TContentItem;
|
|
17
|
+
processedItems: IContentItemsContainer<TLinkedItemType>;
|
|
18
|
+
preparedItems: IContentItemWithRawDataContainer;
|
|
19
|
+
processingStartedForCodenames: string[];
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export interface IMultipleItemsMapResult<
|
|
23
|
+
TContentItem extends IContentItem = IContentItem,
|
|
24
|
+
TLinkedItemType extends IContentItem = IContentItem
|
|
25
|
+
> {
|
|
26
|
+
items: TContentItem[];
|
|
27
|
+
linkedItems: IContentItemsContainer<TLinkedItemType>;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export interface ISingleItemMapResult<
|
|
31
|
+
TContentItem extends IContentItem = IContentItem,
|
|
32
|
+
TLinkedItemType extends IContentItem = IContentItem
|
|
33
|
+
> {
|
|
34
|
+
item: TContentItem;
|
|
35
|
+
linkedItems: IContentItemsContainer<TLinkedItemType>;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export class ItemMapper<TContentItemType extends IContentItem> {
|
|
39
|
+
private readonly elementMapper: ElementMapper<TContentItemType>;
|
|
40
|
+
|
|
41
|
+
constructor(readonly config: IDeliveryClientConfig) {
|
|
42
|
+
this.elementMapper = new ElementMapper(config);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Maps single item to its proper strongly typed model from the given response
|
|
47
|
+
* @param response Response used to map the item
|
|
48
|
+
* @param queryConfig Query configuration
|
|
49
|
+
*/
|
|
50
|
+
mapSingleItemFromResponse<TContentItem extends TContentItemType = TContentItemType>(
|
|
51
|
+
response: Contracts.IViewContentItemContract
|
|
52
|
+
): ISingleItemMapResult<TContentItem, TContentItemType> {
|
|
53
|
+
const mapResult = this.mapItems<TContentItem>({
|
|
54
|
+
mainItems: [response.item],
|
|
55
|
+
linkedItems: Object.values(response.modular_content)
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
return {
|
|
59
|
+
item: mapResult.items[0],
|
|
60
|
+
linkedItems: mapResult.linkedItems
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Maps multiple items to their strongly typed model from the given response
|
|
66
|
+
* @param response Response used to map the item
|
|
67
|
+
* @param queryConfig Query configuration
|
|
68
|
+
*/
|
|
69
|
+
mapMultipleItemsFromResponse<TContentItem extends TContentItemType = TContentItemType>(
|
|
70
|
+
response: Contracts.IItemsWithModularContentContract
|
|
71
|
+
): IMultipleItemsMapResult<TContentItem, TContentItemType> {
|
|
72
|
+
const mapResult = this.mapItems<TContentItem>({
|
|
73
|
+
mainItems: response.items,
|
|
74
|
+
linkedItems: Object.values(response.modular_content)
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
return mapResult;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* Maps item contracts to full models
|
|
82
|
+
*/
|
|
83
|
+
mapItems<TContentItem extends TContentItemType = TContentItemType>(data: {
|
|
84
|
+
mainItems: Contracts.IContentItemContract[];
|
|
85
|
+
linkedItems: Contracts.IContentItemContract[];
|
|
86
|
+
}): IMultipleItemsMapResult<TContentItem, TContentItemType> {
|
|
87
|
+
const processedItems: IContentItemsContainer<TContentItem> = {};
|
|
88
|
+
const preparedItems: IContentItemWithRawDataContainer = {};
|
|
89
|
+
const processingStartedForCodenames: string[] = [];
|
|
90
|
+
const mappedMainItems: TContentItem[] = [];
|
|
91
|
+
const mappedLinkedItems: IContentItemsContainer<TContentItem> = {};
|
|
92
|
+
const itemsToResolve: Contracts.IContentItemContract[] = [...data.mainItems, ...data.linkedItems];
|
|
93
|
+
|
|
94
|
+
// first prepare reference for all items
|
|
95
|
+
for (const item of itemsToResolve) {
|
|
96
|
+
preparedItems[codenameHelper.escapeCodenameInCodenameIndexer(item.system.codename)] = {
|
|
97
|
+
item: this.createContentItem(item),
|
|
98
|
+
rawItem: item
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
// then resolve main items
|
|
103
|
+
for (const item of data.mainItems) {
|
|
104
|
+
const itemResult = this.mapItem<TContentItem>({
|
|
105
|
+
item: preparedItems[codenameHelper.escapeCodenameInCodenameIndexer(item.system.codename)],
|
|
106
|
+
processedItems: processedItems,
|
|
107
|
+
preparedItems: preparedItems,
|
|
108
|
+
processingStartedForCodenames: processingStartedForCodenames
|
|
109
|
+
});
|
|
110
|
+
mappedMainItems.push(itemResult.item);
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
// and linked items
|
|
114
|
+
for (const item of data.linkedItems) {
|
|
115
|
+
const itemResult = this.mapItem<TContentItem>({
|
|
116
|
+
item: preparedItems[codenameHelper.escapeCodenameInCodenameIndexer(item.system.codename)],
|
|
117
|
+
processedItems: processedItems,
|
|
118
|
+
preparedItems: preparedItems,
|
|
119
|
+
processingStartedForCodenames: processingStartedForCodenames
|
|
120
|
+
});
|
|
121
|
+
|
|
122
|
+
mappedLinkedItems[item.system.codename] = itemResult.item;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
return {
|
|
126
|
+
items: mappedMainItems,
|
|
127
|
+
linkedItems: mappedLinkedItems
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
/**
|
|
132
|
+
* Maps item contract to full model
|
|
133
|
+
*/
|
|
134
|
+
private mapItem<TContentItem extends TContentItemType = TContentItemType>(data: {
|
|
135
|
+
item: IContentItemWithRawElements;
|
|
136
|
+
processedItems: IContentItemsContainer<TContentItem>;
|
|
137
|
+
processingStartedForCodenames: string[];
|
|
138
|
+
preparedItems: IContentItemWithRawDataContainer;
|
|
139
|
+
}): IMapItemResult<TContentItem, TContentItemType> {
|
|
140
|
+
if (!data.item) {
|
|
141
|
+
throw Error(`Could not map item because its undefined`);
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
const result = this.elementMapper.mapElements<TContentItem>({
|
|
145
|
+
dataToMap: data.item,
|
|
146
|
+
preparedItems: data.preparedItems,
|
|
147
|
+
processingStartedForCodenames: [],
|
|
148
|
+
processedItems: data.processedItems
|
|
149
|
+
});
|
|
150
|
+
|
|
151
|
+
if (!result) {
|
|
152
|
+
throw Error(`Mapping of content item '${data.item.item.system.codename}' failed`);
|
|
153
|
+
}
|
|
154
|
+
return {
|
|
155
|
+
item: result.item,
|
|
156
|
+
processedItems: result.processedItems,
|
|
157
|
+
preparedItems: result.preparedItems,
|
|
158
|
+
processingStartedForCodenames: result.processingStartedForCodenames
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
private createContentItem(item: Contracts.IContentItemContract): IContentItem {
|
|
163
|
+
const contentItem: IContentItem = {
|
|
164
|
+
elements: {},
|
|
165
|
+
system: {
|
|
166
|
+
codename: item.system.codename,
|
|
167
|
+
collection: item.system.collection,
|
|
168
|
+
id: item.system.id,
|
|
169
|
+
language: item.system.language,
|
|
170
|
+
lastModified: item.system.last_modified,
|
|
171
|
+
name: item.system.name,
|
|
172
|
+
sitemapLocations: item.system.sitemap_locations,
|
|
173
|
+
type: item.system.type,
|
|
174
|
+
workflowStep: item.system.workflow_step ?? null,
|
|
175
|
+
workflow: item.system.workflow ?? null
|
|
176
|
+
}
|
|
177
|
+
};
|
|
178
|
+
|
|
179
|
+
return contentItem;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
@@ -1,24 +1,24 @@
|
|
|
1
|
-
import { Contracts } from '../contracts';
|
|
2
|
-
import { ILanguage } from '../models';
|
|
3
|
-
|
|
4
|
-
export class LanguageMapper<TLanguageCodenames extends string> {
|
|
5
|
-
mapMultipleLanguages(response: Contracts.IListLanguagesContract): ILanguage<TLanguageCodenames>[] {
|
|
6
|
-
return response.languages.map((language) => {
|
|
7
|
-
return this.mapLanguage(language);
|
|
8
|
-
});
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
private mapLanguage(language: Contracts.ILanguageContract): ILanguage<TLanguageCodenames> {
|
|
12
|
-
if (!language) {
|
|
13
|
-
throw Error(`Cannot map language`);
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
return {
|
|
17
|
-
system: {
|
|
18
|
-
codename: language.system.codename as TLanguageCodenames,
|
|
19
|
-
id: language.system.id,
|
|
20
|
-
name: language.system.name
|
|
21
|
-
}
|
|
22
|
-
};
|
|
23
|
-
}
|
|
24
|
-
}
|
|
1
|
+
import { Contracts } from '../contracts';
|
|
2
|
+
import { ILanguage } from '../models';
|
|
3
|
+
|
|
4
|
+
export class LanguageMapper<TLanguageCodenames extends string> {
|
|
5
|
+
mapMultipleLanguages(response: Contracts.IListLanguagesContract): ILanguage<TLanguageCodenames>[] {
|
|
6
|
+
return response.languages.map((language) => {
|
|
7
|
+
return this.mapLanguage(language);
|
|
8
|
+
});
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
private mapLanguage(language: Contracts.ILanguageContract): ILanguage<TLanguageCodenames> {
|
|
12
|
+
if (!language) {
|
|
13
|
+
throw Error(`Cannot map language`);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
return {
|
|
17
|
+
system: {
|
|
18
|
+
codename: language.system.codename as TLanguageCodenames,
|
|
19
|
+
id: language.system.id,
|
|
20
|
+
name: language.system.name
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
}
|
|
@@ -1,32 +1,32 @@
|
|
|
1
|
-
import { Contracts } from '../contracts';
|
|
2
|
-
import { IContentItemDelta } from '../models';
|
|
3
|
-
|
|
4
|
-
export class SyncMapper {
|
|
5
|
-
mapContentItemDelta(itemDeltaContract: Contracts.IContentItemDeltaContract): IContentItemDelta {
|
|
6
|
-
const systemContract = itemDeltaContract.data.system;
|
|
7
|
-
|
|
8
|
-
const elements: Contracts.IContentItemElementsContracts = itemDeltaContract.data.elements
|
|
9
|
-
? itemDeltaContract.data.elements
|
|
10
|
-
: {};
|
|
11
|
-
|
|
12
|
-
return {
|
|
13
|
-
changeType: itemDeltaContract.change_type,
|
|
14
|
-
timestamp: itemDeltaContract.timestamp,
|
|
15
|
-
data: {
|
|
16
|
-
elements: elements,
|
|
17
|
-
system: {
|
|
18
|
-
codename: systemContract.codename,
|
|
19
|
-
collection: systemContract.collection,
|
|
20
|
-
id: systemContract.id,
|
|
21
|
-
language: systemContract.language,
|
|
22
|
-
lastModified: systemContract.last_modified,
|
|
23
|
-
name: systemContract.name,
|
|
24
|
-
sitemapLocations: systemContract.sitemap_locations,
|
|
25
|
-
type: systemContract.type,
|
|
26
|
-
workflowStep: systemContract.workflow_step ?? null,
|
|
27
|
-
workflow: systemContract.workflow ?? null
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
};
|
|
31
|
-
}
|
|
32
|
-
}
|
|
1
|
+
import { Contracts } from '../contracts';
|
|
2
|
+
import { IContentItemDelta } from '../models';
|
|
3
|
+
|
|
4
|
+
export class SyncMapper {
|
|
5
|
+
mapContentItemDelta(itemDeltaContract: Contracts.IContentItemDeltaContract): IContentItemDelta {
|
|
6
|
+
const systemContract = itemDeltaContract.data.system;
|
|
7
|
+
|
|
8
|
+
const elements: Contracts.IContentItemElementsContracts = itemDeltaContract.data.elements
|
|
9
|
+
? itemDeltaContract.data.elements
|
|
10
|
+
: {};
|
|
11
|
+
|
|
12
|
+
return {
|
|
13
|
+
changeType: itemDeltaContract.change_type,
|
|
14
|
+
timestamp: itemDeltaContract.timestamp,
|
|
15
|
+
data: {
|
|
16
|
+
elements: elements,
|
|
17
|
+
system: {
|
|
18
|
+
codename: systemContract.codename,
|
|
19
|
+
collection: systemContract.collection,
|
|
20
|
+
id: systemContract.id,
|
|
21
|
+
language: systemContract.language,
|
|
22
|
+
lastModified: systemContract.last_modified,
|
|
23
|
+
name: systemContract.name,
|
|
24
|
+
sitemapLocations: systemContract.sitemap_locations,
|
|
25
|
+
type: systemContract.type,
|
|
26
|
+
workflowStep: systemContract.workflow_step ?? null,
|
|
27
|
+
workflow: systemContract.workflow ?? null
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
}
|