goods-exporter 0.3.18 → 0.4.1
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/README.md +2 -1
- package/dist/bundle.d.ts +37 -10
- package/dist/cjs/index.cjs +73 -39
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/esm/index.mjs +73 -39
- package/dist/esm/index.mjs.map +1 -1
- package/package.json +2 -1
package/README.md
CHANGED
|
@@ -13,7 +13,7 @@ export tasks with ease.
|
|
|
13
13
|
|
|
14
14
|
## Features
|
|
15
15
|
|
|
16
|
-
- Export goods data to YML, CSV, and Excel formats.
|
|
16
|
+
- Export goods data to JSON, YML, CSV, and Excel formats.
|
|
17
17
|
- Easily integrate into your JavaScript projects.
|
|
18
18
|
- Compatible with Node.js version 16 and above.
|
|
19
19
|
- Comprehensive TypeScript type definitions included.
|
|
@@ -21,6 +21,7 @@ export tasks with ease.
|
|
|
21
21
|
## Supported formats
|
|
22
22
|
|
|
23
23
|
- YML (Yandex Market Language)
|
|
24
|
+
- JSON
|
|
24
25
|
- CSV
|
|
25
26
|
- Excel
|
|
26
27
|
- TgShop
|
package/dist/bundle.d.ts
CHANGED
|
@@ -562,10 +562,27 @@ interface Category {
|
|
|
562
562
|
name: string;
|
|
563
563
|
}
|
|
564
564
|
|
|
565
|
+
interface Brand {
|
|
566
|
+
/**
|
|
567
|
+
* **ID бренда**
|
|
568
|
+
*
|
|
569
|
+
* Целое число
|
|
570
|
+
*/
|
|
571
|
+
id: number;
|
|
572
|
+
/**
|
|
573
|
+
* **Название бренда**
|
|
574
|
+
*/
|
|
575
|
+
name: string;
|
|
576
|
+
/**
|
|
577
|
+
* **Ссылка на изображение**
|
|
578
|
+
*/
|
|
579
|
+
coverURL?: string;
|
|
580
|
+
}
|
|
581
|
+
|
|
565
582
|
declare abstract class FormatterAbstract {
|
|
566
583
|
abstract formatterName: string;
|
|
567
584
|
abstract fileExtension: Extension;
|
|
568
|
-
abstract format(products: Product[], categories?: Category[], option?: FormatterOptions): Promise<Buffer | string>;
|
|
585
|
+
abstract format(products: Product[], categories?: Category[], brands?: Brand[], option?: FormatterOptions): Promise<Buffer | string>;
|
|
569
586
|
}
|
|
570
587
|
interface FormatterOptions {
|
|
571
588
|
shopName?: string;
|
|
@@ -575,44 +592,53 @@ interface FormatterOptions {
|
|
|
575
592
|
declare enum Extension {
|
|
576
593
|
CSV = "csv",
|
|
577
594
|
YML = "yml",
|
|
578
|
-
XLSX = "xlsx"
|
|
595
|
+
XLSX = "xlsx",
|
|
596
|
+
JSON = "json"
|
|
579
597
|
}
|
|
580
598
|
|
|
581
599
|
declare class CSVFormatter implements FormatterAbstract {
|
|
582
600
|
formatterName: string;
|
|
583
601
|
fileExtension: Extension;
|
|
584
|
-
format(products: Product[], categories?: Category[], options?: FormatterOptions): Promise<string>;
|
|
602
|
+
format(products: Product[], categories?: Category[], _?: Brand[], options?: FormatterOptions): Promise<string>;
|
|
585
603
|
}
|
|
586
604
|
|
|
587
605
|
declare class ExcelFormatter implements FormatterAbstract {
|
|
588
606
|
formatterName: string;
|
|
589
607
|
fileExtension: Extension;
|
|
590
|
-
format(products: Product[], categories?: Category[], options?: FormatterOptions): Promise<Buffer>;
|
|
608
|
+
format(products: Product[], categories?: Category[], _?: Brand[], options?: FormatterOptions): Promise<Buffer>;
|
|
591
609
|
}
|
|
592
610
|
|
|
593
611
|
declare class InsalesFormatter implements FormatterAbstract {
|
|
594
612
|
formatterName: string;
|
|
595
613
|
fileExtension: Extension;
|
|
596
|
-
format(products: Product[], categories?: Category[], _?: FormatterOptions): Promise<Buffer>;
|
|
614
|
+
format(products: Product[], categories?: Category[], _?: Brand[], __?: FormatterOptions): Promise<Buffer>;
|
|
615
|
+
}
|
|
616
|
+
|
|
617
|
+
declare class JSONFormatter implements FormatterAbstract {
|
|
618
|
+
formatterName: string;
|
|
619
|
+
fileExtension: Extension;
|
|
620
|
+
format(products: Product[], categories?: Category[], brands?: Brand[], _?: FormatterOptions): Promise<string>;
|
|
597
621
|
}
|
|
598
622
|
|
|
599
623
|
declare class TgShopFormatter implements FormatterAbstract {
|
|
600
624
|
formatterName: string;
|
|
601
625
|
fileExtension: Extension;
|
|
602
|
-
format(products: Product[], categories?: Category[], _?: FormatterOptions): Promise<Buffer>;
|
|
626
|
+
format(products: Product[], categories?: Category[], _?: Brand[], __?: FormatterOptions): Promise<Buffer>;
|
|
603
627
|
}
|
|
604
628
|
|
|
605
629
|
declare class TildaFormatter implements FormatterAbstract {
|
|
606
630
|
formatterName: string;
|
|
607
631
|
fileExtension: Extension;
|
|
608
|
-
format(products: Product[], categories?: Category[], _?: FormatterOptions): Promise<string>;
|
|
632
|
+
format(products: Product[], categories?: Category[], _?: Brand[], __?: FormatterOptions): Promise<string>;
|
|
609
633
|
}
|
|
610
634
|
|
|
611
635
|
declare class YMLFormatter implements FormatterAbstract {
|
|
612
636
|
formatterName: string;
|
|
613
637
|
fileExtension: Extension;
|
|
614
638
|
private readonly builder;
|
|
615
|
-
format(products: Product[], categories?: Category[], options?: FormatterOptions): Promise<string>;
|
|
639
|
+
format(products: Product[], categories?: Category[], brands?: Brand[], options?: FormatterOptions): Promise<string>;
|
|
640
|
+
private getBrands;
|
|
641
|
+
private getCategories;
|
|
616
642
|
private getOffers;
|
|
617
643
|
}
|
|
618
644
|
|
|
@@ -623,6 +649,7 @@ declare const Formatters: {
|
|
|
623
649
|
YMLFormatter: typeof YMLFormatter;
|
|
624
650
|
TgShopFormatter: typeof TgShopFormatter;
|
|
625
651
|
ExcelFormatter: typeof ExcelFormatter;
|
|
652
|
+
JSONFormatter: typeof JSONFormatter;
|
|
626
653
|
};
|
|
627
654
|
|
|
628
655
|
type Transformer = (product: Product) => Product | Promise<Product>;
|
|
@@ -635,7 +662,7 @@ declare class GoodsExporter {
|
|
|
635
662
|
setTransformers(transformers: Transformer[]): void;
|
|
636
663
|
setFormatter(formatter: FormatterAbstract): void;
|
|
637
664
|
setExporter(exporter: Exporter): void;
|
|
638
|
-
export(products: Product[], categories?: Category[], option?: FormatterOptions): Promise<Buffer>;
|
|
665
|
+
export(products: Product[], categories?: Category[], brands?: Brand[], option?: FormatterOptions): Promise<Buffer>;
|
|
639
666
|
}
|
|
640
667
|
|
|
641
|
-
export { type Category, Currency, type Exporter, Extension, FormatterAbstract, type FormatterOptions, Formatters, GoodsExporter, type IParam, type ISize, type Product, type Transformer, Vat };
|
|
668
|
+
export { type Brand, type Category, Currency, type Exporter, Extension, FormatterAbstract, type FormatterOptions, Formatters, GoodsExporter, type IParam, type ISize, type Product, type Transformer, Vat };
|
package/dist/cjs/index.cjs
CHANGED
|
@@ -45,7 +45,7 @@ const getProperties = (product, option) => {
|
|
|
45
45
|
);
|
|
46
46
|
return properties;
|
|
47
47
|
};
|
|
48
|
-
const getSizes = (product,
|
|
48
|
+
const getSizes = (product, _) => {
|
|
49
49
|
const sizes = {};
|
|
50
50
|
product.sizes?.forEach(
|
|
51
51
|
({ name, value }) => sizes[`Size [${name}]`] = value
|
|
@@ -64,21 +64,22 @@ var Extension = /* @__PURE__ */ ((Extension2) => {
|
|
|
64
64
|
Extension2["CSV"] = "csv";
|
|
65
65
|
Extension2["YML"] = "yml";
|
|
66
66
|
Extension2["XLSX"] = "xlsx";
|
|
67
|
+
Extension2["JSON"] = "json";
|
|
67
68
|
return Extension2;
|
|
68
69
|
})(Extension || {});
|
|
69
70
|
|
|
70
|
-
var __defProp$
|
|
71
|
-
var __defNormalProp$
|
|
72
|
-
var __publicField$
|
|
73
|
-
__defNormalProp$
|
|
71
|
+
var __defProp$7 = Object.defineProperty;
|
|
72
|
+
var __defNormalProp$7 = (obj, key, value) => key in obj ? __defProp$7(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
73
|
+
var __publicField$7 = (obj, key, value) => {
|
|
74
|
+
__defNormalProp$7(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
74
75
|
return value;
|
|
75
76
|
};
|
|
76
77
|
class CSVFormatter {
|
|
77
78
|
constructor() {
|
|
78
|
-
__publicField$
|
|
79
|
-
__publicField$
|
|
79
|
+
__publicField$7(this, "formatterName", "CSV");
|
|
80
|
+
__publicField$7(this, "fileExtension", Extension.CSV);
|
|
80
81
|
}
|
|
81
|
-
async format(products, categories, options) {
|
|
82
|
+
async format(products, categories, _, options) {
|
|
82
83
|
const mappedCategories = {};
|
|
83
84
|
categories?.forEach(({ id, name }) => mappedCategories[id] = name);
|
|
84
85
|
const data = products.map((product) => ({
|
|
@@ -100,19 +101,19 @@ class CSVFormatter {
|
|
|
100
101
|
}
|
|
101
102
|
}
|
|
102
103
|
|
|
103
|
-
var __defProp$
|
|
104
|
-
var __defNormalProp$
|
|
105
|
-
var __publicField$
|
|
106
|
-
__defNormalProp$
|
|
104
|
+
var __defProp$6 = Object.defineProperty;
|
|
105
|
+
var __defNormalProp$6 = (obj, key, value) => key in obj ? __defProp$6(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
106
|
+
var __publicField$6 = (obj, key, value) => {
|
|
107
|
+
__defNormalProp$6(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
107
108
|
return value;
|
|
108
109
|
};
|
|
109
110
|
const { writeXLSX, utils } = xlsx;
|
|
110
111
|
class ExcelFormatter {
|
|
111
112
|
constructor() {
|
|
112
|
-
__publicField$
|
|
113
|
-
__publicField$
|
|
113
|
+
__publicField$6(this, "formatterName", "Excel");
|
|
114
|
+
__publicField$6(this, "fileExtension", Extension.XLSX);
|
|
114
115
|
}
|
|
115
|
-
async format(products, categories, options) {
|
|
116
|
+
async format(products, categories, _, options) {
|
|
116
117
|
const mappedCategories = {};
|
|
117
118
|
categories?.forEach(({ id, name }) => mappedCategories[id] = name);
|
|
118
119
|
const data = products.map((product) => ({
|
|
@@ -137,18 +138,18 @@ class ExcelFormatter {
|
|
|
137
138
|
}
|
|
138
139
|
}
|
|
139
140
|
|
|
140
|
-
var __defProp$
|
|
141
|
-
var __defNormalProp$
|
|
142
|
-
var __publicField$
|
|
143
|
-
__defNormalProp$
|
|
141
|
+
var __defProp$5 = Object.defineProperty;
|
|
142
|
+
var __defNormalProp$5 = (obj, key, value) => key in obj ? __defProp$5(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
143
|
+
var __publicField$5 = (obj, key, value) => {
|
|
144
|
+
__defNormalProp$5(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
144
145
|
return value;
|
|
145
146
|
};
|
|
146
147
|
class InsalesFormatter {
|
|
147
148
|
constructor() {
|
|
148
|
-
__publicField$
|
|
149
|
-
__publicField$
|
|
149
|
+
__publicField$5(this, "formatterName", "Insales");
|
|
150
|
+
__publicField$5(this, "fileExtension", Extension.XLSX);
|
|
150
151
|
}
|
|
151
|
-
async format(products, categories, _) {
|
|
152
|
+
async format(products, categories, _, __) {
|
|
152
153
|
const mappedCategories = {};
|
|
153
154
|
categories?.forEach(
|
|
154
155
|
(category) => mappedCategories[category.id] = category
|
|
@@ -230,6 +231,27 @@ class InsalesFormatter {
|
|
|
230
231
|
}
|
|
231
232
|
}
|
|
232
233
|
|
|
234
|
+
var __defProp$4 = Object.defineProperty;
|
|
235
|
+
var __defNormalProp$4 = (obj, key, value) => key in obj ? __defProp$4(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
236
|
+
var __publicField$4 = (obj, key, value) => {
|
|
237
|
+
__defNormalProp$4(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
238
|
+
return value;
|
|
239
|
+
};
|
|
240
|
+
class JSONFormatter {
|
|
241
|
+
constructor() {
|
|
242
|
+
__publicField$4(this, "formatterName", "JSON");
|
|
243
|
+
__publicField$4(this, "fileExtension", Extension.JSON);
|
|
244
|
+
}
|
|
245
|
+
async format(products, categories, brands, _) {
|
|
246
|
+
const result = {
|
|
247
|
+
categories,
|
|
248
|
+
brands,
|
|
249
|
+
products
|
|
250
|
+
};
|
|
251
|
+
return JSON.stringify(result);
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
|
|
233
255
|
var __defProp$3 = Object.defineProperty;
|
|
234
256
|
var __defNormalProp$3 = (obj, key, value) => key in obj ? __defProp$3(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
235
257
|
var __publicField$3 = (obj, key, value) => {
|
|
@@ -241,7 +263,7 @@ class TgShopFormatter {
|
|
|
241
263
|
__publicField$3(this, "formatterName", "TgShop");
|
|
242
264
|
__publicField$3(this, "fileExtension", Extension.XLSX);
|
|
243
265
|
}
|
|
244
|
-
async format(products, categories, _) {
|
|
266
|
+
async format(products, categories, _, __) {
|
|
245
267
|
const getParameter = (product, key) => product.params?.find((value) => value.key === key);
|
|
246
268
|
const productsData = products.map((product) => ({
|
|
247
269
|
"category id": product.categoryId,
|
|
@@ -279,7 +301,7 @@ class TildaFormatter {
|
|
|
279
301
|
__publicField$2(this, "formatterName", "Tilda");
|
|
280
302
|
__publicField$2(this, "fileExtension", Extension.CSV);
|
|
281
303
|
}
|
|
282
|
-
async format(products, categories, _) {
|
|
304
|
+
async format(products, categories, _, __) {
|
|
283
305
|
const mappedCategories = {};
|
|
284
306
|
categories?.forEach(({ id, name }) => mappedCategories[id] = name);
|
|
285
307
|
const data = products.map((product) => ({
|
|
@@ -316,16 +338,7 @@ class YMLFormatter {
|
|
|
316
338
|
cdataPropName: "__cdata"
|
|
317
339
|
}));
|
|
318
340
|
}
|
|
319
|
-
async format(products, categories, options) {
|
|
320
|
-
const mappedCategories = {
|
|
321
|
-
category: categories?.map((cat) => ({
|
|
322
|
-
"@_id": cat.id,
|
|
323
|
-
"@_parentId": cat.parentId,
|
|
324
|
-
"#text": cat.name
|
|
325
|
-
}))
|
|
326
|
-
};
|
|
327
|
-
const shopName = options?.shopName ?? "ShopName";
|
|
328
|
-
const companyName = options?.companyName ?? "CompanyName";
|
|
341
|
+
async format(products, categories, brands, options) {
|
|
329
342
|
const offers = { offer: products.map(this.getOffers) };
|
|
330
343
|
const result = {
|
|
331
344
|
"?xml": {
|
|
@@ -336,15 +349,34 @@ class YMLFormatter {
|
|
|
336
349
|
yml_catalog: {
|
|
337
350
|
"@_date": (/* @__PURE__ */ new Date()).toISOString().replace(/.\d+Z/, ""),
|
|
338
351
|
shop: {
|
|
339
|
-
name: shopName,
|
|
340
|
-
company: companyName,
|
|
341
|
-
categories:
|
|
352
|
+
name: options?.shopName,
|
|
353
|
+
company: options?.companyName,
|
|
354
|
+
categories: this.getCategories(categories),
|
|
355
|
+
brands: this.getBrands(brands),
|
|
342
356
|
offers
|
|
343
357
|
}
|
|
344
358
|
}
|
|
345
359
|
};
|
|
346
360
|
return this.builder.build(result);
|
|
347
361
|
}
|
|
362
|
+
getBrands(brands) {
|
|
363
|
+
return {
|
|
364
|
+
category: brands?.map((brand) => ({
|
|
365
|
+
"@_id": brand.id,
|
|
366
|
+
"@_url": brand.coverURL,
|
|
367
|
+
"#text": brand.name
|
|
368
|
+
}))
|
|
369
|
+
};
|
|
370
|
+
}
|
|
371
|
+
getCategories(categories) {
|
|
372
|
+
return {
|
|
373
|
+
category: categories?.map((cat) => ({
|
|
374
|
+
"@_id": cat.id,
|
|
375
|
+
"@_parentId": cat.parentId,
|
|
376
|
+
"#text": cat.name
|
|
377
|
+
}))
|
|
378
|
+
};
|
|
379
|
+
}
|
|
348
380
|
getOffers(product) {
|
|
349
381
|
const result = {
|
|
350
382
|
"@_id": product.variantId,
|
|
@@ -428,7 +460,8 @@ const Formatters = {
|
|
|
428
460
|
InsalesFormatter,
|
|
429
461
|
YMLFormatter,
|
|
430
462
|
TgShopFormatter,
|
|
431
|
-
ExcelFormatter
|
|
463
|
+
ExcelFormatter,
|
|
464
|
+
JSONFormatter
|
|
432
465
|
};
|
|
433
466
|
|
|
434
467
|
var __defProp = Object.defineProperty;
|
|
@@ -456,7 +489,7 @@ class GoodsExporter {
|
|
|
456
489
|
setExporter(exporter) {
|
|
457
490
|
this.exporter = exporter;
|
|
458
491
|
}
|
|
459
|
-
async export(products, categories, option) {
|
|
492
|
+
async export(products, categories, brands, option) {
|
|
460
493
|
const copyProducts = deepcopy(products);
|
|
461
494
|
const transformedProducts = await Promise.all(
|
|
462
495
|
copyProducts.map(async (product) => {
|
|
@@ -469,6 +502,7 @@ class GoodsExporter {
|
|
|
469
502
|
const data = await this.formatter.format(
|
|
470
503
|
transformedProducts,
|
|
471
504
|
categories,
|
|
505
|
+
brands,
|
|
472
506
|
option
|
|
473
507
|
);
|
|
474
508
|
if (typeof data === "string") {
|
package/dist/cjs/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../../src/util/formatter.util.ts","../../src/formatter/formater.types.ts","../../src/formatter/CSV.formatter.ts","../../src/formatter/Excel.formatter.ts","../../src/formatter/Insales.formatter.ts","../../src/formatter/TgShop.formatter.ts","../../src/formatter/Tilda.formatter.ts","../../src/formatter/YML.formatter.ts","../../src/formatter/index.ts","../../src/exporter/goodsExporter.ts","../../src/types/Product.types.ts"],"sourcesContent":["import { type FormatterOptions } from \"../formatter\";\nimport { type Product } from \"../types\";\n\nconst getParams = (\n product: Product,\n option?: FormatterOptions,\n): Record<string, string> => {\n const params: Record<string, string> = {};\n\n if (option?.splitParams === false) {\n return params;\n }\n\n product.params?.forEach(\n ({ key, value }) => (params[`Param [${key}]`] = value),\n );\n return params;\n};\n\nconst getProperties = (\n product: Product,\n option?: FormatterOptions,\n): Record<string, string> => {\n const properties: Record<string, string> = {};\n\n if (option?.splitParams === false) {\n return properties;\n }\n\n product.properties?.forEach(\n ({ key, value }) => (properties[`Property [${key}]`] = value),\n );\n return properties;\n};\n\nconst getSizes = (\n product: Product,\n option?: FormatterOptions,\n): Record<string, string> => {\n const sizes: Record<string, string> = {};\n product.sizes?.forEach(\n ({ name, value }) => (sizes[`Size [${name}]`] = value),\n );\n return sizes;\n};\n\nexport const UTILS = {\n getSizes,\n getParams,\n getProperties,\n};\n","import { type Category, type Product } from \"../types\";\n\nexport abstract class FormatterAbstract {\n public abstract formatterName: string;\n public abstract fileExtension: Extension;\n\n public abstract format(\n products: Product[],\n categories?: Category[],\n option?: FormatterOptions,\n ): Promise<Buffer | string>;\n}\n\nexport interface FormatterOptions {\n shopName?: string;\n\n companyName?: string;\n\n splitParams?: boolean;\n}\n\nexport enum Extension {\n CSV = \"csv\",\n YML = \"yml\",\n XLSX = \"xlsx\",\n}\n","import { json2csv } from \"json-2-csv\";\n\nimport { type Category, type Product } from \"../types\";\nimport { UTILS } from \"../util/formatter.util\";\nimport {\n Extension,\n type FormatterAbstract,\n type FormatterOptions,\n} from \"./formater.types\";\n\nexport class CSVFormatter implements FormatterAbstract {\n public formatterName = \"CSV\";\n public fileExtension = Extension.CSV;\n\n public async format(\n products: Product[],\n categories?: Category[],\n options?: FormatterOptions,\n ): Promise<string> {\n const mappedCategories: Record<number, string> = {};\n categories?.forEach(({ id, name }) => (mappedCategories[id] = name));\n\n const data = products.map((product) => ({\n ...product,\n category: mappedCategories[product.categoryId],\n images: product.images?.join(\",\"),\n videos: product.videos?.join(\",\"),\n tags: product.tags?.join(\",\"),\n codesTN: product.codesTN?.join(\", \"),\n params: product.params\n ?.map(({ key, value }) => `${key}=${value}`)\n .join(\",\"),\n ...UTILS.getParams(product, options),\n ...UTILS.getProperties(product, options),\n ...UTILS.getSizes(product, options),\n sizes: undefined,\n keywords: product.keywords?.join(\",\"),\n relatedProducts: product.relatedProducts?.join(\",\"),\n }));\n return json2csv(data, { emptyFieldValue: \"\" });\n }\n}\n","import xlsx from \"xlsx\";\n\nimport { type Category, type Product } from \"../types\";\nimport { UTILS } from \"../util/formatter.util\";\nimport {\n Extension,\n type FormatterAbstract,\n type FormatterOptions,\n} from \"./formater.types\";\nconst { writeXLSX, utils } = xlsx;\n\nexport class ExcelFormatter implements FormatterAbstract {\n public formatterName = \"Excel\";\n public fileExtension = Extension.XLSX;\n\n public async format(\n products: Product[],\n categories?: Category[],\n options?: FormatterOptions,\n ): Promise<Buffer> {\n const mappedCategories: Record<number, string> = {};\n categories?.forEach(({ id, name }) => (mappedCategories[id] = name));\n\n const data = products.map((product) => ({\n ...product,\n category: mappedCategories[product.categoryId],\n images: product.images?.join(\",\"),\n videos: product.videos?.join(\",\"),\n tags: product.tags?.join(\",\"),\n keywords: product.keywords?.join(\",\"),\n relatedProducts: product.relatedProducts?.join(\",\"),\n codesTN: product.codesTN?.join(\", \"),\n params: product.params\n ?.map(({ key, value }) => `${key}=${value}`)\n .join(\",\"),\n sizes: undefined,\n ...UTILS.getParams(product, options),\n ...UTILS.getProperties(product, options),\n ...UTILS.getSizes(product, options),\n }));\n const workBook = utils.book_new();\n const productsWorkSheet = utils.json_to_sheet(data);\n\n utils.book_append_sheet(workBook, productsWorkSheet, \"products\");\n return writeXLSX(workBook, { type: \"buffer\" });\n }\n}\n","import xlsx from \"xlsx\";\n\nimport { type Category, type Product } from \"../types\";\nimport {\n Extension,\n type FormatterAbstract,\n type FormatterOptions,\n} from \"./formater.types\";\n\nexport class InsalesFormatter implements FormatterAbstract {\n public formatterName = \"Insales\";\n public fileExtension = Extension.XLSX;\n\n public async format(\n products: Product[],\n categories?: Category[],\n _?: FormatterOptions,\n ): Promise<Buffer> {\n const mappedCategories: Record<number, Category> = {};\n categories?.forEach(\n (category) => (mappedCategories[category.id] = category),\n );\n\n const getParams = (product: Product): Record<string, string> => {\n const properties: Record<string, string> = {};\n\n product.params?.forEach(\n (p) => (properties[`Свойство: ${p.key}`] = p.value),\n );\n\n return properties;\n };\n const getProperties = (product: Product): Record<string, string> => {\n const properties: Record<string, string> = {};\n\n product.properties?.forEach(\n (p) => (properties[`Параметр: ${p.key}`] = p.value),\n );\n\n return properties;\n };\n\n const getSizes = (product: Product): Record<string, string> => {\n const sizes: Record<string, string> = {};\n\n product.sizes?.forEach(\n ({ name, value }) => (sizes[`Размеры [${name}]:`] = value),\n );\n\n return sizes;\n };\n\n const getCategories = (product: Product) => {\n const categories: Record<string, string> = {};\n const categoryList = new Array<string>();\n\n function addCategory(categoryId: number | undefined) {\n if (categoryId === undefined) return;\n\n const category = mappedCategories[categoryId];\n if (category) {\n categoryList.push(category.name);\n addCategory(category.parentId);\n }\n }\n\n addCategory(product.categoryId);\n\n categoryList.forEach((name, i) => {\n const index = categoryList.length - 1 - i;\n const key = index === 0 ? \"Корневая\" : `Подкатегория ${index}`;\n categories[key] = name;\n });\n\n return categories;\n };\n\n const data = products.map((product) => ({\n \"Внешний ID\": product.productId,\n Артикул: product.vendorCode,\n \"Название товара или услуги\": product.title,\n \"Старая цена\": product.oldPrice,\n \"Цена продажи\": product.price,\n \"Цена закупки\": product.purchasePrice,\n ...getCategories(product),\n Остаток: product.count,\n \"Штрих-код\": product.barcode,\n \"Краткое описание\": undefined,\n \"Полное описание\": product.description,\n \"Габариты варианта\": product.dimensions,\n Вес: product.weight,\n \"Размещение на сайте\": product.available,\n НДС: product.vat.toString(),\n \"Валюта склада\": product.currency.toString(),\n \"Изображения варианта\": product.images?.join(\" \"),\n Изображения: product.images?.join(\" \"),\n \"Ссылка на видео\": product.videos ? product.videos[0] : undefined,\n ...getParams(product),\n ...getProperties(product),\n \"Параметр: Бренд\": product.vendor,\n \"Параметр: Коллекция\": product.seriesName,\n \"Параметр: Пол\": product.gender,\n \"Параметр: Дата выхода\": product.saleDate,\n ...getSizes(product),\n \"Связанные товары\": product.relatedProducts?.join(\",\"),\n }));\n const workBook = xlsx.utils.book_new();\n const productsWorkSheet = xlsx.utils.json_to_sheet(data);\n\n xlsx.utils.book_append_sheet(workBook, productsWorkSheet, \"products\");\n\n return xlsx.write(workBook, { bookType: \"xlsx\", type: \"buffer\" });\n }\n}\n","import xlsx from \"xlsx\";\n\nimport { type Category, type IParam, type Product } from \"../types\";\nimport {\n Extension,\n type FormatterAbstract,\n type FormatterOptions,\n} from \"./formater.types\";\n\nexport class TgShopFormatter implements FormatterAbstract {\n public formatterName = \"TgShop\";\n public fileExtension = Extension.XLSX;\n\n public async format(\n products: Product[],\n categories?: Category[],\n _?: FormatterOptions,\n ): Promise<Buffer> {\n const getParameter = (product: Product, key: string): IParam | undefined =>\n product.params?.find((value) => value.key === key);\n const productsData = products.map((product) => ({\n \"category id\": product.categoryId,\n \"group id\": product.parentId,\n \"id product\": product.variantId,\n \"name product\": product.title,\n price: product.price,\n picture: product.images?.join(\", \"),\n vendorCode: product.vendorCode,\n oldprice: product.oldPrice,\n description: product.description,\n shortDescription: product.description,\n quantityInStock: product.count,\n color: getParameter(product, \"color\")?.value,\n size: getParameter(product, \"size\")?.value,\n priority: undefined,\n }));\n\n const workBook = xlsx.utils.book_new();\n const productsWorkSheet = xlsx.utils.json_to_sheet(productsData);\n const categoriesWorkSheet = xlsx.utils.json_to_sheet(categories ?? []);\n\n xlsx.utils.book_append_sheet(workBook, categoriesWorkSheet, \"categories\");\n xlsx.utils.book_append_sheet(workBook, productsWorkSheet, \"offers\");\n\n return xlsx.write(workBook, { bookType: \"xlsx\", type: \"buffer\" });\n }\n}\n","import { json2csv } from \"json-2-csv\";\n\nimport { type Category, type Product } from \"../types\";\nimport {\n Extension,\n type FormatterAbstract,\n type FormatterOptions,\n} from \"./formater.types\";\n\nexport class TildaFormatter implements FormatterAbstract {\n public formatterName = \"Tilda\";\n public fileExtension = Extension.CSV;\n\n public async format(\n products: Product[],\n categories?: Category[],\n _?: FormatterOptions,\n ): Promise<string> {\n const mappedCategories: Record<number, string> = {};\n categories?.forEach(({ id, name }) => (mappedCategories[id] = name));\n\n const data = products.map((product) => ({\n SKU: product.vendorCode,\n Brand: product.vendor,\n Category: mappedCategories[product.categoryId],\n Title: product.title,\n Text: product.description,\n Photo: product.images?.join(\";\"),\n Price: product.price,\n \"Price Old\": product.oldPrice,\n Quantity: product.count,\n Editions: product.params\n ?.map(({ key, value }) => `${key}:${value}`)\n .join(\";\"),\n \"External ID\": product.variantId,\n \"Parent UID\": product.parentId,\n }));\n\n return json2csv(data, { emptyFieldValue: \"\", delimiter: { field: \";\" } });\n }\n}\n","import { XMLBuilder } from \"fast-xml-parser\";\n\nimport { type Product, type Category } from \"../types\";\nimport {\n Extension,\n type FormatterAbstract,\n type FormatterOptions,\n} from \"./formater.types\";\n\nexport class YMLFormatter implements FormatterAbstract {\n public formatterName = \"YMl\";\n public fileExtension = Extension.YML;\n private readonly builder = new XMLBuilder({\n ignoreAttributes: false,\n format: true,\n cdataPropName: \"__cdata\",\n });\n\n public async format(\n products: Product[],\n categories?: Category[],\n options?: FormatterOptions,\n ): Promise<string> {\n const mappedCategories = {\n category: categories?.map((cat) => ({\n \"@_id\": cat.id,\n \"@_parentId\": cat.parentId,\n \"#text\": cat.name,\n })),\n };\n const shopName = options?.shopName ?? \"ShopName\";\n const companyName = options?.companyName ?? \"CompanyName\";\n const offers = { offer: products.map(this.getOffers) };\n const result = {\n \"?xml\": {\n \"@_version\": \"1.0\",\n \"@_encoding\": \"UTF-8\",\n \"@_standalone\": \"yes\",\n },\n yml_catalog: {\n \"@_date\": new Date().toISOString().replace(/.\\d+Z/, \"\"),\n shop: {\n name: shopName,\n company: companyName,\n categories: mappedCategories,\n offers,\n },\n },\n };\n\n return this.builder.build(result);\n }\n\n private getOffers(product: Product): any {\n const result = {\n \"@_id\": product.variantId,\n name: product.title,\n price: product.price,\n oldprice: product.oldPrice,\n purchase_price: product.purchasePrice,\n additional_expenses: product.additionalExpenses,\n cofinance_price: product.cofinancePrice,\n currencyId: product.currency,\n categoryId: product.categoryId,\n vendor: product.vendor,\n vendorCode: product.vendorCode,\n picture: product.images,\n video: product.videos,\n available: product.available,\n series: product.seriesName,\n \"min-quantity\": product.minQuantity,\n \"step-quantity\": product.stepQuantity,\n size: product.sizes?.map((size) => ({\n \"#text\": size.value,\n \"@_name\": size.name,\n \"@_delimiter\": size.delimiter,\n })),\n keyword: product.keywords,\n saleDate: product.saleDate,\n property: product.properties?.map((property) => ({\n \"#text\": property.value,\n \"@_name\": property.key,\n })),\n param: product.params?.map((param) => ({\n \"#text\": param.value,\n \"@_name\": param.key,\n })),\n description: {\n __cdata: product.description,\n },\n country_of_origin: product.countryOfOrigin,\n barcode: product.barcode,\n vat: product.vat,\n count: product.count,\n \"set-ids\": product.tags?.join(\", \"),\n adult: product.adult,\n downloadable: product.downloadable,\n \"period-of-validity-days\": product.validityPeriod,\n \"comment-validity-days\": product.validityComment,\n \"service-life-days\": product.serviceLifePeriod,\n \"comment-life-days\": product.serviceLifeComment,\n \"warranty-days\": product.warrantyPeriod,\n \"comment-warranty\": product.warrantyComment,\n manufacturer_warranty: product.manufacturerWarranty,\n certificate: product.certificate,\n url: product.url,\n weight: product.weight,\n dimensions: product.dimensions,\n boxCount: product.boxCount,\n disabled: product.disabled,\n age: product.age != null && {\n \"@_unit\": product.age.unit,\n \"#text\": product.age.value,\n },\n \"tn-ved-codes\": product.codesTN?.length != null && {\n \"tn-ved-code\": product.codesTN,\n },\n relatedProduct: product.relatedProducts,\n gender: product.gender,\n };\n if (product.parentId !== undefined) {\n return {\n ...result,\n \"@_group_id\": product.parentId,\n };\n }\n return result;\n }\n}\n","import { CSVFormatter } from \"./CSV.formatter\";\nimport { ExcelFormatter } from \"./Excel.formatter\";\nimport { InsalesFormatter } from \"./Insales.formatter\";\nimport { TgShopFormatter } from \"./TgShop.formatter\";\nimport { TildaFormatter } from \"./Tilda.formatter\";\nimport { YMLFormatter } from \"./YML.formatter\";\n\nexport * from \"./formater.types\";\n\nexport const Formatters = {\n TildaFormatter,\n CSVFormatter,\n InsalesFormatter,\n YMLFormatter,\n TgShopFormatter,\n ExcelFormatter,\n};\n","import deepcopy from \"deepcopy\";\n\nimport {\n type FormatterAbstract,\n type FormatterOptions,\n Formatters,\n} from \"../formatter\";\nimport { type Category, type Product } from \"../types\";\nimport { type Exporter, type Transformer } from \"./exporter.types\";\n\nimport * as fs from \"fs\";\n\nexport class GoodsExporter {\n private formatter: FormatterAbstract = new Formatters.YMLFormatter();\n private exporter: Exporter = (data: Buffer) => {\n const filename = `${this.formatter.formatterName}.output.${this.formatter.fileExtension}`;\n fs.writeFileSync(filename, data);\n return data;\n };\n\n private transformers = new Array<Transformer>();\n\n public setTransformers(transformers: Transformer[]): void {\n this.transformers = transformers;\n }\n\n public setFormatter(formatter: FormatterAbstract): void {\n this.formatter = formatter;\n }\n\n public setExporter(exporter: Exporter): void {\n this.exporter = exporter;\n }\n\n async export(\n products: Product[],\n categories?: Category[],\n option?: FormatterOptions,\n ): Promise<Buffer> {\n const copyProducts = deepcopy(products);\n const transformedProducts = await Promise.all(\n copyProducts.map(async (product) => {\n let transformedProduct: Product = product;\n for (const transformer of this.transformers)\n transformedProduct = await transformer(transformedProduct);\n return transformedProduct;\n }),\n );\n const data = await this.formatter.format(\n transformedProducts,\n categories,\n option,\n );\n\n if (typeof data === \"string\") {\n return await this.exporter(Buffer.from(data, \"utf-8\"));\n }\n return await this.exporter(data);\n }\n}\n","export interface Product {\n /**\n * **ID товара**\n *\n * Любая последовательность длиной до 80 знаков. В нее могут входить английские и русские (кроме ё) буквы, цифры и символы . , / \\ ( ) [ ] - = _\n *\n * Пример: belaya-kofta-12345\n */\n productId: number;\n /**\n * **Родительскй SKU**\n *\n * Любая последовательность длиной до 80 знаков. В нее могут входить английские и русские (кроме ё) буквы, цифры и символы . , / \\ ( ) [ ] - = _\n *\n * Пример: belaya-kofta-12345\n */\n parentId?: number;\n /**\n * **SKU**\n *\n * Любая последовательность длиной до 80 знаков. В нее могут входить английские и русские (кроме ё) буквы, цифры и символы . , / \\ ( ) [ ] - = _\n *\n * Пример: belaya-kofta-12345\n */\n variantId: number;\n /**\n * **Название**\n *\n * Составляйте название по схеме: тип + бренд или производитель + модель + особенности, если есть (например, цвет, размер или вес) и количество в упаковке.\n *\n * Не включайте в название условия продажи (например, «скидка», «бесплатная доставка» и т. д.), эмоциональные характеристики («хит», «супер» и т. д.). Не пишите слова большими буквами — кроме устоявшихся названий брендов и моделей.\n *\n * Оптимальная длина — 50–60 символов, максимальная — 150.\n *\n * Составлять хорошие названия помогут [рекомендации](https://yandex.ru/support/marketplace/assortment/fields/title.html).\n *\n * Пример: Ударная дрель Makita HP1630, 710 Вт\n */\n title: string;\n /**\n * **Описание**\n *\n * Подробное описание товара: например, его преимущества и особенности.\n *\n * Не давайте в описании инструкций по установке и сборке. Не используйте слова «скидка», «распродажа», «дешевый», «подарок» (кроме подарочных категорий), «бесплатно», «акция», «специальная цена», «новинка», «new», «аналог», «заказ», «хит». Не указывайте никакой контактной информации и не давайте ссылок.\n *\n * Можно использовать теги:\n *\n ** <h>, <h1>, <h2> и так далее — для заголовков;\n ** <br> и <p> — для переноса строки;\n ** <ol> — для нумерованного списка;\n ** <ul> — для маркированного списка;\n ** <li> — для создания элементов списка (должен находиться внутри <ol> или <ul>);\n ** <div> — поддерживается, но не влияет на отображение текста.\n * Оптимальная длина — 400–600 символов, максимальная — 6000.\n *\n * Составить хорошее описание помогут рекомендации.\n *\n * Пример: В комплекте с детским микроскопом есть все, что нужно вашему ребенку для изучения микромира\n */\n description: string;\n /**\n * **Бренд**\n *\n * Название бренда или производителя.\n *\n * Записывайте название так, как его пишет сам бренд.\n *\n * Пример: LEVENHUK\n */\n vendor?: string;\n /**\n * **Артикул производителя**\n *\n * Код товара, который ему присвоил производитель.\n *\n * Если артикулов несколько, укажите их через запятую.\n *\n * Пример: VNDR-0005A, VNDR-0005B\n */\n vendorCode?: string;\n /**\n * **Дата выхода**\n *\n * Пример: 01.01.2000\n */\n saleDate?: string;\n /**\n * **Категория в магазине**\n *\n * Категория, к которой вы относите товар. Она помогает точнее определить для товара категорию на Маркете.\n *\n * Указывайте конкретные категории — например, набор ножей лучше отнести к категории Столовые приборы, а не просто Посуда.\n *\n * Выбирайте категории, которые описывают товар, а не абстрактный признак — например, лучше указать Духи, а не Подарки.\n *\n * Содержит номер категории, а не ее название.\n */\n categoryId: number;\n /**\n * **Страна производства**\n *\n * Страна, где был произведен товар.\n *\n * Записывайте названия стран так, как они записаны в [списке](https://yastatic.net/s3/doc-binary/src/support/market/ru/countries.xlsx).\n *\n * Пример: Россия\n */\n countryOfOrigin?: string;\n /**\n * **Изображение**\n *\n * До двадцати изображений, которые показываются на карточке товара.\n *\n * Принимаются jpg- или png-изображения товара, соответствующие [требованиям](https://yandex.ru/support/marketplace/assortment/fields/images.html).\n *\n * В кабинете изображения добавляются в виде файлов. В Excel-файле — в виде ссылок через запятую. Первое фото становится основным.\n *\n * Чтобы изменить изображение, выложите новое по новой ссылке, иначе картинка не обновится.\n */\n images?: string[];\n /**\n * **Видео**\n *\n * Видеоиллюстрации для карточки товара.\n *\n * Видео должно соответствовать [требованиям](https://yandex.ru/support/marketplace/assortment/fields/video.html).\n *\n * Можно добавить не больше 6 видео.\n *\n * В кабинете можно загрузить видеофайлы. В Excel-шаблоне укажите ссылки на файлы.\n */\n videos?: string[];\n /**\n * **Базовая цена**\n *\n * Цена указывается в рублях. Число должно быть целым.\n *\n * Пример:\n *\n * 240\n */\n price: number;\n /**\n * **Цена до скидки**\n *\n * Цена указывается в рублях. Число должно быть целым.\n *\n * Вы можете указать цену со скидкой от 5 до 75 %.\n *\n * Пример:\n *\n * 250\n */\n oldPrice?: number;\n /**\n * **Себестоимость**\n *\n * Цена указывается в рублях. Число должно быть целым.\n *\n * Пример:\n *\n * 200\n */\n purchasePrice?: number;\n /**\n * **Дополнительные расходы**\n *\n * Дополнительные расходы на товар. Например, на доставку или упаковку.\n *\n * После заполнения этого поля в калькуляторе и на странице управления ценами рассчитается потенциальная маржинальность товара.\n *\n * Цена указывается в рублях. Число должно быть целым.\n *\n * Пример:\n *\n * 75\n */\n additionalExpenses?: number;\n /**\n * **Порог для скидок с Маркетом**\n *\n * Цена указывается в рублях. Число должно быть целым.\n *\n * Пример:\n *\n * 300\n */\n cofinancePrice?: number;\n /**\n * **Валюта (DBS)**\n *\n * Валюта, в которой указана цена товара. Покупателям Маркет показывает цену в рублях, пересчитывая ее по курсу Центробанка.\n *\n * Поле используется, если для кабинета еще не включена работа с базовыми ценами.\n *\n * Поддерживаются российские и белорусские рубли, евро, доллары, украинские гривны и казахстанские тенге.\n *\n * В кабинете валюту можно просто выбрать из списка. В Excel-файле указывается код валюты: RUR, BYN, EUR, USD, UAN, KZT.\n */\n currency: Currency;\n /**\n * **Ссылка на страницу товара**\n *\n * Адрес страницы на вашем сайте с фотографиями и описанием товара.\n *\n * Максимальная длина URL — 512 символов. Записывайте его согласно стандарту RFC 3986.\n *\n * Пример: http://best.seller.ru/product_page.asp?pid=12346\n */\n url?: string;\n /**\n * **Убрать из продажи**\n *\n * Поле позволяет приостановить продажу товара.\n *\n * Укажите значение true, если нужно приостановить продажу.\n */\n disabled?: boolean;\n /**\n * **Доступное количество товара**\n *\n * Общее количество товара, доступное для продажи\n *\n * Укажите 0, если товара нет в наличии.\n *\n * Пример: 7\n */\n count?: number;\n /**\n * **Товар в наличии (DBS)**\n *\n * Поле указывает, есть ли товар в наличии.\n */\n available?: boolean;\n /**\n * **Минимальное количество товара**\n *\n * Если значение задано, покупатель не сможет заказать меньше единиц товара. Ограничение не работает, когда товара на складе осталось меньше этого количества — тогда покупатель сможет сделать заказ на остаток.\n *\n * Целое число.\n */\n minQuantity?: number;\n /**\n * **Квант продажи**\n *\n * Если значение задано, покупатель сможет добавить к заказу только кратное количество товара. Ограничение не работает, когда на складе осталось меньше этого количества — тогда покупатель сможет сделать заказ на остаток.\n *\n * Целое число.\n */\n stepQuantity?: number;\n /**\n * **Штрихкод**\n *\n * Указывайте в виде последовательности символов. Подойдут коды EAN-13, EAN-8, UPC-A, UPC-E или Code 128.\n *\n * Для книг указывайте ISBN.\n *\n * Для товаров [определенных категорий и торговых марок](https://yastatic.net/s3/doc-binary/src/support/market/ru/yandex-market-list-for-gtin.xlsx) штрихкод должен быть действительным кодом GTIN. Обратите внимание: внутренние штрихкоды, начинающиеся на 2 или 02, и коды формата Code 128 не являются GTIN.\n *\n * Если штрихкодов несколько, напишите все через запятую.\n *\n * Пример: 46012300000000\n */\n barcode?: string;\n /**\n * **Код ТН ВЭД**\n *\n * Для некоторых категорий товаров код ТН ВЭД обязателен. Если это касается ваших товаров, вы получите уведомление в каталоге.\n *\n * 10 или 14 цифр без пробелов.\n *\n * Пример: 8517610008\n */\n codesTN?: string[];\n /**\n * **С какого возраста пользоваться**\n *\n * Если товар не предназначен для детей младше определенного возраста, укажите это.\n *\n * Возрастные ограничения можно задавать в годах (с нуля, с 6, 12, 16 или 18) или в месяцах (любое число от 0 до 12).\n */\n age?: { unit: \"year\" | \"month\"; value: number };\n /**\n * **Вес с упаковкой**\n *\n * Вес товара с упаковкой.\n *\n * Единица измерения — килограммы. Можно дроби: разделитель — точка или запятая, не больше трех цифр после него.\n *\n * Пример: 3.1\n */\n weight?: number;\n /**\n * **Габариты с упаковкой**\n *\n * Длина, ширина, высота в упаковке.\n *\n * Единица измерения — сантиметры. Можно дроби: разделитель — точка или запятая, не больше трех цифр после него.\n *\n * Пример: 20.1/20.551/22.5\n */\n dimensions?: string;\n /**\n * **Товар занимает больше одного места**\n *\n * Если товар занимает одно место (представляет собой одну коробку, упаковку и так далее), оставьте поле пустым. Если товар занимает несколько мест — укажите их количество. Например, кондиционер занимает два места — внешний и внутренний блоки в двух коробках.\n *\n * Укажите количество мест.\n *\n * Пример: 2\n */\n boxCount?: number;\n /**\n * **Ставка НДС**\n *\n * Значение ставки НДС для товара.\n *\n * Выберите одно из значений:\n *\n ** НДС не облагается — 6 или NO_VAT\n *\n ** 0 % — 5 или VAT_0\n *\n ** 10 % — 2 или VAT_10\n *\n ** 20 % — 7 или VAT_20\n *\n * Если не заполнено, Маркет устанавливает ставку, соответствующую схеме налогообложения.\n *\n * Пример: VAT_20\n */\n vat: Vat;\n /**\n * **Характеристики, которые есть только у товаров конкретной категории**\n *\n * Кроме общих свойств, у товара есть характеристики, присущие конкретной категории, к которой он относится. Например, у велосипеда есть размер рамы, а детское пюре бывает овощное, мясное или фруктовое.\n */\n params?: IParam[];\n /**\n * **Свойства товара**\n *\n * *не YML поле\n */\n properties?: IParam[];\n /**\n * **Теги**\n *\n * Придумайте любое название — его можно будет изменить после.\n *\n * Максимальная длина тега — 20 символов.\n *\n * У одного товара — максимум 10 тегов.\n *\n * Всего можно создать не больше 50 разных тегов.\n *\n * Пример: apple, до 500 рублей\n */\n tags?: string[];\n /**\n * **Товар для взрослых**\n *\n * Параметр включает для товара пометку 18+. Устанавливайте ее только для товаров, которые относятся к удовлетворению сексуальных потребностей.\n */\n adult?: boolean;\n /**\n * **Цифровой товар**\n *\n * Параметр, устанавливаемый для цифровых товаров, которые просто скачиваются.\n */\n downloadable?: boolean;\n /**\n * **Срок годности**\n *\n * Период с момента изготовления, по прошествии которого товар становится непригоден.\n *\n * Указывайте срок, указанный на банке или упаковке. Текущая дата, дата поставки или дата отгрузки значения не имеет.\n *\n * Срок можно указывать в годах, месяцах, днях, неделях и часах.\n *\n * Обязательно указывайте срок, если он есть.\n *\n * Продолжительность указывается согласно ISO 8601, то есть в виде строчки, начинающейся буквой P:\n *\n ** P1Y — 1 год;\n ** P1Y6M — 1 год и 6 месяцев;\n ** P15D — 15 дней.\n */\n validityPeriod?: string;\n /**\n * **Комментарий к сроку годности**\n *\n * Поле предназначено для описаний условий хранения.\n *\n * Не длиннее 250 знаков и без спецсимволов.\n *\n * Пример: Хранить в сухом помещении\n */\n validityComment?: string;\n /**\n * **Срок службы**\n *\n * В течение срока службы товар должен исправно выполнять свою функцию.\n *\n * Обязательно указывайте срок, если он есть.\n *\n * Срок можно указывать в годах, месяцах и днях.\n * Продолжительность указывается согласно ISO 8601, то есть в виде строчки, начинающейся буквой P:\n *\n ** P1Y — 1 год;\n ** P1Y2M — 1 год и 2 месяца;\n ** P15D — 15 дней;\n ** P2Y10D — 2 года, 10 дней;\n ** P2Y6M10D — 2 года, 6 месяцев и 10 дней.\n */\n serviceLifePeriod?: string;\n /**\n * **Комментарий к сроку службы**\n *\n * Поле предназначено для описаний условий использования.\n *\n * Не длиннее 250 знаков и без спецсимволов.\n *\n * Пример: Использовать при температуре не ниже −10 градусов\n */\n serviceLifeComment?: string;\n /**\n * **Гарантийный срок**\n *\n * В течение какого времени можно бесплатно заменить или починить товар.\n *\n * Срок можно указывать в годах, месяцах или днях.\n *\n * Продолжительность указывается согласно ISO 8601, то есть в виде строчки, начинающейся буквой P:\n *\n ** P1Y — 1 год;\n ** P1Y2M — 1 год и 2 месяца;\n ** P15D — 15 дней;\n ** P2Y10D — 2 года, 10 дней;\n ** P2Y6M10D — 2 года, 6 месяцев и 10 дней.\n */\n warrantyPeriod?: string;\n /**\n * **Комментарий к гарантийному сроку**\n *\n * Поле предназначено для описания особенностей гарантийных условий.\n *\n * Указывайте только то, что относится к гарантии изготовителя.\n *\n * Не длиннее 250 знаков и без спецсимволов.\n *\n * Пример: Гарантия на аккумулятор — 6 месяцев\n */\n warrantyComment?: string;\n /**\n * **Официальная гарантия производителя**\n */\n manufacturerWarranty?: boolean;\n /**\n * **Номер документа**\n *\n * Номер документа на товар: сертификата, декларации соответствия и т. п.\n *\n * Прежде чем указывать номер документа, загрузите скан документа через кабинет.\n *\n * Укажите номер документа.\n *\n * Пример: 6241421\n */\n certificate?: string;\n /**\n * **Ключевые слова**\n *\n * Пример: Кроссовки, высокая подошва\n */\n keywords?: string[];\n /**\n * **Размерная сетка**\n */\n sizes?: ISize[];\n /**\n * **Связанные товары**\n *\n * Указываются id товаров\n *\n * Пример: 1234\n */\n relatedProducts?: number[];\n /**\n * **Название коллекции, ряда или серии товара**\n *\n * Пример: Jordan 4\n */\n seriesName?: string;\n /**\n * **Пол или название группы потребителей**\n *\n * Пример: Дети, Женское, Унисекс\n */\n gender?: string;\n}\n\nexport enum Vat {\n NO_VAT = \"NO_VAT\",\n VAT_0 = \"VAT_0\",\n VAT_10 = \"VAT_10\",\n VAT_20 = \"VAT_20\",\n}\n\nexport enum Currency {\n RUR = \"RUR\",\n BYN = \"BYN\",\n EUR = \"EUR\",\n USD = \"USD\",\n UAN = \"UAN\",\n KZT = \"KZT\",\n}\n\nexport interface IParam {\n /**\n * **Название характеристики**\n */\n key: string;\n /**\n * **Значение**\n */\n value: string;\n}\n\nexport interface ISize {\n /**\n * **Название единицы измерения**\n */\n name: string;\n /**\n * **Разделитель**\n */\n delimiter: string;\n /**\n * **Значения размерного ряда**\n *\n * Размеры указываются через разделитель\n */\n value: string;\n}\n"],"names":["Extension","__publicField","json2csv","categories","XMLBuilder","fs","Vat","Currency"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../../src/util/formatter.util.ts","../../src/formatter/formater.types.ts","../../src/formatter/CSV.formatter.ts","../../src/formatter/Excel.formatter.ts","../../src/formatter/Insales.formatter.ts","../../src/formatter/JSON.formatter.ts","../../src/formatter/TgShop.formatter.ts","../../src/formatter/Tilda.formatter.ts","../../src/formatter/YML.formatter.ts","../../src/formatter/index.ts","../../src/exporter/goodsExporter.ts","../../src/types/Product.types.ts"],"sourcesContent":["import { type FormatterOptions } from \"../formatter\";\nimport { type Product } from \"../types\";\n\nconst getParams = (\n product: Product,\n option?: FormatterOptions,\n): Record<string, string> => {\n const params: Record<string, string> = {};\n\n if (option?.splitParams === false) {\n return params;\n }\n\n product.params?.forEach(\n ({ key, value }) => (params[`Param [${key}]`] = value),\n );\n return params;\n};\n\nconst getProperties = (\n product: Product,\n option?: FormatterOptions,\n): Record<string, string> => {\n const properties: Record<string, string> = {};\n\n if (option?.splitParams === false) {\n return properties;\n }\n\n product.properties?.forEach(\n ({ key, value }) => (properties[`Property [${key}]`] = value),\n );\n return properties;\n};\n\nconst getSizes = (\n product: Product,\n _?: FormatterOptions,\n): Record<string, string> => {\n const sizes: Record<string, string> = {};\n product.sizes?.forEach(\n ({ name, value }) => (sizes[`Size [${name}]`] = value),\n );\n return sizes;\n};\n\nexport const UTILS = {\n getSizes,\n getParams,\n getProperties,\n};\n","import { type Brand, type Category, type Product } from \"../types\";\n\nexport abstract class FormatterAbstract {\n public abstract formatterName: string;\n public abstract fileExtension: Extension;\n\n public abstract format(\n products: Product[],\n categories?: Category[],\n brands?: Brand[],\n option?: FormatterOptions,\n ): Promise<Buffer | string>;\n}\n\nexport interface FormatterOptions {\n shopName?: string;\n\n companyName?: string;\n\n splitParams?: boolean;\n}\n\nexport enum Extension {\n CSV = \"csv\",\n YML = \"yml\",\n XLSX = \"xlsx\",\n JSON = \"json\",\n}\n","import { json2csv } from \"json-2-csv\";\n\nimport { type Brand, type Category, type Product } from \"../types\";\nimport { UTILS } from \"../util/formatter.util\";\nimport {\n Extension,\n type FormatterAbstract,\n type FormatterOptions,\n} from \"./formater.types\";\n\nexport class CSVFormatter implements FormatterAbstract {\n public formatterName = \"CSV\";\n public fileExtension = Extension.CSV;\n\n public async format(\n products: Product[],\n categories?: Category[],\n _?: Brand[],\n options?: FormatterOptions,\n ): Promise<string> {\n const mappedCategories: Record<number, string> = {};\n categories?.forEach(({ id, name }) => (mappedCategories[id] = name));\n\n const data = products.map((product) => ({\n ...product,\n category: mappedCategories[product.categoryId],\n images: product.images?.join(\",\"),\n videos: product.videos?.join(\",\"),\n tags: product.tags?.join(\",\"),\n codesTN: product.codesTN?.join(\", \"),\n params: product.params\n ?.map(({ key, value }) => `${key}=${value}`)\n .join(\",\"),\n ...UTILS.getParams(product, options),\n ...UTILS.getProperties(product, options),\n ...UTILS.getSizes(product, options),\n sizes: undefined,\n keywords: product.keywords?.join(\",\"),\n relatedProducts: product.relatedProducts?.join(\",\"),\n }));\n return json2csv(data, { emptyFieldValue: \"\" });\n }\n}\n","import xlsx from \"xlsx\";\n\nimport { type Brand, type Category, type Product } from \"../types\";\nimport { UTILS } from \"../util/formatter.util\";\nimport {\n Extension,\n type FormatterAbstract,\n type FormatterOptions,\n} from \"./formater.types\";\nconst { writeXLSX, utils } = xlsx;\n\nexport class ExcelFormatter implements FormatterAbstract {\n public formatterName = \"Excel\";\n public fileExtension = Extension.XLSX;\n\n public async format(\n products: Product[],\n categories?: Category[],\n _?: Brand[],\n options?: FormatterOptions,\n ): Promise<Buffer> {\n const mappedCategories: Record<number, string> = {};\n categories?.forEach(({ id, name }) => (mappedCategories[id] = name));\n\n const data = products.map((product) => ({\n ...product,\n category: mappedCategories[product.categoryId],\n images: product.images?.join(\",\"),\n videos: product.videos?.join(\",\"),\n tags: product.tags?.join(\",\"),\n keywords: product.keywords?.join(\",\"),\n relatedProducts: product.relatedProducts?.join(\",\"),\n codesTN: product.codesTN?.join(\", \"),\n params: product.params\n ?.map(({ key, value }) => `${key}=${value}`)\n .join(\",\"),\n sizes: undefined,\n ...UTILS.getParams(product, options),\n ...UTILS.getProperties(product, options),\n ...UTILS.getSizes(product, options),\n }));\n const workBook = utils.book_new();\n const productsWorkSheet = utils.json_to_sheet(data);\n\n utils.book_append_sheet(workBook, productsWorkSheet, \"products\");\n return writeXLSX(workBook, { type: \"buffer\" });\n }\n}\n","import xlsx from \"xlsx\";\n\nimport { type Brand, type Category, type Product } from \"../types\";\nimport {\n Extension,\n type FormatterAbstract,\n type FormatterOptions,\n} from \"./formater.types\";\n\nexport class InsalesFormatter implements FormatterAbstract {\n public formatterName = \"Insales\";\n public fileExtension = Extension.XLSX;\n\n public async format(\n products: Product[],\n categories?: Category[],\n _?: Brand[],\n __?: FormatterOptions,\n ): Promise<Buffer> {\n const mappedCategories: Record<number, Category> = {};\n categories?.forEach(\n (category) => (mappedCategories[category.id] = category),\n );\n\n const getParams = (product: Product): Record<string, string> => {\n const properties: Record<string, string> = {};\n\n product.params?.forEach(\n (p) => (properties[`Свойство: ${p.key}`] = p.value),\n );\n\n return properties;\n };\n const getProperties = (product: Product): Record<string, string> => {\n const properties: Record<string, string> = {};\n\n product.properties?.forEach(\n (p) => (properties[`Параметр: ${p.key}`] = p.value),\n );\n\n return properties;\n };\n\n const getSizes = (product: Product): Record<string, string> => {\n const sizes: Record<string, string> = {};\n\n product.sizes?.forEach(\n ({ name, value }) => (sizes[`Размеры [${name}]:`] = value),\n );\n\n return sizes;\n };\n\n const getCategories = (product: Product) => {\n const categories: Record<string, string> = {};\n const categoryList = new Array<string>();\n\n function addCategory(categoryId: number | undefined) {\n if (categoryId === undefined) return;\n\n const category = mappedCategories[categoryId];\n if (category) {\n categoryList.push(category.name);\n addCategory(category.parentId);\n }\n }\n\n addCategory(product.categoryId);\n\n categoryList.forEach((name, i) => {\n const index = categoryList.length - 1 - i;\n const key = index === 0 ? \"Корневая\" : `Подкатегория ${index}`;\n categories[key] = name;\n });\n\n return categories;\n };\n\n const data = products.map((product) => ({\n \"Внешний ID\": product.productId,\n Артикул: product.vendorCode,\n \"Название товара или услуги\": product.title,\n \"Старая цена\": product.oldPrice,\n \"Цена продажи\": product.price,\n \"Цена закупки\": product.purchasePrice,\n ...getCategories(product),\n Остаток: product.count,\n \"Штрих-код\": product.barcode,\n \"Краткое описание\": undefined,\n \"Полное описание\": product.description,\n \"Габариты варианта\": product.dimensions,\n Вес: product.weight,\n \"Размещение на сайте\": product.available,\n НДС: product.vat.toString(),\n \"Валюта склада\": product.currency.toString(),\n \"Изображения варианта\": product.images?.join(\" \"),\n Изображения: product.images?.join(\" \"),\n \"Ссылка на видео\": product.videos ? product.videos[0] : undefined,\n ...getParams(product),\n ...getProperties(product),\n \"Параметр: Бренд\": product.vendor,\n \"Параметр: Коллекция\": product.seriesName,\n \"Параметр: Пол\": product.gender,\n \"Параметр: Дата выхода\": product.saleDate,\n ...getSizes(product),\n \"Связанные товары\": product.relatedProducts?.join(\",\"),\n }));\n const workBook = xlsx.utils.book_new();\n const productsWorkSheet = xlsx.utils.json_to_sheet(data);\n\n xlsx.utils.book_append_sheet(workBook, productsWorkSheet, \"products\");\n\n return xlsx.write(workBook, { bookType: \"xlsx\", type: \"buffer\" });\n }\n}\n","import { type Product, type Category, type Brand } from \"../types\";\nimport {\n Extension,\n type FormatterAbstract,\n type FormatterOptions,\n} from \"./formater.types\";\n\nexport class JSONFormatter implements FormatterAbstract {\n public formatterName = \"JSON\";\n public fileExtension = Extension.JSON;\n\n public async format(\n products: Product[],\n categories?: Category[],\n brands?: Brand[],\n _?: FormatterOptions,\n ): Promise<string> {\n const result = {\n categories,\n brands,\n products,\n };\n\n return JSON.stringify(result);\n }\n}\n","import xlsx from \"xlsx\";\n\nimport { type Brand, type Category, type IParam, type Product } from \"../types\";\nimport {\n Extension,\n type FormatterAbstract,\n type FormatterOptions,\n} from \"./formater.types\";\n\nexport class TgShopFormatter implements FormatterAbstract {\n public formatterName = \"TgShop\";\n public fileExtension = Extension.XLSX;\n\n public async format(\n products: Product[],\n categories?: Category[],\n _?: Brand[],\n __?: FormatterOptions,\n ): Promise<Buffer> {\n const getParameter = (product: Product, key: string): IParam | undefined =>\n product.params?.find((value) => value.key === key);\n const productsData = products.map((product) => ({\n \"category id\": product.categoryId,\n \"group id\": product.parentId,\n \"id product\": product.variantId,\n \"name product\": product.title,\n price: product.price,\n picture: product.images?.join(\", \"),\n vendorCode: product.vendorCode,\n oldprice: product.oldPrice,\n description: product.description,\n shortDescription: product.description,\n quantityInStock: product.count,\n color: getParameter(product, \"color\")?.value,\n size: getParameter(product, \"size\")?.value,\n priority: undefined,\n }));\n\n const workBook = xlsx.utils.book_new();\n const productsWorkSheet = xlsx.utils.json_to_sheet(productsData);\n const categoriesWorkSheet = xlsx.utils.json_to_sheet(categories ?? []);\n\n xlsx.utils.book_append_sheet(workBook, categoriesWorkSheet, \"categories\");\n xlsx.utils.book_append_sheet(workBook, productsWorkSheet, \"offers\");\n\n return xlsx.write(workBook, { bookType: \"xlsx\", type: \"buffer\" });\n }\n}\n","import { json2csv } from \"json-2-csv\";\n\nimport { type Brand, type Category, type Product } from \"../types\";\nimport {\n Extension,\n type FormatterAbstract,\n type FormatterOptions,\n} from \"./formater.types\";\n\nexport class TildaFormatter implements FormatterAbstract {\n public formatterName = \"Tilda\";\n public fileExtension = Extension.CSV;\n\n public async format(\n products: Product[],\n categories?: Category[],\n _?: Brand[],\n __?: FormatterOptions,\n ): Promise<string> {\n const mappedCategories: Record<number, string> = {};\n categories?.forEach(({ id, name }) => (mappedCategories[id] = name));\n\n const data = products.map((product) => ({\n SKU: product.vendorCode,\n Brand: product.vendor,\n Category: mappedCategories[product.categoryId],\n Title: product.title,\n Text: product.description,\n Photo: product.images?.join(\";\"),\n Price: product.price,\n \"Price Old\": product.oldPrice,\n Quantity: product.count,\n Editions: product.params\n ?.map(({ key, value }) => `${key}:${value}`)\n .join(\";\"),\n \"External ID\": product.variantId,\n \"Parent UID\": product.parentId,\n }));\n\n return json2csv(data, { emptyFieldValue: \"\", delimiter: { field: \";\" } });\n }\n}\n","import { XMLBuilder } from \"fast-xml-parser\";\n\nimport { type Product, type Category, type Brand } from \"../types\";\nimport {\n Extension,\n type FormatterAbstract,\n type FormatterOptions,\n} from \"./formater.types\";\n\nexport class YMLFormatter implements FormatterAbstract {\n public formatterName = \"YMl\";\n public fileExtension = Extension.YML;\n private readonly builder = new XMLBuilder({\n ignoreAttributes: false,\n format: true,\n cdataPropName: \"__cdata\",\n });\n\n public async format(\n products: Product[],\n categories?: Category[],\n brands?: Brand[],\n options?: FormatterOptions,\n ): Promise<string> {\n const offers = { offer: products.map(this.getOffers) };\n const result = {\n \"?xml\": {\n \"@_version\": \"1.0\",\n \"@_encoding\": \"UTF-8\",\n \"@_standalone\": \"yes\",\n },\n yml_catalog: {\n \"@_date\": new Date().toISOString().replace(/.\\d+Z/, \"\"),\n shop: {\n name: options?.shopName,\n company: options?.companyName,\n categories: this.getCategories(categories),\n brands: this.getBrands(brands),\n offers,\n },\n },\n };\n\n return this.builder.build(result);\n }\n\n private getBrands(brands?: Brand[]) {\n return {\n category: brands?.map((brand) => ({\n \"@_id\": brand.id,\n \"@_url\": brand.coverURL,\n \"#text\": brand.name,\n })),\n };\n }\n\n private getCategories(categories?: Category[]) {\n return {\n category: categories?.map((cat) => ({\n \"@_id\": cat.id,\n \"@_parentId\": cat.parentId,\n \"#text\": cat.name,\n })),\n };\n }\n\n private getOffers(product: Product): any {\n const result = {\n \"@_id\": product.variantId,\n name: product.title,\n price: product.price,\n oldprice: product.oldPrice,\n purchase_price: product.purchasePrice,\n additional_expenses: product.additionalExpenses,\n cofinance_price: product.cofinancePrice,\n currencyId: product.currency,\n categoryId: product.categoryId,\n vendor: product.vendor,\n vendorCode: product.vendorCode,\n picture: product.images,\n video: product.videos,\n available: product.available,\n series: product.seriesName,\n \"min-quantity\": product.minQuantity,\n \"step-quantity\": product.stepQuantity,\n size: product.sizes?.map((size) => ({\n \"#text\": size.value,\n \"@_name\": size.name,\n \"@_delimiter\": size.delimiter,\n })),\n keyword: product.keywords,\n saleDate: product.saleDate,\n property: product.properties?.map((property) => ({\n \"#text\": property.value,\n \"@_name\": property.key,\n })),\n param: product.params?.map((param) => ({\n \"#text\": param.value,\n \"@_name\": param.key,\n })),\n description: {\n __cdata: product.description,\n },\n country_of_origin: product.countryOfOrigin,\n barcode: product.barcode,\n vat: product.vat,\n count: product.count,\n \"set-ids\": product.tags?.join(\", \"),\n adult: product.adult,\n downloadable: product.downloadable,\n \"period-of-validity-days\": product.validityPeriod,\n \"comment-validity-days\": product.validityComment,\n \"service-life-days\": product.serviceLifePeriod,\n \"comment-life-days\": product.serviceLifeComment,\n \"warranty-days\": product.warrantyPeriod,\n \"comment-warranty\": product.warrantyComment,\n manufacturer_warranty: product.manufacturerWarranty,\n certificate: product.certificate,\n url: product.url,\n weight: product.weight,\n dimensions: product.dimensions,\n boxCount: product.boxCount,\n disabled: product.disabled,\n age: product.age != null && {\n \"@_unit\": product.age.unit,\n \"#text\": product.age.value,\n },\n \"tn-ved-codes\": product.codesTN?.length != null && {\n \"tn-ved-code\": product.codesTN,\n },\n relatedProduct: product.relatedProducts,\n gender: product.gender,\n };\n if (product.parentId !== undefined) {\n return {\n ...result,\n \"@_group_id\": product.parentId,\n };\n }\n return result;\n }\n}\n","import { CSVFormatter } from \"./CSV.formatter\";\nimport { ExcelFormatter } from \"./Excel.formatter\";\nimport { InsalesFormatter } from \"./Insales.formatter\";\nimport { JSONFormatter } from \"./JSON.formatter\";\nimport { TgShopFormatter } from \"./TgShop.formatter\";\nimport { TildaFormatter } from \"./Tilda.formatter\";\nimport { YMLFormatter } from \"./YML.formatter\";\n\nexport * from \"./formater.types\";\n\nexport const Formatters = {\n TildaFormatter,\n CSVFormatter,\n InsalesFormatter,\n YMLFormatter,\n TgShopFormatter,\n ExcelFormatter,\n JSONFormatter,\n};\n","import deepcopy from \"deepcopy\";\n\nimport {\n type FormatterAbstract,\n type FormatterOptions,\n Formatters,\n} from \"../formatter\";\nimport { type Brand, type Category, type Product } from \"../types\";\nimport { type Exporter, type Transformer } from \"./exporter.types\";\n\nimport * as fs from \"fs\";\n\nexport class GoodsExporter {\n private formatter: FormatterAbstract = new Formatters.YMLFormatter();\n private exporter: Exporter = (data: Buffer) => {\n const filename = `${this.formatter.formatterName}.output.${this.formatter.fileExtension}`;\n fs.writeFileSync(filename, data);\n return data;\n };\n\n private transformers = new Array<Transformer>();\n\n public setTransformers(transformers: Transformer[]): void {\n this.transformers = transformers;\n }\n\n public setFormatter(formatter: FormatterAbstract): void {\n this.formatter = formatter;\n }\n\n public setExporter(exporter: Exporter): void {\n this.exporter = exporter;\n }\n\n async export(\n products: Product[],\n categories?: Category[],\n brands?: Brand[],\n option?: FormatterOptions,\n ): Promise<Buffer> {\n const copyProducts = deepcopy(products);\n const transformedProducts = await Promise.all(\n copyProducts.map(async (product) => {\n let transformedProduct: Product = product;\n for (const transformer of this.transformers)\n transformedProduct = await transformer(transformedProduct);\n return transformedProduct;\n }),\n );\n const data = await this.formatter.format(\n transformedProducts,\n categories,\n brands,\n option,\n );\n\n if (typeof data === \"string\") {\n return await this.exporter(Buffer.from(data, \"utf-8\"));\n }\n return await this.exporter(data);\n }\n}\n","export interface Product {\n /**\n * **ID товара**\n *\n * Любая последовательность длиной до 80 знаков. В нее могут входить английские и русские (кроме ё) буквы, цифры и символы . , / \\ ( ) [ ] - = _\n *\n * Пример: belaya-kofta-12345\n */\n productId: number;\n /**\n * **Родительскй SKU**\n *\n * Любая последовательность длиной до 80 знаков. В нее могут входить английские и русские (кроме ё) буквы, цифры и символы . , / \\ ( ) [ ] - = _\n *\n * Пример: belaya-kofta-12345\n */\n parentId?: number;\n /**\n * **SKU**\n *\n * Любая последовательность длиной до 80 знаков. В нее могут входить английские и русские (кроме ё) буквы, цифры и символы . , / \\ ( ) [ ] - = _\n *\n * Пример: belaya-kofta-12345\n */\n variantId: number;\n /**\n * **Название**\n *\n * Составляйте название по схеме: тип + бренд или производитель + модель + особенности, если есть (например, цвет, размер или вес) и количество в упаковке.\n *\n * Не включайте в название условия продажи (например, «скидка», «бесплатная доставка» и т. д.), эмоциональные характеристики («хит», «супер» и т. д.). Не пишите слова большими буквами — кроме устоявшихся названий брендов и моделей.\n *\n * Оптимальная длина — 50–60 символов, максимальная — 150.\n *\n * Составлять хорошие названия помогут [рекомендации](https://yandex.ru/support/marketplace/assortment/fields/title.html).\n *\n * Пример: Ударная дрель Makita HP1630, 710 Вт\n */\n title: string;\n /**\n * **Описание**\n *\n * Подробное описание товара: например, его преимущества и особенности.\n *\n * Не давайте в описании инструкций по установке и сборке. Не используйте слова «скидка», «распродажа», «дешевый», «подарок» (кроме подарочных категорий), «бесплатно», «акция», «специальная цена», «новинка», «new», «аналог», «заказ», «хит». Не указывайте никакой контактной информации и не давайте ссылок.\n *\n * Можно использовать теги:\n *\n ** <h>, <h1>, <h2> и так далее — для заголовков;\n ** <br> и <p> — для переноса строки;\n ** <ol> — для нумерованного списка;\n ** <ul> — для маркированного списка;\n ** <li> — для создания элементов списка (должен находиться внутри <ol> или <ul>);\n ** <div> — поддерживается, но не влияет на отображение текста.\n * Оптимальная длина — 400–600 символов, максимальная — 6000.\n *\n * Составить хорошее описание помогут рекомендации.\n *\n * Пример: В комплекте с детским микроскопом есть все, что нужно вашему ребенку для изучения микромира\n */\n description: string;\n /**\n * **Бренд**\n *\n * Название бренда или производителя.\n *\n * Записывайте название так, как его пишет сам бренд.\n *\n * Пример: LEVENHUK\n */\n vendor?: string;\n /**\n * **Артикул производителя**\n *\n * Код товара, который ему присвоил производитель.\n *\n * Если артикулов несколько, укажите их через запятую.\n *\n * Пример: VNDR-0005A, VNDR-0005B\n */\n vendorCode?: string;\n /**\n * **Дата выхода**\n *\n * Пример: 01.01.2000\n */\n saleDate?: string;\n /**\n * **Категория в магазине**\n *\n * Категория, к которой вы относите товар. Она помогает точнее определить для товара категорию на Маркете.\n *\n * Указывайте конкретные категории — например, набор ножей лучше отнести к категории Столовые приборы, а не просто Посуда.\n *\n * Выбирайте категории, которые описывают товар, а не абстрактный признак — например, лучше указать Духи, а не Подарки.\n *\n * Содержит номер категории, а не ее название.\n */\n categoryId: number;\n /**\n * **Страна производства**\n *\n * Страна, где был произведен товар.\n *\n * Записывайте названия стран так, как они записаны в [списке](https://yastatic.net/s3/doc-binary/src/support/market/ru/countries.xlsx).\n *\n * Пример: Россия\n */\n countryOfOrigin?: string;\n /**\n * **Изображение**\n *\n * До двадцати изображений, которые показываются на карточке товара.\n *\n * Принимаются jpg- или png-изображения товара, соответствующие [требованиям](https://yandex.ru/support/marketplace/assortment/fields/images.html).\n *\n * В кабинете изображения добавляются в виде файлов. В Excel-файле — в виде ссылок через запятую. Первое фото становится основным.\n *\n * Чтобы изменить изображение, выложите новое по новой ссылке, иначе картинка не обновится.\n */\n images?: string[];\n /**\n * **Видео**\n *\n * Видеоиллюстрации для карточки товара.\n *\n * Видео должно соответствовать [требованиям](https://yandex.ru/support/marketplace/assortment/fields/video.html).\n *\n * Можно добавить не больше 6 видео.\n *\n * В кабинете можно загрузить видеофайлы. В Excel-шаблоне укажите ссылки на файлы.\n */\n videos?: string[];\n /**\n * **Базовая цена**\n *\n * Цена указывается в рублях. Число должно быть целым.\n *\n * Пример:\n *\n * 240\n */\n price: number;\n /**\n * **Цена до скидки**\n *\n * Цена указывается в рублях. Число должно быть целым.\n *\n * Вы можете указать цену со скидкой от 5 до 75 %.\n *\n * Пример:\n *\n * 250\n */\n oldPrice?: number;\n /**\n * **Себестоимость**\n *\n * Цена указывается в рублях. Число должно быть целым.\n *\n * Пример:\n *\n * 200\n */\n purchasePrice?: number;\n /**\n * **Дополнительные расходы**\n *\n * Дополнительные расходы на товар. Например, на доставку или упаковку.\n *\n * После заполнения этого поля в калькуляторе и на странице управления ценами рассчитается потенциальная маржинальность товара.\n *\n * Цена указывается в рублях. Число должно быть целым.\n *\n * Пример:\n *\n * 75\n */\n additionalExpenses?: number;\n /**\n * **Порог для скидок с Маркетом**\n *\n * Цена указывается в рублях. Число должно быть целым.\n *\n * Пример:\n *\n * 300\n */\n cofinancePrice?: number;\n /**\n * **Валюта (DBS)**\n *\n * Валюта, в которой указана цена товара. Покупателям Маркет показывает цену в рублях, пересчитывая ее по курсу Центробанка.\n *\n * Поле используется, если для кабинета еще не включена работа с базовыми ценами.\n *\n * Поддерживаются российские и белорусские рубли, евро, доллары, украинские гривны и казахстанские тенге.\n *\n * В кабинете валюту можно просто выбрать из списка. В Excel-файле указывается код валюты: RUR, BYN, EUR, USD, UAN, KZT.\n */\n currency: Currency;\n /**\n * **Ссылка на страницу товара**\n *\n * Адрес страницы на вашем сайте с фотографиями и описанием товара.\n *\n * Максимальная длина URL — 512 символов. Записывайте его согласно стандарту RFC 3986.\n *\n * Пример: http://best.seller.ru/product_page.asp?pid=12346\n */\n url?: string;\n /**\n * **Убрать из продажи**\n *\n * Поле позволяет приостановить продажу товара.\n *\n * Укажите значение true, если нужно приостановить продажу.\n */\n disabled?: boolean;\n /**\n * **Доступное количество товара**\n *\n * Общее количество товара, доступное для продажи\n *\n * Укажите 0, если товара нет в наличии.\n *\n * Пример: 7\n */\n count?: number;\n /**\n * **Товар в наличии (DBS)**\n *\n * Поле указывает, есть ли товар в наличии.\n */\n available?: boolean;\n /**\n * **Минимальное количество товара**\n *\n * Если значение задано, покупатель не сможет заказать меньше единиц товара. Ограничение не работает, когда товара на складе осталось меньше этого количества — тогда покупатель сможет сделать заказ на остаток.\n *\n * Целое число.\n */\n minQuantity?: number;\n /**\n * **Квант продажи**\n *\n * Если значение задано, покупатель сможет добавить к заказу только кратное количество товара. Ограничение не работает, когда на складе осталось меньше этого количества — тогда покупатель сможет сделать заказ на остаток.\n *\n * Целое число.\n */\n stepQuantity?: number;\n /**\n * **Штрихкод**\n *\n * Указывайте в виде последовательности символов. Подойдут коды EAN-13, EAN-8, UPC-A, UPC-E или Code 128.\n *\n * Для книг указывайте ISBN.\n *\n * Для товаров [определенных категорий и торговых марок](https://yastatic.net/s3/doc-binary/src/support/market/ru/yandex-market-list-for-gtin.xlsx) штрихкод должен быть действительным кодом GTIN. Обратите внимание: внутренние штрихкоды, начинающиеся на 2 или 02, и коды формата Code 128 не являются GTIN.\n *\n * Если штрихкодов несколько, напишите все через запятую.\n *\n * Пример: 46012300000000\n */\n barcode?: string;\n /**\n * **Код ТН ВЭД**\n *\n * Для некоторых категорий товаров код ТН ВЭД обязателен. Если это касается ваших товаров, вы получите уведомление в каталоге.\n *\n * 10 или 14 цифр без пробелов.\n *\n * Пример: 8517610008\n */\n codesTN?: string[];\n /**\n * **С какого возраста пользоваться**\n *\n * Если товар не предназначен для детей младше определенного возраста, укажите это.\n *\n * Возрастные ограничения можно задавать в годах (с нуля, с 6, 12, 16 или 18) или в месяцах (любое число от 0 до 12).\n */\n age?: { unit: \"year\" | \"month\"; value: number };\n /**\n * **Вес с упаковкой**\n *\n * Вес товара с упаковкой.\n *\n * Единица измерения — килограммы. Можно дроби: разделитель — точка или запятая, не больше трех цифр после него.\n *\n * Пример: 3.1\n */\n weight?: number;\n /**\n * **Габариты с упаковкой**\n *\n * Длина, ширина, высота в упаковке.\n *\n * Единица измерения — сантиметры. Можно дроби: разделитель — точка или запятая, не больше трех цифр после него.\n *\n * Пример: 20.1/20.551/22.5\n */\n dimensions?: string;\n /**\n * **Товар занимает больше одного места**\n *\n * Если товар занимает одно место (представляет собой одну коробку, упаковку и так далее), оставьте поле пустым. Если товар занимает несколько мест — укажите их количество. Например, кондиционер занимает два места — внешний и внутренний блоки в двух коробках.\n *\n * Укажите количество мест.\n *\n * Пример: 2\n */\n boxCount?: number;\n /**\n * **Ставка НДС**\n *\n * Значение ставки НДС для товара.\n *\n * Выберите одно из значений:\n *\n ** НДС не облагается — 6 или NO_VAT\n *\n ** 0 % — 5 или VAT_0\n *\n ** 10 % — 2 или VAT_10\n *\n ** 20 % — 7 или VAT_20\n *\n * Если не заполнено, Маркет устанавливает ставку, соответствующую схеме налогообложения.\n *\n * Пример: VAT_20\n */\n vat: Vat;\n /**\n * **Характеристики, которые есть только у товаров конкретной категории**\n *\n * Кроме общих свойств, у товара есть характеристики, присущие конкретной категории, к которой он относится. Например, у велосипеда есть размер рамы, а детское пюре бывает овощное, мясное или фруктовое.\n */\n params?: IParam[];\n /**\n * **Свойства товара**\n *\n * *не YML поле\n */\n properties?: IParam[];\n /**\n * **Теги**\n *\n * Придумайте любое название — его можно будет изменить после.\n *\n * Максимальная длина тега — 20 символов.\n *\n * У одного товара — максимум 10 тегов.\n *\n * Всего можно создать не больше 50 разных тегов.\n *\n * Пример: apple, до 500 рублей\n */\n tags?: string[];\n /**\n * **Товар для взрослых**\n *\n * Параметр включает для товара пометку 18+. Устанавливайте ее только для товаров, которые относятся к удовлетворению сексуальных потребностей.\n */\n adult?: boolean;\n /**\n * **Цифровой товар**\n *\n * Параметр, устанавливаемый для цифровых товаров, которые просто скачиваются.\n */\n downloadable?: boolean;\n /**\n * **Срок годности**\n *\n * Период с момента изготовления, по прошествии которого товар становится непригоден.\n *\n * Указывайте срок, указанный на банке или упаковке. Текущая дата, дата поставки или дата отгрузки значения не имеет.\n *\n * Срок можно указывать в годах, месяцах, днях, неделях и часах.\n *\n * Обязательно указывайте срок, если он есть.\n *\n * Продолжительность указывается согласно ISO 8601, то есть в виде строчки, начинающейся буквой P:\n *\n ** P1Y — 1 год;\n ** P1Y6M — 1 год и 6 месяцев;\n ** P15D — 15 дней.\n */\n validityPeriod?: string;\n /**\n * **Комментарий к сроку годности**\n *\n * Поле предназначено для описаний условий хранения.\n *\n * Не длиннее 250 знаков и без спецсимволов.\n *\n * Пример: Хранить в сухом помещении\n */\n validityComment?: string;\n /**\n * **Срок службы**\n *\n * В течение срока службы товар должен исправно выполнять свою функцию.\n *\n * Обязательно указывайте срок, если он есть.\n *\n * Срок можно указывать в годах, месяцах и днях.\n * Продолжительность указывается согласно ISO 8601, то есть в виде строчки, начинающейся буквой P:\n *\n ** P1Y — 1 год;\n ** P1Y2M — 1 год и 2 месяца;\n ** P15D — 15 дней;\n ** P2Y10D — 2 года, 10 дней;\n ** P2Y6M10D — 2 года, 6 месяцев и 10 дней.\n */\n serviceLifePeriod?: string;\n /**\n * **Комментарий к сроку службы**\n *\n * Поле предназначено для описаний условий использования.\n *\n * Не длиннее 250 знаков и без спецсимволов.\n *\n * Пример: Использовать при температуре не ниже −10 градусов\n */\n serviceLifeComment?: string;\n /**\n * **Гарантийный срок**\n *\n * В течение какого времени можно бесплатно заменить или починить товар.\n *\n * Срок можно указывать в годах, месяцах или днях.\n *\n * Продолжительность указывается согласно ISO 8601, то есть в виде строчки, начинающейся буквой P:\n *\n ** P1Y — 1 год;\n ** P1Y2M — 1 год и 2 месяца;\n ** P15D — 15 дней;\n ** P2Y10D — 2 года, 10 дней;\n ** P2Y6M10D — 2 года, 6 месяцев и 10 дней.\n */\n warrantyPeriod?: string;\n /**\n * **Комментарий к гарантийному сроку**\n *\n * Поле предназначено для описания особенностей гарантийных условий.\n *\n * Указывайте только то, что относится к гарантии изготовителя.\n *\n * Не длиннее 250 знаков и без спецсимволов.\n *\n * Пример: Гарантия на аккумулятор — 6 месяцев\n */\n warrantyComment?: string;\n /**\n * **Официальная гарантия производителя**\n */\n manufacturerWarranty?: boolean;\n /**\n * **Номер документа**\n *\n * Номер документа на товар: сертификата, декларации соответствия и т. п.\n *\n * Прежде чем указывать номер документа, загрузите скан документа через кабинет.\n *\n * Укажите номер документа.\n *\n * Пример: 6241421\n */\n certificate?: string;\n /**\n * **Ключевые слова**\n *\n * Пример: Кроссовки, высокая подошва\n */\n keywords?: string[];\n /**\n * **Размерная сетка**\n */\n sizes?: ISize[];\n /**\n * **Связанные товары**\n *\n * Указываются id товаров\n *\n * Пример: 1234\n */\n relatedProducts?: number[];\n /**\n * **Название коллекции, ряда или серии товара**\n *\n * Пример: Jordan 4\n */\n seriesName?: string;\n /**\n * **Пол или название группы потребителей**\n *\n * Пример: Дети, Женское, Унисекс\n */\n gender?: string;\n}\n\nexport enum Vat {\n NO_VAT = \"NO_VAT\",\n VAT_0 = \"VAT_0\",\n VAT_10 = \"VAT_10\",\n VAT_20 = \"VAT_20\",\n}\n\nexport enum Currency {\n RUR = \"RUR\",\n BYN = \"BYN\",\n EUR = \"EUR\",\n USD = \"USD\",\n UAN = \"UAN\",\n KZT = \"KZT\",\n}\n\nexport interface IParam {\n /**\n * **Название характеристики**\n */\n key: string;\n /**\n * **Значение**\n */\n value: string;\n}\n\nexport interface ISize {\n /**\n * **Название единицы измерения**\n */\n name: string;\n /**\n * **Разделитель**\n */\n delimiter: string;\n /**\n * **Значения размерного ряда**\n *\n * Размеры указываются через разделитель\n */\n value: string;\n}\n"],"names":["Extension","__publicField","json2csv","categories","XMLBuilder","fs","Vat","Currency"],"mappings":"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"}
|
package/dist/esm/index.mjs
CHANGED
|
@@ -24,7 +24,7 @@ const getProperties = (product, option) => {
|
|
|
24
24
|
);
|
|
25
25
|
return properties;
|
|
26
26
|
};
|
|
27
|
-
const getSizes = (product,
|
|
27
|
+
const getSizes = (product, _) => {
|
|
28
28
|
const sizes = {};
|
|
29
29
|
product.sizes?.forEach(
|
|
30
30
|
({ name, value }) => sizes[`Size [${name}]`] = value
|
|
@@ -43,21 +43,22 @@ var Extension = /* @__PURE__ */ ((Extension2) => {
|
|
|
43
43
|
Extension2["CSV"] = "csv";
|
|
44
44
|
Extension2["YML"] = "yml";
|
|
45
45
|
Extension2["XLSX"] = "xlsx";
|
|
46
|
+
Extension2["JSON"] = "json";
|
|
46
47
|
return Extension2;
|
|
47
48
|
})(Extension || {});
|
|
48
49
|
|
|
49
|
-
var __defProp$
|
|
50
|
-
var __defNormalProp$
|
|
51
|
-
var __publicField$
|
|
52
|
-
__defNormalProp$
|
|
50
|
+
var __defProp$7 = Object.defineProperty;
|
|
51
|
+
var __defNormalProp$7 = (obj, key, value) => key in obj ? __defProp$7(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
52
|
+
var __publicField$7 = (obj, key, value) => {
|
|
53
|
+
__defNormalProp$7(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
53
54
|
return value;
|
|
54
55
|
};
|
|
55
56
|
class CSVFormatter {
|
|
56
57
|
constructor() {
|
|
57
|
-
__publicField$
|
|
58
|
-
__publicField$
|
|
58
|
+
__publicField$7(this, "formatterName", "CSV");
|
|
59
|
+
__publicField$7(this, "fileExtension", Extension.CSV);
|
|
59
60
|
}
|
|
60
|
-
async format(products, categories, options) {
|
|
61
|
+
async format(products, categories, _, options) {
|
|
61
62
|
const mappedCategories = {};
|
|
62
63
|
categories?.forEach(({ id, name }) => mappedCategories[id] = name);
|
|
63
64
|
const data = products.map((product) => ({
|
|
@@ -79,19 +80,19 @@ class CSVFormatter {
|
|
|
79
80
|
}
|
|
80
81
|
}
|
|
81
82
|
|
|
82
|
-
var __defProp$
|
|
83
|
-
var __defNormalProp$
|
|
84
|
-
var __publicField$
|
|
85
|
-
__defNormalProp$
|
|
83
|
+
var __defProp$6 = Object.defineProperty;
|
|
84
|
+
var __defNormalProp$6 = (obj, key, value) => key in obj ? __defProp$6(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
85
|
+
var __publicField$6 = (obj, key, value) => {
|
|
86
|
+
__defNormalProp$6(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
86
87
|
return value;
|
|
87
88
|
};
|
|
88
89
|
const { writeXLSX, utils } = xlsx;
|
|
89
90
|
class ExcelFormatter {
|
|
90
91
|
constructor() {
|
|
91
|
-
__publicField$
|
|
92
|
-
__publicField$
|
|
92
|
+
__publicField$6(this, "formatterName", "Excel");
|
|
93
|
+
__publicField$6(this, "fileExtension", Extension.XLSX);
|
|
93
94
|
}
|
|
94
|
-
async format(products, categories, options) {
|
|
95
|
+
async format(products, categories, _, options) {
|
|
95
96
|
const mappedCategories = {};
|
|
96
97
|
categories?.forEach(({ id, name }) => mappedCategories[id] = name);
|
|
97
98
|
const data = products.map((product) => ({
|
|
@@ -116,18 +117,18 @@ class ExcelFormatter {
|
|
|
116
117
|
}
|
|
117
118
|
}
|
|
118
119
|
|
|
119
|
-
var __defProp$
|
|
120
|
-
var __defNormalProp$
|
|
121
|
-
var __publicField$
|
|
122
|
-
__defNormalProp$
|
|
120
|
+
var __defProp$5 = Object.defineProperty;
|
|
121
|
+
var __defNormalProp$5 = (obj, key, value) => key in obj ? __defProp$5(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
122
|
+
var __publicField$5 = (obj, key, value) => {
|
|
123
|
+
__defNormalProp$5(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
123
124
|
return value;
|
|
124
125
|
};
|
|
125
126
|
class InsalesFormatter {
|
|
126
127
|
constructor() {
|
|
127
|
-
__publicField$
|
|
128
|
-
__publicField$
|
|
128
|
+
__publicField$5(this, "formatterName", "Insales");
|
|
129
|
+
__publicField$5(this, "fileExtension", Extension.XLSX);
|
|
129
130
|
}
|
|
130
|
-
async format(products, categories, _) {
|
|
131
|
+
async format(products, categories, _, __) {
|
|
131
132
|
const mappedCategories = {};
|
|
132
133
|
categories?.forEach(
|
|
133
134
|
(category) => mappedCategories[category.id] = category
|
|
@@ -209,6 +210,27 @@ class InsalesFormatter {
|
|
|
209
210
|
}
|
|
210
211
|
}
|
|
211
212
|
|
|
213
|
+
var __defProp$4 = Object.defineProperty;
|
|
214
|
+
var __defNormalProp$4 = (obj, key, value) => key in obj ? __defProp$4(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
215
|
+
var __publicField$4 = (obj, key, value) => {
|
|
216
|
+
__defNormalProp$4(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
217
|
+
return value;
|
|
218
|
+
};
|
|
219
|
+
class JSONFormatter {
|
|
220
|
+
constructor() {
|
|
221
|
+
__publicField$4(this, "formatterName", "JSON");
|
|
222
|
+
__publicField$4(this, "fileExtension", Extension.JSON);
|
|
223
|
+
}
|
|
224
|
+
async format(products, categories, brands, _) {
|
|
225
|
+
const result = {
|
|
226
|
+
categories,
|
|
227
|
+
brands,
|
|
228
|
+
products
|
|
229
|
+
};
|
|
230
|
+
return JSON.stringify(result);
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
|
|
212
234
|
var __defProp$3 = Object.defineProperty;
|
|
213
235
|
var __defNormalProp$3 = (obj, key, value) => key in obj ? __defProp$3(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
214
236
|
var __publicField$3 = (obj, key, value) => {
|
|
@@ -220,7 +242,7 @@ class TgShopFormatter {
|
|
|
220
242
|
__publicField$3(this, "formatterName", "TgShop");
|
|
221
243
|
__publicField$3(this, "fileExtension", Extension.XLSX);
|
|
222
244
|
}
|
|
223
|
-
async format(products, categories, _) {
|
|
245
|
+
async format(products, categories, _, __) {
|
|
224
246
|
const getParameter = (product, key) => product.params?.find((value) => value.key === key);
|
|
225
247
|
const productsData = products.map((product) => ({
|
|
226
248
|
"category id": product.categoryId,
|
|
@@ -258,7 +280,7 @@ class TildaFormatter {
|
|
|
258
280
|
__publicField$2(this, "formatterName", "Tilda");
|
|
259
281
|
__publicField$2(this, "fileExtension", Extension.CSV);
|
|
260
282
|
}
|
|
261
|
-
async format(products, categories, _) {
|
|
283
|
+
async format(products, categories, _, __) {
|
|
262
284
|
const mappedCategories = {};
|
|
263
285
|
categories?.forEach(({ id, name }) => mappedCategories[id] = name);
|
|
264
286
|
const data = products.map((product) => ({
|
|
@@ -295,16 +317,7 @@ class YMLFormatter {
|
|
|
295
317
|
cdataPropName: "__cdata"
|
|
296
318
|
}));
|
|
297
319
|
}
|
|
298
|
-
async format(products, categories, options) {
|
|
299
|
-
const mappedCategories = {
|
|
300
|
-
category: categories?.map((cat) => ({
|
|
301
|
-
"@_id": cat.id,
|
|
302
|
-
"@_parentId": cat.parentId,
|
|
303
|
-
"#text": cat.name
|
|
304
|
-
}))
|
|
305
|
-
};
|
|
306
|
-
const shopName = options?.shopName ?? "ShopName";
|
|
307
|
-
const companyName = options?.companyName ?? "CompanyName";
|
|
320
|
+
async format(products, categories, brands, options) {
|
|
308
321
|
const offers = { offer: products.map(this.getOffers) };
|
|
309
322
|
const result = {
|
|
310
323
|
"?xml": {
|
|
@@ -315,15 +328,34 @@ class YMLFormatter {
|
|
|
315
328
|
yml_catalog: {
|
|
316
329
|
"@_date": (/* @__PURE__ */ new Date()).toISOString().replace(/.\d+Z/, ""),
|
|
317
330
|
shop: {
|
|
318
|
-
name: shopName,
|
|
319
|
-
company: companyName,
|
|
320
|
-
categories:
|
|
331
|
+
name: options?.shopName,
|
|
332
|
+
company: options?.companyName,
|
|
333
|
+
categories: this.getCategories(categories),
|
|
334
|
+
brands: this.getBrands(brands),
|
|
321
335
|
offers
|
|
322
336
|
}
|
|
323
337
|
}
|
|
324
338
|
};
|
|
325
339
|
return this.builder.build(result);
|
|
326
340
|
}
|
|
341
|
+
getBrands(brands) {
|
|
342
|
+
return {
|
|
343
|
+
category: brands?.map((brand) => ({
|
|
344
|
+
"@_id": brand.id,
|
|
345
|
+
"@_url": brand.coverURL,
|
|
346
|
+
"#text": brand.name
|
|
347
|
+
}))
|
|
348
|
+
};
|
|
349
|
+
}
|
|
350
|
+
getCategories(categories) {
|
|
351
|
+
return {
|
|
352
|
+
category: categories?.map((cat) => ({
|
|
353
|
+
"@_id": cat.id,
|
|
354
|
+
"@_parentId": cat.parentId,
|
|
355
|
+
"#text": cat.name
|
|
356
|
+
}))
|
|
357
|
+
};
|
|
358
|
+
}
|
|
327
359
|
getOffers(product) {
|
|
328
360
|
const result = {
|
|
329
361
|
"@_id": product.variantId,
|
|
@@ -407,7 +439,8 @@ const Formatters = {
|
|
|
407
439
|
InsalesFormatter,
|
|
408
440
|
YMLFormatter,
|
|
409
441
|
TgShopFormatter,
|
|
410
|
-
ExcelFormatter
|
|
442
|
+
ExcelFormatter,
|
|
443
|
+
JSONFormatter
|
|
411
444
|
};
|
|
412
445
|
|
|
413
446
|
var __defProp = Object.defineProperty;
|
|
@@ -435,7 +468,7 @@ class GoodsExporter {
|
|
|
435
468
|
setExporter(exporter) {
|
|
436
469
|
this.exporter = exporter;
|
|
437
470
|
}
|
|
438
|
-
async export(products, categories, option) {
|
|
471
|
+
async export(products, categories, brands, option) {
|
|
439
472
|
const copyProducts = deepcopy(products);
|
|
440
473
|
const transformedProducts = await Promise.all(
|
|
441
474
|
copyProducts.map(async (product) => {
|
|
@@ -448,6 +481,7 @@ class GoodsExporter {
|
|
|
448
481
|
const data = await this.formatter.format(
|
|
449
482
|
transformedProducts,
|
|
450
483
|
categories,
|
|
484
|
+
brands,
|
|
451
485
|
option
|
|
452
486
|
);
|
|
453
487
|
if (typeof data === "string") {
|
package/dist/esm/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../../src/util/formatter.util.ts","../../src/formatter/formater.types.ts","../../src/formatter/CSV.formatter.ts","../../src/formatter/Excel.formatter.ts","../../src/formatter/Insales.formatter.ts","../../src/formatter/TgShop.formatter.ts","../../src/formatter/Tilda.formatter.ts","../../src/formatter/YML.formatter.ts","../../src/formatter/index.ts","../../src/exporter/goodsExporter.ts","../../src/types/Product.types.ts"],"sourcesContent":["import { type FormatterOptions } from \"../formatter\";\nimport { type Product } from \"../types\";\n\nconst getParams = (\n product: Product,\n option?: FormatterOptions,\n): Record<string, string> => {\n const params: Record<string, string> = {};\n\n if (option?.splitParams === false) {\n return params;\n }\n\n product.params?.forEach(\n ({ key, value }) => (params[`Param [${key}]`] = value),\n );\n return params;\n};\n\nconst getProperties = (\n product: Product,\n option?: FormatterOptions,\n): Record<string, string> => {\n const properties: Record<string, string> = {};\n\n if (option?.splitParams === false) {\n return properties;\n }\n\n product.properties?.forEach(\n ({ key, value }) => (properties[`Property [${key}]`] = value),\n );\n return properties;\n};\n\nconst getSizes = (\n product: Product,\n option?: FormatterOptions,\n): Record<string, string> => {\n const sizes: Record<string, string> = {};\n product.sizes?.forEach(\n ({ name, value }) => (sizes[`Size [${name}]`] = value),\n );\n return sizes;\n};\n\nexport const UTILS = {\n getSizes,\n getParams,\n getProperties,\n};\n","import { type Category, type Product } from \"../types\";\n\nexport abstract class FormatterAbstract {\n public abstract formatterName: string;\n public abstract fileExtension: Extension;\n\n public abstract format(\n products: Product[],\n categories?: Category[],\n option?: FormatterOptions,\n ): Promise<Buffer | string>;\n}\n\nexport interface FormatterOptions {\n shopName?: string;\n\n companyName?: string;\n\n splitParams?: boolean;\n}\n\nexport enum Extension {\n CSV = \"csv\",\n YML = \"yml\",\n XLSX = \"xlsx\",\n}\n","import { json2csv } from \"json-2-csv\";\n\nimport { type Category, type Product } from \"../types\";\nimport { UTILS } from \"../util/formatter.util\";\nimport {\n Extension,\n type FormatterAbstract,\n type FormatterOptions,\n} from \"./formater.types\";\n\nexport class CSVFormatter implements FormatterAbstract {\n public formatterName = \"CSV\";\n public fileExtension = Extension.CSV;\n\n public async format(\n products: Product[],\n categories?: Category[],\n options?: FormatterOptions,\n ): Promise<string> {\n const mappedCategories: Record<number, string> = {};\n categories?.forEach(({ id, name }) => (mappedCategories[id] = name));\n\n const data = products.map((product) => ({\n ...product,\n category: mappedCategories[product.categoryId],\n images: product.images?.join(\",\"),\n videos: product.videos?.join(\",\"),\n tags: product.tags?.join(\",\"),\n codesTN: product.codesTN?.join(\", \"),\n params: product.params\n ?.map(({ key, value }) => `${key}=${value}`)\n .join(\",\"),\n ...UTILS.getParams(product, options),\n ...UTILS.getProperties(product, options),\n ...UTILS.getSizes(product, options),\n sizes: undefined,\n keywords: product.keywords?.join(\",\"),\n relatedProducts: product.relatedProducts?.join(\",\"),\n }));\n return json2csv(data, { emptyFieldValue: \"\" });\n }\n}\n","import xlsx from \"xlsx\";\n\nimport { type Category, type Product } from \"../types\";\nimport { UTILS } from \"../util/formatter.util\";\nimport {\n Extension,\n type FormatterAbstract,\n type FormatterOptions,\n} from \"./formater.types\";\nconst { writeXLSX, utils } = xlsx;\n\nexport class ExcelFormatter implements FormatterAbstract {\n public formatterName = \"Excel\";\n public fileExtension = Extension.XLSX;\n\n public async format(\n products: Product[],\n categories?: Category[],\n options?: FormatterOptions,\n ): Promise<Buffer> {\n const mappedCategories: Record<number, string> = {};\n categories?.forEach(({ id, name }) => (mappedCategories[id] = name));\n\n const data = products.map((product) => ({\n ...product,\n category: mappedCategories[product.categoryId],\n images: product.images?.join(\",\"),\n videos: product.videos?.join(\",\"),\n tags: product.tags?.join(\",\"),\n keywords: product.keywords?.join(\",\"),\n relatedProducts: product.relatedProducts?.join(\",\"),\n codesTN: product.codesTN?.join(\", \"),\n params: product.params\n ?.map(({ key, value }) => `${key}=${value}`)\n .join(\",\"),\n sizes: undefined,\n ...UTILS.getParams(product, options),\n ...UTILS.getProperties(product, options),\n ...UTILS.getSizes(product, options),\n }));\n const workBook = utils.book_new();\n const productsWorkSheet = utils.json_to_sheet(data);\n\n utils.book_append_sheet(workBook, productsWorkSheet, \"products\");\n return writeXLSX(workBook, { type: \"buffer\" });\n }\n}\n","import xlsx from \"xlsx\";\n\nimport { type Category, type Product } from \"../types\";\nimport {\n Extension,\n type FormatterAbstract,\n type FormatterOptions,\n} from \"./formater.types\";\n\nexport class InsalesFormatter implements FormatterAbstract {\n public formatterName = \"Insales\";\n public fileExtension = Extension.XLSX;\n\n public async format(\n products: Product[],\n categories?: Category[],\n _?: FormatterOptions,\n ): Promise<Buffer> {\n const mappedCategories: Record<number, Category> = {};\n categories?.forEach(\n (category) => (mappedCategories[category.id] = category),\n );\n\n const getParams = (product: Product): Record<string, string> => {\n const properties: Record<string, string> = {};\n\n product.params?.forEach(\n (p) => (properties[`Свойство: ${p.key}`] = p.value),\n );\n\n return properties;\n };\n const getProperties = (product: Product): Record<string, string> => {\n const properties: Record<string, string> = {};\n\n product.properties?.forEach(\n (p) => (properties[`Параметр: ${p.key}`] = p.value),\n );\n\n return properties;\n };\n\n const getSizes = (product: Product): Record<string, string> => {\n const sizes: Record<string, string> = {};\n\n product.sizes?.forEach(\n ({ name, value }) => (sizes[`Размеры [${name}]:`] = value),\n );\n\n return sizes;\n };\n\n const getCategories = (product: Product) => {\n const categories: Record<string, string> = {};\n const categoryList = new Array<string>();\n\n function addCategory(categoryId: number | undefined) {\n if (categoryId === undefined) return;\n\n const category = mappedCategories[categoryId];\n if (category) {\n categoryList.push(category.name);\n addCategory(category.parentId);\n }\n }\n\n addCategory(product.categoryId);\n\n categoryList.forEach((name, i) => {\n const index = categoryList.length - 1 - i;\n const key = index === 0 ? \"Корневая\" : `Подкатегория ${index}`;\n categories[key] = name;\n });\n\n return categories;\n };\n\n const data = products.map((product) => ({\n \"Внешний ID\": product.productId,\n Артикул: product.vendorCode,\n \"Название товара или услуги\": product.title,\n \"Старая цена\": product.oldPrice,\n \"Цена продажи\": product.price,\n \"Цена закупки\": product.purchasePrice,\n ...getCategories(product),\n Остаток: product.count,\n \"Штрих-код\": product.barcode,\n \"Краткое описание\": undefined,\n \"Полное описание\": product.description,\n \"Габариты варианта\": product.dimensions,\n Вес: product.weight,\n \"Размещение на сайте\": product.available,\n НДС: product.vat.toString(),\n \"Валюта склада\": product.currency.toString(),\n \"Изображения варианта\": product.images?.join(\" \"),\n Изображения: product.images?.join(\" \"),\n \"Ссылка на видео\": product.videos ? product.videos[0] : undefined,\n ...getParams(product),\n ...getProperties(product),\n \"Параметр: Бренд\": product.vendor,\n \"Параметр: Коллекция\": product.seriesName,\n \"Параметр: Пол\": product.gender,\n \"Параметр: Дата выхода\": product.saleDate,\n ...getSizes(product),\n \"Связанные товары\": product.relatedProducts?.join(\",\"),\n }));\n const workBook = xlsx.utils.book_new();\n const productsWorkSheet = xlsx.utils.json_to_sheet(data);\n\n xlsx.utils.book_append_sheet(workBook, productsWorkSheet, \"products\");\n\n return xlsx.write(workBook, { bookType: \"xlsx\", type: \"buffer\" });\n }\n}\n","import xlsx from \"xlsx\";\n\nimport { type Category, type IParam, type Product } from \"../types\";\nimport {\n Extension,\n type FormatterAbstract,\n type FormatterOptions,\n} from \"./formater.types\";\n\nexport class TgShopFormatter implements FormatterAbstract {\n public formatterName = \"TgShop\";\n public fileExtension = Extension.XLSX;\n\n public async format(\n products: Product[],\n categories?: Category[],\n _?: FormatterOptions,\n ): Promise<Buffer> {\n const getParameter = (product: Product, key: string): IParam | undefined =>\n product.params?.find((value) => value.key === key);\n const productsData = products.map((product) => ({\n \"category id\": product.categoryId,\n \"group id\": product.parentId,\n \"id product\": product.variantId,\n \"name product\": product.title,\n price: product.price,\n picture: product.images?.join(\", \"),\n vendorCode: product.vendorCode,\n oldprice: product.oldPrice,\n description: product.description,\n shortDescription: product.description,\n quantityInStock: product.count,\n color: getParameter(product, \"color\")?.value,\n size: getParameter(product, \"size\")?.value,\n priority: undefined,\n }));\n\n const workBook = xlsx.utils.book_new();\n const productsWorkSheet = xlsx.utils.json_to_sheet(productsData);\n const categoriesWorkSheet = xlsx.utils.json_to_sheet(categories ?? []);\n\n xlsx.utils.book_append_sheet(workBook, categoriesWorkSheet, \"categories\");\n xlsx.utils.book_append_sheet(workBook, productsWorkSheet, \"offers\");\n\n return xlsx.write(workBook, { bookType: \"xlsx\", type: \"buffer\" });\n }\n}\n","import { json2csv } from \"json-2-csv\";\n\nimport { type Category, type Product } from \"../types\";\nimport {\n Extension,\n type FormatterAbstract,\n type FormatterOptions,\n} from \"./formater.types\";\n\nexport class TildaFormatter implements FormatterAbstract {\n public formatterName = \"Tilda\";\n public fileExtension = Extension.CSV;\n\n public async format(\n products: Product[],\n categories?: Category[],\n _?: FormatterOptions,\n ): Promise<string> {\n const mappedCategories: Record<number, string> = {};\n categories?.forEach(({ id, name }) => (mappedCategories[id] = name));\n\n const data = products.map((product) => ({\n SKU: product.vendorCode,\n Brand: product.vendor,\n Category: mappedCategories[product.categoryId],\n Title: product.title,\n Text: product.description,\n Photo: product.images?.join(\";\"),\n Price: product.price,\n \"Price Old\": product.oldPrice,\n Quantity: product.count,\n Editions: product.params\n ?.map(({ key, value }) => `${key}:${value}`)\n .join(\";\"),\n \"External ID\": product.variantId,\n \"Parent UID\": product.parentId,\n }));\n\n return json2csv(data, { emptyFieldValue: \"\", delimiter: { field: \";\" } });\n }\n}\n","import { XMLBuilder } from \"fast-xml-parser\";\n\nimport { type Product, type Category } from \"../types\";\nimport {\n Extension,\n type FormatterAbstract,\n type FormatterOptions,\n} from \"./formater.types\";\n\nexport class YMLFormatter implements FormatterAbstract {\n public formatterName = \"YMl\";\n public fileExtension = Extension.YML;\n private readonly builder = new XMLBuilder({\n ignoreAttributes: false,\n format: true,\n cdataPropName: \"__cdata\",\n });\n\n public async format(\n products: Product[],\n categories?: Category[],\n options?: FormatterOptions,\n ): Promise<string> {\n const mappedCategories = {\n category: categories?.map((cat) => ({\n \"@_id\": cat.id,\n \"@_parentId\": cat.parentId,\n \"#text\": cat.name,\n })),\n };\n const shopName = options?.shopName ?? \"ShopName\";\n const companyName = options?.companyName ?? \"CompanyName\";\n const offers = { offer: products.map(this.getOffers) };\n const result = {\n \"?xml\": {\n \"@_version\": \"1.0\",\n \"@_encoding\": \"UTF-8\",\n \"@_standalone\": \"yes\",\n },\n yml_catalog: {\n \"@_date\": new Date().toISOString().replace(/.\\d+Z/, \"\"),\n shop: {\n name: shopName,\n company: companyName,\n categories: mappedCategories,\n offers,\n },\n },\n };\n\n return this.builder.build(result);\n }\n\n private getOffers(product: Product): any {\n const result = {\n \"@_id\": product.variantId,\n name: product.title,\n price: product.price,\n oldprice: product.oldPrice,\n purchase_price: product.purchasePrice,\n additional_expenses: product.additionalExpenses,\n cofinance_price: product.cofinancePrice,\n currencyId: product.currency,\n categoryId: product.categoryId,\n vendor: product.vendor,\n vendorCode: product.vendorCode,\n picture: product.images,\n video: product.videos,\n available: product.available,\n series: product.seriesName,\n \"min-quantity\": product.minQuantity,\n \"step-quantity\": product.stepQuantity,\n size: product.sizes?.map((size) => ({\n \"#text\": size.value,\n \"@_name\": size.name,\n \"@_delimiter\": size.delimiter,\n })),\n keyword: product.keywords,\n saleDate: product.saleDate,\n property: product.properties?.map((property) => ({\n \"#text\": property.value,\n \"@_name\": property.key,\n })),\n param: product.params?.map((param) => ({\n \"#text\": param.value,\n \"@_name\": param.key,\n })),\n description: {\n __cdata: product.description,\n },\n country_of_origin: product.countryOfOrigin,\n barcode: product.barcode,\n vat: product.vat,\n count: product.count,\n \"set-ids\": product.tags?.join(\", \"),\n adult: product.adult,\n downloadable: product.downloadable,\n \"period-of-validity-days\": product.validityPeriod,\n \"comment-validity-days\": product.validityComment,\n \"service-life-days\": product.serviceLifePeriod,\n \"comment-life-days\": product.serviceLifeComment,\n \"warranty-days\": product.warrantyPeriod,\n \"comment-warranty\": product.warrantyComment,\n manufacturer_warranty: product.manufacturerWarranty,\n certificate: product.certificate,\n url: product.url,\n weight: product.weight,\n dimensions: product.dimensions,\n boxCount: product.boxCount,\n disabled: product.disabled,\n age: product.age != null && {\n \"@_unit\": product.age.unit,\n \"#text\": product.age.value,\n },\n \"tn-ved-codes\": product.codesTN?.length != null && {\n \"tn-ved-code\": product.codesTN,\n },\n relatedProduct: product.relatedProducts,\n gender: product.gender,\n };\n if (product.parentId !== undefined) {\n return {\n ...result,\n \"@_group_id\": product.parentId,\n };\n }\n return result;\n }\n}\n","import { CSVFormatter } from \"./CSV.formatter\";\nimport { ExcelFormatter } from \"./Excel.formatter\";\nimport { InsalesFormatter } from \"./Insales.formatter\";\nimport { TgShopFormatter } from \"./TgShop.formatter\";\nimport { TildaFormatter } from \"./Tilda.formatter\";\nimport { YMLFormatter } from \"./YML.formatter\";\n\nexport * from \"./formater.types\";\n\nexport const Formatters = {\n TildaFormatter,\n CSVFormatter,\n InsalesFormatter,\n YMLFormatter,\n TgShopFormatter,\n ExcelFormatter,\n};\n","import deepcopy from \"deepcopy\";\n\nimport {\n type FormatterAbstract,\n type FormatterOptions,\n Formatters,\n} from \"../formatter\";\nimport { type Category, type Product } from \"../types\";\nimport { type Exporter, type Transformer } from \"./exporter.types\";\n\nimport * as fs from \"fs\";\n\nexport class GoodsExporter {\n private formatter: FormatterAbstract = new Formatters.YMLFormatter();\n private exporter: Exporter = (data: Buffer) => {\n const filename = `${this.formatter.formatterName}.output.${this.formatter.fileExtension}`;\n fs.writeFileSync(filename, data);\n return data;\n };\n\n private transformers = new Array<Transformer>();\n\n public setTransformers(transformers: Transformer[]): void {\n this.transformers = transformers;\n }\n\n public setFormatter(formatter: FormatterAbstract): void {\n this.formatter = formatter;\n }\n\n public setExporter(exporter: Exporter): void {\n this.exporter = exporter;\n }\n\n async export(\n products: Product[],\n categories?: Category[],\n option?: FormatterOptions,\n ): Promise<Buffer> {\n const copyProducts = deepcopy(products);\n const transformedProducts = await Promise.all(\n copyProducts.map(async (product) => {\n let transformedProduct: Product = product;\n for (const transformer of this.transformers)\n transformedProduct = await transformer(transformedProduct);\n return transformedProduct;\n }),\n );\n const data = await this.formatter.format(\n transformedProducts,\n categories,\n option,\n );\n\n if (typeof data === \"string\") {\n return await this.exporter(Buffer.from(data, \"utf-8\"));\n }\n return await this.exporter(data);\n }\n}\n","export interface Product {\n /**\n * **ID товара**\n *\n * Любая последовательность длиной до 80 знаков. В нее могут входить английские и русские (кроме ё) буквы, цифры и символы . , / \\ ( ) [ ] - = _\n *\n * Пример: belaya-kofta-12345\n */\n productId: number;\n /**\n * **Родительскй SKU**\n *\n * Любая последовательность длиной до 80 знаков. В нее могут входить английские и русские (кроме ё) буквы, цифры и символы . , / \\ ( ) [ ] - = _\n *\n * Пример: belaya-kofta-12345\n */\n parentId?: number;\n /**\n * **SKU**\n *\n * Любая последовательность длиной до 80 знаков. В нее могут входить английские и русские (кроме ё) буквы, цифры и символы . , / \\ ( ) [ ] - = _\n *\n * Пример: belaya-kofta-12345\n */\n variantId: number;\n /**\n * **Название**\n *\n * Составляйте название по схеме: тип + бренд или производитель + модель + особенности, если есть (например, цвет, размер или вес) и количество в упаковке.\n *\n * Не включайте в название условия продажи (например, «скидка», «бесплатная доставка» и т. д.), эмоциональные характеристики («хит», «супер» и т. д.). Не пишите слова большими буквами — кроме устоявшихся названий брендов и моделей.\n *\n * Оптимальная длина — 50–60 символов, максимальная — 150.\n *\n * Составлять хорошие названия помогут [рекомендации](https://yandex.ru/support/marketplace/assortment/fields/title.html).\n *\n * Пример: Ударная дрель Makita HP1630, 710 Вт\n */\n title: string;\n /**\n * **Описание**\n *\n * Подробное описание товара: например, его преимущества и особенности.\n *\n * Не давайте в описании инструкций по установке и сборке. Не используйте слова «скидка», «распродажа», «дешевый», «подарок» (кроме подарочных категорий), «бесплатно», «акция», «специальная цена», «новинка», «new», «аналог», «заказ», «хит». Не указывайте никакой контактной информации и не давайте ссылок.\n *\n * Можно использовать теги:\n *\n ** <h>, <h1>, <h2> и так далее — для заголовков;\n ** <br> и <p> — для переноса строки;\n ** <ol> — для нумерованного списка;\n ** <ul> — для маркированного списка;\n ** <li> — для создания элементов списка (должен находиться внутри <ol> или <ul>);\n ** <div> — поддерживается, но не влияет на отображение текста.\n * Оптимальная длина — 400–600 символов, максимальная — 6000.\n *\n * Составить хорошее описание помогут рекомендации.\n *\n * Пример: В комплекте с детским микроскопом есть все, что нужно вашему ребенку для изучения микромира\n */\n description: string;\n /**\n * **Бренд**\n *\n * Название бренда или производителя.\n *\n * Записывайте название так, как его пишет сам бренд.\n *\n * Пример: LEVENHUK\n */\n vendor?: string;\n /**\n * **Артикул производителя**\n *\n * Код товара, который ему присвоил производитель.\n *\n * Если артикулов несколько, укажите их через запятую.\n *\n * Пример: VNDR-0005A, VNDR-0005B\n */\n vendorCode?: string;\n /**\n * **Дата выхода**\n *\n * Пример: 01.01.2000\n */\n saleDate?: string;\n /**\n * **Категория в магазине**\n *\n * Категория, к которой вы относите товар. Она помогает точнее определить для товара категорию на Маркете.\n *\n * Указывайте конкретные категории — например, набор ножей лучше отнести к категории Столовые приборы, а не просто Посуда.\n *\n * Выбирайте категории, которые описывают товар, а не абстрактный признак — например, лучше указать Духи, а не Подарки.\n *\n * Содержит номер категории, а не ее название.\n */\n categoryId: number;\n /**\n * **Страна производства**\n *\n * Страна, где был произведен товар.\n *\n * Записывайте названия стран так, как они записаны в [списке](https://yastatic.net/s3/doc-binary/src/support/market/ru/countries.xlsx).\n *\n * Пример: Россия\n */\n countryOfOrigin?: string;\n /**\n * **Изображение**\n *\n * До двадцати изображений, которые показываются на карточке товара.\n *\n * Принимаются jpg- или png-изображения товара, соответствующие [требованиям](https://yandex.ru/support/marketplace/assortment/fields/images.html).\n *\n * В кабинете изображения добавляются в виде файлов. В Excel-файле — в виде ссылок через запятую. Первое фото становится основным.\n *\n * Чтобы изменить изображение, выложите новое по новой ссылке, иначе картинка не обновится.\n */\n images?: string[];\n /**\n * **Видео**\n *\n * Видеоиллюстрации для карточки товара.\n *\n * Видео должно соответствовать [требованиям](https://yandex.ru/support/marketplace/assortment/fields/video.html).\n *\n * Можно добавить не больше 6 видео.\n *\n * В кабинете можно загрузить видеофайлы. В Excel-шаблоне укажите ссылки на файлы.\n */\n videos?: string[];\n /**\n * **Базовая цена**\n *\n * Цена указывается в рублях. Число должно быть целым.\n *\n * Пример:\n *\n * 240\n */\n price: number;\n /**\n * **Цена до скидки**\n *\n * Цена указывается в рублях. Число должно быть целым.\n *\n * Вы можете указать цену со скидкой от 5 до 75 %.\n *\n * Пример:\n *\n * 250\n */\n oldPrice?: number;\n /**\n * **Себестоимость**\n *\n * Цена указывается в рублях. Число должно быть целым.\n *\n * Пример:\n *\n * 200\n */\n purchasePrice?: number;\n /**\n * **Дополнительные расходы**\n *\n * Дополнительные расходы на товар. Например, на доставку или упаковку.\n *\n * После заполнения этого поля в калькуляторе и на странице управления ценами рассчитается потенциальная маржинальность товара.\n *\n * Цена указывается в рублях. Число должно быть целым.\n *\n * Пример:\n *\n * 75\n */\n additionalExpenses?: number;\n /**\n * **Порог для скидок с Маркетом**\n *\n * Цена указывается в рублях. Число должно быть целым.\n *\n * Пример:\n *\n * 300\n */\n cofinancePrice?: number;\n /**\n * **Валюта (DBS)**\n *\n * Валюта, в которой указана цена товара. Покупателям Маркет показывает цену в рублях, пересчитывая ее по курсу Центробанка.\n *\n * Поле используется, если для кабинета еще не включена работа с базовыми ценами.\n *\n * Поддерживаются российские и белорусские рубли, евро, доллары, украинские гривны и казахстанские тенге.\n *\n * В кабинете валюту можно просто выбрать из списка. В Excel-файле указывается код валюты: RUR, BYN, EUR, USD, UAN, KZT.\n */\n currency: Currency;\n /**\n * **Ссылка на страницу товара**\n *\n * Адрес страницы на вашем сайте с фотографиями и описанием товара.\n *\n * Максимальная длина URL — 512 символов. Записывайте его согласно стандарту RFC 3986.\n *\n * Пример: http://best.seller.ru/product_page.asp?pid=12346\n */\n url?: string;\n /**\n * **Убрать из продажи**\n *\n * Поле позволяет приостановить продажу товара.\n *\n * Укажите значение true, если нужно приостановить продажу.\n */\n disabled?: boolean;\n /**\n * **Доступное количество товара**\n *\n * Общее количество товара, доступное для продажи\n *\n * Укажите 0, если товара нет в наличии.\n *\n * Пример: 7\n */\n count?: number;\n /**\n * **Товар в наличии (DBS)**\n *\n * Поле указывает, есть ли товар в наличии.\n */\n available?: boolean;\n /**\n * **Минимальное количество товара**\n *\n * Если значение задано, покупатель не сможет заказать меньше единиц товара. Ограничение не работает, когда товара на складе осталось меньше этого количества — тогда покупатель сможет сделать заказ на остаток.\n *\n * Целое число.\n */\n minQuantity?: number;\n /**\n * **Квант продажи**\n *\n * Если значение задано, покупатель сможет добавить к заказу только кратное количество товара. Ограничение не работает, когда на складе осталось меньше этого количества — тогда покупатель сможет сделать заказ на остаток.\n *\n * Целое число.\n */\n stepQuantity?: number;\n /**\n * **Штрихкод**\n *\n * Указывайте в виде последовательности символов. Подойдут коды EAN-13, EAN-8, UPC-A, UPC-E или Code 128.\n *\n * Для книг указывайте ISBN.\n *\n * Для товаров [определенных категорий и торговых марок](https://yastatic.net/s3/doc-binary/src/support/market/ru/yandex-market-list-for-gtin.xlsx) штрихкод должен быть действительным кодом GTIN. Обратите внимание: внутренние штрихкоды, начинающиеся на 2 или 02, и коды формата Code 128 не являются GTIN.\n *\n * Если штрихкодов несколько, напишите все через запятую.\n *\n * Пример: 46012300000000\n */\n barcode?: string;\n /**\n * **Код ТН ВЭД**\n *\n * Для некоторых категорий товаров код ТН ВЭД обязателен. Если это касается ваших товаров, вы получите уведомление в каталоге.\n *\n * 10 или 14 цифр без пробелов.\n *\n * Пример: 8517610008\n */\n codesTN?: string[];\n /**\n * **С какого возраста пользоваться**\n *\n * Если товар не предназначен для детей младше определенного возраста, укажите это.\n *\n * Возрастные ограничения можно задавать в годах (с нуля, с 6, 12, 16 или 18) или в месяцах (любое число от 0 до 12).\n */\n age?: { unit: \"year\" | \"month\"; value: number };\n /**\n * **Вес с упаковкой**\n *\n * Вес товара с упаковкой.\n *\n * Единица измерения — килограммы. Можно дроби: разделитель — точка или запятая, не больше трех цифр после него.\n *\n * Пример: 3.1\n */\n weight?: number;\n /**\n * **Габариты с упаковкой**\n *\n * Длина, ширина, высота в упаковке.\n *\n * Единица измерения — сантиметры. Можно дроби: разделитель — точка или запятая, не больше трех цифр после него.\n *\n * Пример: 20.1/20.551/22.5\n */\n dimensions?: string;\n /**\n * **Товар занимает больше одного места**\n *\n * Если товар занимает одно место (представляет собой одну коробку, упаковку и так далее), оставьте поле пустым. Если товар занимает несколько мест — укажите их количество. Например, кондиционер занимает два места — внешний и внутренний блоки в двух коробках.\n *\n * Укажите количество мест.\n *\n * Пример: 2\n */\n boxCount?: number;\n /**\n * **Ставка НДС**\n *\n * Значение ставки НДС для товара.\n *\n * Выберите одно из значений:\n *\n ** НДС не облагается — 6 или NO_VAT\n *\n ** 0 % — 5 или VAT_0\n *\n ** 10 % — 2 или VAT_10\n *\n ** 20 % — 7 или VAT_20\n *\n * Если не заполнено, Маркет устанавливает ставку, соответствующую схеме налогообложения.\n *\n * Пример: VAT_20\n */\n vat: Vat;\n /**\n * **Характеристики, которые есть только у товаров конкретной категории**\n *\n * Кроме общих свойств, у товара есть характеристики, присущие конкретной категории, к которой он относится. Например, у велосипеда есть размер рамы, а детское пюре бывает овощное, мясное или фруктовое.\n */\n params?: IParam[];\n /**\n * **Свойства товара**\n *\n * *не YML поле\n */\n properties?: IParam[];\n /**\n * **Теги**\n *\n * Придумайте любое название — его можно будет изменить после.\n *\n * Максимальная длина тега — 20 символов.\n *\n * У одного товара — максимум 10 тегов.\n *\n * Всего можно создать не больше 50 разных тегов.\n *\n * Пример: apple, до 500 рублей\n */\n tags?: string[];\n /**\n * **Товар для взрослых**\n *\n * Параметр включает для товара пометку 18+. Устанавливайте ее только для товаров, которые относятся к удовлетворению сексуальных потребностей.\n */\n adult?: boolean;\n /**\n * **Цифровой товар**\n *\n * Параметр, устанавливаемый для цифровых товаров, которые просто скачиваются.\n */\n downloadable?: boolean;\n /**\n * **Срок годности**\n *\n * Период с момента изготовления, по прошествии которого товар становится непригоден.\n *\n * Указывайте срок, указанный на банке или упаковке. Текущая дата, дата поставки или дата отгрузки значения не имеет.\n *\n * Срок можно указывать в годах, месяцах, днях, неделях и часах.\n *\n * Обязательно указывайте срок, если он есть.\n *\n * Продолжительность указывается согласно ISO 8601, то есть в виде строчки, начинающейся буквой P:\n *\n ** P1Y — 1 год;\n ** P1Y6M — 1 год и 6 месяцев;\n ** P15D — 15 дней.\n */\n validityPeriod?: string;\n /**\n * **Комментарий к сроку годности**\n *\n * Поле предназначено для описаний условий хранения.\n *\n * Не длиннее 250 знаков и без спецсимволов.\n *\n * Пример: Хранить в сухом помещении\n */\n validityComment?: string;\n /**\n * **Срок службы**\n *\n * В течение срока службы товар должен исправно выполнять свою функцию.\n *\n * Обязательно указывайте срок, если он есть.\n *\n * Срок можно указывать в годах, месяцах и днях.\n * Продолжительность указывается согласно ISO 8601, то есть в виде строчки, начинающейся буквой P:\n *\n ** P1Y — 1 год;\n ** P1Y2M — 1 год и 2 месяца;\n ** P15D — 15 дней;\n ** P2Y10D — 2 года, 10 дней;\n ** P2Y6M10D — 2 года, 6 месяцев и 10 дней.\n */\n serviceLifePeriod?: string;\n /**\n * **Комментарий к сроку службы**\n *\n * Поле предназначено для описаний условий использования.\n *\n * Не длиннее 250 знаков и без спецсимволов.\n *\n * Пример: Использовать при температуре не ниже −10 градусов\n */\n serviceLifeComment?: string;\n /**\n * **Гарантийный срок**\n *\n * В течение какого времени можно бесплатно заменить или починить товар.\n *\n * Срок можно указывать в годах, месяцах или днях.\n *\n * Продолжительность указывается согласно ISO 8601, то есть в виде строчки, начинающейся буквой P:\n *\n ** P1Y — 1 год;\n ** P1Y2M — 1 год и 2 месяца;\n ** P15D — 15 дней;\n ** P2Y10D — 2 года, 10 дней;\n ** P2Y6M10D — 2 года, 6 месяцев и 10 дней.\n */\n warrantyPeriod?: string;\n /**\n * **Комментарий к гарантийному сроку**\n *\n * Поле предназначено для описания особенностей гарантийных условий.\n *\n * Указывайте только то, что относится к гарантии изготовителя.\n *\n * Не длиннее 250 знаков и без спецсимволов.\n *\n * Пример: Гарантия на аккумулятор — 6 месяцев\n */\n warrantyComment?: string;\n /**\n * **Официальная гарантия производителя**\n */\n manufacturerWarranty?: boolean;\n /**\n * **Номер документа**\n *\n * Номер документа на товар: сертификата, декларации соответствия и т. п.\n *\n * Прежде чем указывать номер документа, загрузите скан документа через кабинет.\n *\n * Укажите номер документа.\n *\n * Пример: 6241421\n */\n certificate?: string;\n /**\n * **Ключевые слова**\n *\n * Пример: Кроссовки, высокая подошва\n */\n keywords?: string[];\n /**\n * **Размерная сетка**\n */\n sizes?: ISize[];\n /**\n * **Связанные товары**\n *\n * Указываются id товаров\n *\n * Пример: 1234\n */\n relatedProducts?: number[];\n /**\n * **Название коллекции, ряда или серии товара**\n *\n * Пример: Jordan 4\n */\n seriesName?: string;\n /**\n * **Пол или название группы потребителей**\n *\n * Пример: Дети, Женское, Унисекс\n */\n gender?: string;\n}\n\nexport enum Vat {\n NO_VAT = \"NO_VAT\",\n VAT_0 = \"VAT_0\",\n VAT_10 = \"VAT_10\",\n VAT_20 = \"VAT_20\",\n}\n\nexport enum Currency {\n RUR = \"RUR\",\n BYN = \"BYN\",\n EUR = \"EUR\",\n USD = \"USD\",\n UAN = \"UAN\",\n KZT = \"KZT\",\n}\n\nexport interface IParam {\n /**\n * **Название характеристики**\n */\n key: string;\n /**\n * **Значение**\n */\n value: string;\n}\n\nexport interface ISize {\n /**\n * **Название единицы измерения**\n */\n name: string;\n /**\n * **Разделитель**\n */\n delimiter: string;\n /**\n * **Значения размерного ряда**\n *\n * Размеры указываются через разделитель\n */\n value: string;\n}\n"],"names":["Extension","__publicField","categories","Vat","Currency"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../../src/util/formatter.util.ts","../../src/formatter/formater.types.ts","../../src/formatter/CSV.formatter.ts","../../src/formatter/Excel.formatter.ts","../../src/formatter/Insales.formatter.ts","../../src/formatter/JSON.formatter.ts","../../src/formatter/TgShop.formatter.ts","../../src/formatter/Tilda.formatter.ts","../../src/formatter/YML.formatter.ts","../../src/formatter/index.ts","../../src/exporter/goodsExporter.ts","../../src/types/Product.types.ts"],"sourcesContent":["import { type FormatterOptions } from \"../formatter\";\nimport { type Product } from \"../types\";\n\nconst getParams = (\n product: Product,\n option?: FormatterOptions,\n): Record<string, string> => {\n const params: Record<string, string> = {};\n\n if (option?.splitParams === false) {\n return params;\n }\n\n product.params?.forEach(\n ({ key, value }) => (params[`Param [${key}]`] = value),\n );\n return params;\n};\n\nconst getProperties = (\n product: Product,\n option?: FormatterOptions,\n): Record<string, string> => {\n const properties: Record<string, string> = {};\n\n if (option?.splitParams === false) {\n return properties;\n }\n\n product.properties?.forEach(\n ({ key, value }) => (properties[`Property [${key}]`] = value),\n );\n return properties;\n};\n\nconst getSizes = (\n product: Product,\n _?: FormatterOptions,\n): Record<string, string> => {\n const sizes: Record<string, string> = {};\n product.sizes?.forEach(\n ({ name, value }) => (sizes[`Size [${name}]`] = value),\n );\n return sizes;\n};\n\nexport const UTILS = {\n getSizes,\n getParams,\n getProperties,\n};\n","import { type Brand, type Category, type Product } from \"../types\";\n\nexport abstract class FormatterAbstract {\n public abstract formatterName: string;\n public abstract fileExtension: Extension;\n\n public abstract format(\n products: Product[],\n categories?: Category[],\n brands?: Brand[],\n option?: FormatterOptions,\n ): Promise<Buffer | string>;\n}\n\nexport interface FormatterOptions {\n shopName?: string;\n\n companyName?: string;\n\n splitParams?: boolean;\n}\n\nexport enum Extension {\n CSV = \"csv\",\n YML = \"yml\",\n XLSX = \"xlsx\",\n JSON = \"json\",\n}\n","import { json2csv } from \"json-2-csv\";\n\nimport { type Brand, type Category, type Product } from \"../types\";\nimport { UTILS } from \"../util/formatter.util\";\nimport {\n Extension,\n type FormatterAbstract,\n type FormatterOptions,\n} from \"./formater.types\";\n\nexport class CSVFormatter implements FormatterAbstract {\n public formatterName = \"CSV\";\n public fileExtension = Extension.CSV;\n\n public async format(\n products: Product[],\n categories?: Category[],\n _?: Brand[],\n options?: FormatterOptions,\n ): Promise<string> {\n const mappedCategories: Record<number, string> = {};\n categories?.forEach(({ id, name }) => (mappedCategories[id] = name));\n\n const data = products.map((product) => ({\n ...product,\n category: mappedCategories[product.categoryId],\n images: product.images?.join(\",\"),\n videos: product.videos?.join(\",\"),\n tags: product.tags?.join(\",\"),\n codesTN: product.codesTN?.join(\", \"),\n params: product.params\n ?.map(({ key, value }) => `${key}=${value}`)\n .join(\",\"),\n ...UTILS.getParams(product, options),\n ...UTILS.getProperties(product, options),\n ...UTILS.getSizes(product, options),\n sizes: undefined,\n keywords: product.keywords?.join(\",\"),\n relatedProducts: product.relatedProducts?.join(\",\"),\n }));\n return json2csv(data, { emptyFieldValue: \"\" });\n }\n}\n","import xlsx from \"xlsx\";\n\nimport { type Brand, type Category, type Product } from \"../types\";\nimport { UTILS } from \"../util/formatter.util\";\nimport {\n Extension,\n type FormatterAbstract,\n type FormatterOptions,\n} from \"./formater.types\";\nconst { writeXLSX, utils } = xlsx;\n\nexport class ExcelFormatter implements FormatterAbstract {\n public formatterName = \"Excel\";\n public fileExtension = Extension.XLSX;\n\n public async format(\n products: Product[],\n categories?: Category[],\n _?: Brand[],\n options?: FormatterOptions,\n ): Promise<Buffer> {\n const mappedCategories: Record<number, string> = {};\n categories?.forEach(({ id, name }) => (mappedCategories[id] = name));\n\n const data = products.map((product) => ({\n ...product,\n category: mappedCategories[product.categoryId],\n images: product.images?.join(\",\"),\n videos: product.videos?.join(\",\"),\n tags: product.tags?.join(\",\"),\n keywords: product.keywords?.join(\",\"),\n relatedProducts: product.relatedProducts?.join(\",\"),\n codesTN: product.codesTN?.join(\", \"),\n params: product.params\n ?.map(({ key, value }) => `${key}=${value}`)\n .join(\",\"),\n sizes: undefined,\n ...UTILS.getParams(product, options),\n ...UTILS.getProperties(product, options),\n ...UTILS.getSizes(product, options),\n }));\n const workBook = utils.book_new();\n const productsWorkSheet = utils.json_to_sheet(data);\n\n utils.book_append_sheet(workBook, productsWorkSheet, \"products\");\n return writeXLSX(workBook, { type: \"buffer\" });\n }\n}\n","import xlsx from \"xlsx\";\n\nimport { type Brand, type Category, type Product } from \"../types\";\nimport {\n Extension,\n type FormatterAbstract,\n type FormatterOptions,\n} from \"./formater.types\";\n\nexport class InsalesFormatter implements FormatterAbstract {\n public formatterName = \"Insales\";\n public fileExtension = Extension.XLSX;\n\n public async format(\n products: Product[],\n categories?: Category[],\n _?: Brand[],\n __?: FormatterOptions,\n ): Promise<Buffer> {\n const mappedCategories: Record<number, Category> = {};\n categories?.forEach(\n (category) => (mappedCategories[category.id] = category),\n );\n\n const getParams = (product: Product): Record<string, string> => {\n const properties: Record<string, string> = {};\n\n product.params?.forEach(\n (p) => (properties[`Свойство: ${p.key}`] = p.value),\n );\n\n return properties;\n };\n const getProperties = (product: Product): Record<string, string> => {\n const properties: Record<string, string> = {};\n\n product.properties?.forEach(\n (p) => (properties[`Параметр: ${p.key}`] = p.value),\n );\n\n return properties;\n };\n\n const getSizes = (product: Product): Record<string, string> => {\n const sizes: Record<string, string> = {};\n\n product.sizes?.forEach(\n ({ name, value }) => (sizes[`Размеры [${name}]:`] = value),\n );\n\n return sizes;\n };\n\n const getCategories = (product: Product) => {\n const categories: Record<string, string> = {};\n const categoryList = new Array<string>();\n\n function addCategory(categoryId: number | undefined) {\n if (categoryId === undefined) return;\n\n const category = mappedCategories[categoryId];\n if (category) {\n categoryList.push(category.name);\n addCategory(category.parentId);\n }\n }\n\n addCategory(product.categoryId);\n\n categoryList.forEach((name, i) => {\n const index = categoryList.length - 1 - i;\n const key = index === 0 ? \"Корневая\" : `Подкатегория ${index}`;\n categories[key] = name;\n });\n\n return categories;\n };\n\n const data = products.map((product) => ({\n \"Внешний ID\": product.productId,\n Артикул: product.vendorCode,\n \"Название товара или услуги\": product.title,\n \"Старая цена\": product.oldPrice,\n \"Цена продажи\": product.price,\n \"Цена закупки\": product.purchasePrice,\n ...getCategories(product),\n Остаток: product.count,\n \"Штрих-код\": product.barcode,\n \"Краткое описание\": undefined,\n \"Полное описание\": product.description,\n \"Габариты варианта\": product.dimensions,\n Вес: product.weight,\n \"Размещение на сайте\": product.available,\n НДС: product.vat.toString(),\n \"Валюта склада\": product.currency.toString(),\n \"Изображения варианта\": product.images?.join(\" \"),\n Изображения: product.images?.join(\" \"),\n \"Ссылка на видео\": product.videos ? product.videos[0] : undefined,\n ...getParams(product),\n ...getProperties(product),\n \"Параметр: Бренд\": product.vendor,\n \"Параметр: Коллекция\": product.seriesName,\n \"Параметр: Пол\": product.gender,\n \"Параметр: Дата выхода\": product.saleDate,\n ...getSizes(product),\n \"Связанные товары\": product.relatedProducts?.join(\",\"),\n }));\n const workBook = xlsx.utils.book_new();\n const productsWorkSheet = xlsx.utils.json_to_sheet(data);\n\n xlsx.utils.book_append_sheet(workBook, productsWorkSheet, \"products\");\n\n return xlsx.write(workBook, { bookType: \"xlsx\", type: \"buffer\" });\n }\n}\n","import { type Product, type Category, type Brand } from \"../types\";\nimport {\n Extension,\n type FormatterAbstract,\n type FormatterOptions,\n} from \"./formater.types\";\n\nexport class JSONFormatter implements FormatterAbstract {\n public formatterName = \"JSON\";\n public fileExtension = Extension.JSON;\n\n public async format(\n products: Product[],\n categories?: Category[],\n brands?: Brand[],\n _?: FormatterOptions,\n ): Promise<string> {\n const result = {\n categories,\n brands,\n products,\n };\n\n return JSON.stringify(result);\n }\n}\n","import xlsx from \"xlsx\";\n\nimport { type Brand, type Category, type IParam, type Product } from \"../types\";\nimport {\n Extension,\n type FormatterAbstract,\n type FormatterOptions,\n} from \"./formater.types\";\n\nexport class TgShopFormatter implements FormatterAbstract {\n public formatterName = \"TgShop\";\n public fileExtension = Extension.XLSX;\n\n public async format(\n products: Product[],\n categories?: Category[],\n _?: Brand[],\n __?: FormatterOptions,\n ): Promise<Buffer> {\n const getParameter = (product: Product, key: string): IParam | undefined =>\n product.params?.find((value) => value.key === key);\n const productsData = products.map((product) => ({\n \"category id\": product.categoryId,\n \"group id\": product.parentId,\n \"id product\": product.variantId,\n \"name product\": product.title,\n price: product.price,\n picture: product.images?.join(\", \"),\n vendorCode: product.vendorCode,\n oldprice: product.oldPrice,\n description: product.description,\n shortDescription: product.description,\n quantityInStock: product.count,\n color: getParameter(product, \"color\")?.value,\n size: getParameter(product, \"size\")?.value,\n priority: undefined,\n }));\n\n const workBook = xlsx.utils.book_new();\n const productsWorkSheet = xlsx.utils.json_to_sheet(productsData);\n const categoriesWorkSheet = xlsx.utils.json_to_sheet(categories ?? []);\n\n xlsx.utils.book_append_sheet(workBook, categoriesWorkSheet, \"categories\");\n xlsx.utils.book_append_sheet(workBook, productsWorkSheet, \"offers\");\n\n return xlsx.write(workBook, { bookType: \"xlsx\", type: \"buffer\" });\n }\n}\n","import { json2csv } from \"json-2-csv\";\n\nimport { type Brand, type Category, type Product } from \"../types\";\nimport {\n Extension,\n type FormatterAbstract,\n type FormatterOptions,\n} from \"./formater.types\";\n\nexport class TildaFormatter implements FormatterAbstract {\n public formatterName = \"Tilda\";\n public fileExtension = Extension.CSV;\n\n public async format(\n products: Product[],\n categories?: Category[],\n _?: Brand[],\n __?: FormatterOptions,\n ): Promise<string> {\n const mappedCategories: Record<number, string> = {};\n categories?.forEach(({ id, name }) => (mappedCategories[id] = name));\n\n const data = products.map((product) => ({\n SKU: product.vendorCode,\n Brand: product.vendor,\n Category: mappedCategories[product.categoryId],\n Title: product.title,\n Text: product.description,\n Photo: product.images?.join(\";\"),\n Price: product.price,\n \"Price Old\": product.oldPrice,\n Quantity: product.count,\n Editions: product.params\n ?.map(({ key, value }) => `${key}:${value}`)\n .join(\";\"),\n \"External ID\": product.variantId,\n \"Parent UID\": product.parentId,\n }));\n\n return json2csv(data, { emptyFieldValue: \"\", delimiter: { field: \";\" } });\n }\n}\n","import { XMLBuilder } from \"fast-xml-parser\";\n\nimport { type Product, type Category, type Brand } from \"../types\";\nimport {\n Extension,\n type FormatterAbstract,\n type FormatterOptions,\n} from \"./formater.types\";\n\nexport class YMLFormatter implements FormatterAbstract {\n public formatterName = \"YMl\";\n public fileExtension = Extension.YML;\n private readonly builder = new XMLBuilder({\n ignoreAttributes: false,\n format: true,\n cdataPropName: \"__cdata\",\n });\n\n public async format(\n products: Product[],\n categories?: Category[],\n brands?: Brand[],\n options?: FormatterOptions,\n ): Promise<string> {\n const offers = { offer: products.map(this.getOffers) };\n const result = {\n \"?xml\": {\n \"@_version\": \"1.0\",\n \"@_encoding\": \"UTF-8\",\n \"@_standalone\": \"yes\",\n },\n yml_catalog: {\n \"@_date\": new Date().toISOString().replace(/.\\d+Z/, \"\"),\n shop: {\n name: options?.shopName,\n company: options?.companyName,\n categories: this.getCategories(categories),\n brands: this.getBrands(brands),\n offers,\n },\n },\n };\n\n return this.builder.build(result);\n }\n\n private getBrands(brands?: Brand[]) {\n return {\n category: brands?.map((brand) => ({\n \"@_id\": brand.id,\n \"@_url\": brand.coverURL,\n \"#text\": brand.name,\n })),\n };\n }\n\n private getCategories(categories?: Category[]) {\n return {\n category: categories?.map((cat) => ({\n \"@_id\": cat.id,\n \"@_parentId\": cat.parentId,\n \"#text\": cat.name,\n })),\n };\n }\n\n private getOffers(product: Product): any {\n const result = {\n \"@_id\": product.variantId,\n name: product.title,\n price: product.price,\n oldprice: product.oldPrice,\n purchase_price: product.purchasePrice,\n additional_expenses: product.additionalExpenses,\n cofinance_price: product.cofinancePrice,\n currencyId: product.currency,\n categoryId: product.categoryId,\n vendor: product.vendor,\n vendorCode: product.vendorCode,\n picture: product.images,\n video: product.videos,\n available: product.available,\n series: product.seriesName,\n \"min-quantity\": product.minQuantity,\n \"step-quantity\": product.stepQuantity,\n size: product.sizes?.map((size) => ({\n \"#text\": size.value,\n \"@_name\": size.name,\n \"@_delimiter\": size.delimiter,\n })),\n keyword: product.keywords,\n saleDate: product.saleDate,\n property: product.properties?.map((property) => ({\n \"#text\": property.value,\n \"@_name\": property.key,\n })),\n param: product.params?.map((param) => ({\n \"#text\": param.value,\n \"@_name\": param.key,\n })),\n description: {\n __cdata: product.description,\n },\n country_of_origin: product.countryOfOrigin,\n barcode: product.barcode,\n vat: product.vat,\n count: product.count,\n \"set-ids\": product.tags?.join(\", \"),\n adult: product.adult,\n downloadable: product.downloadable,\n \"period-of-validity-days\": product.validityPeriod,\n \"comment-validity-days\": product.validityComment,\n \"service-life-days\": product.serviceLifePeriod,\n \"comment-life-days\": product.serviceLifeComment,\n \"warranty-days\": product.warrantyPeriod,\n \"comment-warranty\": product.warrantyComment,\n manufacturer_warranty: product.manufacturerWarranty,\n certificate: product.certificate,\n url: product.url,\n weight: product.weight,\n dimensions: product.dimensions,\n boxCount: product.boxCount,\n disabled: product.disabled,\n age: product.age != null && {\n \"@_unit\": product.age.unit,\n \"#text\": product.age.value,\n },\n \"tn-ved-codes\": product.codesTN?.length != null && {\n \"tn-ved-code\": product.codesTN,\n },\n relatedProduct: product.relatedProducts,\n gender: product.gender,\n };\n if (product.parentId !== undefined) {\n return {\n ...result,\n \"@_group_id\": product.parentId,\n };\n }\n return result;\n }\n}\n","import { CSVFormatter } from \"./CSV.formatter\";\nimport { ExcelFormatter } from \"./Excel.formatter\";\nimport { InsalesFormatter } from \"./Insales.formatter\";\nimport { JSONFormatter } from \"./JSON.formatter\";\nimport { TgShopFormatter } from \"./TgShop.formatter\";\nimport { TildaFormatter } from \"./Tilda.formatter\";\nimport { YMLFormatter } from \"./YML.formatter\";\n\nexport * from \"./formater.types\";\n\nexport const Formatters = {\n TildaFormatter,\n CSVFormatter,\n InsalesFormatter,\n YMLFormatter,\n TgShopFormatter,\n ExcelFormatter,\n JSONFormatter,\n};\n","import deepcopy from \"deepcopy\";\n\nimport {\n type FormatterAbstract,\n type FormatterOptions,\n Formatters,\n} from \"../formatter\";\nimport { type Brand, type Category, type Product } from \"../types\";\nimport { type Exporter, type Transformer } from \"./exporter.types\";\n\nimport * as fs from \"fs\";\n\nexport class GoodsExporter {\n private formatter: FormatterAbstract = new Formatters.YMLFormatter();\n private exporter: Exporter = (data: Buffer) => {\n const filename = `${this.formatter.formatterName}.output.${this.formatter.fileExtension}`;\n fs.writeFileSync(filename, data);\n return data;\n };\n\n private transformers = new Array<Transformer>();\n\n public setTransformers(transformers: Transformer[]): void {\n this.transformers = transformers;\n }\n\n public setFormatter(formatter: FormatterAbstract): void {\n this.formatter = formatter;\n }\n\n public setExporter(exporter: Exporter): void {\n this.exporter = exporter;\n }\n\n async export(\n products: Product[],\n categories?: Category[],\n brands?: Brand[],\n option?: FormatterOptions,\n ): Promise<Buffer> {\n const copyProducts = deepcopy(products);\n const transformedProducts = await Promise.all(\n copyProducts.map(async (product) => {\n let transformedProduct: Product = product;\n for (const transformer of this.transformers)\n transformedProduct = await transformer(transformedProduct);\n return transformedProduct;\n }),\n );\n const data = await this.formatter.format(\n transformedProducts,\n categories,\n brands,\n option,\n );\n\n if (typeof data === \"string\") {\n return await this.exporter(Buffer.from(data, \"utf-8\"));\n }\n return await this.exporter(data);\n }\n}\n","export interface Product {\n /**\n * **ID товара**\n *\n * Любая последовательность длиной до 80 знаков. В нее могут входить английские и русские (кроме ё) буквы, цифры и символы . , / \\ ( ) [ ] - = _\n *\n * Пример: belaya-kofta-12345\n */\n productId: number;\n /**\n * **Родительскй SKU**\n *\n * Любая последовательность длиной до 80 знаков. В нее могут входить английские и русские (кроме ё) буквы, цифры и символы . , / \\ ( ) [ ] - = _\n *\n * Пример: belaya-kofta-12345\n */\n parentId?: number;\n /**\n * **SKU**\n *\n * Любая последовательность длиной до 80 знаков. В нее могут входить английские и русские (кроме ё) буквы, цифры и символы . , / \\ ( ) [ ] - = _\n *\n * Пример: belaya-kofta-12345\n */\n variantId: number;\n /**\n * **Название**\n *\n * Составляйте название по схеме: тип + бренд или производитель + модель + особенности, если есть (например, цвет, размер или вес) и количество в упаковке.\n *\n * Не включайте в название условия продажи (например, «скидка», «бесплатная доставка» и т. д.), эмоциональные характеристики («хит», «супер» и т. д.). Не пишите слова большими буквами — кроме устоявшихся названий брендов и моделей.\n *\n * Оптимальная длина — 50–60 символов, максимальная — 150.\n *\n * Составлять хорошие названия помогут [рекомендации](https://yandex.ru/support/marketplace/assortment/fields/title.html).\n *\n * Пример: Ударная дрель Makita HP1630, 710 Вт\n */\n title: string;\n /**\n * **Описание**\n *\n * Подробное описание товара: например, его преимущества и особенности.\n *\n * Не давайте в описании инструкций по установке и сборке. Не используйте слова «скидка», «распродажа», «дешевый», «подарок» (кроме подарочных категорий), «бесплатно», «акция», «специальная цена», «новинка», «new», «аналог», «заказ», «хит». Не указывайте никакой контактной информации и не давайте ссылок.\n *\n * Можно использовать теги:\n *\n ** <h>, <h1>, <h2> и так далее — для заголовков;\n ** <br> и <p> — для переноса строки;\n ** <ol> — для нумерованного списка;\n ** <ul> — для маркированного списка;\n ** <li> — для создания элементов списка (должен находиться внутри <ol> или <ul>);\n ** <div> — поддерживается, но не влияет на отображение текста.\n * Оптимальная длина — 400–600 символов, максимальная — 6000.\n *\n * Составить хорошее описание помогут рекомендации.\n *\n * Пример: В комплекте с детским микроскопом есть все, что нужно вашему ребенку для изучения микромира\n */\n description: string;\n /**\n * **Бренд**\n *\n * Название бренда или производителя.\n *\n * Записывайте название так, как его пишет сам бренд.\n *\n * Пример: LEVENHUK\n */\n vendor?: string;\n /**\n * **Артикул производителя**\n *\n * Код товара, который ему присвоил производитель.\n *\n * Если артикулов несколько, укажите их через запятую.\n *\n * Пример: VNDR-0005A, VNDR-0005B\n */\n vendorCode?: string;\n /**\n * **Дата выхода**\n *\n * Пример: 01.01.2000\n */\n saleDate?: string;\n /**\n * **Категория в магазине**\n *\n * Категория, к которой вы относите товар. Она помогает точнее определить для товара категорию на Маркете.\n *\n * Указывайте конкретные категории — например, набор ножей лучше отнести к категории Столовые приборы, а не просто Посуда.\n *\n * Выбирайте категории, которые описывают товар, а не абстрактный признак — например, лучше указать Духи, а не Подарки.\n *\n * Содержит номер категории, а не ее название.\n */\n categoryId: number;\n /**\n * **Страна производства**\n *\n * Страна, где был произведен товар.\n *\n * Записывайте названия стран так, как они записаны в [списке](https://yastatic.net/s3/doc-binary/src/support/market/ru/countries.xlsx).\n *\n * Пример: Россия\n */\n countryOfOrigin?: string;\n /**\n * **Изображение**\n *\n * До двадцати изображений, которые показываются на карточке товара.\n *\n * Принимаются jpg- или png-изображения товара, соответствующие [требованиям](https://yandex.ru/support/marketplace/assortment/fields/images.html).\n *\n * В кабинете изображения добавляются в виде файлов. В Excel-файле — в виде ссылок через запятую. Первое фото становится основным.\n *\n * Чтобы изменить изображение, выложите новое по новой ссылке, иначе картинка не обновится.\n */\n images?: string[];\n /**\n * **Видео**\n *\n * Видеоиллюстрации для карточки товара.\n *\n * Видео должно соответствовать [требованиям](https://yandex.ru/support/marketplace/assortment/fields/video.html).\n *\n * Можно добавить не больше 6 видео.\n *\n * В кабинете можно загрузить видеофайлы. В Excel-шаблоне укажите ссылки на файлы.\n */\n videos?: string[];\n /**\n * **Базовая цена**\n *\n * Цена указывается в рублях. Число должно быть целым.\n *\n * Пример:\n *\n * 240\n */\n price: number;\n /**\n * **Цена до скидки**\n *\n * Цена указывается в рублях. Число должно быть целым.\n *\n * Вы можете указать цену со скидкой от 5 до 75 %.\n *\n * Пример:\n *\n * 250\n */\n oldPrice?: number;\n /**\n * **Себестоимость**\n *\n * Цена указывается в рублях. Число должно быть целым.\n *\n * Пример:\n *\n * 200\n */\n purchasePrice?: number;\n /**\n * **Дополнительные расходы**\n *\n * Дополнительные расходы на товар. Например, на доставку или упаковку.\n *\n * После заполнения этого поля в калькуляторе и на странице управления ценами рассчитается потенциальная маржинальность товара.\n *\n * Цена указывается в рублях. Число должно быть целым.\n *\n * Пример:\n *\n * 75\n */\n additionalExpenses?: number;\n /**\n * **Порог для скидок с Маркетом**\n *\n * Цена указывается в рублях. Число должно быть целым.\n *\n * Пример:\n *\n * 300\n */\n cofinancePrice?: number;\n /**\n * **Валюта (DBS)**\n *\n * Валюта, в которой указана цена товара. Покупателям Маркет показывает цену в рублях, пересчитывая ее по курсу Центробанка.\n *\n * Поле используется, если для кабинета еще не включена работа с базовыми ценами.\n *\n * Поддерживаются российские и белорусские рубли, евро, доллары, украинские гривны и казахстанские тенге.\n *\n * В кабинете валюту можно просто выбрать из списка. В Excel-файле указывается код валюты: RUR, BYN, EUR, USD, UAN, KZT.\n */\n currency: Currency;\n /**\n * **Ссылка на страницу товара**\n *\n * Адрес страницы на вашем сайте с фотографиями и описанием товара.\n *\n * Максимальная длина URL — 512 символов. Записывайте его согласно стандарту RFC 3986.\n *\n * Пример: http://best.seller.ru/product_page.asp?pid=12346\n */\n url?: string;\n /**\n * **Убрать из продажи**\n *\n * Поле позволяет приостановить продажу товара.\n *\n * Укажите значение true, если нужно приостановить продажу.\n */\n disabled?: boolean;\n /**\n * **Доступное количество товара**\n *\n * Общее количество товара, доступное для продажи\n *\n * Укажите 0, если товара нет в наличии.\n *\n * Пример: 7\n */\n count?: number;\n /**\n * **Товар в наличии (DBS)**\n *\n * Поле указывает, есть ли товар в наличии.\n */\n available?: boolean;\n /**\n * **Минимальное количество товара**\n *\n * Если значение задано, покупатель не сможет заказать меньше единиц товара. Ограничение не работает, когда товара на складе осталось меньше этого количества — тогда покупатель сможет сделать заказ на остаток.\n *\n * Целое число.\n */\n minQuantity?: number;\n /**\n * **Квант продажи**\n *\n * Если значение задано, покупатель сможет добавить к заказу только кратное количество товара. Ограничение не работает, когда на складе осталось меньше этого количества — тогда покупатель сможет сделать заказ на остаток.\n *\n * Целое число.\n */\n stepQuantity?: number;\n /**\n * **Штрихкод**\n *\n * Указывайте в виде последовательности символов. Подойдут коды EAN-13, EAN-8, UPC-A, UPC-E или Code 128.\n *\n * Для книг указывайте ISBN.\n *\n * Для товаров [определенных категорий и торговых марок](https://yastatic.net/s3/doc-binary/src/support/market/ru/yandex-market-list-for-gtin.xlsx) штрихкод должен быть действительным кодом GTIN. Обратите внимание: внутренние штрихкоды, начинающиеся на 2 или 02, и коды формата Code 128 не являются GTIN.\n *\n * Если штрихкодов несколько, напишите все через запятую.\n *\n * Пример: 46012300000000\n */\n barcode?: string;\n /**\n * **Код ТН ВЭД**\n *\n * Для некоторых категорий товаров код ТН ВЭД обязателен. Если это касается ваших товаров, вы получите уведомление в каталоге.\n *\n * 10 или 14 цифр без пробелов.\n *\n * Пример: 8517610008\n */\n codesTN?: string[];\n /**\n * **С какого возраста пользоваться**\n *\n * Если товар не предназначен для детей младше определенного возраста, укажите это.\n *\n * Возрастные ограничения можно задавать в годах (с нуля, с 6, 12, 16 или 18) или в месяцах (любое число от 0 до 12).\n */\n age?: { unit: \"year\" | \"month\"; value: number };\n /**\n * **Вес с упаковкой**\n *\n * Вес товара с упаковкой.\n *\n * Единица измерения — килограммы. Можно дроби: разделитель — точка или запятая, не больше трех цифр после него.\n *\n * Пример: 3.1\n */\n weight?: number;\n /**\n * **Габариты с упаковкой**\n *\n * Длина, ширина, высота в упаковке.\n *\n * Единица измерения — сантиметры. Можно дроби: разделитель — точка или запятая, не больше трех цифр после него.\n *\n * Пример: 20.1/20.551/22.5\n */\n dimensions?: string;\n /**\n * **Товар занимает больше одного места**\n *\n * Если товар занимает одно место (представляет собой одну коробку, упаковку и так далее), оставьте поле пустым. Если товар занимает несколько мест — укажите их количество. Например, кондиционер занимает два места — внешний и внутренний блоки в двух коробках.\n *\n * Укажите количество мест.\n *\n * Пример: 2\n */\n boxCount?: number;\n /**\n * **Ставка НДС**\n *\n * Значение ставки НДС для товара.\n *\n * Выберите одно из значений:\n *\n ** НДС не облагается — 6 или NO_VAT\n *\n ** 0 % — 5 или VAT_0\n *\n ** 10 % — 2 или VAT_10\n *\n ** 20 % — 7 или VAT_20\n *\n * Если не заполнено, Маркет устанавливает ставку, соответствующую схеме налогообложения.\n *\n * Пример: VAT_20\n */\n vat: Vat;\n /**\n * **Характеристики, которые есть только у товаров конкретной категории**\n *\n * Кроме общих свойств, у товара есть характеристики, присущие конкретной категории, к которой он относится. Например, у велосипеда есть размер рамы, а детское пюре бывает овощное, мясное или фруктовое.\n */\n params?: IParam[];\n /**\n * **Свойства товара**\n *\n * *не YML поле\n */\n properties?: IParam[];\n /**\n * **Теги**\n *\n * Придумайте любое название — его можно будет изменить после.\n *\n * Максимальная длина тега — 20 символов.\n *\n * У одного товара — максимум 10 тегов.\n *\n * Всего можно создать не больше 50 разных тегов.\n *\n * Пример: apple, до 500 рублей\n */\n tags?: string[];\n /**\n * **Товар для взрослых**\n *\n * Параметр включает для товара пометку 18+. Устанавливайте ее только для товаров, которые относятся к удовлетворению сексуальных потребностей.\n */\n adult?: boolean;\n /**\n * **Цифровой товар**\n *\n * Параметр, устанавливаемый для цифровых товаров, которые просто скачиваются.\n */\n downloadable?: boolean;\n /**\n * **Срок годности**\n *\n * Период с момента изготовления, по прошествии которого товар становится непригоден.\n *\n * Указывайте срок, указанный на банке или упаковке. Текущая дата, дата поставки или дата отгрузки значения не имеет.\n *\n * Срок можно указывать в годах, месяцах, днях, неделях и часах.\n *\n * Обязательно указывайте срок, если он есть.\n *\n * Продолжительность указывается согласно ISO 8601, то есть в виде строчки, начинающейся буквой P:\n *\n ** P1Y — 1 год;\n ** P1Y6M — 1 год и 6 месяцев;\n ** P15D — 15 дней.\n */\n validityPeriod?: string;\n /**\n * **Комментарий к сроку годности**\n *\n * Поле предназначено для описаний условий хранения.\n *\n * Не длиннее 250 знаков и без спецсимволов.\n *\n * Пример: Хранить в сухом помещении\n */\n validityComment?: string;\n /**\n * **Срок службы**\n *\n * В течение срока службы товар должен исправно выполнять свою функцию.\n *\n * Обязательно указывайте срок, если он есть.\n *\n * Срок можно указывать в годах, месяцах и днях.\n * Продолжительность указывается согласно ISO 8601, то есть в виде строчки, начинающейся буквой P:\n *\n ** P1Y — 1 год;\n ** P1Y2M — 1 год и 2 месяца;\n ** P15D — 15 дней;\n ** P2Y10D — 2 года, 10 дней;\n ** P2Y6M10D — 2 года, 6 месяцев и 10 дней.\n */\n serviceLifePeriod?: string;\n /**\n * **Комментарий к сроку службы**\n *\n * Поле предназначено для описаний условий использования.\n *\n * Не длиннее 250 знаков и без спецсимволов.\n *\n * Пример: Использовать при температуре не ниже −10 градусов\n */\n serviceLifeComment?: string;\n /**\n * **Гарантийный срок**\n *\n * В течение какого времени можно бесплатно заменить или починить товар.\n *\n * Срок можно указывать в годах, месяцах или днях.\n *\n * Продолжительность указывается согласно ISO 8601, то есть в виде строчки, начинающейся буквой P:\n *\n ** P1Y — 1 год;\n ** P1Y2M — 1 год и 2 месяца;\n ** P15D — 15 дней;\n ** P2Y10D — 2 года, 10 дней;\n ** P2Y6M10D — 2 года, 6 месяцев и 10 дней.\n */\n warrantyPeriod?: string;\n /**\n * **Комментарий к гарантийному сроку**\n *\n * Поле предназначено для описания особенностей гарантийных условий.\n *\n * Указывайте только то, что относится к гарантии изготовителя.\n *\n * Не длиннее 250 знаков и без спецсимволов.\n *\n * Пример: Гарантия на аккумулятор — 6 месяцев\n */\n warrantyComment?: string;\n /**\n * **Официальная гарантия производителя**\n */\n manufacturerWarranty?: boolean;\n /**\n * **Номер документа**\n *\n * Номер документа на товар: сертификата, декларации соответствия и т. п.\n *\n * Прежде чем указывать номер документа, загрузите скан документа через кабинет.\n *\n * Укажите номер документа.\n *\n * Пример: 6241421\n */\n certificate?: string;\n /**\n * **Ключевые слова**\n *\n * Пример: Кроссовки, высокая подошва\n */\n keywords?: string[];\n /**\n * **Размерная сетка**\n */\n sizes?: ISize[];\n /**\n * **Связанные товары**\n *\n * Указываются id товаров\n *\n * Пример: 1234\n */\n relatedProducts?: number[];\n /**\n * **Название коллекции, ряда или серии товара**\n *\n * Пример: Jordan 4\n */\n seriesName?: string;\n /**\n * **Пол или название группы потребителей**\n *\n * Пример: Дети, Женское, Унисекс\n */\n gender?: string;\n}\n\nexport enum Vat {\n NO_VAT = \"NO_VAT\",\n VAT_0 = \"VAT_0\",\n VAT_10 = \"VAT_10\",\n VAT_20 = \"VAT_20\",\n}\n\nexport enum Currency {\n RUR = \"RUR\",\n BYN = \"BYN\",\n EUR = \"EUR\",\n USD = \"USD\",\n UAN = \"UAN\",\n KZT = \"KZT\",\n}\n\nexport interface IParam {\n /**\n * **Название характеристики**\n */\n key: string;\n /**\n * **Значение**\n */\n value: string;\n}\n\nexport interface ISize {\n /**\n * **Название единицы измерения**\n */\n name: string;\n /**\n * **Разделитель**\n */\n delimiter: string;\n /**\n * **Значения размерного ряда**\n *\n * Размеры указываются через разделитель\n */\n value: string;\n}\n"],"names":["Extension","__publicField","categories","Vat","Currency"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
"url": "https://github.com/Bagi4-source/goods-converter/issues"
|
|
12
12
|
},
|
|
13
13
|
"name": "goods-exporter",
|
|
14
|
-
"version": "0.
|
|
14
|
+
"version": "0.4.1",
|
|
15
15
|
"description": "A versatile JavaScript library for exporting goods data to various formats such as YML, CSV, and Excel. Simplify data export tasks with ease.",
|
|
16
16
|
"main": "./dist/cjs/index.cjs",
|
|
17
17
|
"exports": {
|
|
@@ -32,6 +32,7 @@
|
|
|
32
32
|
},
|
|
33
33
|
"keywords": [
|
|
34
34
|
"yml",
|
|
35
|
+
"json",
|
|
35
36
|
"csv",
|
|
36
37
|
"excel",
|
|
37
38
|
"tilda",
|