goods-exporter 0.3.1 → 0.3.3

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/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright © 2023 German Bagdasaryan
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ “Software”), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
18
+ OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
package/README.md CHANGED
@@ -1,7 +1,7 @@
1
1
  # goods-exporter
2
2
 
3
3
  [![npm version](https://badge.fury.io/js/goods-exporter.svg)](https://badge.fury.io/js/goods-exporter)
4
- ![License](https://img.shields.io/badge/license-MIT-green)
4
+ [![License](https://img.shields.io/badge/license-MIT-green)](https://github.com/Bagi4-source/goods-converter/blob/main/LICENSE)
5
5
 
6
6
  A versatile JavaScript library for exporting goods data to various formats such as YML, CSV, and Excel. Simplify data
7
7
  export tasks with ease.
@@ -37,7 +37,7 @@ yarn add goods-exporter
37
37
  ## Quick start
38
38
 
39
39
  ```typescript
40
- import { GoodsExporter, Product, Category, YMLFormatter } from '../src'
40
+ import { GoodsExporter, Product, Category, Formatters } from '../src'
41
41
 
42
42
  // Create an instance of the GoodsExporter class.
43
43
  const exporter = new GoodsExporter()
@@ -70,7 +70,7 @@ const transformers: Transformer[] = [
70
70
  ]
71
71
 
72
72
  // Set the formatter for exporting data to YML.
73
- exporter.setFormatter(new YMLFormatter()) // or your own Formatter;
73
+ exporter.setFormatter(new Formatters.YMLFormatter()) // or your own Formatter;
74
74
 
75
75
  // Set transformers based on the specified keys.
76
76
  exporter.setTransformers(transformers);
package/dist/bundle.d.ts CHANGED
@@ -519,7 +519,7 @@ interface Category {
519
519
  declare abstract class FormatterAbstract {
520
520
  abstract formatterName: string;
521
521
  abstract fileExtension: Extension;
522
- abstract format(products: Product[], categories?: Category[], option?: FormatterOptions): Promise<string>;
522
+ abstract format(products: Product[], categories?: Category[], option?: FormatterOptions): Promise<Buffer | string>;
523
523
  }
524
524
  interface FormatterOptions {
525
525
  /**
@@ -562,7 +562,7 @@ declare class CSVFormatter implements FormatterAbstract {
562
562
  declare class InsalesFormatter implements FormatterAbstract {
563
563
  formatterName: string;
564
564
  fileExtension: Extension;
565
- format(products: Product[], categories?: Category[], option?: FormatterOptions): Promise<string>;
565
+ format(products: Product[], categories?: Category[], option?: FormatterOptions): Promise<Buffer>;
566
566
  }
567
567
 
568
568
  declare class YMLFormatter implements FormatterAbstract {
@@ -576,13 +576,13 @@ declare class YMLFormatter implements FormatterAbstract {
576
576
  declare class TgShopFormatter implements FormatterAbstract {
577
577
  formatterName: string;
578
578
  fileExtension: Extension;
579
- format(products: Product[], categories?: Category[], option?: FormatterOptions): Promise<string>;
579
+ format(products: Product[], categories?: Category[], option?: FormatterOptions): Promise<Buffer>;
580
580
  }
581
581
 
582
582
  declare class ExcelFormatter implements FormatterAbstract {
583
583
  formatterName: string;
584
584
  fileExtension: Extension;
585
- format(products: Product[], categories?: Category[], option?: FormatterOptions): Promise<string>;
585
+ format(products: Product[], categories?: Category[], option?: FormatterOptions): Promise<Buffer>;
586
586
  }
587
587
 
588
588
  declare const Formatters: {
@@ -149,7 +149,7 @@ class InsalesFormatter {
149
149
  const workBook = xlsx.utils.book_new();
150
150
  const productsWorkSheet = xlsx.utils.json_to_sheet(data);
151
151
  xlsx.utils.book_append_sheet(workBook, productsWorkSheet, "products");
152
- return xlsx.write(workBook, { bookType: "xlsx", type: "buffer" }).toString();
152
+ return xlsx.write(workBook, { bookType: "xlsx", type: "buffer" });
153
153
  }
154
154
  }
155
155
 
@@ -286,16 +286,16 @@ class TgShopFormatter {
286
286
  description: product.description,
287
287
  shortDescription: product.description,
288
288
  quantityInStock: product.count,
289
- color: getParameter(product, "color"),
290
- size: getParameter(product, "size"),
289
+ color: getParameter(product, "color")?.value,
290
+ size: getParameter(product, "size")?.value,
291
291
  priority: void 0
292
292
  }));
293
293
  const workBook = xlsx.utils.book_new();
294
294
  const productsWorkSheet = xlsx.utils.json_to_sheet(productsData);
295
295
  const categoriesWorkSheet = xlsx.utils.json_to_sheet(categories ?? []);
296
- xlsx.utils.book_append_sheet(workBook, productsWorkSheet, "offers");
297
296
  xlsx.utils.book_append_sheet(workBook, categoriesWorkSheet, "categories");
298
- return xlsx.write(workBook, { bookType: "xlsx", type: "buffer" }).toString();
297
+ xlsx.utils.book_append_sheet(workBook, productsWorkSheet, "offers");
298
+ return xlsx.write(workBook, { bookType: "xlsx", type: "buffer" });
299
299
  }
300
300
  }
301
301
 
@@ -337,7 +337,7 @@ class ExcelFormatter {
337
337
  const workBook = xlsx.utils.book_new();
338
338
  const productsWorkSheet = xlsx.utils.json_to_sheet(data);
339
339
  xlsx.utils.book_append_sheet(workBook, productsWorkSheet, "products");
340
- return xlsx.write(workBook, { bookType: "xlsx", type: "buffer" }).toString();
340
+ return xlsx.writeXLSX(workBook, { type: "buffer" });
341
341
  }
342
342
  }
343
343
 
@@ -384,7 +384,10 @@ class GoodsExporter {
384
384
  return transformedProduct;
385
385
  });
386
386
  const data = await this.formatter.format(transformedProducts, categories, option);
387
- return this.exporter(Buffer.from(data, "utf-8"));
387
+ if (typeof data === "string") {
388
+ return this.exporter(Buffer.from(data, "utf-8"));
389
+ }
390
+ return this.exporter(data);
388
391
  }
389
392
  }
390
393
 
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../../src/formatter/formater.types.ts","../../src/formatter/Tilda.formatter.ts","../../src/formatter/CSV.formatter.ts","../../src/formatter/Insales.formatter.ts","../../src/formatter/YML.formatter.ts","../../src/formatter/TgShop.formatter.ts","../../src/formatter/Excel.formatter.ts","../../src/formatter/index.ts","../../src/exporter/goodsExporter.ts","../../src/types/Product.types.ts"],"sourcesContent":["import { type Category, type Product } from '../types'\r\n\r\nexport abstract class FormatterAbstract {\r\n public abstract formatterName: string\r\n public abstract fileExtension: Extension\r\n\r\n public abstract format (products: Product[], categories?: Category[], option?: FormatterOptions): Promise<string>\r\n}\r\n\r\nexport interface FormatterOptions {\r\n /**\r\n * **Название магазина**\r\n *\r\n * Используется в YML формате\r\n */\r\n shopName?: string\r\n /**\r\n * **Название компании**\r\n *\r\n * Используется в YML формате\r\n */\r\n companyName?: string\r\n /**\r\n * **Параметры в отдельных столбцах**\r\n *\r\n * Используется в CSV и XLSX формате\r\n */\r\n splitParams?: boolean\r\n}\r\n\r\nexport enum Extension {\r\n CSV = 'csv',\r\n YML = 'yml',\r\n XLSX = 'xlsx'\r\n}\r\n","import { type Category, type Product } from '../types'\r\nimport { json2csv } from 'json-2-csv'\r\nimport { Extension, type FormatterAbstract, type FormatterOptions } from './formater.types'\r\n\r\nexport class TildaFormatter implements FormatterAbstract {\r\n public formatterName = 'Tilda'\r\n public fileExtension = Extension.CSV\r\n\r\n public async format (products: Product[], categories?: Category[], option?: FormatterOptions): Promise<string> {\r\n const mappedCategories: Record<number, string> = {}\r\n categories?.forEach(({ id, name }) => (mappedCategories[id] = name))\r\n\r\n const data = products.map(product => ({\r\n SKU: product.vendorCode,\r\n Brand: product.vendor,\r\n Category: mappedCategories[product.categoryId],\r\n Title: product.title,\r\n Text: product.description,\r\n Photo: product.images?.join(';'),\r\n Price: product.price,\r\n 'Price Old': product.oldPrice,\r\n Quantity: product.count,\r\n Editions: product.params?.map(({ key, value }) => `${key}:${value}`).join(';'),\r\n 'External ID': product.variantId,\r\n 'Parent UID': product.parentId\r\n }))\r\n\r\n return json2csv(data, { emptyFieldValue: '', delimiter: { field: ';' } })\r\n }\r\n}\r\n","import { type Category, type Product } from '../types'\r\nimport { json2csv } from 'json-2-csv'\r\nimport { Extension, type FormatterAbstract, type FormatterOptions } from './formater.types'\r\n\r\nexport class CSVFormatter implements FormatterAbstract {\r\n public formatterName = 'CSV'\r\n public fileExtension = Extension.CSV\r\n\r\n public async format (products: Product[], categories?: Category[], option?: FormatterOptions): Promise<string> {\r\n const mappedCategories: Record<number, string> = {}\r\n categories?.forEach(({ id, name }) => (mappedCategories[id] = name))\r\n\r\n const getParams = (product: Product): Record<string, string> => {\r\n const params: Record<string, string> = {}\r\n\r\n if ((option?.splitParams) === false) { return params }\r\n\r\n product.params?.forEach(({ key, value }) => (params[`Param [${key}]`] = value))\r\n return params\r\n }\r\n\r\n const getProperties = (product: Product): Record<string, string> => {\r\n const properties: Record<string, string> = {}\r\n\r\n if ((option?.splitParams) === false) { return properties }\r\n\r\n product.properties?.forEach(({ key, value }) => (properties[`Property [${key}]`] = value))\r\n return properties\r\n }\r\n\r\n const data = products.map(product => ({\r\n ...product,\r\n category: mappedCategories[product.categoryId],\r\n images: product.images?.join(','),\r\n videos: product.videos?.join(','),\r\n tags: product.tags?.join(','),\r\n codesTN: product.codesTN?.join(', '),\r\n params: product.params?.map(({ key, value }) => `${key}=${value}`).join(','),\r\n ...getParams(product),\r\n ...getProperties(product)\r\n }))\r\n return json2csv(data, { emptyFieldValue: '' })\r\n }\r\n}\r\n","import { type Category, type Product } from '../types'\r\nimport { Extension, type FormatterAbstract, type FormatterOptions } from './formater.types'\r\nimport xlsx from 'xlsx'\r\n\r\nexport class InsalesFormatter implements FormatterAbstract {\r\n public formatterName = 'Insales'\r\n public fileExtension = Extension.XLSX\r\n\r\n public async format (products: Product[], categories?: Category[], option?: FormatterOptions): Promise<string> {\r\n const mappedCategories: Record<number, string> = {}\r\n categories?.forEach(({ id, name }) => (mappedCategories[id] = name))\r\n\r\n const getParams = (product: Product): Record<string, string> => {\r\n const properties: Record<string, string> = {}\r\n\r\n product.params?.forEach(p => (properties[`Параметр: ${p.key}`] = p.value))\r\n\r\n return properties\r\n }\r\n const getProperties = (product: Product): Record<string, string> => {\r\n const properties: Record<string, string> = {}\r\n\r\n product.properties?.forEach(p => (properties[`Свойство: ${p.key}`] = p.value))\r\n\r\n return properties\r\n }\r\n\r\n const data = products.map(product => ({\r\n 'Параметр: Дата выхода': product.saleDate,\r\n 'Название товара или услуги': product.title,\r\n 'Изображение варианта': product.images?.join(' '),\r\n 'Краткое описание': undefined,\r\n 'Полное описание': product.description,\r\n Изображения: product.images?.join(' '),\r\n 'Цена продажи': product.price,\r\n Артикул: product.vendorCode,\r\n ...getParams(product),\r\n ...getProperties(product)\r\n }))\r\n const workBook = xlsx.utils.book_new()\r\n const productsWorkSheet = xlsx.utils.json_to_sheet(data)\r\n\r\n xlsx.utils.book_append_sheet(workBook, productsWorkSheet, 'products')\r\n\r\n return xlsx.write(workBook, { bookType: 'xlsx', type: 'buffer' }).toString()\r\n }\r\n}\r\n","import { XMLBuilder } from 'fast-xml-parser'\r\nimport { type Product, type Category } from '../types'\r\nimport { Extension, type FormatterAbstract, type FormatterOptions } from './formater.types'\r\n\r\nexport class YMLFormatter implements FormatterAbstract {\r\n public formatterName = 'YMl'\r\n public fileExtension = Extension.YML\r\n private readonly builder = new XMLBuilder({\r\n ignoreAttributes: false,\r\n format: true,\r\n cdataPropName: '__cdata'\r\n })\r\n\r\n public async format (products: Product[], categories?: Category[], options?: FormatterOptions): Promise<string> {\r\n const mappedCategories = {\r\n category: categories?.map(cat => ({\r\n '@_id': cat.id, '@_parentId': cat.parentId, '#text': cat.name\r\n }))\r\n }\r\n const shopName = options?.shopName ?? 'ShopName'\r\n const companyName = options?.companyName ?? 'CompanyName'\r\n const offers = { offer: products.map(this.getOffers) }\r\n const result = {\r\n '?xml': {\r\n '@_version': '1.0',\r\n '@_encoding': 'UTF-8',\r\n '@_standalone': 'yes'\r\n },\r\n yml_catalog: {\r\n '@_date': new Date().toISOString().replace(/.\\d+Z/, ''),\r\n shop: {\r\n name: shopName,\r\n company: companyName,\r\n categories: mappedCategories,\r\n offers\r\n }\r\n }\r\n }\r\n\r\n return this.builder.build(result)\r\n }\r\n\r\n private getOffers (product: Product): any {\r\n const result = {\r\n '@_id': product.variantId,\r\n name: product.title,\r\n price: product.price,\r\n oldprice: product.oldPrice,\r\n purchase_price: product.purchasePrice,\r\n additional_expenses: product.additionalExpenses,\r\n cofinance_price: product.cofinancePrice,\r\n currencyId: product.currency,\r\n categoryId: product.categoryId,\r\n vendor: product.vendor,\r\n vendorCode: product.vendorCode,\r\n picture: product.images,\r\n video: product.videos,\r\n available: product.available,\r\n 'min-quantity': product.minQuantity,\r\n 'step-quantity': product.stepQuantity,\r\n param: product.params?.map(param => ({\r\n '#text': param.value,\r\n '@_name': param.key\r\n })),\r\n description: {\r\n __cdata: product.description\r\n },\r\n country_of_origin: product.countryOfOrigin,\r\n barcode: product.barcode,\r\n vat: product.vat,\r\n count: product.count,\r\n 'set-ids': product.tags?.join(', '),\r\n adult: product.adult,\r\n downloadable: product.downloadable,\r\n 'period-of-validity-days': product.validityPeriod,\r\n 'comment-validity-days': product.validityComment,\r\n 'service-life-days': product.serviceLifePeriod,\r\n 'comment-life-days': product.serviceLifeComment,\r\n 'warranty-days': product.warrantyPeriod,\r\n 'comment-warranty': product.warrantyComment,\r\n manufacturer_warranty: product.manufacturerWarranty,\r\n certificate: product.certificate,\r\n url: product.url,\r\n weight: product.weight,\r\n dimensions: product.dimensions,\r\n boxCount: product.boxCount,\r\n disabled: product.disabled,\r\n age: (product.age != null) && {\r\n '@_unit': product.age.unit,\r\n '#text': product.age.value\r\n },\r\n 'tn-ved-codes': ((product.codesTN?.length) != null) && {\r\n 'tn-ved-code': product.codesTN\r\n }\r\n }\r\n if (product.parentId !== undefined) {\r\n return {\r\n ...result,\r\n '@_group_id': product.parentId\r\n }\r\n }\r\n return result\r\n }\r\n}\r\n","import { type Category, type IParam, type Product } from '../types'\r\nimport xlsx from 'xlsx'\r\nimport { Extension, type FormatterAbstract, type FormatterOptions } from './formater.types'\r\n\r\nexport class TgShopFormatter implements FormatterAbstract {\r\n public formatterName = 'TgShop'\r\n public fileExtension = Extension.XLSX\r\n\r\n public async format (products: Product[], categories?: Category[], option?: FormatterOptions): Promise<string> {\r\n const getParameter = (product: Product, key: string): IParam | undefined => product.params?.find((value) => (value.key === key))\r\n const productsData = products.map(product => ({\r\n 'category id': product.categoryId,\r\n 'group id': product.parentId,\r\n 'id product': product.variantId,\r\n 'name product': product.title,\r\n price: product.price,\r\n picture: product.images?.join(', '),\r\n vendorCode: product.vendorCode,\r\n oldprice: product.oldPrice,\r\n description: product.description,\r\n shortDescription: product.description,\r\n quantityInStock: product.count,\r\n color: getParameter(product, 'color'),\r\n size: getParameter(product, 'size'),\r\n priority: undefined\r\n }))\r\n\r\n const workBook = xlsx.utils.book_new()\r\n const productsWorkSheet = xlsx.utils.json_to_sheet(productsData)\r\n const categoriesWorkSheet = xlsx.utils.json_to_sheet(categories ?? [])\r\n\r\n xlsx.utils.book_append_sheet(workBook, productsWorkSheet, 'offers')\r\n xlsx.utils.book_append_sheet(workBook, categoriesWorkSheet, 'categories')\r\n\r\n return xlsx.write(workBook, { bookType: 'xlsx', type: 'buffer' }).toString()\r\n }\r\n}\r\n","import { type Category, type Product } from '../types'\r\nimport { Extension, type FormatterAbstract, type FormatterOptions } from './formater.types'\r\nimport xlsx from 'xlsx'\r\n\r\nexport class ExcelFormatter implements FormatterAbstract {\r\n public formatterName = 'Excel'\r\n public fileExtension = Extension.XLSX\r\n\r\n public async format (products: Product[], categories?: Category[], option?: FormatterOptions): Promise<string> {\r\n const mappedCategories: Record<number, string> = {}\r\n categories?.forEach(({ id, name }) => (mappedCategories[id] = name))\r\n\r\n const getParams = (product: Product): Record<string, string> => {\r\n const params: Record<string, string> = {}\r\n product.params?.forEach(({ key, value }) => (params[`Param [${key}]`] = value))\r\n return params\r\n }\r\n\r\n const getProperties = (product: Product): Record<string, string> => {\r\n const properties: Record<string, string> = {}\r\n product.properties?.forEach(({ key, value }) => (properties[`Property [${key}]`] = value))\r\n return properties\r\n }\r\n\r\n const data = products.map(product => ({\r\n ...product,\r\n category: mappedCategories[product.categoryId],\r\n images: product.images?.join(','),\r\n videos: product.videos?.join(','),\r\n tags: product.tags?.join(','),\r\n codesTN: product.codesTN?.join(', '),\r\n params: product.params?.map(({ key, value }) => `${key}=${value}`).join(','),\r\n ...getParams(product),\r\n ...getProperties(product)\r\n }))\r\n const workBook = xlsx.utils.book_new()\r\n const productsWorkSheet = xlsx.utils.json_to_sheet(data)\r\n\r\n xlsx.utils.book_append_sheet(workBook, productsWorkSheet, 'products')\r\n\r\n return xlsx.write(workBook, { bookType: 'xlsx', type: 'buffer' }).toString()\r\n }\r\n}\r\n","import { TildaFormatter } from './Tilda.formatter'\r\nimport { CSVFormatter } from './CSV.formatter'\r\nimport { InsalesFormatter } from './Insales.formatter'\r\nimport { YMLFormatter } from './YML.formatter'\r\nimport { TgShopFormatter } from './TgShop.formatter'\r\nimport { ExcelFormatter } from './Excel.formatter'\r\n\r\nexport * from './formater.types'\r\n\r\nexport const Formatters = {\r\n TildaFormatter,\r\n CSVFormatter,\r\n InsalesFormatter,\r\n YMLFormatter,\r\n TgShopFormatter,\r\n ExcelFormatter\r\n}\r\n","import { type FormatterAbstract, type FormatterOptions, Formatters } from '../formatter'\r\nimport { type Exporter, type Transformer } from './exporter.types'\r\nimport { type Category, type Product } from '../types'\r\nimport deepcopy from 'deepcopy'\r\nimport * as fs from 'fs'\r\n\r\nexport class GoodsExporter {\r\n private formatter: FormatterAbstract = new Formatters.YMLFormatter()\r\n private exporter: Exporter = (data: Buffer) => {\r\n const filename = `${this.formatter.formatterName}.output.${this.formatter.fileExtension}`\r\n fs.writeFileSync(filename, data)\r\n return data\r\n }\r\n\r\n private transformers = new Array<Transformer>()\r\n\r\n public setTransformers (transformers: Transformer[]): void {\r\n this.transformers = transformers\r\n }\r\n\r\n public setFormatter (formatter: FormatterAbstract): void {\r\n this.formatter = formatter\r\n }\r\n\r\n public setExporter (exporter: Exporter): void {\r\n this.exporter = exporter\r\n }\r\n\r\n async export<T>(products: Product[], categories?: Category[], option?: FormatterOptions): Promise<T> {\r\n const transformedProducts = deepcopy(products).map(product => {\r\n let transformedProduct: Product = product\r\n this.transformers.forEach(transformer => {\r\n transformedProduct = transformer(transformedProduct)\r\n })\r\n return transformedProduct\r\n })\r\n const data = await this.formatter.format(transformedProducts, categories, option)\r\n return this.exporter(Buffer.from(data, 'utf-8'))\r\n }\r\n}\r\n","export interface Product {\r\n /**\r\n * **ID товара**\r\n *\r\n * Любая последовательность длиной до 80 знаков. В нее могут входить английские и русские (кроме ё) буквы, цифры и символы . , / \\ ( ) [ ] - = _\r\n *\r\n * Пример: belaya-kofta-12345\r\n */\r\n productId: number\r\n /**\r\n * **Родительскй SKU**\r\n *\r\n * Любая последовательность длиной до 80 знаков. В нее могут входить английские и русские (кроме ё) буквы, цифры и символы . , / \\ ( ) [ ] - = _\r\n *\r\n * Пример: belaya-kofta-12345\r\n */\r\n parentId?: number\r\n /**\r\n * **SKU**\r\n *\r\n * Любая последовательность длиной до 80 знаков. В нее могут входить английские и русские (кроме ё) буквы, цифры и символы . , / \\ ( ) [ ] - = _\r\n *\r\n * Пример: belaya-kofta-12345\r\n */\r\n variantId: number\r\n /**\r\n * **Название**\r\n *\r\n * Составляйте название по схеме: тип + бренд или производитель + модель + особенности, если есть (например, цвет, размер или вес) и количество в упаковке.\r\n *\r\n * Не включайте в название условия продажи (например, «скидка», «бесплатная доставка» и т. д.), эмоциональные характеристики («хит», «супер» и т. д.). Не пишите слова большими буквами — кроме устоявшихся названий брендов и моделей.\r\n *\r\n * Оптимальная длина — 50–60 символов, максимальная — 150.\r\n *\r\n * Составлять хорошие названия помогут [рекомендации](https://yandex.ru/support/marketplace/assortment/fields/title.html).\r\n *\r\n * Пример: Ударная дрель Makita HP1630, 710 Вт\r\n */\r\n title: string\r\n /**\r\n * **Описание**\r\n *\r\n * Подробное описание товара: например, его преимущества и особенности.\r\n *\r\n * Не давайте в описании инструкций по установке и сборке. Не используйте слова «скидка», «распродажа», «дешевый», «подарок» (кроме подарочных категорий), «бесплатно», «акция», «специальная цена», «новинка», «new», «аналог», «заказ», «хит». Не указывайте никакой контактной информации и не давайте ссылок.\r\n *\r\n * Можно использовать теги:\r\n *\r\n ** &lt;h&gt;, &lt;h1&gt;, &lt;h2&gt; и так далее — для заголовков;\r\n ** &lt;br&gt; и &lt;p&gt; — для переноса строки;\r\n ** &lt;ol&gt; — для нумерованного списка;\r\n ** &lt;ul&gt; — для маркированного списка;\r\n ** &lt;li&gt; — для создания элементов списка (должен находиться внутри &lt;ol&gt; или &lt;ul&gt;);\r\n ** &lt;div&gt; — поддерживается, но не влияет на отображение текста.\r\n * Оптимальная длина — 400–600 символов, максимальная — 6000.\r\n *\r\n * Составить хорошее описание помогут рекомендации.\r\n *\r\n * Пример: В комплекте с детским микроскопом есть все, что нужно вашему ребенку для изучения микромира\r\n */\r\n description: string\r\n /**\r\n * **Бренд**\r\n *\r\n * Название бренда или производителя.\r\n *\r\n * Записывайте название так, как его пишет сам бренд.\r\n *\r\n * Пример: LEVENHUK\r\n */\r\n vendor?: string\r\n /**\r\n * **Артикул производителя**\r\n *\r\n * Код товара, который ему присвоил производитель.\r\n *\r\n * Если артикулов несколько, укажите их через запятую.\r\n *\r\n * Пример: VNDR-0005A, VNDR-0005B\r\n */\r\n vendorCode?: string\r\n /**\r\n * **Дата выхода**\r\n *\r\n * Пример: 01.01.2000\r\n */\r\n saleDate?: string\r\n /**\r\n * **Категория в магазине**\r\n *\r\n * Категория, к которой вы относите товар. Она помогает точнее определить для товара категорию на Маркете.\r\n *\r\n * Указывайте конкретные категории — например, набор ножей лучше отнести к категории Столовые приборы, а не просто Посуда.\r\n *\r\n * Выбирайте категории, которые описывают товар, а не абстрактный признак — например, лучше указать Духи, а не Подарки.\r\n *\r\n * Содержит номер категории, а не ее название.\r\n */\r\n categoryId: number\r\n /**\r\n * **Страна производства**\r\n *\r\n * Страна, где был произведен товар.\r\n *\r\n * Записывайте названия стран так, как они записаны в [списке](https://yastatic.net/s3/doc-binary/src/support/market/ru/countries.xlsx).\r\n *\r\n * Пример: Россия\r\n */\r\n countryOfOrigin?: string\r\n /**\r\n * **Изображение**\r\n *\r\n * До двадцати изображений, которые показываются на карточке товара.\r\n *\r\n * Принимаются jpg- или png-изображения товара, соответствующие [требованиям](https://yandex.ru/support/marketplace/assortment/fields/images.html).\r\n *\r\n * В кабинете изображения добавляются в виде файлов. В Excel-файле — в виде ссылок через запятую. Первое фото становится основным.\r\n *\r\n * Чтобы изменить изображение, выложите новое по новой ссылке, иначе картинка не обновится.\r\n */\r\n images?: string[]\r\n /**\r\n * **Видео**\r\n *\r\n * Видеоиллюстрации для карточки товара.\r\n *\r\n * Видео должно соответствовать [требованиям](https://yandex.ru/support/marketplace/assortment/fields/video.html).\r\n *\r\n * Можно добавить не больше 6 видео.\r\n *\r\n * В кабинете можно загрузить видеофайлы. В Excel-шаблоне укажите ссылки на файлы.\r\n */\r\n videos?: string[]\r\n /**\r\n * **Базовая цена**\r\n *\r\n * Цена указывается в рублях. Число должно быть целым.\r\n *\r\n * Пример:\r\n *\r\n * 240\r\n */\r\n price: number\r\n /**\r\n * **Цена до скидки**\r\n *\r\n * Цена указывается в рублях. Число должно быть целым.\r\n *\r\n * Вы можете указать цену со скидкой от 5 до 75 %.\r\n *\r\n * Пример:\r\n *\r\n * 250\r\n */\r\n oldPrice?: number\r\n /**\r\n * **Себестоимость**\r\n *\r\n * Цена указывается в рублях. Число должно быть целым.\r\n *\r\n * Пример:\r\n *\r\n * 200\r\n */\r\n purchasePrice?: number\r\n /**\r\n * **Дополнительные расходы**\r\n *\r\n * Дополнительные расходы на товар. Например, на доставку или упаковку.\r\n *\r\n * После заполнения этого поля в калькуляторе и на странице управления ценами рассчитается потенциальная маржинальность товара.\r\n *\r\n * Цена указывается в рублях. Число должно быть целым.\r\n *\r\n * Пример:\r\n *\r\n * 75\r\n */\r\n additionalExpenses?: number\r\n /**\r\n * **Порог для скидок с Маркетом**\r\n *\r\n * Цена указывается в рублях. Число должно быть целым.\r\n *\r\n * Пример:\r\n *\r\n * 300\r\n */\r\n cofinancePrice?: number\r\n /**\r\n * **Валюта (DBS)**\r\n *\r\n * Валюта, в которой указана цена товара. Покупателям Маркет показывает цену в рублях, пересчитывая ее по курсу Центробанка.\r\n *\r\n * Поле используется, если для кабинета еще не включена работа с базовыми ценами.\r\n *\r\n * Поддерживаются российские и белорусские рубли, евро, доллары, украинские гривны и казахстанские тенге.\r\n *\r\n * В кабинете валюту можно просто выбрать из списка. В Excel-файле указывается код валюты: RUR, BYN, EUR, USD, UAN, KZT.\r\n */\r\n currency: Currency\r\n /**\r\n * **Ссылка на страницу товара**\r\n *\r\n * Адрес страницы на вашем сайте с фотографиями и описанием товара.\r\n *\r\n * Максимальная длина URL — 512 символов. Записывайте его согласно стандарту RFC 3986.\r\n *\r\n * Пример: http://best.seller.ru/product_page.asp?pid=12346\r\n */\r\n url?: string\r\n /**\r\n * **Убрать из продажи**\r\n *\r\n * Поле позволяет приостановить продажу товара.\r\n *\r\n * Укажите значение true, если нужно приостановить продажу.\r\n */\r\n disabled?: boolean\r\n /**\r\n * **Доступное количество товара**\r\n *\r\n * Общее количество товара, доступное для продажи\r\n *\r\n * Укажите 0, если товара нет в наличии.\r\n *\r\n * Пример: 7\r\n */\r\n count?: number\r\n /**\r\n * **Товар в наличии (DBS)**\r\n *\r\n * Поле указывает, есть ли товар в наличии.\r\n */\r\n available?: boolean\r\n /**\r\n * **Минимальное количество товара**\r\n *\r\n * Если значение задано, покупатель не сможет заказать меньше единиц товара. Ограничение не работает, когда товара на складе осталось меньше этого количества — тогда покупатель сможет сделать заказ на остаток.\r\n *\r\n * Целое число.\r\n */\r\n minQuantity?: number\r\n /**\r\n * **Квант продажи**\r\n *\r\n * Если значение задано, покупатель сможет добавить к заказу только кратное количество товара. Ограничение не работает, когда на складе осталось меньше этого количества — тогда покупатель сможет сделать заказ на остаток.\r\n *\r\n * Целое число.\r\n */\r\n stepQuantity?: number\r\n /**\r\n * **Штрихкод**\r\n *\r\n * Указывайте в виде последовательности символов. Подойдут коды EAN-13, EAN-8, UPC-A, UPC-E или Code 128.\r\n *\r\n * Для книг указывайте ISBN.\r\n *\r\n * Для товаров [определенных категорий и торговых марок](https://yastatic.net/s3/doc-binary/src/support/market/ru/yandex-market-list-for-gtin.xlsx) штрихкод должен быть действительным кодом GTIN. Обратите внимание: внутренние штрихкоды, начинающиеся на 2 или 02, и коды формата Code 128 не являются GTIN.\r\n *\r\n * Если штрихкодов несколько, напишите все через запятую.\r\n *\r\n * Пример: 46012300000000\r\n */\r\n barcode?: string\r\n /**\r\n * **Код ТН ВЭД**\r\n *\r\n * Для некоторых категорий товаров код ТН ВЭД обязателен. Если это касается ваших товаров, вы получите уведомление в каталоге.\r\n *\r\n * 10 или 14 цифр без пробелов.\r\n *\r\n * Пример: 8517610008\r\n */\r\n codesTN?: string[]\r\n /**\r\n * **С какого возраста пользоваться**\r\n *\r\n * Если товар не предназначен для детей младше определенного возраста, укажите это.\r\n *\r\n * Возрастные ограничения можно задавать в годах (с нуля, с 6, 12, 16 или 18) или в месяцах (любое число от 0 до 12).\r\n */\r\n age?: { unit: 'year' | 'month', value: number }\r\n /**\r\n * **Вес с упаковкой**\r\n *\r\n * Вес товара с упаковкой.\r\n *\r\n * Единица измерения — килограммы. Можно дроби: разделитель — точка или запятая, не больше трех цифр после него.\r\n *\r\n * Пример: 3.1\r\n */\r\n weight?: number\r\n /**\r\n * **Габариты с упаковкой**\r\n *\r\n * Длина, ширина, высота в упаковке.\r\n *\r\n * Единица измерения — сантиметры. Можно дроби: разделитель — точка или запятая, не больше трех цифр после него.\r\n *\r\n * Пример: 20.1/20.551/22.5\r\n */\r\n dimensions?: string\r\n /**\r\n * **Товар занимает больше одного места**\r\n *\r\n * Если товар занимает одно место (представляет собой одну коробку, упаковку и так далее), оставьте поле пустым. Если товар занимает несколько мест — укажите их количество. Например, кондиционер занимает два места — внешний и внутренний блоки в двух коробках.\r\n *\r\n * Укажите количество мест.\r\n *\r\n * Пример: 2\r\n */\r\n boxCount?: number\r\n /**\r\n * **Ставка НДС**\r\n *\r\n * Значение ставки НДС для товара.\r\n *\r\n * Выберите одно из значений:\r\n *\r\n ** НДС не облагается — 6 или NO_VAT\r\n *\r\n ** 0 % — 5 или VAT_0\r\n *\r\n ** 10 % — 2 или VAT_10\r\n *\r\n ** 20 % — 7 или VAT_20\r\n *\r\n * Если не заполнено, Маркет устанавливает ставку, соответствующую схеме налогообложения.\r\n *\r\n * Пример: VAT_20\r\n */\r\n vat: Vat\r\n /**\r\n * **Характеристики, которые есть только у товаров конкретной категории**\r\n *\r\n * Кроме общих свойств, у товара есть характеристики, присущие конкретной категории, к которой он относится. Например, у велосипеда есть размер рамы, а детское пюре бывает овощное, мясное или фруктовое.\r\n */\r\n params?: IParam[]\r\n /**\r\n * **Свойства товара**\r\n *\r\n * *не YML поле\r\n */\r\n properties?: IParam[]\r\n /**\r\n * **Теги**\r\n *\r\n * Придумайте любое название — его можно будет изменить после.\r\n *\r\n * Максимальная длина тега — 20 символов.\r\n *\r\n * У одного товара — максимум 10 тегов.\r\n *\r\n * Всего можно создать не больше 50 разных тегов.\r\n *\r\n * Пример: apple, до 500 рублей\r\n */\r\n tags?: string[]\r\n /**\r\n * **Товар для взрослых**\r\n *\r\n * Параметр включает для товара пометку 18+. Устанавливайте ее только для товаров, которые относятся к удовлетворению сексуальных потребностей.\r\n */\r\n adult?: boolean\r\n /**\r\n * **Цифровой товар**\r\n *\r\n * Параметр, устанавливаемый для цифровых товаров, которые просто скачиваются.\r\n */\r\n downloadable?: boolean\r\n /**\r\n * **Срок годности**\r\n *\r\n * Период с момента изготовления, по прошествии которого товар становится непригоден.\r\n *\r\n * Указывайте срок, указанный на банке или упаковке. Текущая дата, дата поставки или дата отгрузки значения не имеет.\r\n *\r\n * Срок можно указывать в годах, месяцах, днях, неделях и часах.\r\n *\r\n * Обязательно указывайте срок, если он есть.\r\n *\r\n * Продолжительность указывается согласно ISO 8601, то есть в виде строчки, начинающейся буквой P:\r\n *\r\n ** P1Y — 1 год;\r\n ** P1Y6M — 1 год и 6 месяцев;\r\n ** P15D — 15 дней.\r\n */\r\n validityPeriod?: string\r\n /**\r\n * **Комментарий к сроку годности**\r\n *\r\n * Поле предназначено для описаний условий хранения.\r\n *\r\n * Не длиннее 250 знаков и без спецсимволов.\r\n *\r\n * Пример: Хранить в сухом помещении\r\n */\r\n validityComment?: string\r\n /**\r\n * **Срок службы**\r\n *\r\n * В течение срока службы товар должен исправно выполнять свою функцию.\r\n *\r\n * Обязательно указывайте срок, если он есть.\r\n *\r\n * Срок можно указывать в годах, месяцах и днях.\r\n * Продолжительность указывается согласно ISO 8601, то есть в виде строчки, начинающейся буквой P:\r\n *\r\n ** P1Y — 1 год;\r\n ** P1Y2M — 1 год и 2 месяца;\r\n ** P15D — 15 дней;\r\n ** P2Y10D — 2 года, 10 дней;\r\n ** P2Y6M10D — 2 года, 6 месяцев и 10 дней.\r\n */\r\n serviceLifePeriod?: string\r\n /**\r\n * **Комментарий к сроку службы**\r\n *\r\n * Поле предназначено для описаний условий использования.\r\n *\r\n * Не длиннее 250 знаков и без спецсимволов.\r\n *\r\n * Пример: Использовать при температуре не ниже −10 градусов\r\n */\r\n serviceLifeComment?: string\r\n /**\r\n * **Гарантийный срок**\r\n *\r\n * В течение какого времени можно бесплатно заменить или починить товар.\r\n *\r\n * Срок можно указывать в годах, месяцах или днях.\r\n *\r\n * Продолжительность указывается согласно ISO 8601, то есть в виде строчки, начинающейся буквой P:\r\n *\r\n ** P1Y — 1 год;\r\n ** P1Y2M — 1 год и 2 месяца;\r\n ** P15D — 15 дней;\r\n ** P2Y10D — 2 года, 10 дней;\r\n ** P2Y6M10D — 2 года, 6 месяцев и 10 дней.\r\n */\r\n warrantyPeriod?: string\r\n /**\r\n * **Комментарий к гарантийному сроку**\r\n *\r\n * Поле предназначено для описания особенностей гарантийных условий.\r\n *\r\n * Указывайте только то, что относится к гарантии изготовителя.\r\n *\r\n * Не длиннее 250 знаков и без спецсимволов.\r\n *\r\n * Пример: Гарантия на аккумулятор — 6 месяцев\r\n */\r\n warrantyComment?: string\r\n /**\r\n * **Официальная гарантия производителя**\r\n */\r\n manufacturerWarranty?: boolean\r\n /**\r\n * **Номер документа**\r\n *\r\n * Номер документа на товар: сертификата, декларации соответствия и т. п.\r\n *\r\n * Прежде чем указывать номер документа, загрузите скан документа через кабинет.\r\n *\r\n * Укажите номер документа.\r\n *\r\n * Пример: 6241421\r\n */\r\n certificate?: string\r\n}\r\n\r\nexport enum Vat {\r\n NO_VAT = 'NO_VAT',\r\n VAT_0 = 'VAT_0',\r\n VAT_10 = 'VAT_10',\r\n VAT_20 = 'VAT_20'\r\n}\r\n\r\nexport enum Currency {\r\n RUR = 'RUR',\r\n BYN = 'BYN',\r\n EUR = 'EUR',\r\n USD = 'USD',\r\n UAN = 'UAN',\r\n KZT = 'KZT'\r\n}\r\n\r\nexport interface IParam {\r\n /**\r\n * **Название характеристики**\r\n */\r\n key: string\r\n /**\r\n * **Значение**\r\n */\r\n value: string\r\n}\r\n"],"names":["Extension","__publicField","json2csv","XMLBuilder","fs","Vat","Currency"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","sources":["../../src/formatter/formater.types.ts","../../src/formatter/Tilda.formatter.ts","../../src/formatter/CSV.formatter.ts","../../src/formatter/Insales.formatter.ts","../../src/formatter/YML.formatter.ts","../../src/formatter/TgShop.formatter.ts","../../src/formatter/Excel.formatter.ts","../../src/formatter/index.ts","../../src/exporter/goodsExporter.ts","../../src/types/Product.types.ts"],"sourcesContent":["import { type Category, type Product } from '../types'\r\n\r\nexport abstract class FormatterAbstract {\r\n public abstract formatterName: string\r\n public abstract fileExtension: Extension\r\n\r\n public abstract format (products: Product[], categories?: Category[], option?: FormatterOptions): Promise<Buffer | string>\r\n}\r\n\r\nexport interface FormatterOptions {\r\n /**\r\n * **Название магазина**\r\n *\r\n * Используется в YML формате\r\n */\r\n shopName?: string\r\n /**\r\n * **Название компании**\r\n *\r\n * Используется в YML формате\r\n */\r\n companyName?: string\r\n /**\r\n * **Параметры в отдельных столбцах**\r\n *\r\n * Используется в CSV и XLSX формате\r\n */\r\n splitParams?: boolean\r\n}\r\n\r\nexport enum Extension {\r\n CSV = 'csv',\r\n YML = 'yml',\r\n XLSX = 'xlsx'\r\n}\r\n","import { type Category, type Product } from '../types'\r\nimport { json2csv } from 'json-2-csv'\r\nimport { Extension, type FormatterAbstract, type FormatterOptions } from './formater.types'\r\n\r\nexport class TildaFormatter implements FormatterAbstract {\r\n public formatterName = 'Tilda'\r\n public fileExtension = Extension.CSV\r\n\r\n public async format (products: Product[], categories?: Category[], option?: FormatterOptions): Promise<string> {\r\n const mappedCategories: Record<number, string> = {}\r\n categories?.forEach(({ id, name }) => (mappedCategories[id] = name))\r\n\r\n const data = products.map(product => ({\r\n SKU: product.vendorCode,\r\n Brand: product.vendor,\r\n Category: mappedCategories[product.categoryId],\r\n Title: product.title,\r\n Text: product.description,\r\n Photo: product.images?.join(';'),\r\n Price: product.price,\r\n 'Price Old': product.oldPrice,\r\n Quantity: product.count,\r\n Editions: product.params?.map(({ key, value }) => `${key}:${value}`).join(';'),\r\n 'External ID': product.variantId,\r\n 'Parent UID': product.parentId\r\n }))\r\n\r\n return json2csv(data, { emptyFieldValue: '', delimiter: { field: ';' } })\r\n }\r\n}\r\n","import { type Category, type Product } from '../types'\r\nimport { json2csv } from 'json-2-csv'\r\nimport { Extension, type FormatterAbstract, type FormatterOptions } from './formater.types'\r\n\r\nexport class CSVFormatter implements FormatterAbstract {\r\n public formatterName = 'CSV'\r\n public fileExtension = Extension.CSV\r\n\r\n public async format (products: Product[], categories?: Category[], option?: FormatterOptions): Promise<string> {\r\n const mappedCategories: Record<number, string> = {}\r\n categories?.forEach(({ id, name }) => (mappedCategories[id] = name))\r\n\r\n const getParams = (product: Product): Record<string, string> => {\r\n const params: Record<string, string> = {}\r\n\r\n if ((option?.splitParams) === false) { return params }\r\n\r\n product.params?.forEach(({ key, value }) => (params[`Param [${key}]`] = value))\r\n return params\r\n }\r\n\r\n const getProperties = (product: Product): Record<string, string> => {\r\n const properties: Record<string, string> = {}\r\n\r\n if ((option?.splitParams) === false) { return properties }\r\n\r\n product.properties?.forEach(({ key, value }) => (properties[`Property [${key}]`] = value))\r\n return properties\r\n }\r\n\r\n const data = products.map(product => ({\r\n ...product,\r\n category: mappedCategories[product.categoryId],\r\n images: product.images?.join(','),\r\n videos: product.videos?.join(','),\r\n tags: product.tags?.join(','),\r\n codesTN: product.codesTN?.join(', '),\r\n params: product.params?.map(({ key, value }) => `${key}=${value}`).join(','),\r\n ...getParams(product),\r\n ...getProperties(product)\r\n }))\r\n return json2csv(data, { emptyFieldValue: '' })\r\n }\r\n}\r\n","import { type Category, type Product } from '../types'\r\nimport { Extension, type FormatterAbstract, type FormatterOptions } from './formater.types'\r\nimport xlsx from 'xlsx'\r\n\r\nexport class InsalesFormatter implements FormatterAbstract {\r\n public formatterName = 'Insales'\r\n public fileExtension = Extension.XLSX\r\n\r\n public async format (products: Product[], categories?: Category[], option?: FormatterOptions): Promise<Buffer> {\r\n const mappedCategories: Record<number, string> = {}\r\n categories?.forEach(({ id, name }) => (mappedCategories[id] = name))\r\n\r\n const getParams = (product: Product): Record<string, string> => {\r\n const properties: Record<string, string> = {}\r\n\r\n product.params?.forEach(p => (properties[`Параметр: ${p.key}`] = p.value))\r\n\r\n return properties\r\n }\r\n const getProperties = (product: Product): Record<string, string> => {\r\n const properties: Record<string, string> = {}\r\n\r\n product.properties?.forEach(p => (properties[`Свойство: ${p.key}`] = p.value))\r\n\r\n return properties\r\n }\r\n\r\n const data = products.map(product => ({\r\n 'Параметр: Дата выхода': product.saleDate,\r\n 'Название товара или услуги': product.title,\r\n 'Изображение варианта': product.images?.join(' '),\r\n 'Краткое описание': undefined,\r\n 'Полное описание': product.description,\r\n Изображения: product.images?.join(' '),\r\n 'Цена продажи': product.price,\r\n Артикул: product.vendorCode,\r\n ...getParams(product),\r\n ...getProperties(product)\r\n }))\r\n const workBook = xlsx.utils.book_new()\r\n const productsWorkSheet = xlsx.utils.json_to_sheet(data)\r\n\r\n xlsx.utils.book_append_sheet(workBook, productsWorkSheet, 'products')\r\n\r\n return xlsx.write(workBook, { bookType: 'xlsx', type: 'buffer' })\r\n }\r\n}\r\n","import { XMLBuilder } from 'fast-xml-parser'\r\nimport { type Product, type Category } from '../types'\r\nimport { Extension, type FormatterAbstract, type FormatterOptions } from './formater.types'\r\n\r\nexport class YMLFormatter implements FormatterAbstract {\r\n public formatterName = 'YMl'\r\n public fileExtension = Extension.YML\r\n private readonly builder = new XMLBuilder({\r\n ignoreAttributes: false,\r\n format: true,\r\n cdataPropName: '__cdata'\r\n })\r\n\r\n public async format (products: Product[], categories?: Category[], options?: FormatterOptions): Promise<string> {\r\n const mappedCategories = {\r\n category: categories?.map(cat => ({\r\n '@_id': cat.id, '@_parentId': cat.parentId, '#text': cat.name\r\n }))\r\n }\r\n const shopName = options?.shopName ?? 'ShopName'\r\n const companyName = options?.companyName ?? 'CompanyName'\r\n const offers = { offer: products.map(this.getOffers) }\r\n const result = {\r\n '?xml': {\r\n '@_version': '1.0',\r\n '@_encoding': 'UTF-8',\r\n '@_standalone': 'yes'\r\n },\r\n yml_catalog: {\r\n '@_date': new Date().toISOString().replace(/.\\d+Z/, ''),\r\n shop: {\r\n name: shopName,\r\n company: companyName,\r\n categories: mappedCategories,\r\n offers\r\n }\r\n }\r\n }\r\n\r\n return this.builder.build(result)\r\n }\r\n\r\n private getOffers (product: Product): any {\r\n const result = {\r\n '@_id': product.variantId,\r\n name: product.title,\r\n price: product.price,\r\n oldprice: product.oldPrice,\r\n purchase_price: product.purchasePrice,\r\n additional_expenses: product.additionalExpenses,\r\n cofinance_price: product.cofinancePrice,\r\n currencyId: product.currency,\r\n categoryId: product.categoryId,\r\n vendor: product.vendor,\r\n vendorCode: product.vendorCode,\r\n picture: product.images,\r\n video: product.videos,\r\n available: product.available,\r\n 'min-quantity': product.minQuantity,\r\n 'step-quantity': product.stepQuantity,\r\n param: product.params?.map(param => ({\r\n '#text': param.value,\r\n '@_name': param.key\r\n })),\r\n description: {\r\n __cdata: product.description\r\n },\r\n country_of_origin: product.countryOfOrigin,\r\n barcode: product.barcode,\r\n vat: product.vat,\r\n count: product.count,\r\n 'set-ids': product.tags?.join(', '),\r\n adult: product.adult,\r\n downloadable: product.downloadable,\r\n 'period-of-validity-days': product.validityPeriod,\r\n 'comment-validity-days': product.validityComment,\r\n 'service-life-days': product.serviceLifePeriod,\r\n 'comment-life-days': product.serviceLifeComment,\r\n 'warranty-days': product.warrantyPeriod,\r\n 'comment-warranty': product.warrantyComment,\r\n manufacturer_warranty: product.manufacturerWarranty,\r\n certificate: product.certificate,\r\n url: product.url,\r\n weight: product.weight,\r\n dimensions: product.dimensions,\r\n boxCount: product.boxCount,\r\n disabled: product.disabled,\r\n age: (product.age != null) && {\r\n '@_unit': product.age.unit,\r\n '#text': product.age.value\r\n },\r\n 'tn-ved-codes': ((product.codesTN?.length) != null) && {\r\n 'tn-ved-code': product.codesTN\r\n }\r\n }\r\n if (product.parentId !== undefined) {\r\n return {\r\n ...result,\r\n '@_group_id': product.parentId\r\n }\r\n }\r\n return result\r\n }\r\n}\r\n","import { type Category, type IParam, type Product } from '../types'\r\nimport xlsx from 'xlsx'\r\nimport { Extension, type FormatterAbstract, type FormatterOptions } from './formater.types'\r\n\r\nexport class TgShopFormatter implements FormatterAbstract {\r\n public formatterName = 'TgShop'\r\n public fileExtension = Extension.XLSX\r\n\r\n public async format (products: Product[], categories?: Category[], option?: FormatterOptions): Promise<Buffer> {\r\n const getParameter = (product: Product, key: string): IParam | undefined => product.params?.find((value) => (value.key === key))\r\n const productsData = products.map(product => ({\r\n 'category id': product.categoryId,\r\n 'group id': product.parentId,\r\n 'id product': product.variantId,\r\n 'name product': product.title,\r\n price: product.price,\r\n picture: product.images?.join(', '),\r\n vendorCode: product.vendorCode,\r\n oldprice: product.oldPrice,\r\n description: product.description,\r\n shortDescription: product.description,\r\n quantityInStock: product.count,\r\n color: getParameter(product, 'color')?.value,\r\n size: getParameter(product, 'size')?.value,\r\n priority: undefined\r\n }))\r\n\r\n const workBook = xlsx.utils.book_new()\r\n const productsWorkSheet = xlsx.utils.json_to_sheet(productsData)\r\n const categoriesWorkSheet = xlsx.utils.json_to_sheet(categories ?? [])\r\n\r\n xlsx.utils.book_append_sheet(workBook, categoriesWorkSheet, 'categories')\r\n xlsx.utils.book_append_sheet(workBook, productsWorkSheet, 'offers')\r\n\r\n return xlsx.write(workBook, { bookType: 'xlsx', type: 'buffer' })\r\n }\r\n}\r\n","import { type Category, type Product } from '../types'\r\nimport { Extension, type FormatterAbstract, type FormatterOptions } from './formater.types'\r\nimport { writeXLSX, utils } from 'xlsx'\r\n\r\nexport class ExcelFormatter implements FormatterAbstract {\r\n public formatterName = 'Excel'\r\n public fileExtension = Extension.XLSX\r\n\r\n public async format (products: Product[], categories?: Category[], option?: FormatterOptions): Promise<Buffer> {\r\n const mappedCategories: Record<number, string> = {}\r\n categories?.forEach(({ id, name }) => (mappedCategories[id] = name))\r\n\r\n const getParams = (product: Product): Record<string, string> => {\r\n const params: Record<string, string> = {}\r\n product.params?.forEach(({ key, value }) => (params[`Param [${key}]`] = value))\r\n return params\r\n }\r\n\r\n const getProperties = (product: Product): Record<string, string> => {\r\n const properties: Record<string, string> = {}\r\n product.properties?.forEach(({ key, value }) => (properties[`Property [${key}]`] = value))\r\n return properties\r\n }\r\n\r\n const data = products.map(product => ({\r\n ...product,\r\n category: mappedCategories[product.categoryId],\r\n images: product.images?.join(','),\r\n videos: product.videos?.join(','),\r\n tags: product.tags?.join(','),\r\n codesTN: product.codesTN?.join(', '),\r\n params: product.params?.map(({ key, value }) => `${key}=${value}`).join(','),\r\n ...getParams(product),\r\n ...getProperties(product)\r\n }))\r\n const workBook = utils.book_new()\r\n const productsWorkSheet = utils.json_to_sheet(data)\r\n\r\n utils.book_append_sheet(workBook, productsWorkSheet, 'products')\r\n return writeXLSX(workBook, { type: 'buffer' })\r\n }\r\n}\r\n","import { TildaFormatter } from './Tilda.formatter'\r\nimport { CSVFormatter } from './CSV.formatter'\r\nimport { InsalesFormatter } from './Insales.formatter'\r\nimport { YMLFormatter } from './YML.formatter'\r\nimport { TgShopFormatter } from './TgShop.formatter'\r\nimport { ExcelFormatter } from './Excel.formatter'\r\n\r\nexport * from './formater.types'\r\n\r\nexport const Formatters = {\r\n TildaFormatter,\r\n CSVFormatter,\r\n InsalesFormatter,\r\n YMLFormatter,\r\n TgShopFormatter,\r\n ExcelFormatter\r\n}\r\n","import { type FormatterAbstract, type FormatterOptions, Formatters } from '../formatter'\r\nimport { type Exporter, type Transformer } from './exporter.types'\r\nimport { type Category, type Product } from '../types'\r\nimport deepcopy from 'deepcopy'\r\nimport * as fs from 'fs'\r\n\r\nexport class GoodsExporter {\r\n private formatter: FormatterAbstract = new Formatters.YMLFormatter()\r\n private exporter: Exporter = (data: Buffer) => {\r\n const filename = `${this.formatter.formatterName}.output.${this.formatter.fileExtension}`\r\n fs.writeFileSync(filename, data)\r\n return data\r\n }\r\n\r\n private transformers = new Array<Transformer>()\r\n\r\n public setTransformers (transformers: Transformer[]): void {\r\n this.transformers = transformers\r\n }\r\n\r\n public setFormatter (formatter: FormatterAbstract): void {\r\n this.formatter = formatter\r\n }\r\n\r\n public setExporter (exporter: Exporter): void {\r\n this.exporter = exporter\r\n }\r\n\r\n async export<T>(products: Product[], categories?: Category[], option?: FormatterOptions): Promise<T> {\r\n const transformedProducts = deepcopy(products).map(product => {\r\n let transformedProduct: Product = product\r\n this.transformers.forEach(transformer => {\r\n transformedProduct = transformer(transformedProduct)\r\n })\r\n return transformedProduct\r\n })\r\n const data = await this.formatter.format(transformedProducts, categories, option)\r\n\r\n if (typeof data === 'string') { return this.exporter(Buffer.from(data, 'utf-8')) }\r\n return this.exporter(data)\r\n }\r\n}\r\n","export interface Product {\r\n /**\r\n * **ID товара**\r\n *\r\n * Любая последовательность длиной до 80 знаков. В нее могут входить английские и русские (кроме ё) буквы, цифры и символы . , / \\ ( ) [ ] - = _\r\n *\r\n * Пример: belaya-kofta-12345\r\n */\r\n productId: number\r\n /**\r\n * **Родительскй SKU**\r\n *\r\n * Любая последовательность длиной до 80 знаков. В нее могут входить английские и русские (кроме ё) буквы, цифры и символы . , / \\ ( ) [ ] - = _\r\n *\r\n * Пример: belaya-kofta-12345\r\n */\r\n parentId?: number\r\n /**\r\n * **SKU**\r\n *\r\n * Любая последовательность длиной до 80 знаков. В нее могут входить английские и русские (кроме ё) буквы, цифры и символы . , / \\ ( ) [ ] - = _\r\n *\r\n * Пример: belaya-kofta-12345\r\n */\r\n variantId: number\r\n /**\r\n * **Название**\r\n *\r\n * Составляйте название по схеме: тип + бренд или производитель + модель + особенности, если есть (например, цвет, размер или вес) и количество в упаковке.\r\n *\r\n * Не включайте в название условия продажи (например, «скидка», «бесплатная доставка» и т. д.), эмоциональные характеристики («хит», «супер» и т. д.). Не пишите слова большими буквами — кроме устоявшихся названий брендов и моделей.\r\n *\r\n * Оптимальная длина — 50–60 символов, максимальная — 150.\r\n *\r\n * Составлять хорошие названия помогут [рекомендации](https://yandex.ru/support/marketplace/assortment/fields/title.html).\r\n *\r\n * Пример: Ударная дрель Makita HP1630, 710 Вт\r\n */\r\n title: string\r\n /**\r\n * **Описание**\r\n *\r\n * Подробное описание товара: например, его преимущества и особенности.\r\n *\r\n * Не давайте в описании инструкций по установке и сборке. Не используйте слова «скидка», «распродажа», «дешевый», «подарок» (кроме подарочных категорий), «бесплатно», «акция», «специальная цена», «новинка», «new», «аналог», «заказ», «хит». Не указывайте никакой контактной информации и не давайте ссылок.\r\n *\r\n * Можно использовать теги:\r\n *\r\n ** &lt;h&gt;, &lt;h1&gt;, &lt;h2&gt; и так далее — для заголовков;\r\n ** &lt;br&gt; и &lt;p&gt; — для переноса строки;\r\n ** &lt;ol&gt; — для нумерованного списка;\r\n ** &lt;ul&gt; — для маркированного списка;\r\n ** &lt;li&gt; — для создания элементов списка (должен находиться внутри &lt;ol&gt; или &lt;ul&gt;);\r\n ** &lt;div&gt; — поддерживается, но не влияет на отображение текста.\r\n * Оптимальная длина — 400–600 символов, максимальная — 6000.\r\n *\r\n * Составить хорошее описание помогут рекомендации.\r\n *\r\n * Пример: В комплекте с детским микроскопом есть все, что нужно вашему ребенку для изучения микромира\r\n */\r\n description: string\r\n /**\r\n * **Бренд**\r\n *\r\n * Название бренда или производителя.\r\n *\r\n * Записывайте название так, как его пишет сам бренд.\r\n *\r\n * Пример: LEVENHUK\r\n */\r\n vendor?: string\r\n /**\r\n * **Артикул производителя**\r\n *\r\n * Код товара, который ему присвоил производитель.\r\n *\r\n * Если артикулов несколько, укажите их через запятую.\r\n *\r\n * Пример: VNDR-0005A, VNDR-0005B\r\n */\r\n vendorCode?: string\r\n /**\r\n * **Дата выхода**\r\n *\r\n * Пример: 01.01.2000\r\n */\r\n saleDate?: string\r\n /**\r\n * **Категория в магазине**\r\n *\r\n * Категория, к которой вы относите товар. Она помогает точнее определить для товара категорию на Маркете.\r\n *\r\n * Указывайте конкретные категории — например, набор ножей лучше отнести к категории Столовые приборы, а не просто Посуда.\r\n *\r\n * Выбирайте категории, которые описывают товар, а не абстрактный признак — например, лучше указать Духи, а не Подарки.\r\n *\r\n * Содержит номер категории, а не ее название.\r\n */\r\n categoryId: number\r\n /**\r\n * **Страна производства**\r\n *\r\n * Страна, где был произведен товар.\r\n *\r\n * Записывайте названия стран так, как они записаны в [списке](https://yastatic.net/s3/doc-binary/src/support/market/ru/countries.xlsx).\r\n *\r\n * Пример: Россия\r\n */\r\n countryOfOrigin?: string\r\n /**\r\n * **Изображение**\r\n *\r\n * До двадцати изображений, которые показываются на карточке товара.\r\n *\r\n * Принимаются jpg- или png-изображения товара, соответствующие [требованиям](https://yandex.ru/support/marketplace/assortment/fields/images.html).\r\n *\r\n * В кабинете изображения добавляются в виде файлов. В Excel-файле — в виде ссылок через запятую. Первое фото становится основным.\r\n *\r\n * Чтобы изменить изображение, выложите новое по новой ссылке, иначе картинка не обновится.\r\n */\r\n images?: string[]\r\n /**\r\n * **Видео**\r\n *\r\n * Видеоиллюстрации для карточки товара.\r\n *\r\n * Видео должно соответствовать [требованиям](https://yandex.ru/support/marketplace/assortment/fields/video.html).\r\n *\r\n * Можно добавить не больше 6 видео.\r\n *\r\n * В кабинете можно загрузить видеофайлы. В Excel-шаблоне укажите ссылки на файлы.\r\n */\r\n videos?: string[]\r\n /**\r\n * **Базовая цена**\r\n *\r\n * Цена указывается в рублях. Число должно быть целым.\r\n *\r\n * Пример:\r\n *\r\n * 240\r\n */\r\n price: number\r\n /**\r\n * **Цена до скидки**\r\n *\r\n * Цена указывается в рублях. Число должно быть целым.\r\n *\r\n * Вы можете указать цену со скидкой от 5 до 75 %.\r\n *\r\n * Пример:\r\n *\r\n * 250\r\n */\r\n oldPrice?: number\r\n /**\r\n * **Себестоимость**\r\n *\r\n * Цена указывается в рублях. Число должно быть целым.\r\n *\r\n * Пример:\r\n *\r\n * 200\r\n */\r\n purchasePrice?: number\r\n /**\r\n * **Дополнительные расходы**\r\n *\r\n * Дополнительные расходы на товар. Например, на доставку или упаковку.\r\n *\r\n * После заполнения этого поля в калькуляторе и на странице управления ценами рассчитается потенциальная маржинальность товара.\r\n *\r\n * Цена указывается в рублях. Число должно быть целым.\r\n *\r\n * Пример:\r\n *\r\n * 75\r\n */\r\n additionalExpenses?: number\r\n /**\r\n * **Порог для скидок с Маркетом**\r\n *\r\n * Цена указывается в рублях. Число должно быть целым.\r\n *\r\n * Пример:\r\n *\r\n * 300\r\n */\r\n cofinancePrice?: number\r\n /**\r\n * **Валюта (DBS)**\r\n *\r\n * Валюта, в которой указана цена товара. Покупателям Маркет показывает цену в рублях, пересчитывая ее по курсу Центробанка.\r\n *\r\n * Поле используется, если для кабинета еще не включена работа с базовыми ценами.\r\n *\r\n * Поддерживаются российские и белорусские рубли, евро, доллары, украинские гривны и казахстанские тенге.\r\n *\r\n * В кабинете валюту можно просто выбрать из списка. В Excel-файле указывается код валюты: RUR, BYN, EUR, USD, UAN, KZT.\r\n */\r\n currency: Currency\r\n /**\r\n * **Ссылка на страницу товара**\r\n *\r\n * Адрес страницы на вашем сайте с фотографиями и описанием товара.\r\n *\r\n * Максимальная длина URL — 512 символов. Записывайте его согласно стандарту RFC 3986.\r\n *\r\n * Пример: http://best.seller.ru/product_page.asp?pid=12346\r\n */\r\n url?: string\r\n /**\r\n * **Убрать из продажи**\r\n *\r\n * Поле позволяет приостановить продажу товара.\r\n *\r\n * Укажите значение true, если нужно приостановить продажу.\r\n */\r\n disabled?: boolean\r\n /**\r\n * **Доступное количество товара**\r\n *\r\n * Общее количество товара, доступное для продажи\r\n *\r\n * Укажите 0, если товара нет в наличии.\r\n *\r\n * Пример: 7\r\n */\r\n count?: number\r\n /**\r\n * **Товар в наличии (DBS)**\r\n *\r\n * Поле указывает, есть ли товар в наличии.\r\n */\r\n available?: boolean\r\n /**\r\n * **Минимальное количество товара**\r\n *\r\n * Если значение задано, покупатель не сможет заказать меньше единиц товара. Ограничение не работает, когда товара на складе осталось меньше этого количества — тогда покупатель сможет сделать заказ на остаток.\r\n *\r\n * Целое число.\r\n */\r\n minQuantity?: number\r\n /**\r\n * **Квант продажи**\r\n *\r\n * Если значение задано, покупатель сможет добавить к заказу только кратное количество товара. Ограничение не работает, когда на складе осталось меньше этого количества — тогда покупатель сможет сделать заказ на остаток.\r\n *\r\n * Целое число.\r\n */\r\n stepQuantity?: number\r\n /**\r\n * **Штрихкод**\r\n *\r\n * Указывайте в виде последовательности символов. Подойдут коды EAN-13, EAN-8, UPC-A, UPC-E или Code 128.\r\n *\r\n * Для книг указывайте ISBN.\r\n *\r\n * Для товаров [определенных категорий и торговых марок](https://yastatic.net/s3/doc-binary/src/support/market/ru/yandex-market-list-for-gtin.xlsx) штрихкод должен быть действительным кодом GTIN. Обратите внимание: внутренние штрихкоды, начинающиеся на 2 или 02, и коды формата Code 128 не являются GTIN.\r\n *\r\n * Если штрихкодов несколько, напишите все через запятую.\r\n *\r\n * Пример: 46012300000000\r\n */\r\n barcode?: string\r\n /**\r\n * **Код ТН ВЭД**\r\n *\r\n * Для некоторых категорий товаров код ТН ВЭД обязателен. Если это касается ваших товаров, вы получите уведомление в каталоге.\r\n *\r\n * 10 или 14 цифр без пробелов.\r\n *\r\n * Пример: 8517610008\r\n */\r\n codesTN?: string[]\r\n /**\r\n * **С какого возраста пользоваться**\r\n *\r\n * Если товар не предназначен для детей младше определенного возраста, укажите это.\r\n *\r\n * Возрастные ограничения можно задавать в годах (с нуля, с 6, 12, 16 или 18) или в месяцах (любое число от 0 до 12).\r\n */\r\n age?: { unit: 'year' | 'month', value: number }\r\n /**\r\n * **Вес с упаковкой**\r\n *\r\n * Вес товара с упаковкой.\r\n *\r\n * Единица измерения — килограммы. Можно дроби: разделитель — точка или запятая, не больше трех цифр после него.\r\n *\r\n * Пример: 3.1\r\n */\r\n weight?: number\r\n /**\r\n * **Габариты с упаковкой**\r\n *\r\n * Длина, ширина, высота в упаковке.\r\n *\r\n * Единица измерения — сантиметры. Можно дроби: разделитель — точка или запятая, не больше трех цифр после него.\r\n *\r\n * Пример: 20.1/20.551/22.5\r\n */\r\n dimensions?: string\r\n /**\r\n * **Товар занимает больше одного места**\r\n *\r\n * Если товар занимает одно место (представляет собой одну коробку, упаковку и так далее), оставьте поле пустым. Если товар занимает несколько мест — укажите их количество. Например, кондиционер занимает два места — внешний и внутренний блоки в двух коробках.\r\n *\r\n * Укажите количество мест.\r\n *\r\n * Пример: 2\r\n */\r\n boxCount?: number\r\n /**\r\n * **Ставка НДС**\r\n *\r\n * Значение ставки НДС для товара.\r\n *\r\n * Выберите одно из значений:\r\n *\r\n ** НДС не облагается — 6 или NO_VAT\r\n *\r\n ** 0 % — 5 или VAT_0\r\n *\r\n ** 10 % — 2 или VAT_10\r\n *\r\n ** 20 % — 7 или VAT_20\r\n *\r\n * Если не заполнено, Маркет устанавливает ставку, соответствующую схеме налогообложения.\r\n *\r\n * Пример: VAT_20\r\n */\r\n vat: Vat\r\n /**\r\n * **Характеристики, которые есть только у товаров конкретной категории**\r\n *\r\n * Кроме общих свойств, у товара есть характеристики, присущие конкретной категории, к которой он относится. Например, у велосипеда есть размер рамы, а детское пюре бывает овощное, мясное или фруктовое.\r\n */\r\n params?: IParam[]\r\n /**\r\n * **Свойства товара**\r\n *\r\n * *не YML поле\r\n */\r\n properties?: IParam[]\r\n /**\r\n * **Теги**\r\n *\r\n * Придумайте любое название — его можно будет изменить после.\r\n *\r\n * Максимальная длина тега — 20 символов.\r\n *\r\n * У одного товара — максимум 10 тегов.\r\n *\r\n * Всего можно создать не больше 50 разных тегов.\r\n *\r\n * Пример: apple, до 500 рублей\r\n */\r\n tags?: string[]\r\n /**\r\n * **Товар для взрослых**\r\n *\r\n * Параметр включает для товара пометку 18+. Устанавливайте ее только для товаров, которые относятся к удовлетворению сексуальных потребностей.\r\n */\r\n adult?: boolean\r\n /**\r\n * **Цифровой товар**\r\n *\r\n * Параметр, устанавливаемый для цифровых товаров, которые просто скачиваются.\r\n */\r\n downloadable?: boolean\r\n /**\r\n * **Срок годности**\r\n *\r\n * Период с момента изготовления, по прошествии которого товар становится непригоден.\r\n *\r\n * Указывайте срок, указанный на банке или упаковке. Текущая дата, дата поставки или дата отгрузки значения не имеет.\r\n *\r\n * Срок можно указывать в годах, месяцах, днях, неделях и часах.\r\n *\r\n * Обязательно указывайте срок, если он есть.\r\n *\r\n * Продолжительность указывается согласно ISO 8601, то есть в виде строчки, начинающейся буквой P:\r\n *\r\n ** P1Y — 1 год;\r\n ** P1Y6M — 1 год и 6 месяцев;\r\n ** P15D — 15 дней.\r\n */\r\n validityPeriod?: string\r\n /**\r\n * **Комментарий к сроку годности**\r\n *\r\n * Поле предназначено для описаний условий хранения.\r\n *\r\n * Не длиннее 250 знаков и без спецсимволов.\r\n *\r\n * Пример: Хранить в сухом помещении\r\n */\r\n validityComment?: string\r\n /**\r\n * **Срок службы**\r\n *\r\n * В течение срока службы товар должен исправно выполнять свою функцию.\r\n *\r\n * Обязательно указывайте срок, если он есть.\r\n *\r\n * Срок можно указывать в годах, месяцах и днях.\r\n * Продолжительность указывается согласно ISO 8601, то есть в виде строчки, начинающейся буквой P:\r\n *\r\n ** P1Y — 1 год;\r\n ** P1Y2M — 1 год и 2 месяца;\r\n ** P15D — 15 дней;\r\n ** P2Y10D — 2 года, 10 дней;\r\n ** P2Y6M10D — 2 года, 6 месяцев и 10 дней.\r\n */\r\n serviceLifePeriod?: string\r\n /**\r\n * **Комментарий к сроку службы**\r\n *\r\n * Поле предназначено для описаний условий использования.\r\n *\r\n * Не длиннее 250 знаков и без спецсимволов.\r\n *\r\n * Пример: Использовать при температуре не ниже −10 градусов\r\n */\r\n serviceLifeComment?: string\r\n /**\r\n * **Гарантийный срок**\r\n *\r\n * В течение какого времени можно бесплатно заменить или починить товар.\r\n *\r\n * Срок можно указывать в годах, месяцах или днях.\r\n *\r\n * Продолжительность указывается согласно ISO 8601, то есть в виде строчки, начинающейся буквой P:\r\n *\r\n ** P1Y — 1 год;\r\n ** P1Y2M — 1 год и 2 месяца;\r\n ** P15D — 15 дней;\r\n ** P2Y10D — 2 года, 10 дней;\r\n ** P2Y6M10D — 2 года, 6 месяцев и 10 дней.\r\n */\r\n warrantyPeriod?: string\r\n /**\r\n * **Комментарий к гарантийному сроку**\r\n *\r\n * Поле предназначено для описания особенностей гарантийных условий.\r\n *\r\n * Указывайте только то, что относится к гарантии изготовителя.\r\n *\r\n * Не длиннее 250 знаков и без спецсимволов.\r\n *\r\n * Пример: Гарантия на аккумулятор — 6 месяцев\r\n */\r\n warrantyComment?: string\r\n /**\r\n * **Официальная гарантия производителя**\r\n */\r\n manufacturerWarranty?: boolean\r\n /**\r\n * **Номер документа**\r\n *\r\n * Номер документа на товар: сертификата, декларации соответствия и т. п.\r\n *\r\n * Прежде чем указывать номер документа, загрузите скан документа через кабинет.\r\n *\r\n * Укажите номер документа.\r\n *\r\n * Пример: 6241421\r\n */\r\n certificate?: string\r\n}\r\n\r\nexport enum Vat {\r\n NO_VAT = 'NO_VAT',\r\n VAT_0 = 'VAT_0',\r\n VAT_10 = 'VAT_10',\r\n VAT_20 = 'VAT_20'\r\n}\r\n\r\nexport enum Currency {\r\n RUR = 'RUR',\r\n BYN = 'BYN',\r\n EUR = 'EUR',\r\n USD = 'USD',\r\n UAN = 'UAN',\r\n KZT = 'KZT'\r\n}\r\n\r\nexport interface IParam {\r\n /**\r\n * **Название характеристики**\r\n */\r\n key: string\r\n /**\r\n * **Значение**\r\n */\r\n value: string\r\n}\r\n"],"names":["Extension","__publicField","json2csv","XMLBuilder","utils","writeXLSX","fs","Vat","Currency"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { json2csv } from 'json-2-csv';
2
- import xlsx from 'xlsx';
2
+ import xlsx, { utils, writeXLSX } from 'xlsx';
3
3
  import { XMLBuilder } from 'fast-xml-parser';
4
4
  import deepcopy from 'deepcopy';
5
5
  import * as fs from 'fs';
@@ -128,7 +128,7 @@ class InsalesFormatter {
128
128
  const workBook = xlsx.utils.book_new();
129
129
  const productsWorkSheet = xlsx.utils.json_to_sheet(data);
130
130
  xlsx.utils.book_append_sheet(workBook, productsWorkSheet, "products");
131
- return xlsx.write(workBook, { bookType: "xlsx", type: "buffer" }).toString();
131
+ return xlsx.write(workBook, { bookType: "xlsx", type: "buffer" });
132
132
  }
133
133
  }
134
134
 
@@ -265,16 +265,16 @@ class TgShopFormatter {
265
265
  description: product.description,
266
266
  shortDescription: product.description,
267
267
  quantityInStock: product.count,
268
- color: getParameter(product, "color"),
269
- size: getParameter(product, "size"),
268
+ color: getParameter(product, "color")?.value,
269
+ size: getParameter(product, "size")?.value,
270
270
  priority: void 0
271
271
  }));
272
272
  const workBook = xlsx.utils.book_new();
273
273
  const productsWorkSheet = xlsx.utils.json_to_sheet(productsData);
274
274
  const categoriesWorkSheet = xlsx.utils.json_to_sheet(categories ?? []);
275
- xlsx.utils.book_append_sheet(workBook, productsWorkSheet, "offers");
276
275
  xlsx.utils.book_append_sheet(workBook, categoriesWorkSheet, "categories");
277
- return xlsx.write(workBook, { bookType: "xlsx", type: "buffer" }).toString();
276
+ xlsx.utils.book_append_sheet(workBook, productsWorkSheet, "offers");
277
+ return xlsx.write(workBook, { bookType: "xlsx", type: "buffer" });
278
278
  }
279
279
  }
280
280
 
@@ -313,10 +313,10 @@ class ExcelFormatter {
313
313
  ...getParams(product),
314
314
  ...getProperties(product)
315
315
  }));
316
- const workBook = xlsx.utils.book_new();
317
- const productsWorkSheet = xlsx.utils.json_to_sheet(data);
318
- xlsx.utils.book_append_sheet(workBook, productsWorkSheet, "products");
319
- return xlsx.write(workBook, { bookType: "xlsx", type: "buffer" }).toString();
316
+ const workBook = utils.book_new();
317
+ const productsWorkSheet = utils.json_to_sheet(data);
318
+ utils.book_append_sheet(workBook, productsWorkSheet, "products");
319
+ return writeXLSX(workBook, { type: "buffer" });
320
320
  }
321
321
  }
322
322
 
@@ -363,7 +363,10 @@ class GoodsExporter {
363
363
  return transformedProduct;
364
364
  });
365
365
  const data = await this.formatter.format(transformedProducts, categories, option);
366
- return this.exporter(Buffer.from(data, "utf-8"));
366
+ if (typeof data === "string") {
367
+ return this.exporter(Buffer.from(data, "utf-8"));
368
+ }
369
+ return this.exporter(data);
367
370
  }
368
371
  }
369
372
 
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../../src/formatter/formater.types.ts","../../src/formatter/Tilda.formatter.ts","../../src/formatter/CSV.formatter.ts","../../src/formatter/Insales.formatter.ts","../../src/formatter/YML.formatter.ts","../../src/formatter/TgShop.formatter.ts","../../src/formatter/Excel.formatter.ts","../../src/formatter/index.ts","../../src/exporter/goodsExporter.ts","../../src/types/Product.types.ts"],"sourcesContent":["import { type Category, type Product } from '../types'\r\n\r\nexport abstract class FormatterAbstract {\r\n public abstract formatterName: string\r\n public abstract fileExtension: Extension\r\n\r\n public abstract format (products: Product[], categories?: Category[], option?: FormatterOptions): Promise<string>\r\n}\r\n\r\nexport interface FormatterOptions {\r\n /**\r\n * **Название магазина**\r\n *\r\n * Используется в YML формате\r\n */\r\n shopName?: string\r\n /**\r\n * **Название компании**\r\n *\r\n * Используется в YML формате\r\n */\r\n companyName?: string\r\n /**\r\n * **Параметры в отдельных столбцах**\r\n *\r\n * Используется в CSV и XLSX формате\r\n */\r\n splitParams?: boolean\r\n}\r\n\r\nexport enum Extension {\r\n CSV = 'csv',\r\n YML = 'yml',\r\n XLSX = 'xlsx'\r\n}\r\n","import { type Category, type Product } from '../types'\r\nimport { json2csv } from 'json-2-csv'\r\nimport { Extension, type FormatterAbstract, type FormatterOptions } from './formater.types'\r\n\r\nexport class TildaFormatter implements FormatterAbstract {\r\n public formatterName = 'Tilda'\r\n public fileExtension = Extension.CSV\r\n\r\n public async format (products: Product[], categories?: Category[], option?: FormatterOptions): Promise<string> {\r\n const mappedCategories: Record<number, string> = {}\r\n categories?.forEach(({ id, name }) => (mappedCategories[id] = name))\r\n\r\n const data = products.map(product => ({\r\n SKU: product.vendorCode,\r\n Brand: product.vendor,\r\n Category: mappedCategories[product.categoryId],\r\n Title: product.title,\r\n Text: product.description,\r\n Photo: product.images?.join(';'),\r\n Price: product.price,\r\n 'Price Old': product.oldPrice,\r\n Quantity: product.count,\r\n Editions: product.params?.map(({ key, value }) => `${key}:${value}`).join(';'),\r\n 'External ID': product.variantId,\r\n 'Parent UID': product.parentId\r\n }))\r\n\r\n return json2csv(data, { emptyFieldValue: '', delimiter: { field: ';' } })\r\n }\r\n}\r\n","import { type Category, type Product } from '../types'\r\nimport { json2csv } from 'json-2-csv'\r\nimport { Extension, type FormatterAbstract, type FormatterOptions } from './formater.types'\r\n\r\nexport class CSVFormatter implements FormatterAbstract {\r\n public formatterName = 'CSV'\r\n public fileExtension = Extension.CSV\r\n\r\n public async format (products: Product[], categories?: Category[], option?: FormatterOptions): Promise<string> {\r\n const mappedCategories: Record<number, string> = {}\r\n categories?.forEach(({ id, name }) => (mappedCategories[id] = name))\r\n\r\n const getParams = (product: Product): Record<string, string> => {\r\n const params: Record<string, string> = {}\r\n\r\n if ((option?.splitParams) === false) { return params }\r\n\r\n product.params?.forEach(({ key, value }) => (params[`Param [${key}]`] = value))\r\n return params\r\n }\r\n\r\n const getProperties = (product: Product): Record<string, string> => {\r\n const properties: Record<string, string> = {}\r\n\r\n if ((option?.splitParams) === false) { return properties }\r\n\r\n product.properties?.forEach(({ key, value }) => (properties[`Property [${key}]`] = value))\r\n return properties\r\n }\r\n\r\n const data = products.map(product => ({\r\n ...product,\r\n category: mappedCategories[product.categoryId],\r\n images: product.images?.join(','),\r\n videos: product.videos?.join(','),\r\n tags: product.tags?.join(','),\r\n codesTN: product.codesTN?.join(', '),\r\n params: product.params?.map(({ key, value }) => `${key}=${value}`).join(','),\r\n ...getParams(product),\r\n ...getProperties(product)\r\n }))\r\n return json2csv(data, { emptyFieldValue: '' })\r\n }\r\n}\r\n","import { type Category, type Product } from '../types'\r\nimport { Extension, type FormatterAbstract, type FormatterOptions } from './formater.types'\r\nimport xlsx from 'xlsx'\r\n\r\nexport class InsalesFormatter implements FormatterAbstract {\r\n public formatterName = 'Insales'\r\n public fileExtension = Extension.XLSX\r\n\r\n public async format (products: Product[], categories?: Category[], option?: FormatterOptions): Promise<string> {\r\n const mappedCategories: Record<number, string> = {}\r\n categories?.forEach(({ id, name }) => (mappedCategories[id] = name))\r\n\r\n const getParams = (product: Product): Record<string, string> => {\r\n const properties: Record<string, string> = {}\r\n\r\n product.params?.forEach(p => (properties[`Параметр: ${p.key}`] = p.value))\r\n\r\n return properties\r\n }\r\n const getProperties = (product: Product): Record<string, string> => {\r\n const properties: Record<string, string> = {}\r\n\r\n product.properties?.forEach(p => (properties[`Свойство: ${p.key}`] = p.value))\r\n\r\n return properties\r\n }\r\n\r\n const data = products.map(product => ({\r\n 'Параметр: Дата выхода': product.saleDate,\r\n 'Название товара или услуги': product.title,\r\n 'Изображение варианта': product.images?.join(' '),\r\n 'Краткое описание': undefined,\r\n 'Полное описание': product.description,\r\n Изображения: product.images?.join(' '),\r\n 'Цена продажи': product.price,\r\n Артикул: product.vendorCode,\r\n ...getParams(product),\r\n ...getProperties(product)\r\n }))\r\n const workBook = xlsx.utils.book_new()\r\n const productsWorkSheet = xlsx.utils.json_to_sheet(data)\r\n\r\n xlsx.utils.book_append_sheet(workBook, productsWorkSheet, 'products')\r\n\r\n return xlsx.write(workBook, { bookType: 'xlsx', type: 'buffer' }).toString()\r\n }\r\n}\r\n","import { XMLBuilder } from 'fast-xml-parser'\r\nimport { type Product, type Category } from '../types'\r\nimport { Extension, type FormatterAbstract, type FormatterOptions } from './formater.types'\r\n\r\nexport class YMLFormatter implements FormatterAbstract {\r\n public formatterName = 'YMl'\r\n public fileExtension = Extension.YML\r\n private readonly builder = new XMLBuilder({\r\n ignoreAttributes: false,\r\n format: true,\r\n cdataPropName: '__cdata'\r\n })\r\n\r\n public async format (products: Product[], categories?: Category[], options?: FormatterOptions): Promise<string> {\r\n const mappedCategories = {\r\n category: categories?.map(cat => ({\r\n '@_id': cat.id, '@_parentId': cat.parentId, '#text': cat.name\r\n }))\r\n }\r\n const shopName = options?.shopName ?? 'ShopName'\r\n const companyName = options?.companyName ?? 'CompanyName'\r\n const offers = { offer: products.map(this.getOffers) }\r\n const result = {\r\n '?xml': {\r\n '@_version': '1.0',\r\n '@_encoding': 'UTF-8',\r\n '@_standalone': 'yes'\r\n },\r\n yml_catalog: {\r\n '@_date': new Date().toISOString().replace(/.\\d+Z/, ''),\r\n shop: {\r\n name: shopName,\r\n company: companyName,\r\n categories: mappedCategories,\r\n offers\r\n }\r\n }\r\n }\r\n\r\n return this.builder.build(result)\r\n }\r\n\r\n private getOffers (product: Product): any {\r\n const result = {\r\n '@_id': product.variantId,\r\n name: product.title,\r\n price: product.price,\r\n oldprice: product.oldPrice,\r\n purchase_price: product.purchasePrice,\r\n additional_expenses: product.additionalExpenses,\r\n cofinance_price: product.cofinancePrice,\r\n currencyId: product.currency,\r\n categoryId: product.categoryId,\r\n vendor: product.vendor,\r\n vendorCode: product.vendorCode,\r\n picture: product.images,\r\n video: product.videos,\r\n available: product.available,\r\n 'min-quantity': product.minQuantity,\r\n 'step-quantity': product.stepQuantity,\r\n param: product.params?.map(param => ({\r\n '#text': param.value,\r\n '@_name': param.key\r\n })),\r\n description: {\r\n __cdata: product.description\r\n },\r\n country_of_origin: product.countryOfOrigin,\r\n barcode: product.barcode,\r\n vat: product.vat,\r\n count: product.count,\r\n 'set-ids': product.tags?.join(', '),\r\n adult: product.adult,\r\n downloadable: product.downloadable,\r\n 'period-of-validity-days': product.validityPeriod,\r\n 'comment-validity-days': product.validityComment,\r\n 'service-life-days': product.serviceLifePeriod,\r\n 'comment-life-days': product.serviceLifeComment,\r\n 'warranty-days': product.warrantyPeriod,\r\n 'comment-warranty': product.warrantyComment,\r\n manufacturer_warranty: product.manufacturerWarranty,\r\n certificate: product.certificate,\r\n url: product.url,\r\n weight: product.weight,\r\n dimensions: product.dimensions,\r\n boxCount: product.boxCount,\r\n disabled: product.disabled,\r\n age: (product.age != null) && {\r\n '@_unit': product.age.unit,\r\n '#text': product.age.value\r\n },\r\n 'tn-ved-codes': ((product.codesTN?.length) != null) && {\r\n 'tn-ved-code': product.codesTN\r\n }\r\n }\r\n if (product.parentId !== undefined) {\r\n return {\r\n ...result,\r\n '@_group_id': product.parentId\r\n }\r\n }\r\n return result\r\n }\r\n}\r\n","import { type Category, type IParam, type Product } from '../types'\r\nimport xlsx from 'xlsx'\r\nimport { Extension, type FormatterAbstract, type FormatterOptions } from './formater.types'\r\n\r\nexport class TgShopFormatter implements FormatterAbstract {\r\n public formatterName = 'TgShop'\r\n public fileExtension = Extension.XLSX\r\n\r\n public async format (products: Product[], categories?: Category[], option?: FormatterOptions): Promise<string> {\r\n const getParameter = (product: Product, key: string): IParam | undefined => product.params?.find((value) => (value.key === key))\r\n const productsData = products.map(product => ({\r\n 'category id': product.categoryId,\r\n 'group id': product.parentId,\r\n 'id product': product.variantId,\r\n 'name product': product.title,\r\n price: product.price,\r\n picture: product.images?.join(', '),\r\n vendorCode: product.vendorCode,\r\n oldprice: product.oldPrice,\r\n description: product.description,\r\n shortDescription: product.description,\r\n quantityInStock: product.count,\r\n color: getParameter(product, 'color'),\r\n size: getParameter(product, 'size'),\r\n priority: undefined\r\n }))\r\n\r\n const workBook = xlsx.utils.book_new()\r\n const productsWorkSheet = xlsx.utils.json_to_sheet(productsData)\r\n const categoriesWorkSheet = xlsx.utils.json_to_sheet(categories ?? [])\r\n\r\n xlsx.utils.book_append_sheet(workBook, productsWorkSheet, 'offers')\r\n xlsx.utils.book_append_sheet(workBook, categoriesWorkSheet, 'categories')\r\n\r\n return xlsx.write(workBook, { bookType: 'xlsx', type: 'buffer' }).toString()\r\n }\r\n}\r\n","import { type Category, type Product } from '../types'\r\nimport { Extension, type FormatterAbstract, type FormatterOptions } from './formater.types'\r\nimport xlsx from 'xlsx'\r\n\r\nexport class ExcelFormatter implements FormatterAbstract {\r\n public formatterName = 'Excel'\r\n public fileExtension = Extension.XLSX\r\n\r\n public async format (products: Product[], categories?: Category[], option?: FormatterOptions): Promise<string> {\r\n const mappedCategories: Record<number, string> = {}\r\n categories?.forEach(({ id, name }) => (mappedCategories[id] = name))\r\n\r\n const getParams = (product: Product): Record<string, string> => {\r\n const params: Record<string, string> = {}\r\n product.params?.forEach(({ key, value }) => (params[`Param [${key}]`] = value))\r\n return params\r\n }\r\n\r\n const getProperties = (product: Product): Record<string, string> => {\r\n const properties: Record<string, string> = {}\r\n product.properties?.forEach(({ key, value }) => (properties[`Property [${key}]`] = value))\r\n return properties\r\n }\r\n\r\n const data = products.map(product => ({\r\n ...product,\r\n category: mappedCategories[product.categoryId],\r\n images: product.images?.join(','),\r\n videos: product.videos?.join(','),\r\n tags: product.tags?.join(','),\r\n codesTN: product.codesTN?.join(', '),\r\n params: product.params?.map(({ key, value }) => `${key}=${value}`).join(','),\r\n ...getParams(product),\r\n ...getProperties(product)\r\n }))\r\n const workBook = xlsx.utils.book_new()\r\n const productsWorkSheet = xlsx.utils.json_to_sheet(data)\r\n\r\n xlsx.utils.book_append_sheet(workBook, productsWorkSheet, 'products')\r\n\r\n return xlsx.write(workBook, { bookType: 'xlsx', type: 'buffer' }).toString()\r\n }\r\n}\r\n","import { TildaFormatter } from './Tilda.formatter'\r\nimport { CSVFormatter } from './CSV.formatter'\r\nimport { InsalesFormatter } from './Insales.formatter'\r\nimport { YMLFormatter } from './YML.formatter'\r\nimport { TgShopFormatter } from './TgShop.formatter'\r\nimport { ExcelFormatter } from './Excel.formatter'\r\n\r\nexport * from './formater.types'\r\n\r\nexport const Formatters = {\r\n TildaFormatter,\r\n CSVFormatter,\r\n InsalesFormatter,\r\n YMLFormatter,\r\n TgShopFormatter,\r\n ExcelFormatter\r\n}\r\n","import { type FormatterAbstract, type FormatterOptions, Formatters } from '../formatter'\r\nimport { type Exporter, type Transformer } from './exporter.types'\r\nimport { type Category, type Product } from '../types'\r\nimport deepcopy from 'deepcopy'\r\nimport * as fs from 'fs'\r\n\r\nexport class GoodsExporter {\r\n private formatter: FormatterAbstract = new Formatters.YMLFormatter()\r\n private exporter: Exporter = (data: Buffer) => {\r\n const filename = `${this.formatter.formatterName}.output.${this.formatter.fileExtension}`\r\n fs.writeFileSync(filename, data)\r\n return data\r\n }\r\n\r\n private transformers = new Array<Transformer>()\r\n\r\n public setTransformers (transformers: Transformer[]): void {\r\n this.transformers = transformers\r\n }\r\n\r\n public setFormatter (formatter: FormatterAbstract): void {\r\n this.formatter = formatter\r\n }\r\n\r\n public setExporter (exporter: Exporter): void {\r\n this.exporter = exporter\r\n }\r\n\r\n async export<T>(products: Product[], categories?: Category[], option?: FormatterOptions): Promise<T> {\r\n const transformedProducts = deepcopy(products).map(product => {\r\n let transformedProduct: Product = product\r\n this.transformers.forEach(transformer => {\r\n transformedProduct = transformer(transformedProduct)\r\n })\r\n return transformedProduct\r\n })\r\n const data = await this.formatter.format(transformedProducts, categories, option)\r\n return this.exporter(Buffer.from(data, 'utf-8'))\r\n }\r\n}\r\n","export interface Product {\r\n /**\r\n * **ID товара**\r\n *\r\n * Любая последовательность длиной до 80 знаков. В нее могут входить английские и русские (кроме ё) буквы, цифры и символы . , / \\ ( ) [ ] - = _\r\n *\r\n * Пример: belaya-kofta-12345\r\n */\r\n productId: number\r\n /**\r\n * **Родительскй SKU**\r\n *\r\n * Любая последовательность длиной до 80 знаков. В нее могут входить английские и русские (кроме ё) буквы, цифры и символы . , / \\ ( ) [ ] - = _\r\n *\r\n * Пример: belaya-kofta-12345\r\n */\r\n parentId?: number\r\n /**\r\n * **SKU**\r\n *\r\n * Любая последовательность длиной до 80 знаков. В нее могут входить английские и русские (кроме ё) буквы, цифры и символы . , / \\ ( ) [ ] - = _\r\n *\r\n * Пример: belaya-kofta-12345\r\n */\r\n variantId: number\r\n /**\r\n * **Название**\r\n *\r\n * Составляйте название по схеме: тип + бренд или производитель + модель + особенности, если есть (например, цвет, размер или вес) и количество в упаковке.\r\n *\r\n * Не включайте в название условия продажи (например, «скидка», «бесплатная доставка» и т. д.), эмоциональные характеристики («хит», «супер» и т. д.). Не пишите слова большими буквами — кроме устоявшихся названий брендов и моделей.\r\n *\r\n * Оптимальная длина — 50–60 символов, максимальная — 150.\r\n *\r\n * Составлять хорошие названия помогут [рекомендации](https://yandex.ru/support/marketplace/assortment/fields/title.html).\r\n *\r\n * Пример: Ударная дрель Makita HP1630, 710 Вт\r\n */\r\n title: string\r\n /**\r\n * **Описание**\r\n *\r\n * Подробное описание товара: например, его преимущества и особенности.\r\n *\r\n * Не давайте в описании инструкций по установке и сборке. Не используйте слова «скидка», «распродажа», «дешевый», «подарок» (кроме подарочных категорий), «бесплатно», «акция», «специальная цена», «новинка», «new», «аналог», «заказ», «хит». Не указывайте никакой контактной информации и не давайте ссылок.\r\n *\r\n * Можно использовать теги:\r\n *\r\n ** &lt;h&gt;, &lt;h1&gt;, &lt;h2&gt; и так далее — для заголовков;\r\n ** &lt;br&gt; и &lt;p&gt; — для переноса строки;\r\n ** &lt;ol&gt; — для нумерованного списка;\r\n ** &lt;ul&gt; — для маркированного списка;\r\n ** &lt;li&gt; — для создания элементов списка (должен находиться внутри &lt;ol&gt; или &lt;ul&gt;);\r\n ** &lt;div&gt; — поддерживается, но не влияет на отображение текста.\r\n * Оптимальная длина — 400–600 символов, максимальная — 6000.\r\n *\r\n * Составить хорошее описание помогут рекомендации.\r\n *\r\n * Пример: В комплекте с детским микроскопом есть все, что нужно вашему ребенку для изучения микромира\r\n */\r\n description: string\r\n /**\r\n * **Бренд**\r\n *\r\n * Название бренда или производителя.\r\n *\r\n * Записывайте название так, как его пишет сам бренд.\r\n *\r\n * Пример: LEVENHUK\r\n */\r\n vendor?: string\r\n /**\r\n * **Артикул производителя**\r\n *\r\n * Код товара, который ему присвоил производитель.\r\n *\r\n * Если артикулов несколько, укажите их через запятую.\r\n *\r\n * Пример: VNDR-0005A, VNDR-0005B\r\n */\r\n vendorCode?: string\r\n /**\r\n * **Дата выхода**\r\n *\r\n * Пример: 01.01.2000\r\n */\r\n saleDate?: string\r\n /**\r\n * **Категория в магазине**\r\n *\r\n * Категория, к которой вы относите товар. Она помогает точнее определить для товара категорию на Маркете.\r\n *\r\n * Указывайте конкретные категории — например, набор ножей лучше отнести к категории Столовые приборы, а не просто Посуда.\r\n *\r\n * Выбирайте категории, которые описывают товар, а не абстрактный признак — например, лучше указать Духи, а не Подарки.\r\n *\r\n * Содержит номер категории, а не ее название.\r\n */\r\n categoryId: number\r\n /**\r\n * **Страна производства**\r\n *\r\n * Страна, где был произведен товар.\r\n *\r\n * Записывайте названия стран так, как они записаны в [списке](https://yastatic.net/s3/doc-binary/src/support/market/ru/countries.xlsx).\r\n *\r\n * Пример: Россия\r\n */\r\n countryOfOrigin?: string\r\n /**\r\n * **Изображение**\r\n *\r\n * До двадцати изображений, которые показываются на карточке товара.\r\n *\r\n * Принимаются jpg- или png-изображения товара, соответствующие [требованиям](https://yandex.ru/support/marketplace/assortment/fields/images.html).\r\n *\r\n * В кабинете изображения добавляются в виде файлов. В Excel-файле — в виде ссылок через запятую. Первое фото становится основным.\r\n *\r\n * Чтобы изменить изображение, выложите новое по новой ссылке, иначе картинка не обновится.\r\n */\r\n images?: string[]\r\n /**\r\n * **Видео**\r\n *\r\n * Видеоиллюстрации для карточки товара.\r\n *\r\n * Видео должно соответствовать [требованиям](https://yandex.ru/support/marketplace/assortment/fields/video.html).\r\n *\r\n * Можно добавить не больше 6 видео.\r\n *\r\n * В кабинете можно загрузить видеофайлы. В Excel-шаблоне укажите ссылки на файлы.\r\n */\r\n videos?: string[]\r\n /**\r\n * **Базовая цена**\r\n *\r\n * Цена указывается в рублях. Число должно быть целым.\r\n *\r\n * Пример:\r\n *\r\n * 240\r\n */\r\n price: number\r\n /**\r\n * **Цена до скидки**\r\n *\r\n * Цена указывается в рублях. Число должно быть целым.\r\n *\r\n * Вы можете указать цену со скидкой от 5 до 75 %.\r\n *\r\n * Пример:\r\n *\r\n * 250\r\n */\r\n oldPrice?: number\r\n /**\r\n * **Себестоимость**\r\n *\r\n * Цена указывается в рублях. Число должно быть целым.\r\n *\r\n * Пример:\r\n *\r\n * 200\r\n */\r\n purchasePrice?: number\r\n /**\r\n * **Дополнительные расходы**\r\n *\r\n * Дополнительные расходы на товар. Например, на доставку или упаковку.\r\n *\r\n * После заполнения этого поля в калькуляторе и на странице управления ценами рассчитается потенциальная маржинальность товара.\r\n *\r\n * Цена указывается в рублях. Число должно быть целым.\r\n *\r\n * Пример:\r\n *\r\n * 75\r\n */\r\n additionalExpenses?: number\r\n /**\r\n * **Порог для скидок с Маркетом**\r\n *\r\n * Цена указывается в рублях. Число должно быть целым.\r\n *\r\n * Пример:\r\n *\r\n * 300\r\n */\r\n cofinancePrice?: number\r\n /**\r\n * **Валюта (DBS)**\r\n *\r\n * Валюта, в которой указана цена товара. Покупателям Маркет показывает цену в рублях, пересчитывая ее по курсу Центробанка.\r\n *\r\n * Поле используется, если для кабинета еще не включена работа с базовыми ценами.\r\n *\r\n * Поддерживаются российские и белорусские рубли, евро, доллары, украинские гривны и казахстанские тенге.\r\n *\r\n * В кабинете валюту можно просто выбрать из списка. В Excel-файле указывается код валюты: RUR, BYN, EUR, USD, UAN, KZT.\r\n */\r\n currency: Currency\r\n /**\r\n * **Ссылка на страницу товара**\r\n *\r\n * Адрес страницы на вашем сайте с фотографиями и описанием товара.\r\n *\r\n * Максимальная длина URL — 512 символов. Записывайте его согласно стандарту RFC 3986.\r\n *\r\n * Пример: http://best.seller.ru/product_page.asp?pid=12346\r\n */\r\n url?: string\r\n /**\r\n * **Убрать из продажи**\r\n *\r\n * Поле позволяет приостановить продажу товара.\r\n *\r\n * Укажите значение true, если нужно приостановить продажу.\r\n */\r\n disabled?: boolean\r\n /**\r\n * **Доступное количество товара**\r\n *\r\n * Общее количество товара, доступное для продажи\r\n *\r\n * Укажите 0, если товара нет в наличии.\r\n *\r\n * Пример: 7\r\n */\r\n count?: number\r\n /**\r\n * **Товар в наличии (DBS)**\r\n *\r\n * Поле указывает, есть ли товар в наличии.\r\n */\r\n available?: boolean\r\n /**\r\n * **Минимальное количество товара**\r\n *\r\n * Если значение задано, покупатель не сможет заказать меньше единиц товара. Ограничение не работает, когда товара на складе осталось меньше этого количества — тогда покупатель сможет сделать заказ на остаток.\r\n *\r\n * Целое число.\r\n */\r\n minQuantity?: number\r\n /**\r\n * **Квант продажи**\r\n *\r\n * Если значение задано, покупатель сможет добавить к заказу только кратное количество товара. Ограничение не работает, когда на складе осталось меньше этого количества — тогда покупатель сможет сделать заказ на остаток.\r\n *\r\n * Целое число.\r\n */\r\n stepQuantity?: number\r\n /**\r\n * **Штрихкод**\r\n *\r\n * Указывайте в виде последовательности символов. Подойдут коды EAN-13, EAN-8, UPC-A, UPC-E или Code 128.\r\n *\r\n * Для книг указывайте ISBN.\r\n *\r\n * Для товаров [определенных категорий и торговых марок](https://yastatic.net/s3/doc-binary/src/support/market/ru/yandex-market-list-for-gtin.xlsx) штрихкод должен быть действительным кодом GTIN. Обратите внимание: внутренние штрихкоды, начинающиеся на 2 или 02, и коды формата Code 128 не являются GTIN.\r\n *\r\n * Если штрихкодов несколько, напишите все через запятую.\r\n *\r\n * Пример: 46012300000000\r\n */\r\n barcode?: string\r\n /**\r\n * **Код ТН ВЭД**\r\n *\r\n * Для некоторых категорий товаров код ТН ВЭД обязателен. Если это касается ваших товаров, вы получите уведомление в каталоге.\r\n *\r\n * 10 или 14 цифр без пробелов.\r\n *\r\n * Пример: 8517610008\r\n */\r\n codesTN?: string[]\r\n /**\r\n * **С какого возраста пользоваться**\r\n *\r\n * Если товар не предназначен для детей младше определенного возраста, укажите это.\r\n *\r\n * Возрастные ограничения можно задавать в годах (с нуля, с 6, 12, 16 или 18) или в месяцах (любое число от 0 до 12).\r\n */\r\n age?: { unit: 'year' | 'month', value: number }\r\n /**\r\n * **Вес с упаковкой**\r\n *\r\n * Вес товара с упаковкой.\r\n *\r\n * Единица измерения — килограммы. Можно дроби: разделитель — точка или запятая, не больше трех цифр после него.\r\n *\r\n * Пример: 3.1\r\n */\r\n weight?: number\r\n /**\r\n * **Габариты с упаковкой**\r\n *\r\n * Длина, ширина, высота в упаковке.\r\n *\r\n * Единица измерения — сантиметры. Можно дроби: разделитель — точка или запятая, не больше трех цифр после него.\r\n *\r\n * Пример: 20.1/20.551/22.5\r\n */\r\n dimensions?: string\r\n /**\r\n * **Товар занимает больше одного места**\r\n *\r\n * Если товар занимает одно место (представляет собой одну коробку, упаковку и так далее), оставьте поле пустым. Если товар занимает несколько мест — укажите их количество. Например, кондиционер занимает два места — внешний и внутренний блоки в двух коробках.\r\n *\r\n * Укажите количество мест.\r\n *\r\n * Пример: 2\r\n */\r\n boxCount?: number\r\n /**\r\n * **Ставка НДС**\r\n *\r\n * Значение ставки НДС для товара.\r\n *\r\n * Выберите одно из значений:\r\n *\r\n ** НДС не облагается — 6 или NO_VAT\r\n *\r\n ** 0 % — 5 или VAT_0\r\n *\r\n ** 10 % — 2 или VAT_10\r\n *\r\n ** 20 % — 7 или VAT_20\r\n *\r\n * Если не заполнено, Маркет устанавливает ставку, соответствующую схеме налогообложения.\r\n *\r\n * Пример: VAT_20\r\n */\r\n vat: Vat\r\n /**\r\n * **Характеристики, которые есть только у товаров конкретной категории**\r\n *\r\n * Кроме общих свойств, у товара есть характеристики, присущие конкретной категории, к которой он относится. Например, у велосипеда есть размер рамы, а детское пюре бывает овощное, мясное или фруктовое.\r\n */\r\n params?: IParam[]\r\n /**\r\n * **Свойства товара**\r\n *\r\n * *не YML поле\r\n */\r\n properties?: IParam[]\r\n /**\r\n * **Теги**\r\n *\r\n * Придумайте любое название — его можно будет изменить после.\r\n *\r\n * Максимальная длина тега — 20 символов.\r\n *\r\n * У одного товара — максимум 10 тегов.\r\n *\r\n * Всего можно создать не больше 50 разных тегов.\r\n *\r\n * Пример: apple, до 500 рублей\r\n */\r\n tags?: string[]\r\n /**\r\n * **Товар для взрослых**\r\n *\r\n * Параметр включает для товара пометку 18+. Устанавливайте ее только для товаров, которые относятся к удовлетворению сексуальных потребностей.\r\n */\r\n adult?: boolean\r\n /**\r\n * **Цифровой товар**\r\n *\r\n * Параметр, устанавливаемый для цифровых товаров, которые просто скачиваются.\r\n */\r\n downloadable?: boolean\r\n /**\r\n * **Срок годности**\r\n *\r\n * Период с момента изготовления, по прошествии которого товар становится непригоден.\r\n *\r\n * Указывайте срок, указанный на банке или упаковке. Текущая дата, дата поставки или дата отгрузки значения не имеет.\r\n *\r\n * Срок можно указывать в годах, месяцах, днях, неделях и часах.\r\n *\r\n * Обязательно указывайте срок, если он есть.\r\n *\r\n * Продолжительность указывается согласно ISO 8601, то есть в виде строчки, начинающейся буквой P:\r\n *\r\n ** P1Y — 1 год;\r\n ** P1Y6M — 1 год и 6 месяцев;\r\n ** P15D — 15 дней.\r\n */\r\n validityPeriod?: string\r\n /**\r\n * **Комментарий к сроку годности**\r\n *\r\n * Поле предназначено для описаний условий хранения.\r\n *\r\n * Не длиннее 250 знаков и без спецсимволов.\r\n *\r\n * Пример: Хранить в сухом помещении\r\n */\r\n validityComment?: string\r\n /**\r\n * **Срок службы**\r\n *\r\n * В течение срока службы товар должен исправно выполнять свою функцию.\r\n *\r\n * Обязательно указывайте срок, если он есть.\r\n *\r\n * Срок можно указывать в годах, месяцах и днях.\r\n * Продолжительность указывается согласно ISO 8601, то есть в виде строчки, начинающейся буквой P:\r\n *\r\n ** P1Y — 1 год;\r\n ** P1Y2M — 1 год и 2 месяца;\r\n ** P15D — 15 дней;\r\n ** P2Y10D — 2 года, 10 дней;\r\n ** P2Y6M10D — 2 года, 6 месяцев и 10 дней.\r\n */\r\n serviceLifePeriod?: string\r\n /**\r\n * **Комментарий к сроку службы**\r\n *\r\n * Поле предназначено для описаний условий использования.\r\n *\r\n * Не длиннее 250 знаков и без спецсимволов.\r\n *\r\n * Пример: Использовать при температуре не ниже −10 градусов\r\n */\r\n serviceLifeComment?: string\r\n /**\r\n * **Гарантийный срок**\r\n *\r\n * В течение какого времени можно бесплатно заменить или починить товар.\r\n *\r\n * Срок можно указывать в годах, месяцах или днях.\r\n *\r\n * Продолжительность указывается согласно ISO 8601, то есть в виде строчки, начинающейся буквой P:\r\n *\r\n ** P1Y — 1 год;\r\n ** P1Y2M — 1 год и 2 месяца;\r\n ** P15D — 15 дней;\r\n ** P2Y10D — 2 года, 10 дней;\r\n ** P2Y6M10D — 2 года, 6 месяцев и 10 дней.\r\n */\r\n warrantyPeriod?: string\r\n /**\r\n * **Комментарий к гарантийному сроку**\r\n *\r\n * Поле предназначено для описания особенностей гарантийных условий.\r\n *\r\n * Указывайте только то, что относится к гарантии изготовителя.\r\n *\r\n * Не длиннее 250 знаков и без спецсимволов.\r\n *\r\n * Пример: Гарантия на аккумулятор — 6 месяцев\r\n */\r\n warrantyComment?: string\r\n /**\r\n * **Официальная гарантия производителя**\r\n */\r\n manufacturerWarranty?: boolean\r\n /**\r\n * **Номер документа**\r\n *\r\n * Номер документа на товар: сертификата, декларации соответствия и т. п.\r\n *\r\n * Прежде чем указывать номер документа, загрузите скан документа через кабинет.\r\n *\r\n * Укажите номер документа.\r\n *\r\n * Пример: 6241421\r\n */\r\n certificate?: string\r\n}\r\n\r\nexport enum Vat {\r\n NO_VAT = 'NO_VAT',\r\n VAT_0 = 'VAT_0',\r\n VAT_10 = 'VAT_10',\r\n VAT_20 = 'VAT_20'\r\n}\r\n\r\nexport enum Currency {\r\n RUR = 'RUR',\r\n BYN = 'BYN',\r\n EUR = 'EUR',\r\n USD = 'USD',\r\n UAN = 'UAN',\r\n KZT = 'KZT'\r\n}\r\n\r\nexport interface IParam {\r\n /**\r\n * **Название характеристики**\r\n */\r\n key: string\r\n /**\r\n * **Значение**\r\n */\r\n value: string\r\n}\r\n"],"names":["Extension","__publicField","Vat","Currency"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","sources":["../../src/formatter/formater.types.ts","../../src/formatter/Tilda.formatter.ts","../../src/formatter/CSV.formatter.ts","../../src/formatter/Insales.formatter.ts","../../src/formatter/YML.formatter.ts","../../src/formatter/TgShop.formatter.ts","../../src/formatter/Excel.formatter.ts","../../src/formatter/index.ts","../../src/exporter/goodsExporter.ts","../../src/types/Product.types.ts"],"sourcesContent":["import { type Category, type Product } from '../types'\r\n\r\nexport abstract class FormatterAbstract {\r\n public abstract formatterName: string\r\n public abstract fileExtension: Extension\r\n\r\n public abstract format (products: Product[], categories?: Category[], option?: FormatterOptions): Promise<Buffer | string>\r\n}\r\n\r\nexport interface FormatterOptions {\r\n /**\r\n * **Название магазина**\r\n *\r\n * Используется в YML формате\r\n */\r\n shopName?: string\r\n /**\r\n * **Название компании**\r\n *\r\n * Используется в YML формате\r\n */\r\n companyName?: string\r\n /**\r\n * **Параметры в отдельных столбцах**\r\n *\r\n * Используется в CSV и XLSX формате\r\n */\r\n splitParams?: boolean\r\n}\r\n\r\nexport enum Extension {\r\n CSV = 'csv',\r\n YML = 'yml',\r\n XLSX = 'xlsx'\r\n}\r\n","import { type Category, type Product } from '../types'\r\nimport { json2csv } from 'json-2-csv'\r\nimport { Extension, type FormatterAbstract, type FormatterOptions } from './formater.types'\r\n\r\nexport class TildaFormatter implements FormatterAbstract {\r\n public formatterName = 'Tilda'\r\n public fileExtension = Extension.CSV\r\n\r\n public async format (products: Product[], categories?: Category[], option?: FormatterOptions): Promise<string> {\r\n const mappedCategories: Record<number, string> = {}\r\n categories?.forEach(({ id, name }) => (mappedCategories[id] = name))\r\n\r\n const data = products.map(product => ({\r\n SKU: product.vendorCode,\r\n Brand: product.vendor,\r\n Category: mappedCategories[product.categoryId],\r\n Title: product.title,\r\n Text: product.description,\r\n Photo: product.images?.join(';'),\r\n Price: product.price,\r\n 'Price Old': product.oldPrice,\r\n Quantity: product.count,\r\n Editions: product.params?.map(({ key, value }) => `${key}:${value}`).join(';'),\r\n 'External ID': product.variantId,\r\n 'Parent UID': product.parentId\r\n }))\r\n\r\n return json2csv(data, { emptyFieldValue: '', delimiter: { field: ';' } })\r\n }\r\n}\r\n","import { type Category, type Product } from '../types'\r\nimport { json2csv } from 'json-2-csv'\r\nimport { Extension, type FormatterAbstract, type FormatterOptions } from './formater.types'\r\n\r\nexport class CSVFormatter implements FormatterAbstract {\r\n public formatterName = 'CSV'\r\n public fileExtension = Extension.CSV\r\n\r\n public async format (products: Product[], categories?: Category[], option?: FormatterOptions): Promise<string> {\r\n const mappedCategories: Record<number, string> = {}\r\n categories?.forEach(({ id, name }) => (mappedCategories[id] = name))\r\n\r\n const getParams = (product: Product): Record<string, string> => {\r\n const params: Record<string, string> = {}\r\n\r\n if ((option?.splitParams) === false) { return params }\r\n\r\n product.params?.forEach(({ key, value }) => (params[`Param [${key}]`] = value))\r\n return params\r\n }\r\n\r\n const getProperties = (product: Product): Record<string, string> => {\r\n const properties: Record<string, string> = {}\r\n\r\n if ((option?.splitParams) === false) { return properties }\r\n\r\n product.properties?.forEach(({ key, value }) => (properties[`Property [${key}]`] = value))\r\n return properties\r\n }\r\n\r\n const data = products.map(product => ({\r\n ...product,\r\n category: mappedCategories[product.categoryId],\r\n images: product.images?.join(','),\r\n videos: product.videos?.join(','),\r\n tags: product.tags?.join(','),\r\n codesTN: product.codesTN?.join(', '),\r\n params: product.params?.map(({ key, value }) => `${key}=${value}`).join(','),\r\n ...getParams(product),\r\n ...getProperties(product)\r\n }))\r\n return json2csv(data, { emptyFieldValue: '' })\r\n }\r\n}\r\n","import { type Category, type Product } from '../types'\r\nimport { Extension, type FormatterAbstract, type FormatterOptions } from './formater.types'\r\nimport xlsx from 'xlsx'\r\n\r\nexport class InsalesFormatter implements FormatterAbstract {\r\n public formatterName = 'Insales'\r\n public fileExtension = Extension.XLSX\r\n\r\n public async format (products: Product[], categories?: Category[], option?: FormatterOptions): Promise<Buffer> {\r\n const mappedCategories: Record<number, string> = {}\r\n categories?.forEach(({ id, name }) => (mappedCategories[id] = name))\r\n\r\n const getParams = (product: Product): Record<string, string> => {\r\n const properties: Record<string, string> = {}\r\n\r\n product.params?.forEach(p => (properties[`Параметр: ${p.key}`] = p.value))\r\n\r\n return properties\r\n }\r\n const getProperties = (product: Product): Record<string, string> => {\r\n const properties: Record<string, string> = {}\r\n\r\n product.properties?.forEach(p => (properties[`Свойство: ${p.key}`] = p.value))\r\n\r\n return properties\r\n }\r\n\r\n const data = products.map(product => ({\r\n 'Параметр: Дата выхода': product.saleDate,\r\n 'Название товара или услуги': product.title,\r\n 'Изображение варианта': product.images?.join(' '),\r\n 'Краткое описание': undefined,\r\n 'Полное описание': product.description,\r\n Изображения: product.images?.join(' '),\r\n 'Цена продажи': product.price,\r\n Артикул: product.vendorCode,\r\n ...getParams(product),\r\n ...getProperties(product)\r\n }))\r\n const workBook = xlsx.utils.book_new()\r\n const productsWorkSheet = xlsx.utils.json_to_sheet(data)\r\n\r\n xlsx.utils.book_append_sheet(workBook, productsWorkSheet, 'products')\r\n\r\n return xlsx.write(workBook, { bookType: 'xlsx', type: 'buffer' })\r\n }\r\n}\r\n","import { XMLBuilder } from 'fast-xml-parser'\r\nimport { type Product, type Category } from '../types'\r\nimport { Extension, type FormatterAbstract, type FormatterOptions } from './formater.types'\r\n\r\nexport class YMLFormatter implements FormatterAbstract {\r\n public formatterName = 'YMl'\r\n public fileExtension = Extension.YML\r\n private readonly builder = new XMLBuilder({\r\n ignoreAttributes: false,\r\n format: true,\r\n cdataPropName: '__cdata'\r\n })\r\n\r\n public async format (products: Product[], categories?: Category[], options?: FormatterOptions): Promise<string> {\r\n const mappedCategories = {\r\n category: categories?.map(cat => ({\r\n '@_id': cat.id, '@_parentId': cat.parentId, '#text': cat.name\r\n }))\r\n }\r\n const shopName = options?.shopName ?? 'ShopName'\r\n const companyName = options?.companyName ?? 'CompanyName'\r\n const offers = { offer: products.map(this.getOffers) }\r\n const result = {\r\n '?xml': {\r\n '@_version': '1.0',\r\n '@_encoding': 'UTF-8',\r\n '@_standalone': 'yes'\r\n },\r\n yml_catalog: {\r\n '@_date': new Date().toISOString().replace(/.\\d+Z/, ''),\r\n shop: {\r\n name: shopName,\r\n company: companyName,\r\n categories: mappedCategories,\r\n offers\r\n }\r\n }\r\n }\r\n\r\n return this.builder.build(result)\r\n }\r\n\r\n private getOffers (product: Product): any {\r\n const result = {\r\n '@_id': product.variantId,\r\n name: product.title,\r\n price: product.price,\r\n oldprice: product.oldPrice,\r\n purchase_price: product.purchasePrice,\r\n additional_expenses: product.additionalExpenses,\r\n cofinance_price: product.cofinancePrice,\r\n currencyId: product.currency,\r\n categoryId: product.categoryId,\r\n vendor: product.vendor,\r\n vendorCode: product.vendorCode,\r\n picture: product.images,\r\n video: product.videos,\r\n available: product.available,\r\n 'min-quantity': product.minQuantity,\r\n 'step-quantity': product.stepQuantity,\r\n param: product.params?.map(param => ({\r\n '#text': param.value,\r\n '@_name': param.key\r\n })),\r\n description: {\r\n __cdata: product.description\r\n },\r\n country_of_origin: product.countryOfOrigin,\r\n barcode: product.barcode,\r\n vat: product.vat,\r\n count: product.count,\r\n 'set-ids': product.tags?.join(', '),\r\n adult: product.adult,\r\n downloadable: product.downloadable,\r\n 'period-of-validity-days': product.validityPeriod,\r\n 'comment-validity-days': product.validityComment,\r\n 'service-life-days': product.serviceLifePeriod,\r\n 'comment-life-days': product.serviceLifeComment,\r\n 'warranty-days': product.warrantyPeriod,\r\n 'comment-warranty': product.warrantyComment,\r\n manufacturer_warranty: product.manufacturerWarranty,\r\n certificate: product.certificate,\r\n url: product.url,\r\n weight: product.weight,\r\n dimensions: product.dimensions,\r\n boxCount: product.boxCount,\r\n disabled: product.disabled,\r\n age: (product.age != null) && {\r\n '@_unit': product.age.unit,\r\n '#text': product.age.value\r\n },\r\n 'tn-ved-codes': ((product.codesTN?.length) != null) && {\r\n 'tn-ved-code': product.codesTN\r\n }\r\n }\r\n if (product.parentId !== undefined) {\r\n return {\r\n ...result,\r\n '@_group_id': product.parentId\r\n }\r\n }\r\n return result\r\n }\r\n}\r\n","import { type Category, type IParam, type Product } from '../types'\r\nimport xlsx from 'xlsx'\r\nimport { Extension, type FormatterAbstract, type FormatterOptions } from './formater.types'\r\n\r\nexport class TgShopFormatter implements FormatterAbstract {\r\n public formatterName = 'TgShop'\r\n public fileExtension = Extension.XLSX\r\n\r\n public async format (products: Product[], categories?: Category[], option?: FormatterOptions): Promise<Buffer> {\r\n const getParameter = (product: Product, key: string): IParam | undefined => product.params?.find((value) => (value.key === key))\r\n const productsData = products.map(product => ({\r\n 'category id': product.categoryId,\r\n 'group id': product.parentId,\r\n 'id product': product.variantId,\r\n 'name product': product.title,\r\n price: product.price,\r\n picture: product.images?.join(', '),\r\n vendorCode: product.vendorCode,\r\n oldprice: product.oldPrice,\r\n description: product.description,\r\n shortDescription: product.description,\r\n quantityInStock: product.count,\r\n color: getParameter(product, 'color')?.value,\r\n size: getParameter(product, 'size')?.value,\r\n priority: undefined\r\n }))\r\n\r\n const workBook = xlsx.utils.book_new()\r\n const productsWorkSheet = xlsx.utils.json_to_sheet(productsData)\r\n const categoriesWorkSheet = xlsx.utils.json_to_sheet(categories ?? [])\r\n\r\n xlsx.utils.book_append_sheet(workBook, categoriesWorkSheet, 'categories')\r\n xlsx.utils.book_append_sheet(workBook, productsWorkSheet, 'offers')\r\n\r\n return xlsx.write(workBook, { bookType: 'xlsx', type: 'buffer' })\r\n }\r\n}\r\n","import { type Category, type Product } from '../types'\r\nimport { Extension, type FormatterAbstract, type FormatterOptions } from './formater.types'\r\nimport { writeXLSX, utils } from 'xlsx'\r\n\r\nexport class ExcelFormatter implements FormatterAbstract {\r\n public formatterName = 'Excel'\r\n public fileExtension = Extension.XLSX\r\n\r\n public async format (products: Product[], categories?: Category[], option?: FormatterOptions): Promise<Buffer> {\r\n const mappedCategories: Record<number, string> = {}\r\n categories?.forEach(({ id, name }) => (mappedCategories[id] = name))\r\n\r\n const getParams = (product: Product): Record<string, string> => {\r\n const params: Record<string, string> = {}\r\n product.params?.forEach(({ key, value }) => (params[`Param [${key}]`] = value))\r\n return params\r\n }\r\n\r\n const getProperties = (product: Product): Record<string, string> => {\r\n const properties: Record<string, string> = {}\r\n product.properties?.forEach(({ key, value }) => (properties[`Property [${key}]`] = value))\r\n return properties\r\n }\r\n\r\n const data = products.map(product => ({\r\n ...product,\r\n category: mappedCategories[product.categoryId],\r\n images: product.images?.join(','),\r\n videos: product.videos?.join(','),\r\n tags: product.tags?.join(','),\r\n codesTN: product.codesTN?.join(', '),\r\n params: product.params?.map(({ key, value }) => `${key}=${value}`).join(','),\r\n ...getParams(product),\r\n ...getProperties(product)\r\n }))\r\n const workBook = utils.book_new()\r\n const productsWorkSheet = utils.json_to_sheet(data)\r\n\r\n utils.book_append_sheet(workBook, productsWorkSheet, 'products')\r\n return writeXLSX(workBook, { type: 'buffer' })\r\n }\r\n}\r\n","import { TildaFormatter } from './Tilda.formatter'\r\nimport { CSVFormatter } from './CSV.formatter'\r\nimport { InsalesFormatter } from './Insales.formatter'\r\nimport { YMLFormatter } from './YML.formatter'\r\nimport { TgShopFormatter } from './TgShop.formatter'\r\nimport { ExcelFormatter } from './Excel.formatter'\r\n\r\nexport * from './formater.types'\r\n\r\nexport const Formatters = {\r\n TildaFormatter,\r\n CSVFormatter,\r\n InsalesFormatter,\r\n YMLFormatter,\r\n TgShopFormatter,\r\n ExcelFormatter\r\n}\r\n","import { type FormatterAbstract, type FormatterOptions, Formatters } from '../formatter'\r\nimport { type Exporter, type Transformer } from './exporter.types'\r\nimport { type Category, type Product } from '../types'\r\nimport deepcopy from 'deepcopy'\r\nimport * as fs from 'fs'\r\n\r\nexport class GoodsExporter {\r\n private formatter: FormatterAbstract = new Formatters.YMLFormatter()\r\n private exporter: Exporter = (data: Buffer) => {\r\n const filename = `${this.formatter.formatterName}.output.${this.formatter.fileExtension}`\r\n fs.writeFileSync(filename, data)\r\n return data\r\n }\r\n\r\n private transformers = new Array<Transformer>()\r\n\r\n public setTransformers (transformers: Transformer[]): void {\r\n this.transformers = transformers\r\n }\r\n\r\n public setFormatter (formatter: FormatterAbstract): void {\r\n this.formatter = formatter\r\n }\r\n\r\n public setExporter (exporter: Exporter): void {\r\n this.exporter = exporter\r\n }\r\n\r\n async export<T>(products: Product[], categories?: Category[], option?: FormatterOptions): Promise<T> {\r\n const transformedProducts = deepcopy(products).map(product => {\r\n let transformedProduct: Product = product\r\n this.transformers.forEach(transformer => {\r\n transformedProduct = transformer(transformedProduct)\r\n })\r\n return transformedProduct\r\n })\r\n const data = await this.formatter.format(transformedProducts, categories, option)\r\n\r\n if (typeof data === 'string') { return this.exporter(Buffer.from(data, 'utf-8')) }\r\n return this.exporter(data)\r\n }\r\n}\r\n","export interface Product {\r\n /**\r\n * **ID товара**\r\n *\r\n * Любая последовательность длиной до 80 знаков. В нее могут входить английские и русские (кроме ё) буквы, цифры и символы . , / \\ ( ) [ ] - = _\r\n *\r\n * Пример: belaya-kofta-12345\r\n */\r\n productId: number\r\n /**\r\n * **Родительскй SKU**\r\n *\r\n * Любая последовательность длиной до 80 знаков. В нее могут входить английские и русские (кроме ё) буквы, цифры и символы . , / \\ ( ) [ ] - = _\r\n *\r\n * Пример: belaya-kofta-12345\r\n */\r\n parentId?: number\r\n /**\r\n * **SKU**\r\n *\r\n * Любая последовательность длиной до 80 знаков. В нее могут входить английские и русские (кроме ё) буквы, цифры и символы . , / \\ ( ) [ ] - = _\r\n *\r\n * Пример: belaya-kofta-12345\r\n */\r\n variantId: number\r\n /**\r\n * **Название**\r\n *\r\n * Составляйте название по схеме: тип + бренд или производитель + модель + особенности, если есть (например, цвет, размер или вес) и количество в упаковке.\r\n *\r\n * Не включайте в название условия продажи (например, «скидка», «бесплатная доставка» и т. д.), эмоциональные характеристики («хит», «супер» и т. д.). Не пишите слова большими буквами — кроме устоявшихся названий брендов и моделей.\r\n *\r\n * Оптимальная длина — 50–60 символов, максимальная — 150.\r\n *\r\n * Составлять хорошие названия помогут [рекомендации](https://yandex.ru/support/marketplace/assortment/fields/title.html).\r\n *\r\n * Пример: Ударная дрель Makita HP1630, 710 Вт\r\n */\r\n title: string\r\n /**\r\n * **Описание**\r\n *\r\n * Подробное описание товара: например, его преимущества и особенности.\r\n *\r\n * Не давайте в описании инструкций по установке и сборке. Не используйте слова «скидка», «распродажа», «дешевый», «подарок» (кроме подарочных категорий), «бесплатно», «акция», «специальная цена», «новинка», «new», «аналог», «заказ», «хит». Не указывайте никакой контактной информации и не давайте ссылок.\r\n *\r\n * Можно использовать теги:\r\n *\r\n ** &lt;h&gt;, &lt;h1&gt;, &lt;h2&gt; и так далее — для заголовков;\r\n ** &lt;br&gt; и &lt;p&gt; — для переноса строки;\r\n ** &lt;ol&gt; — для нумерованного списка;\r\n ** &lt;ul&gt; — для маркированного списка;\r\n ** &lt;li&gt; — для создания элементов списка (должен находиться внутри &lt;ol&gt; или &lt;ul&gt;);\r\n ** &lt;div&gt; — поддерживается, но не влияет на отображение текста.\r\n * Оптимальная длина — 400–600 символов, максимальная — 6000.\r\n *\r\n * Составить хорошее описание помогут рекомендации.\r\n *\r\n * Пример: В комплекте с детским микроскопом есть все, что нужно вашему ребенку для изучения микромира\r\n */\r\n description: string\r\n /**\r\n * **Бренд**\r\n *\r\n * Название бренда или производителя.\r\n *\r\n * Записывайте название так, как его пишет сам бренд.\r\n *\r\n * Пример: LEVENHUK\r\n */\r\n vendor?: string\r\n /**\r\n * **Артикул производителя**\r\n *\r\n * Код товара, который ему присвоил производитель.\r\n *\r\n * Если артикулов несколько, укажите их через запятую.\r\n *\r\n * Пример: VNDR-0005A, VNDR-0005B\r\n */\r\n vendorCode?: string\r\n /**\r\n * **Дата выхода**\r\n *\r\n * Пример: 01.01.2000\r\n */\r\n saleDate?: string\r\n /**\r\n * **Категория в магазине**\r\n *\r\n * Категория, к которой вы относите товар. Она помогает точнее определить для товара категорию на Маркете.\r\n *\r\n * Указывайте конкретные категории — например, набор ножей лучше отнести к категории Столовые приборы, а не просто Посуда.\r\n *\r\n * Выбирайте категории, которые описывают товар, а не абстрактный признак — например, лучше указать Духи, а не Подарки.\r\n *\r\n * Содержит номер категории, а не ее название.\r\n */\r\n categoryId: number\r\n /**\r\n * **Страна производства**\r\n *\r\n * Страна, где был произведен товар.\r\n *\r\n * Записывайте названия стран так, как они записаны в [списке](https://yastatic.net/s3/doc-binary/src/support/market/ru/countries.xlsx).\r\n *\r\n * Пример: Россия\r\n */\r\n countryOfOrigin?: string\r\n /**\r\n * **Изображение**\r\n *\r\n * До двадцати изображений, которые показываются на карточке товара.\r\n *\r\n * Принимаются jpg- или png-изображения товара, соответствующие [требованиям](https://yandex.ru/support/marketplace/assortment/fields/images.html).\r\n *\r\n * В кабинете изображения добавляются в виде файлов. В Excel-файле — в виде ссылок через запятую. Первое фото становится основным.\r\n *\r\n * Чтобы изменить изображение, выложите новое по новой ссылке, иначе картинка не обновится.\r\n */\r\n images?: string[]\r\n /**\r\n * **Видео**\r\n *\r\n * Видеоиллюстрации для карточки товара.\r\n *\r\n * Видео должно соответствовать [требованиям](https://yandex.ru/support/marketplace/assortment/fields/video.html).\r\n *\r\n * Можно добавить не больше 6 видео.\r\n *\r\n * В кабинете можно загрузить видеофайлы. В Excel-шаблоне укажите ссылки на файлы.\r\n */\r\n videos?: string[]\r\n /**\r\n * **Базовая цена**\r\n *\r\n * Цена указывается в рублях. Число должно быть целым.\r\n *\r\n * Пример:\r\n *\r\n * 240\r\n */\r\n price: number\r\n /**\r\n * **Цена до скидки**\r\n *\r\n * Цена указывается в рублях. Число должно быть целым.\r\n *\r\n * Вы можете указать цену со скидкой от 5 до 75 %.\r\n *\r\n * Пример:\r\n *\r\n * 250\r\n */\r\n oldPrice?: number\r\n /**\r\n * **Себестоимость**\r\n *\r\n * Цена указывается в рублях. Число должно быть целым.\r\n *\r\n * Пример:\r\n *\r\n * 200\r\n */\r\n purchasePrice?: number\r\n /**\r\n * **Дополнительные расходы**\r\n *\r\n * Дополнительные расходы на товар. Например, на доставку или упаковку.\r\n *\r\n * После заполнения этого поля в калькуляторе и на странице управления ценами рассчитается потенциальная маржинальность товара.\r\n *\r\n * Цена указывается в рублях. Число должно быть целым.\r\n *\r\n * Пример:\r\n *\r\n * 75\r\n */\r\n additionalExpenses?: number\r\n /**\r\n * **Порог для скидок с Маркетом**\r\n *\r\n * Цена указывается в рублях. Число должно быть целым.\r\n *\r\n * Пример:\r\n *\r\n * 300\r\n */\r\n cofinancePrice?: number\r\n /**\r\n * **Валюта (DBS)**\r\n *\r\n * Валюта, в которой указана цена товара. Покупателям Маркет показывает цену в рублях, пересчитывая ее по курсу Центробанка.\r\n *\r\n * Поле используется, если для кабинета еще не включена работа с базовыми ценами.\r\n *\r\n * Поддерживаются российские и белорусские рубли, евро, доллары, украинские гривны и казахстанские тенге.\r\n *\r\n * В кабинете валюту можно просто выбрать из списка. В Excel-файле указывается код валюты: RUR, BYN, EUR, USD, UAN, KZT.\r\n */\r\n currency: Currency\r\n /**\r\n * **Ссылка на страницу товара**\r\n *\r\n * Адрес страницы на вашем сайте с фотографиями и описанием товара.\r\n *\r\n * Максимальная длина URL — 512 символов. Записывайте его согласно стандарту RFC 3986.\r\n *\r\n * Пример: http://best.seller.ru/product_page.asp?pid=12346\r\n */\r\n url?: string\r\n /**\r\n * **Убрать из продажи**\r\n *\r\n * Поле позволяет приостановить продажу товара.\r\n *\r\n * Укажите значение true, если нужно приостановить продажу.\r\n */\r\n disabled?: boolean\r\n /**\r\n * **Доступное количество товара**\r\n *\r\n * Общее количество товара, доступное для продажи\r\n *\r\n * Укажите 0, если товара нет в наличии.\r\n *\r\n * Пример: 7\r\n */\r\n count?: number\r\n /**\r\n * **Товар в наличии (DBS)**\r\n *\r\n * Поле указывает, есть ли товар в наличии.\r\n */\r\n available?: boolean\r\n /**\r\n * **Минимальное количество товара**\r\n *\r\n * Если значение задано, покупатель не сможет заказать меньше единиц товара. Ограничение не работает, когда товара на складе осталось меньше этого количества — тогда покупатель сможет сделать заказ на остаток.\r\n *\r\n * Целое число.\r\n */\r\n minQuantity?: number\r\n /**\r\n * **Квант продажи**\r\n *\r\n * Если значение задано, покупатель сможет добавить к заказу только кратное количество товара. Ограничение не работает, когда на складе осталось меньше этого количества — тогда покупатель сможет сделать заказ на остаток.\r\n *\r\n * Целое число.\r\n */\r\n stepQuantity?: number\r\n /**\r\n * **Штрихкод**\r\n *\r\n * Указывайте в виде последовательности символов. Подойдут коды EAN-13, EAN-8, UPC-A, UPC-E или Code 128.\r\n *\r\n * Для книг указывайте ISBN.\r\n *\r\n * Для товаров [определенных категорий и торговых марок](https://yastatic.net/s3/doc-binary/src/support/market/ru/yandex-market-list-for-gtin.xlsx) штрихкод должен быть действительным кодом GTIN. Обратите внимание: внутренние штрихкоды, начинающиеся на 2 или 02, и коды формата Code 128 не являются GTIN.\r\n *\r\n * Если штрихкодов несколько, напишите все через запятую.\r\n *\r\n * Пример: 46012300000000\r\n */\r\n barcode?: string\r\n /**\r\n * **Код ТН ВЭД**\r\n *\r\n * Для некоторых категорий товаров код ТН ВЭД обязателен. Если это касается ваших товаров, вы получите уведомление в каталоге.\r\n *\r\n * 10 или 14 цифр без пробелов.\r\n *\r\n * Пример: 8517610008\r\n */\r\n codesTN?: string[]\r\n /**\r\n * **С какого возраста пользоваться**\r\n *\r\n * Если товар не предназначен для детей младше определенного возраста, укажите это.\r\n *\r\n * Возрастные ограничения можно задавать в годах (с нуля, с 6, 12, 16 или 18) или в месяцах (любое число от 0 до 12).\r\n */\r\n age?: { unit: 'year' | 'month', value: number }\r\n /**\r\n * **Вес с упаковкой**\r\n *\r\n * Вес товара с упаковкой.\r\n *\r\n * Единица измерения — килограммы. Можно дроби: разделитель — точка или запятая, не больше трех цифр после него.\r\n *\r\n * Пример: 3.1\r\n */\r\n weight?: number\r\n /**\r\n * **Габариты с упаковкой**\r\n *\r\n * Длина, ширина, высота в упаковке.\r\n *\r\n * Единица измерения — сантиметры. Можно дроби: разделитель — точка или запятая, не больше трех цифр после него.\r\n *\r\n * Пример: 20.1/20.551/22.5\r\n */\r\n dimensions?: string\r\n /**\r\n * **Товар занимает больше одного места**\r\n *\r\n * Если товар занимает одно место (представляет собой одну коробку, упаковку и так далее), оставьте поле пустым. Если товар занимает несколько мест — укажите их количество. Например, кондиционер занимает два места — внешний и внутренний блоки в двух коробках.\r\n *\r\n * Укажите количество мест.\r\n *\r\n * Пример: 2\r\n */\r\n boxCount?: number\r\n /**\r\n * **Ставка НДС**\r\n *\r\n * Значение ставки НДС для товара.\r\n *\r\n * Выберите одно из значений:\r\n *\r\n ** НДС не облагается — 6 или NO_VAT\r\n *\r\n ** 0 % — 5 или VAT_0\r\n *\r\n ** 10 % — 2 или VAT_10\r\n *\r\n ** 20 % — 7 или VAT_20\r\n *\r\n * Если не заполнено, Маркет устанавливает ставку, соответствующую схеме налогообложения.\r\n *\r\n * Пример: VAT_20\r\n */\r\n vat: Vat\r\n /**\r\n * **Характеристики, которые есть только у товаров конкретной категории**\r\n *\r\n * Кроме общих свойств, у товара есть характеристики, присущие конкретной категории, к которой он относится. Например, у велосипеда есть размер рамы, а детское пюре бывает овощное, мясное или фруктовое.\r\n */\r\n params?: IParam[]\r\n /**\r\n * **Свойства товара**\r\n *\r\n * *не YML поле\r\n */\r\n properties?: IParam[]\r\n /**\r\n * **Теги**\r\n *\r\n * Придумайте любое название — его можно будет изменить после.\r\n *\r\n * Максимальная длина тега — 20 символов.\r\n *\r\n * У одного товара — максимум 10 тегов.\r\n *\r\n * Всего можно создать не больше 50 разных тегов.\r\n *\r\n * Пример: apple, до 500 рублей\r\n */\r\n tags?: string[]\r\n /**\r\n * **Товар для взрослых**\r\n *\r\n * Параметр включает для товара пометку 18+. Устанавливайте ее только для товаров, которые относятся к удовлетворению сексуальных потребностей.\r\n */\r\n adult?: boolean\r\n /**\r\n * **Цифровой товар**\r\n *\r\n * Параметр, устанавливаемый для цифровых товаров, которые просто скачиваются.\r\n */\r\n downloadable?: boolean\r\n /**\r\n * **Срок годности**\r\n *\r\n * Период с момента изготовления, по прошествии которого товар становится непригоден.\r\n *\r\n * Указывайте срок, указанный на банке или упаковке. Текущая дата, дата поставки или дата отгрузки значения не имеет.\r\n *\r\n * Срок можно указывать в годах, месяцах, днях, неделях и часах.\r\n *\r\n * Обязательно указывайте срок, если он есть.\r\n *\r\n * Продолжительность указывается согласно ISO 8601, то есть в виде строчки, начинающейся буквой P:\r\n *\r\n ** P1Y — 1 год;\r\n ** P1Y6M — 1 год и 6 месяцев;\r\n ** P15D — 15 дней.\r\n */\r\n validityPeriod?: string\r\n /**\r\n * **Комментарий к сроку годности**\r\n *\r\n * Поле предназначено для описаний условий хранения.\r\n *\r\n * Не длиннее 250 знаков и без спецсимволов.\r\n *\r\n * Пример: Хранить в сухом помещении\r\n */\r\n validityComment?: string\r\n /**\r\n * **Срок службы**\r\n *\r\n * В течение срока службы товар должен исправно выполнять свою функцию.\r\n *\r\n * Обязательно указывайте срок, если он есть.\r\n *\r\n * Срок можно указывать в годах, месяцах и днях.\r\n * Продолжительность указывается согласно ISO 8601, то есть в виде строчки, начинающейся буквой P:\r\n *\r\n ** P1Y — 1 год;\r\n ** P1Y2M — 1 год и 2 месяца;\r\n ** P15D — 15 дней;\r\n ** P2Y10D — 2 года, 10 дней;\r\n ** P2Y6M10D — 2 года, 6 месяцев и 10 дней.\r\n */\r\n serviceLifePeriod?: string\r\n /**\r\n * **Комментарий к сроку службы**\r\n *\r\n * Поле предназначено для описаний условий использования.\r\n *\r\n * Не длиннее 250 знаков и без спецсимволов.\r\n *\r\n * Пример: Использовать при температуре не ниже −10 градусов\r\n */\r\n serviceLifeComment?: string\r\n /**\r\n * **Гарантийный срок**\r\n *\r\n * В течение какого времени можно бесплатно заменить или починить товар.\r\n *\r\n * Срок можно указывать в годах, месяцах или днях.\r\n *\r\n * Продолжительность указывается согласно ISO 8601, то есть в виде строчки, начинающейся буквой P:\r\n *\r\n ** P1Y — 1 год;\r\n ** P1Y2M — 1 год и 2 месяца;\r\n ** P15D — 15 дней;\r\n ** P2Y10D — 2 года, 10 дней;\r\n ** P2Y6M10D — 2 года, 6 месяцев и 10 дней.\r\n */\r\n warrantyPeriod?: string\r\n /**\r\n * **Комментарий к гарантийному сроку**\r\n *\r\n * Поле предназначено для описания особенностей гарантийных условий.\r\n *\r\n * Указывайте только то, что относится к гарантии изготовителя.\r\n *\r\n * Не длиннее 250 знаков и без спецсимволов.\r\n *\r\n * Пример: Гарантия на аккумулятор — 6 месяцев\r\n */\r\n warrantyComment?: string\r\n /**\r\n * **Официальная гарантия производителя**\r\n */\r\n manufacturerWarranty?: boolean\r\n /**\r\n * **Номер документа**\r\n *\r\n * Номер документа на товар: сертификата, декларации соответствия и т. п.\r\n *\r\n * Прежде чем указывать номер документа, загрузите скан документа через кабинет.\r\n *\r\n * Укажите номер документа.\r\n *\r\n * Пример: 6241421\r\n */\r\n certificate?: string\r\n}\r\n\r\nexport enum Vat {\r\n NO_VAT = 'NO_VAT',\r\n VAT_0 = 'VAT_0',\r\n VAT_10 = 'VAT_10',\r\n VAT_20 = 'VAT_20'\r\n}\r\n\r\nexport enum Currency {\r\n RUR = 'RUR',\r\n BYN = 'BYN',\r\n EUR = 'EUR',\r\n USD = 'USD',\r\n UAN = 'UAN',\r\n KZT = 'KZT'\r\n}\r\n\r\nexport interface IParam {\r\n /**\r\n * **Название характеристики**\r\n */\r\n key: string\r\n /**\r\n * **Значение**\r\n */\r\n value: string\r\n}\r\n"],"names":["Extension","__publicField","Vat","Currency"],"mappings":";;;;;;AAEO,MAAe,iBAAkB,CAAA;AAKxC,CAAA;AAuBY,IAAA,SAAA,qBAAAA,UAAL,KAAA;AACL,EAAAA,WAAA,KAAM,CAAA,GAAA,KAAA,CAAA;AACN,EAAAA,WAAA,KAAM,CAAA,GAAA,KAAA,CAAA;AACN,EAAAA,WAAA,MAAO,CAAA,GAAA,MAAA,CAAA;AAHG,EAAAA,OAAAA,UAAAA,CAAAA;AAAA,CAAA,EAAA,SAAA,IAAA,EAAA;;;;;;;;AC1BL,MAAM,cAA4C,CAAA;AAAA,EAAlD,WAAA,GAAA;AACL,IAAAC,eAAA,CAAA,IAAA,EAAO,eAAgB,EAAA,OAAA,CAAA,CAAA;AACvB,IAAAA,eAAA,CAAA,IAAA,EAAO,iBAAgB,SAAU,CAAA,GAAA,CAAA,CAAA;AAAA,GAAA;AAAA,EAEjC,MAAa,MAAA,CAAQ,QAAqB,EAAA,UAAA,EAAyB,MAA4C,EAAA;AAC7G,IAAA,MAAM,mBAA2C,EAAC,CAAA;AAClD,IAAY,UAAA,EAAA,OAAA,CAAQ,CAAC,EAAE,EAAA,EAAI,MAAY,KAAA,gBAAA,CAAiB,EAAE,CAAA,GAAI,IAAK,CAAA,CAAA;AAEnE,IAAM,MAAA,IAAA,GAAO,QAAS,CAAA,GAAA,CAAI,CAAY,OAAA,MAAA;AAAA,MACpC,KAAK,OAAQ,CAAA,UAAA;AAAA,MACb,OAAO,OAAQ,CAAA,MAAA;AAAA,MACf,QAAA,EAAU,gBAAiB,CAAA,OAAA,CAAQ,UAAU,CAAA;AAAA,MAC7C,OAAO,OAAQ,CAAA,KAAA;AAAA,MACf,MAAM,OAAQ,CAAA,WAAA;AAAA,MACd,KAAO,EAAA,OAAA,CAAQ,MAAQ,EAAA,IAAA,CAAK,GAAG,CAAA;AAAA,MAC/B,OAAO,OAAQ,CAAA,KAAA;AAAA,MACf,aAAa,OAAQ,CAAA,QAAA;AAAA,MACrB,UAAU,OAAQ,CAAA,KAAA;AAAA,MAClB,UAAU,OAAQ,CAAA,MAAA,EAAQ,GAAI,CAAA,CAAC,EAAE,GAAK,EAAA,KAAA,EAAY,KAAA,CAAA,EAAG,GAAG,CAAI,CAAA,EAAA,KAAK,CAAE,CAAA,CAAA,CAAE,KAAK,GAAG,CAAA;AAAA,MAC7E,eAAe,OAAQ,CAAA,SAAA;AAAA,MACvB,cAAc,OAAQ,CAAA,QAAA;AAAA,KACtB,CAAA,CAAA,CAAA;AAEF,IAAO,OAAA,QAAA,CAAS,IAAM,EAAA,EAAE,eAAiB,EAAA,EAAA,EAAI,WAAW,EAAE,KAAA,EAAO,GAAI,EAAA,EAAG,CAAA,CAAA;AAAA,GAC1E;AACF;;;;;;;;ACzBO,MAAM,YAA0C,CAAA;AAAA,EAAhD,WAAA,GAAA;AACL,IAAAA,eAAA,CAAA,IAAA,EAAO,eAAgB,EAAA,KAAA,CAAA,CAAA;AACvB,IAAAA,eAAA,CAAA,IAAA,EAAO,iBAAgB,SAAU,CAAA,GAAA,CAAA,CAAA;AAAA,GAAA;AAAA,EAEjC,MAAa,MAAA,CAAQ,QAAqB,EAAA,UAAA,EAAyB,MAA4C,EAAA;AAC7G,IAAA,MAAM,mBAA2C,EAAC,CAAA;AAClD,IAAY,UAAA,EAAA,OAAA,CAAQ,CAAC,EAAE,EAAA,EAAI,MAAY,KAAA,gBAAA,CAAiB,EAAE,CAAA,GAAI,IAAK,CAAA,CAAA;AAEnE,IAAM,MAAA,SAAA,GAAY,CAAC,OAA6C,KAAA;AAC9D,MAAA,MAAM,SAAiC,EAAC,CAAA;AAExC,MAAK,IAAA,MAAA,EAAQ,gBAAiB,KAAO,EAAA;AAAE,QAAO,OAAA,MAAA,CAAA;AAAA,OAAO;AAErD,MAAA,OAAA,CAAQ,MAAQ,EAAA,OAAA,CAAQ,CAAC,EAAE,GAAK,EAAA,KAAA,EAAa,KAAA,MAAA,CAAO,CAAU,OAAA,EAAA,GAAG,CAAG,CAAA,CAAA,CAAA,GAAI,KAAM,CAAA,CAAA;AAC9E,MAAO,OAAA,MAAA,CAAA;AAAA,KACT,CAAA;AAEA,IAAM,MAAA,aAAA,GAAgB,CAAC,OAA6C,KAAA;AAClE,MAAA,MAAM,aAAqC,EAAC,CAAA;AAE5C,MAAK,IAAA,MAAA,EAAQ,gBAAiB,KAAO,EAAA;AAAE,QAAO,OAAA,UAAA,CAAA;AAAA,OAAW;AAEzD,MAAA,OAAA,CAAQ,UAAY,EAAA,OAAA,CAAQ,CAAC,EAAE,GAAK,EAAA,KAAA,EAAa,KAAA,UAAA,CAAW,CAAa,UAAA,EAAA,GAAG,CAAG,CAAA,CAAA,CAAA,GAAI,KAAM,CAAA,CAAA;AACzF,MAAO,OAAA,UAAA,CAAA;AAAA,KACT,CAAA;AAEA,IAAM,MAAA,IAAA,GAAO,QAAS,CAAA,GAAA,CAAI,CAAY,OAAA,MAAA;AAAA,MACpC,GAAG,OAAA;AAAA,MACH,QAAA,EAAU,gBAAiB,CAAA,OAAA,CAAQ,UAAU,CAAA;AAAA,MAC7C,MAAQ,EAAA,OAAA,CAAQ,MAAQ,EAAA,IAAA,CAAK,GAAG,CAAA;AAAA,MAChC,MAAQ,EAAA,OAAA,CAAQ,MAAQ,EAAA,IAAA,CAAK,GAAG,CAAA;AAAA,MAChC,IAAM,EAAA,OAAA,CAAQ,IAAM,EAAA,IAAA,CAAK,GAAG,CAAA;AAAA,MAC5B,OAAS,EAAA,OAAA,CAAQ,OAAS,EAAA,IAAA,CAAK,IAAI,CAAA;AAAA,MACnC,QAAQ,OAAQ,CAAA,MAAA,EAAQ,GAAI,CAAA,CAAC,EAAE,GAAK,EAAA,KAAA,EAAY,KAAA,CAAA,EAAG,GAAG,CAAI,CAAA,EAAA,KAAK,CAAE,CAAA,CAAA,CAAE,KAAK,GAAG,CAAA;AAAA,MAC3E,GAAG,UAAU,OAAO,CAAA;AAAA,MACpB,GAAG,cAAc,OAAO,CAAA;AAAA,KACxB,CAAA,CAAA,CAAA;AACF,IAAA,OAAO,QAAS,CAAA,IAAA,EAAM,EAAE,eAAA,EAAiB,IAAI,CAAA,CAAA;AAAA,GAC/C;AACF;;;;;;;;ACvCO,MAAM,gBAA8C,CAAA;AAAA,EAApD,WAAA,GAAA;AACL,IAAAA,eAAA,CAAA,IAAA,EAAO,eAAgB,EAAA,SAAA,CAAA,CAAA;AACvB,IAAAA,eAAA,CAAA,IAAA,EAAO,iBAAgB,SAAU,CAAA,IAAA,CAAA,CAAA;AAAA,GAAA;AAAA,EAEjC,MAAa,MAAA,CAAQ,QAAqB,EAAA,UAAA,EAAyB,MAA4C,EAAA;AAE7G,IAAY,UAAA,EAAA,OAAA,CAAQ,CAAC,EAAE,EAAA,EAAI,MAAY,KAAuB,IAAK,CAAA,CAAA;AAEnE,IAAM,MAAA,SAAA,GAAY,CAAC,OAA6C,KAAA;AAC9D,MAAA,MAAM,aAAqC,EAAC,CAAA;AAE5C,MAAQ,OAAA,CAAA,MAAA,EAAQ,OAAQ,CAAA,CAAA,CAAA,KAAM,UAAW,CAAA,CAAA,kDAAA,EAAa,EAAE,GAAG,CAAA,CAAE,CAAI,GAAA,CAAA,CAAE,KAAM,CAAA,CAAA;AAEzE,MAAO,OAAA,UAAA,CAAA;AAAA,KACT,CAAA;AACA,IAAM,MAAA,aAAA,GAAgB,CAAC,OAA6C,KAAA;AAClE,MAAA,MAAM,aAAqC,EAAC,CAAA;AAE5C,MAAQ,OAAA,CAAA,UAAA,EAAY,OAAQ,CAAA,CAAA,CAAA,KAAM,UAAW,CAAA,CAAA,kDAAA,EAAa,EAAE,GAAG,CAAA,CAAE,CAAI,GAAA,CAAA,CAAE,KAAM,CAAA,CAAA;AAE7E,MAAO,OAAA,UAAA,CAAA;AAAA,KACT,CAAA;AAEA,IAAM,MAAA,IAAA,GAAO,QAAS,CAAA,GAAA,CAAI,CAAY,OAAA,MAAA;AAAA,MACpC,mHAAyB,OAAQ,CAAA,QAAA;AAAA,MACjC,iJAA8B,OAAQ,CAAA,KAAA;AAAA,MACtC,qHAAwB,EAAA,OAAA,CAAQ,MAAQ,EAAA,IAAA,CAAK,GAAG,CAAA;AAAA,MAChD,6FAAoB,EAAA,KAAA,CAAA;AAAA,MACpB,yFAAmB,OAAQ,CAAA,WAAA;AAAA,MAC3B,kEAAa,EAAA,OAAA,CAAQ,MAAQ,EAAA,IAAA,CAAK,GAAG,CAAA;AAAA,MACrC,uEAAgB,OAAQ,CAAA,KAAA;AAAA,MACxB,4CAAS,OAAQ,CAAA,UAAA;AAAA,MACjB,GAAG,UAAU,OAAO,CAAA;AAAA,MACpB,GAAG,cAAc,OAAO,CAAA;AAAA,KACxB,CAAA,CAAA,CAAA;AACF,IAAM,MAAA,QAAA,GAAW,IAAK,CAAA,KAAA,CAAM,QAAS,EAAA,CAAA;AACrC,IAAA,MAAM,iBAAoB,GAAA,IAAA,CAAK,KAAM,CAAA,aAAA,CAAc,IAAI,CAAA,CAAA;AAEvD,IAAA,IAAA,CAAK,KAAM,CAAA,iBAAA,CAAkB,QAAU,EAAA,iBAAA,EAAmB,UAAU,CAAA,CAAA;AAEpE,IAAO,OAAA,IAAA,CAAK,MAAM,QAAU,EAAA,EAAE,UAAU,MAAQ,EAAA,IAAA,EAAM,UAAU,CAAA,CAAA;AAAA,GAClE;AACF;;;;;;;;AC1CO,MAAM,YAA0C,CAAA;AAAA,EAAhD,WAAA,GAAA;AACL,IAAAA,eAAA,CAAA,IAAA,EAAO,eAAgB,EAAA,KAAA,CAAA,CAAA;AACvB,IAAAA,eAAA,CAAA,IAAA,EAAO,iBAAgB,SAAU,CAAA,GAAA,CAAA,CAAA;AACjC,IAAiBA,eAAA,CAAA,IAAA,EAAA,SAAA,EAAU,IAAI,UAAW,CAAA;AAAA,MACxC,gBAAkB,EAAA,KAAA;AAAA,MAClB,MAAQ,EAAA,IAAA;AAAA,MACR,aAAe,EAAA,SAAA;AAAA,KAChB,CAAA,CAAA,CAAA;AAAA,GAAA;AAAA,EAED,MAAa,MAAA,CAAQ,QAAqB,EAAA,UAAA,EAAyB,OAA6C,EAAA;AAC9G,IAAA,MAAM,gBAAmB,GAAA;AAAA,MACvB,QAAA,EAAU,UAAY,EAAA,GAAA,CAAI,CAAQ,GAAA,MAAA;AAAA,QAChC,QAAQ,GAAI,CAAA,EAAA;AAAA,QAAI,cAAc,GAAI,CAAA,QAAA;AAAA,QAAU,SAAS,GAAI,CAAA,IAAA;AAAA,OACzD,CAAA,CAAA;AAAA,KACJ,CAAA;AACA,IAAM,MAAA,QAAA,GAAW,SAAS,QAAY,IAAA,UAAA,CAAA;AACtC,IAAM,MAAA,WAAA,GAAc,SAAS,WAAe,IAAA,aAAA,CAAA;AAC5C,IAAA,MAAM,SAAS,EAAE,KAAA,EAAO,SAAS,GAAI,CAAA,IAAA,CAAK,SAAS,CAAE,EAAA,CAAA;AACrD,IAAA,MAAM,MAAS,GAAA;AAAA,MACb,MAAQ,EAAA;AAAA,QACN,WAAa,EAAA,KAAA;AAAA,QACb,YAAc,EAAA,OAAA;AAAA,QACd,cAAgB,EAAA,KAAA;AAAA,OAClB;AAAA,MACA,WAAa,EAAA;AAAA,QACX,QAAA,EAAA,qBAAc,IAAK,EAAA,EAAE,aAAc,CAAA,OAAA,CAAQ,SAAS,EAAE,CAAA;AAAA,QACtD,IAAM,EAAA;AAAA,UACJ,IAAM,EAAA,QAAA;AAAA,UACN,OAAS,EAAA,WAAA;AAAA,UACT,UAAY,EAAA,gBAAA;AAAA,UACZ,MAAA;AAAA,SACF;AAAA,OACF;AAAA,KACF,CAAA;AAEA,IAAO,OAAA,IAAA,CAAK,OAAQ,CAAA,KAAA,CAAM,MAAM,CAAA,CAAA;AAAA,GAClC;AAAA,EAEQ,UAAW,OAAuB,EAAA;AACxC,IAAA,MAAM,MAAS,GAAA;AAAA,MACb,QAAQ,OAAQ,CAAA,SAAA;AAAA,MAChB,MAAM,OAAQ,CAAA,KAAA;AAAA,MACd,OAAO,OAAQ,CAAA,KAAA;AAAA,MACf,UAAU,OAAQ,CAAA,QAAA;AAAA,MAClB,gBAAgB,OAAQ,CAAA,aAAA;AAAA,MACxB,qBAAqB,OAAQ,CAAA,kBAAA;AAAA,MAC7B,iBAAiB,OAAQ,CAAA,cAAA;AAAA,MACzB,YAAY,OAAQ,CAAA,QAAA;AAAA,MACpB,YAAY,OAAQ,CAAA,UAAA;AAAA,MACpB,QAAQ,OAAQ,CAAA,MAAA;AAAA,MAChB,YAAY,OAAQ,CAAA,UAAA;AAAA,MACpB,SAAS,OAAQ,CAAA,MAAA;AAAA,MACjB,OAAO,OAAQ,CAAA,MAAA;AAAA,MACf,WAAW,OAAQ,CAAA,SAAA;AAAA,MACnB,gBAAgB,OAAQ,CAAA,WAAA;AAAA,MACxB,iBAAiB,OAAQ,CAAA,YAAA;AAAA,MACzB,KAAO,EAAA,OAAA,CAAQ,MAAQ,EAAA,GAAA,CAAI,CAAU,KAAA,MAAA;AAAA,QACnC,SAAS,KAAM,CAAA,KAAA;AAAA,QACf,UAAU,KAAM,CAAA,GAAA;AAAA,OAChB,CAAA,CAAA;AAAA,MACF,WAAa,EAAA;AAAA,QACX,SAAS,OAAQ,CAAA,WAAA;AAAA,OACnB;AAAA,MACA,mBAAmB,OAAQ,CAAA,eAAA;AAAA,MAC3B,SAAS,OAAQ,CAAA,OAAA;AAAA,MACjB,KAAK,OAAQ,CAAA,GAAA;AAAA,MACb,OAAO,OAAQ,CAAA,KAAA;AAAA,MACf,SAAW,EAAA,OAAA,CAAQ,IAAM,EAAA,IAAA,CAAK,IAAI,CAAA;AAAA,MAClC,OAAO,OAAQ,CAAA,KAAA;AAAA,MACf,cAAc,OAAQ,CAAA,YAAA;AAAA,MACtB,2BAA2B,OAAQ,CAAA,cAAA;AAAA,MACnC,yBAAyB,OAAQ,CAAA,eAAA;AAAA,MACjC,qBAAqB,OAAQ,CAAA,iBAAA;AAAA,MAC7B,qBAAqB,OAAQ,CAAA,kBAAA;AAAA,MAC7B,iBAAiB,OAAQ,CAAA,cAAA;AAAA,MACzB,oBAAoB,OAAQ,CAAA,eAAA;AAAA,MAC5B,uBAAuB,OAAQ,CAAA,oBAAA;AAAA,MAC/B,aAAa,OAAQ,CAAA,WAAA;AAAA,MACrB,KAAK,OAAQ,CAAA,GAAA;AAAA,MACb,QAAQ,OAAQ,CAAA,MAAA;AAAA,MAChB,YAAY,OAAQ,CAAA,UAAA;AAAA,MACpB,UAAU,OAAQ,CAAA,QAAA;AAAA,MAClB,UAAU,OAAQ,CAAA,QAAA;AAAA,MAClB,GAAA,EAAM,OAAQ,CAAA,GAAA,IAAO,IAAS,IAAA;AAAA,QAC5B,QAAA,EAAU,QAAQ,GAAI,CAAA,IAAA;AAAA,QACtB,OAAA,EAAS,QAAQ,GAAI,CAAA,KAAA;AAAA,OACvB;AAAA,MACA,cAAkB,EAAA,OAAA,CAAQ,OAAS,EAAA,MAAA,IAAW,IAAS,IAAA;AAAA,QACrD,eAAe,OAAQ,CAAA,OAAA;AAAA,OACzB;AAAA,KACF,CAAA;AACA,IAAI,IAAA,OAAA,CAAQ,aAAa,KAAW,CAAA,EAAA;AAClC,MAAO,OAAA;AAAA,QACL,GAAG,MAAA;AAAA,QACH,cAAc,OAAQ,CAAA,QAAA;AAAA,OACxB,CAAA;AAAA,KACF;AACA,IAAO,OAAA,MAAA,CAAA;AAAA,GACT;AACF;;;;;;;;ACnGO,MAAM,eAA6C,CAAA;AAAA,EAAnD,WAAA,GAAA;AACL,IAAAA,eAAA,CAAA,IAAA,EAAO,eAAgB,EAAA,QAAA,CAAA,CAAA;AACvB,IAAAA,eAAA,CAAA,IAAA,EAAO,iBAAgB,SAAU,CAAA,IAAA,CAAA,CAAA;AAAA,GAAA;AAAA,EAEjC,MAAa,MAAA,CAAQ,QAAqB,EAAA,UAAA,EAAyB,MAA4C,EAAA;AAC7G,IAAM,MAAA,YAAA,GAAe,CAAC,OAAA,EAAkB,GAAoC,KAAA,OAAA,CAAQ,MAAQ,EAAA,IAAA,CAAK,CAAC,KAAA,KAAW,KAAM,CAAA,GAAA,KAAQ,GAAI,CAAA,CAAA;AAC/H,IAAM,MAAA,YAAA,GAAe,QAAS,CAAA,GAAA,CAAI,CAAY,OAAA,MAAA;AAAA,MAC5C,eAAe,OAAQ,CAAA,UAAA;AAAA,MACvB,YAAY,OAAQ,CAAA,QAAA;AAAA,MACpB,cAAc,OAAQ,CAAA,SAAA;AAAA,MACtB,gBAAgB,OAAQ,CAAA,KAAA;AAAA,MACxB,OAAO,OAAQ,CAAA,KAAA;AAAA,MACf,OAAS,EAAA,OAAA,CAAQ,MAAQ,EAAA,IAAA,CAAK,IAAI,CAAA;AAAA,MAClC,YAAY,OAAQ,CAAA,UAAA;AAAA,MACpB,UAAU,OAAQ,CAAA,QAAA;AAAA,MAClB,aAAa,OAAQ,CAAA,WAAA;AAAA,MACrB,kBAAkB,OAAQ,CAAA,WAAA;AAAA,MAC1B,iBAAiB,OAAQ,CAAA,KAAA;AAAA,MACzB,KAAO,EAAA,YAAA,CAAa,OAAS,EAAA,OAAO,CAAG,EAAA,KAAA;AAAA,MACvC,IAAM,EAAA,YAAA,CAAa,OAAS,EAAA,MAAM,CAAG,EAAA,KAAA;AAAA,MACrC,QAAU,EAAA,KAAA,CAAA;AAAA,KACV,CAAA,CAAA,CAAA;AAEF,IAAM,MAAA,QAAA,GAAW,IAAK,CAAA,KAAA,CAAM,QAAS,EAAA,CAAA;AACrC,IAAA,MAAM,iBAAoB,GAAA,IAAA,CAAK,KAAM,CAAA,aAAA,CAAc,YAAY,CAAA,CAAA;AAC/D,IAAA,MAAM,sBAAsB,IAAK,CAAA,KAAA,CAAM,aAAc,CAAA,UAAA,IAAc,EAAE,CAAA,CAAA;AAErE,IAAA,IAAA,CAAK,KAAM,CAAA,iBAAA,CAAkB,QAAU,EAAA,mBAAA,EAAqB,YAAY,CAAA,CAAA;AACxE,IAAA,IAAA,CAAK,KAAM,CAAA,iBAAA,CAAkB,QAAU,EAAA,iBAAA,EAAmB,QAAQ,CAAA,CAAA;AAElE,IAAO,OAAA,IAAA,CAAK,MAAM,QAAU,EAAA,EAAE,UAAU,MAAQ,EAAA,IAAA,EAAM,UAAU,CAAA,CAAA;AAAA,GAClE;AACF;;;;;;;;AChCO,MAAM,cAA4C,CAAA;AAAA,EAAlD,WAAA,GAAA;AACL,IAAAA,eAAA,CAAA,IAAA,EAAO,eAAgB,EAAA,OAAA,CAAA,CAAA;AACvB,IAAAA,eAAA,CAAA,IAAA,EAAO,iBAAgB,SAAU,CAAA,IAAA,CAAA,CAAA;AAAA,GAAA;AAAA,EAEjC,MAAa,MAAA,CAAQ,QAAqB,EAAA,UAAA,EAAyB,MAA4C,EAAA;AAC7G,IAAA,MAAM,mBAA2C,EAAC,CAAA;AAClD,IAAY,UAAA,EAAA,OAAA,CAAQ,CAAC,EAAE,EAAA,EAAI,MAAY,KAAA,gBAAA,CAAiB,EAAE,CAAA,GAAI,IAAK,CAAA,CAAA;AAEnE,IAAM,MAAA,SAAA,GAAY,CAAC,OAA6C,KAAA;AAC9D,MAAA,MAAM,SAAiC,EAAC,CAAA;AACxC,MAAA,OAAA,CAAQ,MAAQ,EAAA,OAAA,CAAQ,CAAC,EAAE,GAAK,EAAA,KAAA,EAAa,KAAA,MAAA,CAAO,CAAU,OAAA,EAAA,GAAG,CAAG,CAAA,CAAA,CAAA,GAAI,KAAM,CAAA,CAAA;AAC9E,MAAO,OAAA,MAAA,CAAA;AAAA,KACT,CAAA;AAEA,IAAM,MAAA,aAAA,GAAgB,CAAC,OAA6C,KAAA;AAClE,MAAA,MAAM,aAAqC,EAAC,CAAA;AAC5C,MAAA,OAAA,CAAQ,UAAY,EAAA,OAAA,CAAQ,CAAC,EAAE,GAAK,EAAA,KAAA,EAAa,KAAA,UAAA,CAAW,CAAa,UAAA,EAAA,GAAG,CAAG,CAAA,CAAA,CAAA,GAAI,KAAM,CAAA,CAAA;AACzF,MAAO,OAAA,UAAA,CAAA;AAAA,KACT,CAAA;AAEA,IAAM,MAAA,IAAA,GAAO,QAAS,CAAA,GAAA,CAAI,CAAY,OAAA,MAAA;AAAA,MACpC,GAAG,OAAA;AAAA,MACH,QAAA,EAAU,gBAAiB,CAAA,OAAA,CAAQ,UAAU,CAAA;AAAA,MAC7C,MAAQ,EAAA,OAAA,CAAQ,MAAQ,EAAA,IAAA,CAAK,GAAG,CAAA;AAAA,MAChC,MAAQ,EAAA,OAAA,CAAQ,MAAQ,EAAA,IAAA,CAAK,GAAG,CAAA;AAAA,MAChC,IAAM,EAAA,OAAA,CAAQ,IAAM,EAAA,IAAA,CAAK,GAAG,CAAA;AAAA,MAC5B,OAAS,EAAA,OAAA,CAAQ,OAAS,EAAA,IAAA,CAAK,IAAI,CAAA;AAAA,MACnC,QAAQ,OAAQ,CAAA,MAAA,EAAQ,GAAI,CAAA,CAAC,EAAE,GAAK,EAAA,KAAA,EAAY,KAAA,CAAA,EAAG,GAAG,CAAI,CAAA,EAAA,KAAK,CAAE,CAAA,CAAA,CAAE,KAAK,GAAG,CAAA;AAAA,MAC3E,GAAG,UAAU,OAAO,CAAA;AAAA,MACpB,GAAG,cAAc,OAAO,CAAA;AAAA,KACxB,CAAA,CAAA,CAAA;AACF,IAAM,MAAA,QAAA,GAAW,MAAM,QAAS,EAAA,CAAA;AAChC,IAAM,MAAA,iBAAA,GAAoB,KAAM,CAAA,aAAA,CAAc,IAAI,CAAA,CAAA;AAElD,IAAM,KAAA,CAAA,iBAAA,CAAkB,QAAU,EAAA,iBAAA,EAAmB,UAAU,CAAA,CAAA;AAC/D,IAAA,OAAO,SAAU,CAAA,QAAA,EAAU,EAAE,IAAA,EAAM,UAAU,CAAA,CAAA;AAAA,GAC/C;AACF;;AChCO,MAAM,UAAa,GAAA;AAAA,EACxB,cAAA;AAAA,EACA,YAAA;AAAA,EACA,gBAAA;AAAA,EACA,YAAA;AAAA,EACA,eAAA;AAAA,EACA,cAAA;AACF;;;;;;;;ACVO,MAAM,aAAc,CAAA;AAAA,EAApB,WAAA,GAAA;AACL,IAAQ,aAAA,CAAA,IAAA,EAAA,WAAA,EAA+B,IAAI,UAAA,CAAW,YAAa,EAAA,CAAA,CAAA;AACnE,IAAQ,aAAA,CAAA,IAAA,EAAA,UAAA,EAAqB,CAAC,IAAiB,KAAA;AAC7C,MAAM,MAAA,QAAA,GAAW,GAAG,IAAK,CAAA,SAAA,CAAU,aAAa,CAAW,QAAA,EAAA,IAAA,CAAK,UAAU,aAAa,CAAA,CAAA,CAAA;AACvF,MAAG,EAAA,CAAA,aAAA,CAAc,UAAU,IAAI,CAAA,CAAA;AAC/B,MAAO,OAAA,IAAA,CAAA;AAAA,KACT,CAAA,CAAA;AAEA,IAAQ,aAAA,CAAA,IAAA,EAAA,cAAA,EAAe,IAAI,KAAmB,EAAA,CAAA,CAAA;AAAA,GAAA;AAAA,EAEvC,gBAAiB,YAAmC,EAAA;AACzD,IAAA,IAAA,CAAK,YAAe,GAAA,YAAA,CAAA;AAAA,GACtB;AAAA,EAEO,aAAc,SAAoC,EAAA;AACvD,IAAA,IAAA,CAAK,SAAY,GAAA,SAAA,CAAA;AAAA,GACnB;AAAA,EAEO,YAAa,QAA0B,EAAA;AAC5C,IAAA,IAAA,CAAK,QAAW,GAAA,QAAA,CAAA;AAAA,GAClB;AAAA,EAEA,MAAM,MAAA,CAAU,QAAqB,EAAA,UAAA,EAAyB,MAAuC,EAAA;AACnG,IAAA,MAAM,mBAAsB,GAAA,QAAA,CAAS,QAAQ,CAAA,CAAE,IAAI,CAAW,OAAA,KAAA;AAC5D,MAAA,IAAI,kBAA8B,GAAA,OAAA,CAAA;AAClC,MAAK,IAAA,CAAA,YAAA,CAAa,QAAQ,CAAe,WAAA,KAAA;AACvC,QAAA,kBAAA,GAAqB,YAAY,kBAAkB,CAAA,CAAA;AAAA,OACpD,CAAA,CAAA;AACD,MAAO,OAAA,kBAAA,CAAA;AAAA,KACR,CAAA,CAAA;AACD,IAAA,MAAM,OAAO,MAAM,IAAA,CAAK,UAAU,MAAO,CAAA,mBAAA,EAAqB,YAAY,MAAM,CAAA,CAAA;AAEhF,IAAI,IAAA,OAAO,SAAS,QAAU,EAAA;AAAE,MAAA,OAAO,KAAK,QAAS,CAAA,MAAA,CAAO,IAAK,CAAA,IAAA,EAAM,OAAO,CAAC,CAAA,CAAA;AAAA,KAAE;AACjF,IAAO,OAAA,IAAA,CAAK,SAAS,IAAI,CAAA,CAAA;AAAA,GAC3B;AACF;;AC+aY,IAAA,GAAA,qBAAAC,IAAL,KAAA;AACL,EAAAA,KAAA,QAAS,CAAA,GAAA,QAAA,CAAA;AACT,EAAAA,KAAA,OAAQ,CAAA,GAAA,OAAA,CAAA;AACR,EAAAA,KAAA,QAAS,CAAA,GAAA,QAAA,CAAA;AACT,EAAAA,KAAA,QAAS,CAAA,GAAA,QAAA,CAAA;AAJC,EAAAA,OAAAA,IAAAA,CAAAA;AAAA,CAAA,EAAA,GAAA,IAAA,EAAA,EAAA;AAOA,IAAA,QAAA,qBAAAC,SAAL,KAAA;AACL,EAAAA,UAAA,KAAM,CAAA,GAAA,KAAA,CAAA;AACN,EAAAA,UAAA,KAAM,CAAA,GAAA,KAAA,CAAA;AACN,EAAAA,UAAA,KAAM,CAAA,GAAA,KAAA,CAAA;AACN,EAAAA,UAAA,KAAM,CAAA,GAAA,KAAA,CAAA;AACN,EAAAA,UAAA,KAAM,CAAA,GAAA,KAAA,CAAA;AACN,EAAAA,UAAA,KAAM,CAAA,GAAA,KAAA,CAAA;AANI,EAAAA,OAAAA,SAAAA,CAAAA;AAAA,CAAA,EAAA,QAAA,IAAA,EAAA;;;;"}
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.3.1",
14
+ "version": "0.3.3",
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": {
@@ -24,10 +24,9 @@
24
24
  "dist"
25
25
  ],
26
26
  "scripts": {
27
- "publish": "npm run build && npm publish",
28
27
  "build": "rollup -c",
29
- "test": "vitest --typecheck",
30
- "lint": "eslint --ext .ts,.tsx ./{src,test}/ --fix",
28
+ "test": "vitest",
29
+ "lint": "eslint --ext .ts --fix",
31
30
  "test-ui": "vitest --ui",
32
31
  "coverage": "vitest run --coverage"
33
32
  },