@bytebrand/export-cars 1.21.7 → 1.21.8
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/.editorconfig +8 -8
- package/.eslintignore +1 -1
- package/.eslintrc.js +24 -24
- package/.prettierrc.js +7 -7
- package/README.md +65 -65
- package/dist/configs/index.d.ts +1 -0
- package/dist/configs/index.js +1 -0
- package/dist/configs/index.js.map +1 -1
- package/dist/configs/santander.config.d.ts +5 -0
- package/dist/configs/santander.config.js +18 -0
- package/dist/configs/santander.config.js.map +1 -0
- package/dist/enums/export-type.enum.d.ts +1 -0
- package/dist/enums/export-type.enum.js +1 -0
- package/dist/enums/export-type.enum.js.map +1 -1
- package/dist/export.command.js +1 -1
- package/dist/export.command.js.map +1 -1
- package/dist/export.schema.d.ts +6 -2
- package/dist/export.schema.js +4 -0
- package/dist/export.schema.js.map +1 -1
- package/dist/exporters/index.d.ts +1 -0
- package/dist/exporters/index.js +1 -0
- package/dist/exporters/index.js.map +1 -1
- package/dist/exporters/santander.exporter.d.ts +12 -0
- package/dist/exporters/santander.exporter.js +63 -0
- package/dist/exporters/santander.exporter.js.map +1 -0
- package/dist/formats/auto24-xml.builder.js +2 -2
- package/dist/formats/google-xml.builder.js +3 -3
- package/dist/formats/modix-xml.builder.js +2 -2
- package/dist/formats/ooyyo-xml.builder.js +1 -1
- package/dist/formats/santander-csv.builder.d.ts +6 -0
- package/dist/formats/santander-csv.builder.js +17 -0
- package/dist/formats/santander-csv.builder.js.map +1 -0
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/nest-cli.json +5 -5
- package/package.json +61 -61
- package/src/app.module.ts +38 -38
- package/src/configs/alleskralle.config.ts +15 -15
- package/src/configs/as24.config.ts +13 -13
- package/src/configs/auto24.config.ts +15 -15
- package/src/configs/autoboerse.config.ts +16 -16
- package/src/configs/autouncle.config.ts +14 -14
- package/src/configs/awin.config.ts +15 -15
- package/src/configs/by-owner.config.ts +14 -14
- package/src/configs/config.ts +83 -83
- package/src/configs/criteo.config.ts +17 -17
- package/src/configs/dasparking.config.ts +15 -15
- package/src/configs/eauto.config.ts +15 -15
- package/src/configs/evium.config.ts +18 -18
- package/src/configs/facebook-shop.config.ts +16 -16
- package/src/configs/fb.config.ts +16 -16
- package/src/configs/google.config.ts +14 -14
- package/src/configs/index.ts +22 -21
- package/src/configs/kleinanzeigeFocus.config.ts +14 -14
- package/src/configs/marktde.config.ts +18 -18
- package/src/configs/meinstadt.config.ts +15 -15
- package/src/configs/mitula.config.ts +14 -14
- package/src/configs/ooyyo.config.ts +15 -15
- package/src/configs/santander.config.ts +15 -0
- package/src/configs/trovit.config.ts +14 -14
- package/src/configs/yescar.config.ts +17 -17
- package/src/constants/autouncle.contants.ts +4 -4
- package/src/constants/fb.constants.ts +7 -7
- package/src/constants/index.ts +1 -1
- package/src/constants/modix/body-color-name.constant.ts +20 -20
- package/src/constants/modix/category.constant.ts +14 -14
- package/src/constants/modix/fuel.constant.ts +14 -14
- package/src/constants/modix/index.ts +7 -7
- package/src/constants/modix/manufacturers.constant.ts +7498 -7498
- package/src/constants/modix/transmission.constant.ts +8 -8
- package/src/constants/modix/usage-type.constant.ts +13 -13
- package/src/constants/modix/vehicle-class.constant.ts +17 -17
- package/src/enums/environment.enum.ts +5 -5
- package/src/enums/export-type.enum.ts +33 -32
- package/src/enums/file-types.enum.ts +8 -8
- package/src/enums/image-type.enum.ts +4 -4
- package/src/enums/index.ts +4 -4
- package/src/export.command.ts +37 -37
- package/src/export.schema.ts +134 -128
- package/src/exporters/as24.exporter.ts +69 -69
- package/src/exporters/auto24.exporter.ts +48 -48
- package/src/exporters/autouncle.exporter.ts +60 -60
- package/src/exporters/awin.exporter.ts +47 -47
- package/src/exporters/by-owner.exporter.ts +44 -44
- package/src/exporters/facebook-shop.exporter.ts +51 -51
- package/src/exporters/fb.exporter.ts +52 -52
- package/src/exporters/google.exporter.ts +45 -45
- package/src/exporters/index.ts +15 -14
- package/src/exporters/meinstadt.exporter.ts +55 -55
- package/src/exporters/mobile.exporter.ts +64 -64
- package/src/exporters/modix.exporter.ts +56 -56
- package/src/exporters/ooyyo.exporter.ts +48 -48
- package/src/exporters/rubrikk.exporter.ts +53 -53
- package/src/exporters/santander.exporter.ts +50 -0
- package/src/exporters/trovit.exporter.ts +51 -51
- package/src/formats/auto24-xml.builder.ts +54 -54
- package/src/formats/autouncle-json.builder.ts +20 -20
- package/src/formats/awin-csv.builder.ts +16 -16
- package/src/formats/facebook-shop.builder.ts +69 -69
- package/src/formats/fb-xml.builder.ts +71 -71
- package/src/formats/google-xml.builder.ts +35 -35
- package/src/formats/index.ts +5 -5
- package/src/formats/meinstadt-json.builder.ts +19 -19
- package/src/formats/modix-xml.builder.ts +180 -180
- package/src/formats/ooyyo-xml.builder.ts +48 -48
- package/src/formats/rubrikk-xml.builder.ts +27 -27
- package/src/formats/santander-csv.builder.ts +15 -0
- package/src/formats/trovit-xml.builder.ts +44 -44
- package/src/interfaces/atributes-wrap-item.intreface.ts +6 -6
- package/src/interfaces/dealers-mapping.interface.ts +7 -7
- package/src/interfaces/description.interface.ts +24 -24
- package/src/interfaces/export-item.interface.ts +366 -366
- package/src/interfaces/exporter.interface.ts +3 -3
- package/src/interfaces/index.ts +3 -3
- package/src/interfaces/input.interface.ts +6 -6
- package/src/interfaces/mapping-rules.interface.ts +11 -11
- package/src/interfaces/modix/index.ts +1 -1
- package/src/interfaces/modix/modix-item-list.interface.ts +5 -5
- package/src/interfaces/params.interface.ts +13 -13
- package/src/interfaces/rule-parser.interface.ts +3 -3
- package/src/main.ts +14 -14
- package/src/rules/abstract.rule.ts +37 -37
- package/src/rules/date.rule.ts +19 -19
- package/src/rules/number.rule.ts +15 -15
- package/src/rules/string.rule.ts +8 -8
- package/src/services/car.service.ts +49 -49
- package/src/services/config.service.ts +15 -15
- package/src/services/images.service.ts +207 -207
- package/src/services/index.ts +9 -9
- package/src/services/loader.service.ts +29 -29
- package/src/services/mapping.service.ts +91 -91
- package/src/services/request.service.ts +44 -44
- package/src/services/rules.service.ts +61 -61
- package/src/services/transformer.service.ts +129 -129
- package/src/services/user.service.ts +57 -57
- package/src/transformers/as24.transformer.ts +253 -253
- package/src/transformers/auto24.transfomer.ts +155 -155
- package/src/transformers/autouncle.transformer.ts +236 -236
- package/src/transformers/awin.transformer.ts +193 -193
- package/src/transformers/by-owner.transformer.ts +354 -354
- package/src/transformers/facebook-shop.transformer.ts +93 -93
- package/src/transformers/fb-description.transformer.ts +316 -316
- package/src/transformers/fb-equipment.transformer.ts +161 -161
- package/src/transformers/fb.transformer.ts +655 -655
- package/src/transformers/google.transformer.ts +169 -169
- package/src/transformers/index.ts +5 -5
- package/src/transformers/meinstadt.transformer.ts +92 -92
- package/src/transformers/mobile.transformer.ts +482 -482
- package/src/transformers/modix.transformer.ts +227 -227
- package/src/transformers/ooyyo.transformer.ts +109 -109
- package/src/transformers/rubrikk.transformer.ts +200 -200
- package/src/transformers/trovit.transformer.ts +63 -63
- package/src/utils/converter.utils.ts +15 -15
- package/src/utils/index.ts +2 -2
- package/src/utils/validator.utils.ts +7 -7
- package/tsconfig.build.json +4 -4
- package/tsconfig.json +29 -29
|
@@ -1,69 +1,69 @@
|
|
|
1
|
-
import { XMLBuilderBase } from '@bytebrand/cronicle-helper';
|
|
2
|
-
import { FacebookShopItem, FacebookShopTag } from '../interfaces';
|
|
3
|
-
import { Description, DescriptionValue } from '../interfaces/description.interface';
|
|
4
|
-
import { isNotEmptyArray } from '../utils/validator.utils';
|
|
5
|
-
|
|
6
|
-
export class FacebookShopXmlBuilder extends XMLBuilderBase {
|
|
7
|
-
async buildStart(): Promise<void> {
|
|
8
|
-
await this.write(
|
|
9
|
-
'<?xml version="1.0" encoding="utf-8"?>\n<rss version="2.0" xmlns:g="http://base.google.com/ns/1.0" xmlns:atom="http://www.w3.org/2005/Atom">' +
|
|
10
|
-
'\n<channel>\n<title>Produkt für auto.de</title>\n<description>Produkt für auto.de</description> \n<link>https://www.auto.de/</link>\n' +
|
|
11
|
-
'<atom:link href="https://www.mydealsshop.foo/pages/test-feed" rel="self" type="application/rss+xml" />\n',
|
|
12
|
-
);
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
async addItem(car: FacebookShopItem): Promise<void> {
|
|
16
|
-
let item = '\n<item>\n';
|
|
17
|
-
|
|
18
|
-
const tags = Object.keys(car);
|
|
19
|
-
|
|
20
|
-
for (const tag of tags) {
|
|
21
|
-
if (tag === 'description') {
|
|
22
|
-
item += this.getDescriptionElement(tag, car[tag].value);
|
|
23
|
-
} else {
|
|
24
|
-
item += this.buildTagElement(tag, car[tag]);
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
item += '</item>';
|
|
28
|
-
|
|
29
|
-
await this.write(item);
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
buildTagElement(tag: string, params: FacebookShopTag) {
|
|
33
|
-
if (params.isGoogle) {
|
|
34
|
-
return this.getElement(`g:${tag}`, params.value);
|
|
35
|
-
}
|
|
36
|
-
return this.getElement(tag, params.value);
|
|
37
|
-
}
|
|
38
|
-
private getDescriptionElement(rootTag: string, descriptionBlocks: Description[]): string {
|
|
39
|
-
const description: string = descriptionBlocks
|
|
40
|
-
.map(({ title, values }: Description) => {
|
|
41
|
-
if (values) {
|
|
42
|
-
return `${title}\n${this.buildDescriptionValues(values)} `;
|
|
43
|
-
}
|
|
44
|
-
return '';
|
|
45
|
-
})
|
|
46
|
-
.join('\n');
|
|
47
|
-
return `<${rootTag}>${description}</${rootTag}>`;
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
private buildDescriptionValues(values: DescriptionValue[]): string {
|
|
51
|
-
const validValues = [];
|
|
52
|
-
|
|
53
|
-
values.forEach(element => {
|
|
54
|
-
const filteredValues = element.value.filter(el => el);
|
|
55
|
-
if (isNotEmptyArray(filteredValues)) validValues.push(element);
|
|
56
|
-
});
|
|
57
|
-
|
|
58
|
-
return validValues
|
|
59
|
-
.map(({ title, value }: DescriptionValue) => {
|
|
60
|
-
return `${title}: ${value.join(', ')}`;
|
|
61
|
-
})
|
|
62
|
-
.join(';\n');
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
async buildEnd(): Promise<void> {
|
|
66
|
-
await this.write('\n</channel>\n</rss>\n');
|
|
67
|
-
await this.end();
|
|
68
|
-
}
|
|
69
|
-
}
|
|
1
|
+
import { XMLBuilderBase } from '@bytebrand/cronicle-helper';
|
|
2
|
+
import { FacebookShopItem, FacebookShopTag } from '../interfaces';
|
|
3
|
+
import { Description, DescriptionValue } from '../interfaces/description.interface';
|
|
4
|
+
import { isNotEmptyArray } from '../utils/validator.utils';
|
|
5
|
+
|
|
6
|
+
export class FacebookShopXmlBuilder extends XMLBuilderBase {
|
|
7
|
+
async buildStart(): Promise<void> {
|
|
8
|
+
await this.write(
|
|
9
|
+
'<?xml version="1.0" encoding="utf-8"?>\n<rss version="2.0" xmlns:g="http://base.google.com/ns/1.0" xmlns:atom="http://www.w3.org/2005/Atom">' +
|
|
10
|
+
'\n<channel>\n<title>Produkt für auto.de</title>\n<description>Produkt für auto.de</description> \n<link>https://www.auto.de/</link>\n' +
|
|
11
|
+
'<atom:link href="https://www.mydealsshop.foo/pages/test-feed" rel="self" type="application/rss+xml" />\n',
|
|
12
|
+
);
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
async addItem(car: FacebookShopItem): Promise<void> {
|
|
16
|
+
let item = '\n<item>\n';
|
|
17
|
+
|
|
18
|
+
const tags = Object.keys(car);
|
|
19
|
+
|
|
20
|
+
for (const tag of tags) {
|
|
21
|
+
if (tag === 'description') {
|
|
22
|
+
item += this.getDescriptionElement(tag, car[tag].value);
|
|
23
|
+
} else {
|
|
24
|
+
item += this.buildTagElement(tag, car[tag]);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
item += '</item>';
|
|
28
|
+
|
|
29
|
+
await this.write(item);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
buildTagElement(tag: string, params: FacebookShopTag) {
|
|
33
|
+
if (params.isGoogle) {
|
|
34
|
+
return this.getElement(`g:${tag}`, params.value);
|
|
35
|
+
}
|
|
36
|
+
return this.getElement(tag, params.value);
|
|
37
|
+
}
|
|
38
|
+
private getDescriptionElement(rootTag: string, descriptionBlocks: Description[]): string {
|
|
39
|
+
const description: string = descriptionBlocks
|
|
40
|
+
.map(({ title, values }: Description) => {
|
|
41
|
+
if (values) {
|
|
42
|
+
return `${title}\n${this.buildDescriptionValues(values)} `;
|
|
43
|
+
}
|
|
44
|
+
return '';
|
|
45
|
+
})
|
|
46
|
+
.join('\n');
|
|
47
|
+
return `<${rootTag}>${description}</${rootTag}>`;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
private buildDescriptionValues(values: DescriptionValue[]): string {
|
|
51
|
+
const validValues = [];
|
|
52
|
+
|
|
53
|
+
values.forEach(element => {
|
|
54
|
+
const filteredValues = element.value.filter(el => el);
|
|
55
|
+
if (isNotEmptyArray(filteredValues)) validValues.push(element);
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
return validValues
|
|
59
|
+
.map(({ title, value }: DescriptionValue) => {
|
|
60
|
+
return `${title}: ${value.join(', ')}`;
|
|
61
|
+
})
|
|
62
|
+
.join(';\n');
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
async buildEnd(): Promise<void> {
|
|
66
|
+
await this.write('\n</channel>\n</rss>\n');
|
|
67
|
+
await this.end();
|
|
68
|
+
}
|
|
69
|
+
}
|
|
@@ -1,71 +1,71 @@
|
|
|
1
|
-
import { XMLBuilderBase } from '@bytebrand/cronicle-helper';
|
|
2
|
-
import { isObject } from 'lodash';
|
|
3
|
-
import { Description, DescriptionValue } from '../interfaces/description.interface';
|
|
4
|
-
import { FbXmlItem } from '../interfaces';
|
|
5
|
-
|
|
6
|
-
export class FbXmlBuilder extends XMLBuilderBase {
|
|
7
|
-
async buildStart(url?: string): Promise<void> {
|
|
8
|
-
await this.write(
|
|
9
|
-
`<?xml version="1.0" encoding="UTF-8"?><listings><title>Auto de feed</title><link rel="self" href="${url}"/>`,
|
|
10
|
-
);
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
async addItem(car: FbXmlItem): Promise<void> {
|
|
14
|
-
const listing: string = Object.entries(car)
|
|
15
|
-
.map(([key, data]): string => {
|
|
16
|
-
if (key === 'description') {
|
|
17
|
-
return this.getDescriptionElement(key, data);
|
|
18
|
-
}
|
|
19
|
-
if (Array.isArray(data)) {
|
|
20
|
-
return this.getElementsArray(key, data);
|
|
21
|
-
}
|
|
22
|
-
if (isObject(data)) {
|
|
23
|
-
if (key === 'address') {
|
|
24
|
-
return this.getElementWithComponents(key, data, { format: 'simple' });
|
|
25
|
-
}
|
|
26
|
-
return this.getElementsTree(key, data, true);
|
|
27
|
-
}
|
|
28
|
-
return this.getElement(key, data, true);
|
|
29
|
-
})
|
|
30
|
-
.join('');
|
|
31
|
-
|
|
32
|
-
await this.write(`<listing>${listing}</listing>\n`);
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
private getDescriptionElement(rootTag: string, descriptionBlocks: Description[]): string {
|
|
36
|
-
const description: string = descriptionBlocks
|
|
37
|
-
.map(({ title, values }: Description) => {
|
|
38
|
-
return `<![CDATA[${title}\n${this.buildDescriptionValues(values)}.]]>`;
|
|
39
|
-
})
|
|
40
|
-
.join('\n');
|
|
41
|
-
return `<${rootTag}>${description}</${rootTag}>`;
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
private buildDescriptionValues(values: DescriptionValue[]): string {
|
|
45
|
-
return values
|
|
46
|
-
.map(({ title, value }: DescriptionValue) => {
|
|
47
|
-
return `${title}: ${value.join(', ')}`;
|
|
48
|
-
})
|
|
49
|
-
.join(';\n');
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
private getElementsArray(rootTag: string, data: object[]): string {
|
|
53
|
-
return data.reduce((elements, item) => `${elements}${this.getElementsTree(rootTag, item, true)}`, '');
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
private getElementWithComponents(rootTag: string, data: object, attr: object): string {
|
|
57
|
-
const components: string = Object.entries(data)
|
|
58
|
-
.map(([key, data]) => `<component name="${key}">${data}</component>`)
|
|
59
|
-
.join('');
|
|
60
|
-
|
|
61
|
-
const attrs = Object.entries(attr)
|
|
62
|
-
.map(([key, value]) => `${key}="${value}"`)
|
|
63
|
-
.join(' ');
|
|
64
|
-
|
|
65
|
-
return `<${rootTag} ${attrs}>${components}</${rootTag}>`;
|
|
66
|
-
}
|
|
67
|
-
async buildEnd(): Promise<void> {
|
|
68
|
-
await this.write('</listings>');
|
|
69
|
-
await this.end();
|
|
70
|
-
}
|
|
71
|
-
}
|
|
1
|
+
import { XMLBuilderBase } from '@bytebrand/cronicle-helper';
|
|
2
|
+
import { isObject } from 'lodash';
|
|
3
|
+
import { Description, DescriptionValue } from '../interfaces/description.interface';
|
|
4
|
+
import { FbXmlItem } from '../interfaces';
|
|
5
|
+
|
|
6
|
+
export class FbXmlBuilder extends XMLBuilderBase {
|
|
7
|
+
async buildStart(url?: string): Promise<void> {
|
|
8
|
+
await this.write(
|
|
9
|
+
`<?xml version="1.0" encoding="UTF-8"?><listings><title>Auto de feed</title><link rel="self" href="${url}"/>`,
|
|
10
|
+
);
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
async addItem(car: FbXmlItem): Promise<void> {
|
|
14
|
+
const listing: string = Object.entries(car)
|
|
15
|
+
.map(([key, data]): string => {
|
|
16
|
+
if (key === 'description') {
|
|
17
|
+
return this.getDescriptionElement(key, data);
|
|
18
|
+
}
|
|
19
|
+
if (Array.isArray(data)) {
|
|
20
|
+
return this.getElementsArray(key, data);
|
|
21
|
+
}
|
|
22
|
+
if (isObject(data)) {
|
|
23
|
+
if (key === 'address') {
|
|
24
|
+
return this.getElementWithComponents(key, data, { format: 'simple' });
|
|
25
|
+
}
|
|
26
|
+
return this.getElementsTree(key, data, true);
|
|
27
|
+
}
|
|
28
|
+
return this.getElement(key, data, true);
|
|
29
|
+
})
|
|
30
|
+
.join('');
|
|
31
|
+
|
|
32
|
+
await this.write(`<listing>${listing}</listing>\n`);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
private getDescriptionElement(rootTag: string, descriptionBlocks: Description[]): string {
|
|
36
|
+
const description: string = descriptionBlocks
|
|
37
|
+
.map(({ title, values }: Description) => {
|
|
38
|
+
return `<![CDATA[${title}\n${this.buildDescriptionValues(values)}.]]>`;
|
|
39
|
+
})
|
|
40
|
+
.join('\n');
|
|
41
|
+
return `<${rootTag}>${description}</${rootTag}>`;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
private buildDescriptionValues(values: DescriptionValue[]): string {
|
|
45
|
+
return values
|
|
46
|
+
.map(({ title, value }: DescriptionValue) => {
|
|
47
|
+
return `${title}: ${value.join(', ')}`;
|
|
48
|
+
})
|
|
49
|
+
.join(';\n');
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
private getElementsArray(rootTag: string, data: object[]): string {
|
|
53
|
+
return data.reduce((elements, item) => `${elements}${this.getElementsTree(rootTag, item, true)}`, '');
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
private getElementWithComponents(rootTag: string, data: object, attr: object): string {
|
|
57
|
+
const components: string = Object.entries(data)
|
|
58
|
+
.map(([key, data]) => `<component name="${key}">${data}</component>`)
|
|
59
|
+
.join('');
|
|
60
|
+
|
|
61
|
+
const attrs = Object.entries(attr)
|
|
62
|
+
.map(([key, value]) => `${key}="${value}"`)
|
|
63
|
+
.join(' ');
|
|
64
|
+
|
|
65
|
+
return `<${rootTag} ${attrs}>${components}</${rootTag}>`;
|
|
66
|
+
}
|
|
67
|
+
async buildEnd(): Promise<void> {
|
|
68
|
+
await this.write('</listings>');
|
|
69
|
+
await this.end();
|
|
70
|
+
}
|
|
71
|
+
}
|
|
@@ -1,35 +1,35 @@
|
|
|
1
|
-
import { XMLBuilderBase } from '@bytebrand/cronicle-helper';
|
|
2
|
-
import { GoogleXmlItem, FbXmlItem } from '../interfaces';
|
|
3
|
-
|
|
4
|
-
export class GoogleXmlBuilder extends XMLBuilderBase {
|
|
5
|
-
async buildStart(url?: string): Promise<void> {
|
|
6
|
-
await this.write(
|
|
7
|
-
`<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:g="http://base.google.com/ns/1.0"><channel><title>Auto de feed</title><link>${url}</link>`,
|
|
8
|
-
);
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
async addItem(item: FbXmlItem | GoogleXmlItem): Promise<void> {
|
|
12
|
-
const listing: string = Object.entries(item)
|
|
13
|
-
.map(([key, data]): string => {
|
|
14
|
-
if (key === 'installment') {
|
|
15
|
-
return this.getInstallmentElement(key, data);
|
|
16
|
-
}
|
|
17
|
-
return this.getElement(`g:${key}`, data);
|
|
18
|
-
})
|
|
19
|
-
.join('');
|
|
20
|
-
|
|
21
|
-
await this.write(`<item>${listing}</item>\n`);
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
async buildEnd(): Promise<void> {
|
|
25
|
-
await this.write('</channel></rss>');
|
|
26
|
-
await this.end();
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
private getInstallmentElement(rootTag: string, data: { paybackPeriod: string; monthlyInstallment: string }): string {
|
|
30
|
-
return `<g:${rootTag}>
|
|
31
|
-
<g:months>${data.paybackPeriod}</g:months>
|
|
32
|
-
<g:amount>${data.monthlyInstallment} EUR</g:amount>
|
|
33
|
-
</g:${rootTag}>`;
|
|
34
|
-
}
|
|
35
|
-
}
|
|
1
|
+
import { XMLBuilderBase } from '@bytebrand/cronicle-helper';
|
|
2
|
+
import { GoogleXmlItem, FbXmlItem } from '../interfaces';
|
|
3
|
+
|
|
4
|
+
export class GoogleXmlBuilder extends XMLBuilderBase {
|
|
5
|
+
async buildStart(url?: string): Promise<void> {
|
|
6
|
+
await this.write(
|
|
7
|
+
`<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:g="http://base.google.com/ns/1.0"><channel><title>Auto de feed</title><link>${url}</link>`,
|
|
8
|
+
);
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
async addItem(item: FbXmlItem | GoogleXmlItem): Promise<void> {
|
|
12
|
+
const listing: string = Object.entries(item)
|
|
13
|
+
.map(([key, data]): string => {
|
|
14
|
+
if (key === 'installment') {
|
|
15
|
+
return this.getInstallmentElement(key, data);
|
|
16
|
+
}
|
|
17
|
+
return this.getElement(`g:${key}`, data);
|
|
18
|
+
})
|
|
19
|
+
.join('');
|
|
20
|
+
|
|
21
|
+
await this.write(`<item>${listing}</item>\n`);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
async buildEnd(): Promise<void> {
|
|
25
|
+
await this.write('</channel></rss>');
|
|
26
|
+
await this.end();
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
private getInstallmentElement(rootTag: string, data: { paybackPeriod: string; monthlyInstallment: string }): string {
|
|
30
|
+
return `<g:${rootTag}>
|
|
31
|
+
<g:months>${data.paybackPeriod}</g:months>
|
|
32
|
+
<g:amount>${data.monthlyInstallment} EUR</g:amount>
|
|
33
|
+
</g:${rootTag}>`;
|
|
34
|
+
}
|
|
35
|
+
}
|
package/src/formats/index.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export * from './rubrikk-xml.builder';
|
|
2
|
-
export * from './modix-xml.builder';
|
|
3
|
-
export * from './facebook-shop.builder';
|
|
4
|
-
export * from './trovit-xml.builder';
|
|
5
|
-
export * from './awin-csv.builder';
|
|
1
|
+
export * from './rubrikk-xml.builder';
|
|
2
|
+
export * from './modix-xml.builder';
|
|
3
|
+
export * from './facebook-shop.builder';
|
|
4
|
+
export * from './trovit-xml.builder';
|
|
5
|
+
export * from './awin-csv.builder';
|
|
@@ -1,19 +1,19 @@
|
|
|
1
|
-
import { XMLBuilderBase } from '@bytebrand/cronicle-helper';
|
|
2
|
-
import { MeinstadtJsonItem } from '../interfaces';
|
|
3
|
-
|
|
4
|
-
export class MeinstadtJsonBuilder extends XMLBuilderBase {
|
|
5
|
-
async buildStart(): Promise<void> {
|
|
6
|
-
await this.write('[');
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
async addItem(car: MeinstadtJsonItem, firstSym?: boolean): Promise<void> {
|
|
10
|
-
if (firstSym) {
|
|
11
|
-
await this.write(`${JSON.stringify(car)}`);
|
|
12
|
-
} else await this.write(`,${JSON.stringify(car)}`);
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
async buildEnd(): Promise<void> {
|
|
16
|
-
await this.write(']');
|
|
17
|
-
await this.end();
|
|
18
|
-
}
|
|
19
|
-
}
|
|
1
|
+
import { XMLBuilderBase } from '@bytebrand/cronicle-helper';
|
|
2
|
+
import { MeinstadtJsonItem } from '../interfaces';
|
|
3
|
+
|
|
4
|
+
export class MeinstadtJsonBuilder extends XMLBuilderBase {
|
|
5
|
+
async buildStart(): Promise<void> {
|
|
6
|
+
await this.write('[');
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
async addItem(car: MeinstadtJsonItem, firstSym?: boolean): Promise<void> {
|
|
10
|
+
if (firstSym) {
|
|
11
|
+
await this.write(`${JSON.stringify(car)}`);
|
|
12
|
+
} else await this.write(`,${JSON.stringify(car)}`);
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
async buildEnd(): Promise<void> {
|
|
16
|
+
await this.write(']');
|
|
17
|
+
await this.end();
|
|
18
|
+
}
|
|
19
|
+
}
|