@bytebrand/export-cars 1.21.7 → 1.21.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (156) hide show
  1. package/.editorconfig +8 -8
  2. package/.eslintignore +1 -1
  3. package/.eslintrc.js +24 -24
  4. package/.prettierrc.js +7 -7
  5. package/README.md +65 -65
  6. package/dist/configs/index.d.ts +1 -0
  7. package/dist/configs/index.js +1 -0
  8. package/dist/configs/index.js.map +1 -1
  9. package/dist/configs/santander.config.d.ts +5 -0
  10. package/dist/configs/santander.config.js +20 -0
  11. package/dist/configs/santander.config.js.map +1 -0
  12. package/dist/enums/export-type.enum.d.ts +1 -0
  13. package/dist/enums/export-type.enum.js +1 -0
  14. package/dist/enums/export-type.enum.js.map +1 -1
  15. package/dist/export.command.js +1 -1
  16. package/dist/export.command.js.map +1 -1
  17. package/dist/export.schema.d.ts +6 -2
  18. package/dist/export.schema.js +4 -0
  19. package/dist/export.schema.js.map +1 -1
  20. package/dist/exporters/index.d.ts +1 -0
  21. package/dist/exporters/index.js +1 -0
  22. package/dist/exporters/index.js.map +1 -1
  23. package/dist/exporters/santander.exporter.d.ts +12 -0
  24. package/dist/exporters/santander.exporter.js +63 -0
  25. package/dist/exporters/santander.exporter.js.map +1 -0
  26. package/dist/formats/auto24-xml.builder.js +2 -2
  27. package/dist/formats/google-xml.builder.js +3 -3
  28. package/dist/formats/modix-xml.builder.js +2 -2
  29. package/dist/formats/ooyyo-xml.builder.js +1 -1
  30. package/dist/formats/santander-csv.builder.d.ts +6 -0
  31. package/dist/formats/santander-csv.builder.js +17 -0
  32. package/dist/formats/santander-csv.builder.js.map +1 -0
  33. package/dist/tsconfig.build.tsbuildinfo +1 -1
  34. package/nest-cli.json +5 -5
  35. package/package.json +61 -61
  36. package/src/app.module.ts +38 -38
  37. package/src/configs/alleskralle.config.ts +15 -15
  38. package/src/configs/as24.config.ts +13 -13
  39. package/src/configs/auto24.config.ts +15 -15
  40. package/src/configs/autoboerse.config.ts +16 -16
  41. package/src/configs/autouncle.config.ts +14 -14
  42. package/src/configs/awin.config.ts +15 -15
  43. package/src/configs/by-owner.config.ts +14 -14
  44. package/src/configs/config.ts +83 -83
  45. package/src/configs/criteo.config.ts +17 -17
  46. package/src/configs/dasparking.config.ts +15 -15
  47. package/src/configs/eauto.config.ts +15 -15
  48. package/src/configs/evium.config.ts +18 -18
  49. package/src/configs/facebook-shop.config.ts +16 -16
  50. package/src/configs/fb.config.ts +16 -16
  51. package/src/configs/google.config.ts +14 -14
  52. package/src/configs/index.ts +22 -21
  53. package/src/configs/kleinanzeigeFocus.config.ts +14 -14
  54. package/src/configs/marktde.config.ts +18 -18
  55. package/src/configs/meinstadt.config.ts +15 -15
  56. package/src/configs/mitula.config.ts +14 -14
  57. package/src/configs/ooyyo.config.ts +15 -15
  58. package/src/configs/santander.config.ts +17 -0
  59. package/src/configs/trovit.config.ts +14 -14
  60. package/src/configs/yescar.config.ts +17 -17
  61. package/src/constants/autouncle.contants.ts +4 -4
  62. package/src/constants/fb.constants.ts +7 -7
  63. package/src/constants/index.ts +1 -1
  64. package/src/constants/modix/body-color-name.constant.ts +20 -20
  65. package/src/constants/modix/category.constant.ts +14 -14
  66. package/src/constants/modix/fuel.constant.ts +14 -14
  67. package/src/constants/modix/index.ts +7 -7
  68. package/src/constants/modix/manufacturers.constant.ts +7498 -7498
  69. package/src/constants/modix/transmission.constant.ts +8 -8
  70. package/src/constants/modix/usage-type.constant.ts +13 -13
  71. package/src/constants/modix/vehicle-class.constant.ts +17 -17
  72. package/src/enums/environment.enum.ts +5 -5
  73. package/src/enums/export-type.enum.ts +33 -32
  74. package/src/enums/file-types.enum.ts +8 -8
  75. package/src/enums/image-type.enum.ts +4 -4
  76. package/src/enums/index.ts +4 -4
  77. package/src/export.command.ts +37 -37
  78. package/src/export.schema.ts +134 -128
  79. package/src/exporters/as24.exporter.ts +69 -69
  80. package/src/exporters/auto24.exporter.ts +48 -48
  81. package/src/exporters/autouncle.exporter.ts +60 -60
  82. package/src/exporters/awin.exporter.ts +47 -47
  83. package/src/exporters/by-owner.exporter.ts +44 -44
  84. package/src/exporters/facebook-shop.exporter.ts +51 -51
  85. package/src/exporters/fb.exporter.ts +52 -52
  86. package/src/exporters/google.exporter.ts +45 -45
  87. package/src/exporters/index.ts +15 -14
  88. package/src/exporters/meinstadt.exporter.ts +55 -55
  89. package/src/exporters/mobile.exporter.ts +64 -64
  90. package/src/exporters/modix.exporter.ts +56 -56
  91. package/src/exporters/ooyyo.exporter.ts +48 -48
  92. package/src/exporters/rubrikk.exporter.ts +53 -53
  93. package/src/exporters/santander.exporter.ts +50 -0
  94. package/src/exporters/trovit.exporter.ts +51 -51
  95. package/src/formats/auto24-xml.builder.ts +54 -54
  96. package/src/formats/autouncle-json.builder.ts +20 -20
  97. package/src/formats/awin-csv.builder.ts +16 -16
  98. package/src/formats/facebook-shop.builder.ts +69 -69
  99. package/src/formats/fb-xml.builder.ts +71 -71
  100. package/src/formats/google-xml.builder.ts +35 -35
  101. package/src/formats/index.ts +5 -5
  102. package/src/formats/meinstadt-json.builder.ts +19 -19
  103. package/src/formats/modix-xml.builder.ts +180 -180
  104. package/src/formats/ooyyo-xml.builder.ts +48 -48
  105. package/src/formats/rubrikk-xml.builder.ts +27 -27
  106. package/src/formats/santander-csv.builder.ts +15 -0
  107. package/src/formats/trovit-xml.builder.ts +44 -44
  108. package/src/interfaces/atributes-wrap-item.intreface.ts +6 -6
  109. package/src/interfaces/dealers-mapping.interface.ts +7 -7
  110. package/src/interfaces/description.interface.ts +24 -24
  111. package/src/interfaces/export-item.interface.ts +366 -366
  112. package/src/interfaces/exporter.interface.ts +3 -3
  113. package/src/interfaces/index.ts +3 -3
  114. package/src/interfaces/input.interface.ts +6 -6
  115. package/src/interfaces/mapping-rules.interface.ts +11 -11
  116. package/src/interfaces/modix/index.ts +1 -1
  117. package/src/interfaces/modix/modix-item-list.interface.ts +5 -5
  118. package/src/interfaces/params.interface.ts +13 -13
  119. package/src/interfaces/rule-parser.interface.ts +3 -3
  120. package/src/main.ts +14 -14
  121. package/src/rules/abstract.rule.ts +37 -37
  122. package/src/rules/date.rule.ts +19 -19
  123. package/src/rules/number.rule.ts +15 -15
  124. package/src/rules/string.rule.ts +8 -8
  125. package/src/services/car.service.ts +49 -49
  126. package/src/services/config.service.ts +15 -15
  127. package/src/services/images.service.ts +207 -207
  128. package/src/services/index.ts +9 -9
  129. package/src/services/loader.service.ts +29 -29
  130. package/src/services/mapping.service.ts +91 -91
  131. package/src/services/request.service.ts +44 -44
  132. package/src/services/rules.service.ts +61 -61
  133. package/src/services/transformer.service.ts +129 -129
  134. package/src/services/user.service.ts +57 -57
  135. package/src/transformers/as24.transformer.ts +253 -253
  136. package/src/transformers/auto24.transfomer.ts +155 -155
  137. package/src/transformers/autouncle.transformer.ts +236 -236
  138. package/src/transformers/awin.transformer.ts +193 -193
  139. package/src/transformers/by-owner.transformer.ts +354 -354
  140. package/src/transformers/facebook-shop.transformer.ts +93 -93
  141. package/src/transformers/fb-description.transformer.ts +316 -316
  142. package/src/transformers/fb-equipment.transformer.ts +161 -161
  143. package/src/transformers/fb.transformer.ts +655 -655
  144. package/src/transformers/google.transformer.ts +169 -169
  145. package/src/transformers/index.ts +5 -5
  146. package/src/transformers/meinstadt.transformer.ts +92 -92
  147. package/src/transformers/mobile.transformer.ts +482 -482
  148. package/src/transformers/modix.transformer.ts +227 -227
  149. package/src/transformers/ooyyo.transformer.ts +109 -109
  150. package/src/transformers/rubrikk.transformer.ts +200 -200
  151. package/src/transformers/trovit.transformer.ts +63 -63
  152. package/src/utils/converter.utils.ts +15 -15
  153. package/src/utils/index.ts +2 -2
  154. package/src/utils/validator.utils.ts +7 -7
  155. package/tsconfig.build.json +4 -4
  156. 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
+ }
@@ -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
+ }