goods-exporter 0.2.2 → 0.2.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/README.md +78 -29
- package/dist/bundle.d.ts +6 -3
- package/dist/cjs/index.cjs +46 -6
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/esm/index.mjs +27 -6
- package/dist/esm/index.mjs.map +1 -1
- package/package.json +73 -70
package/README.md
CHANGED
|
@@ -1,29 +1,78 @@
|
|
|
1
|
-
# goods-exporter
|
|
2
|
-
|
|
3
|
-

|
|
5
|
-
|
|
6
|
-
A versatile JavaScript library for exporting goods data to various formats such as YML, CSV, and Excel. Simplify data
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
1
|
+
# goods-exporter
|
|
2
|
+
|
|
3
|
+
[](https://badge.fury.io/js/goods-exporter)
|
|
4
|
+

|
|
5
|
+
|
|
6
|
+
A versatile JavaScript library for exporting goods data to various formats such as YML, CSV, and Excel. Simplify data
|
|
7
|
+
export tasks with ease.
|
|
8
|
+
|
|
9
|
+
[](https://t.me/goods_exporter)
|
|
10
|
+
|
|
11
|
+
## Features
|
|
12
|
+
|
|
13
|
+
- Export goods data to YML, CSV, and Excel formats.
|
|
14
|
+
- Easily integrate into your JavaScript projects.
|
|
15
|
+
- Compatible with Node.js version 16 and above.
|
|
16
|
+
- Comprehensive TypeScript type definitions included.
|
|
17
|
+
|
|
18
|
+
## Supported formats
|
|
19
|
+
|
|
20
|
+
- YML (Yandex Market Language)
|
|
21
|
+
- CSV
|
|
22
|
+
- Excel
|
|
23
|
+
|
|
24
|
+
## Installation
|
|
25
|
+
|
|
26
|
+
To use `goods-exporter` in your project, simply add it to your dependencies using npm or yarn:
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
npm install goods-exporter --save
|
|
30
|
+
# or
|
|
31
|
+
yarn add goods-exporter
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## Usage
|
|
35
|
+
|
|
36
|
+
```typescript
|
|
37
|
+
import {GoodsExporter, Formatters, Transformer, Category, Currency, Product, Vat} from "goods-exporter";
|
|
38
|
+
import fs from "fs"; // Import the 'fs' module for file writing.
|
|
39
|
+
|
|
40
|
+
// Create an instance of the GoodsExporter class.
|
|
41
|
+
const exporter = new GoodsExporter();
|
|
42
|
+
|
|
43
|
+
// Define an object 'transformers' that contains data transformation functions.
|
|
44
|
+
const transformers: Record<string, Transformer> = {
|
|
45
|
+
PRICE: (product) => ({
|
|
46
|
+
...product,
|
|
47
|
+
price: product.price + 10000
|
|
48
|
+
}),
|
|
49
|
+
IMAGE: (product) => ({
|
|
50
|
+
...product,
|
|
51
|
+
images: product.images?.map(image => image.replace("image", "pic"))
|
|
52
|
+
})
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
// Define an array 'keys' that contains the transformation keys you want to apply.
|
|
56
|
+
const keys = ["PRICE"];
|
|
57
|
+
|
|
58
|
+
// Set the formatter for exporting data to YML.
|
|
59
|
+
exporter.setFormatter(Formatters.YML);
|
|
60
|
+
|
|
61
|
+
// Set transformers based on the specified keys.
|
|
62
|
+
exporter.setTransformers(keys.map(key => transformers[key]));
|
|
63
|
+
|
|
64
|
+
// Set an exporter that saves the data to the "output.yml" file.
|
|
65
|
+
exporter.setExporter((data: Buffer) => {
|
|
66
|
+
fs.writeFileSync("output.yml", data); // Write data to the "output.yml" file.
|
|
67
|
+
return data; // Return the data (you can return any type).
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
// Call the data export method specifying the data type (Buffer) and expect the result as a promise.
|
|
71
|
+
exporter.export<Buffer>(products, categories)
|
|
72
|
+
.then(data => {
|
|
73
|
+
// Here, you can add additional handling for the export result if needed.
|
|
74
|
+
});
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
# Supported by [PoizonAPI](https://t.me/PoizonAPI)
|
|
78
|
+
[](https://t.me/PoizonAPI)
|
package/dist/bundle.d.ts
CHANGED
|
@@ -530,13 +530,16 @@ declare class CSVFormatter implements Formatter {
|
|
|
530
530
|
}
|
|
531
531
|
|
|
532
532
|
type Transformer = (product: Product) => Product;
|
|
533
|
+
type Exporter = (data: Buffer) => any | Promise<any>;
|
|
533
534
|
|
|
534
|
-
declare class
|
|
535
|
+
declare class GoodsExporter {
|
|
535
536
|
private formatter;
|
|
537
|
+
private exporter;
|
|
536
538
|
private transformers;
|
|
537
539
|
setTransformers(transformers: Transformer[]): void;
|
|
538
540
|
setFormatter(formatter: Formatter): void;
|
|
539
|
-
|
|
541
|
+
setExporter(exporter: Exporter): void;
|
|
542
|
+
export<T>(products: Product[], categories?: Category[], option?: FormatterOptions): Promise<T>;
|
|
540
543
|
}
|
|
541
544
|
|
|
542
|
-
export { CSVFormatter, type Category, Currency, Exporter, type Formatter, type FormatterOptions, Formatters, type IParam, type Product, type Transformer, Vat, YMLFormatter };
|
|
545
|
+
export { CSVFormatter, type Category, Currency, type Exporter, type Formatter, type FormatterOptions, Formatters, GoodsExporter, type IParam, type Product, type Transformer, Vat, YMLFormatter };
|
package/dist/cjs/index.cjs
CHANGED
|
@@ -3,6 +3,26 @@
|
|
|
3
3
|
var json2Csv = require('json-2-csv');
|
|
4
4
|
var fastXmlParser = require('fast-xml-parser');
|
|
5
5
|
var deepcopy = require('deepcopy');
|
|
6
|
+
var fs = require('fs');
|
|
7
|
+
|
|
8
|
+
function _interopNamespaceDefault(e) {
|
|
9
|
+
var n = Object.create(null);
|
|
10
|
+
if (e) {
|
|
11
|
+
Object.keys(e).forEach(function (k) {
|
|
12
|
+
if (k !== 'default') {
|
|
13
|
+
var d = Object.getOwnPropertyDescriptor(e, k);
|
|
14
|
+
Object.defineProperty(n, k, d.get ? d : {
|
|
15
|
+
enumerable: true,
|
|
16
|
+
get: function () { return e[k]; }
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
n.default = e;
|
|
22
|
+
return Object.freeze(n);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
var fs__namespace = /*#__PURE__*/_interopNamespaceDefault(fs);
|
|
6
26
|
|
|
7
27
|
class CSVFormatter {
|
|
8
28
|
async format(products, categories, option) {
|
|
@@ -29,9 +49,15 @@ class CSVFormatter {
|
|
|
29
49
|
}
|
|
30
50
|
}
|
|
31
51
|
|
|
52
|
+
var __defProp$1 = Object.defineProperty;
|
|
53
|
+
var __defNormalProp$1 = (obj, key, value) => key in obj ? __defProp$1(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
54
|
+
var __publicField$1 = (obj, key, value) => {
|
|
55
|
+
__defNormalProp$1(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
56
|
+
return value;
|
|
57
|
+
};
|
|
32
58
|
class YMLFormatter {
|
|
33
59
|
constructor() {
|
|
34
|
-
this
|
|
60
|
+
__publicField$1(this, "builder", new fastXmlParser.XMLBuilder({ ignoreAttributes: false, cdataPropName: "__cdata" }));
|
|
35
61
|
}
|
|
36
62
|
async format(products, categories, options) {
|
|
37
63
|
const mappedCategories = {
|
|
@@ -129,10 +155,20 @@ const Formatters = {
|
|
|
129
155
|
YML: new YMLFormatter()
|
|
130
156
|
};
|
|
131
157
|
|
|
132
|
-
|
|
158
|
+
var __defProp = Object.defineProperty;
|
|
159
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
160
|
+
var __publicField = (obj, key, value) => {
|
|
161
|
+
__defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
162
|
+
return value;
|
|
163
|
+
};
|
|
164
|
+
class GoodsExporter {
|
|
133
165
|
constructor() {
|
|
134
|
-
this
|
|
135
|
-
this
|
|
166
|
+
__publicField(this, "formatter", Formatters.YML);
|
|
167
|
+
__publicField(this, "exporter", (data) => {
|
|
168
|
+
fs__namespace.writeFileSync("output.yml", data);
|
|
169
|
+
return data;
|
|
170
|
+
});
|
|
171
|
+
__publicField(this, "transformers", new Array());
|
|
136
172
|
}
|
|
137
173
|
setTransformers(transformers) {
|
|
138
174
|
this.transformers = transformers;
|
|
@@ -140,6 +176,9 @@ class Exporter {
|
|
|
140
176
|
setFormatter(formatter) {
|
|
141
177
|
this.formatter = formatter;
|
|
142
178
|
}
|
|
179
|
+
setExporter(exporter) {
|
|
180
|
+
this.exporter = exporter;
|
|
181
|
+
}
|
|
143
182
|
async export(products, categories, option) {
|
|
144
183
|
const transformedProducts = deepcopy(products).map((product) => {
|
|
145
184
|
let transformedProduct = product;
|
|
@@ -148,7 +187,8 @@ class Exporter {
|
|
|
148
187
|
});
|
|
149
188
|
return transformedProduct;
|
|
150
189
|
});
|
|
151
|
-
|
|
190
|
+
const data = await this.formatter.format(transformedProducts, categories, option);
|
|
191
|
+
return this.exporter(Buffer.from(data, "utf-8"));
|
|
152
192
|
}
|
|
153
193
|
}
|
|
154
194
|
|
|
@@ -171,8 +211,8 @@ var Currency = /* @__PURE__ */ ((Currency2) => {
|
|
|
171
211
|
|
|
172
212
|
exports.CSVFormatter = CSVFormatter;
|
|
173
213
|
exports.Currency = Currency;
|
|
174
|
-
exports.Exporter = Exporter;
|
|
175
214
|
exports.Formatters = Formatters;
|
|
215
|
+
exports.GoodsExporter = GoodsExporter;
|
|
176
216
|
exports.Vat = Vat;
|
|
177
217
|
exports.YMLFormatter = YMLFormatter;
|
|
178
218
|
//# sourceMappingURL=index.cjs.map
|
package/dist/cjs/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../../src/formatter/CSV.formatter.ts","../../src/formatter/YML.formatter.ts","../../src/formatter/formater.types.ts","../../src/exporter/exporter.ts","../../src/types/Product.types.ts"],"sourcesContent":["import {Category, Product} from \"../types\";\nimport {json2csv} from \"json-2-csv\";\nimport {Formatter, FormatterOptions} from \"./formater.types\";\n\nexport class CSVFormatter implements Formatter {\n async format(products: Product[], categories?: Category[], option?: FormatterOptions): Promise<string> {\n const mappedCategories: Record<number, string> = {};\n categories?.forEach(({id, name}) => mappedCategories[id] = name);\n\n const getParams = (product: Product) => {\n const params: Record<string, string> = {};\n\n if (!option?.splitParams)\n return params\n\n product.params?.forEach(({key, value}) => params[`Param [${key}]`] = value)\n return params\n }\n const data = products.map(product => ({\n ...product,\n category: mappedCategories[product.categoryId],\n images: product.images?.join(\",\"),\n videos: product.videos?.join(\",\"),\n tags: product.tags?.join(\",\"),\n codesTN: product.codesTN?.join(\", \"),\n params: product.params?.map(({key, value}) => `${key}=${value}`).join(\",\"),\n ...getParams(product)\n }))\n return json2csv(data, {emptyFieldValue: \"\"})\n }\n}\n\n","import {XMLBuilder} from \"fast-xml-parser\";\nimport {Product, Category} from \"../types\";\nimport {Formatter, FormatterOptions} from \"./formater.types\";\n\n\nexport class YMLFormatter implements Formatter {\n builder = new XMLBuilder({ignoreAttributes: false, cdataPropName: '__cdata',});\n\n async format(products: Product[], categories?: Category[], options?: FormatterOptions): Promise<string> {\n const mappedCategories = {\n category: categories?.map(cat => ({\n \"@_id\": cat.id, \"@_parentId\": cat.parentId, \"#text\": cat.name\n }))\n };\n const shopName = options?.shopName ?? \"ShopName\";\n const companyName = options?.companyName ?? \"CompanyName\";\n const offers = {\"offer\": products.map(this.getOffers)};\n const result = {\n \"?xml\": {\n \"@_version\": '1.0',\n \"@_encoding\": 'UTF-8',\n \"@_standalone\": 'yes'\n },\n \"yml_catalog\": {\n \"@_date\": new Date().toISOString().replace(/.\\d+Z/, ''),\n \"shop\": {\n name: shopName,\n company: companyName,\n categories: mappedCategories,\n offers\n }\n }\n };\n\n return this.builder.build(result);\n }\n\n private getOffers(product: Product) {\n const result = {\n \"@_id\": product.variantId,\n \"name\": product.title,\n \"price\": product.price,\n \"oldprice\": product.oldPrice,\n \"purchase_price\": product.purchasePrice,\n \"additional_expenses\": product.additionalExpenses,\n \"cofinance_price\": product.cofinancePrice,\n \"currencyId\": product.currency,\n \"categoryId\": product.categoryId,\n \"vendor\": product.vendor,\n \"vendorCode\": product.vendorCode,\n \"picture\": product.images,\n \"video\": product.videos,\n \"available\": product.available,\n \"min-quantity\": product.minQuantity,\n \"step-quantity\": product.stepQuantity,\n \"param\": product.params?.map(param => ({\n \"#text\": param.value,\n \"@_name\": param.key\n })),\n \"description\": {\n __cdata: product.description\n },\n \"country_of_origin\": product.countryOfOrigin,\n \"barcode\": product.barcode,\n \"vat\": product.vat,\n \"count\": product.count,\n \"set-ids\": product.tags?.join(\", \"),\n \"adult\": product.adult,\n \"downloadable\": product.downloadable,\n \"period-of-validity-days\": product.validityPeriod,\n \"comment-validity-days\": product.validityComment,\n \"service-life-days\": product.serviceLifePeriod,\n \"comment-life-days\": product.serviceLifeComment,\n \"warranty-days\": product.warrantyPeriod,\n \"comment-warranty\": product.warrantyComment,\n \"manufacturer_warranty\": product.manufacturerWarranty,\n \"certificate\": product.certificate,\n \"url\": product.url,\n \"weight\": product.weight,\n \"dimensions\": product.dimensions,\n \"boxCount\": product.boxCount,\n \"disabled\": product.disabled,\n \"age\": product.age && {\n \"@_unit\": product.age.unit,\n \"#text\": product.age.value,\n },\n \"tn-ved-codes\": product.codesTN?.length && {\n \"tn-ved-code\": product.codesTN\n }\n };\n if (product.parentId)\n return {\n ...result,\n \"@_group_id\": product.parentId\n };\n return result;\n }\n}\n\n","import {YMLFormatter} from \"./YML.formatter\";\nimport {Category, Product} from \"../types\";\nimport {CSVFormatter} from \"./CSV.formatter\";\n\nexport interface Formatter {\n format(products: Product[], categories?: Category[], option?: FormatterOptions): Promise<string>;\n}\n\nexport interface FormatterOptions {\n shopName?: string\n companyName?: string\n splitParams?: boolean\n}\n\nexport const Formatters = {\n CSV: new CSVFormatter(),\n YML: new YMLFormatter(),\n}\n\n","import {Formatter, FormatterOptions, Formatters} from \"../formatter\";\nimport {Transformer} from \"./exporter.types\";\nimport {Category, Product} from \"../types\";\nimport deepcopy from \"deepcopy\";\n\nexport class Exporter {\n private formatter: Formatter = Formatters.YML\n private transformers = new Array<Transformer>()\n\n\n setTransformers(transformers: Transformer[]) {\n this.transformers = transformers\n }\n\n setFormatter(formatter: Formatter) {\n this.formatter = formatter\n }\n\n async export(products: Product[], categories?: Category[], option?: FormatterOptions): Promise<string> {\n const transformedProducts = deepcopy(products).map(product => {\n let transformedProduct: Product = product;\n this.transformers.forEach(transformer => {\n transformedProduct = transformer(transformedProduct)\n })\n return transformedProduct\n })\n return this.formatter.format(transformedProducts, categories, option)\n }\n}","export interface Product {\n /**\n * **ID товара**\n *\n * Любая последовательность длиной до 80 знаков. В нее могут входить английские и русские (кроме ё) буквы, цифры и символы . , / \\ ( ) [ ] - = _\n *\n * Пример: belaya-kofta-12345\n */\n productId: number\n /**\n * **Родительскй SKU**\n *\n * Любая последовательность длиной до 80 знаков. В нее могут входить английские и русские (кроме ё) буквы, цифры и символы . , / \\ ( ) [ ] - = _\n *\n * Пример: belaya-kofta-12345\n */\n parentId?: number\n /**\n * **SKU**\n *\n * Любая последовательность длиной до 80 знаков. В нее могут входить английские и русские (кроме ё) буквы, цифры и символы . , / \\ ( ) [ ] - = _\n *\n * Пример: belaya-kofta-12345\n */\n variantId: number\n /**\n * **Название**\n *\n * Составляйте название по схеме: тип + бренд или производитель + модель + особенности, если есть (например, цвет, размер или вес) и количество в упаковке.\n *\n * Не включайте в название условия продажи (например, «скидка», «бесплатная доставка» и т. д.), эмоциональные характеристики («хит», «супер» и т. д.). Не пишите слова большими буквами — кроме устоявшихся названий брендов и моделей.\n *\n * Оптимальная длина — 50–60 символов, максимальная — 150.\n *\n * Составлять хорошие названия помогут [рекомендации](https://yandex.ru/support/marketplace/assortment/fields/title.html).\n *\n * Пример: Ударная дрель Makita HP1630, 710 Вт\n */\n title: string\n /**\n * **Описание**\n *\n * Подробное описание товара: например, его преимущества и особенности.\n *\n * Не давайте в описании инструкций по установке и сборке. Не используйте слова «скидка», «распродажа», «дешевый», «подарок» (кроме подарочных категорий), «бесплатно», «акция», «специальная цена», «новинка», «new», «аналог», «заказ», «хит». Не указывайте никакой контактной информации и не давайте ссылок.\n *\n * Можно использовать теги:\n *\n ** <h>, <h1>, <h2> и так далее — для заголовков;\n ** <br> и <p> — для переноса строки;\n ** <ol> — для нумерованного списка;\n ** <ul> — для маркированного списка;\n ** <li> — для создания элементов списка (должен находиться внутри <ol> или <ul>);\n ** <div> — поддерживается, но не влияет на отображение текста.\n * Оптимальная длина — 400–600 символов, максимальная — 6000.\n *\n * Составить хорошее описание помогут рекомендации.\n *\n * Пример: В комплекте с детским микроскопом есть все, что нужно вашему ребенку для изучения микромира\n */\n description: string\n /**\n * **Бренд**\n *\n * Название бренда или производителя.\n *\n * Записывайте название так, как его пишет сам бренд.\n *\n * Пример: LEVENHUK\n */\n vendor?: string\n /**\n * **Артикул производителя**\n *\n * Код товара, который ему присвоил производитель.\n *\n * Если артикулов несколько, укажите их через запятую.\n *\n * Пример: VNDR-0005A, VNDR-0005B\n */\n vendorCode?: string\n /**\n * **Категория в магазине**\n *\n * Категория, к которой вы относите товар. Она помогает точнее определить для товара категорию на Маркете.\n *\n * Указывайте конкретные категории — например, набор ножей лучше отнести к категории Столовые приборы, а не просто Посуда.\n *\n * Выбирайте категории, которые описывают товар, а не абстрактный признак — например, лучше указать Духи, а не Подарки.\n *\n * Содержит номер категории, а не ее название.\n */\n categoryId: number\n /**\n * **Страна производства**\n *\n * Страна, где был произведен товар.\n *\n * Записывайте названия стран так, как они записаны в [списке](https://yastatic.net/s3/doc-binary/src/support/market/ru/countries.xlsx).\n *\n * Пример: Россия\n */\n countryOfOrigin?: string\n /**\n * **Изображение**\n *\n * До двадцати изображений, которые показываются на карточке товара.\n *\n * Принимаются jpg- или png-изображения товара, соответствующие [требованиям](https://yandex.ru/support/marketplace/assortment/fields/images.html).\n *\n * В кабинете изображения добавляются в виде файлов. В Excel-файле — в виде ссылок через запятую. Первое фото становится основным.\n *\n * Чтобы изменить изображение, выложите новое по новой ссылке, иначе картинка не обновится.\n */\n images?: string[]\n /**\n * **Видео**\n *\n * Видеоиллюстрации для карточки товара.\n *\n * Видео должно соответствовать [требованиям](https://yandex.ru/support/marketplace/assortment/fields/video.html).\n *\n * Можно добавить не больше 6 видео.\n *\n * В кабинете можно загрузить видеофайлы. В Excel-шаблоне укажите ссылки на файлы.\n */\n videos?: string[]\n /**\n * **Базовая цена**\n *\n * Цена указывается в рублях. Число должно быть целым.\n *\n * Пример:\n *\n * 240\n */\n price: number\n /**\n * **Цена до скидки**\n *\n * Цена указывается в рублях. Число должно быть целым.\n *\n * Вы можете указать цену со скидкой от 5 до 75 %.\n *\n * Пример:\n *\n * 250\n */\n oldPrice?: number\n /**\n * **Себестоимость**\n *\n * Цена указывается в рублях. Число должно быть целым.\n *\n * Пример:\n *\n * 200\n */\n purchasePrice?: number\n /**\n * **Дополнительные расходы**\n *\n * Дополнительные расходы на товар. Например, на доставку или упаковку.\n *\n * После заполнения этого поля в калькуляторе и на странице управления ценами рассчитается потенциальная маржинальность товара.\n *\n * Цена указывается в рублях. Число должно быть целым.\n *\n * Пример:\n *\n * 75\n */\n additionalExpenses?: number\n /**\n * **Порог для скидок с Маркетом**\n *\n * Цена указывается в рублях. Число должно быть целым.\n *\n * Пример:\n *\n * 300\n */\n cofinancePrice?: number\n /**\n * **Валюта (DBS)**\n *\n * Валюта, в которой указана цена товара. Покупателям Маркет показывает цену в рублях, пересчитывая ее по курсу Центробанка.\n *\n * Поле используется, если для кабинета еще не включена работа с базовыми ценами.\n *\n * Поддерживаются российские и белорусские рубли, евро, доллары, украинские гривны и казахстанские тенге.\n *\n * В кабинете валюту можно просто выбрать из списка. В Excel-файле указывается код валюты: RUR, BYN, EUR, USD, UAN, KZT.\n */\n currency: Currency\n /**\n * **Ссылка на страницу товара**\n *\n * Адрес страницы на вашем сайте с фотографиями и описанием товара.\n *\n * Максимальная длина URL — 512 символов. Записывайте его согласно стандарту RFC 3986.\n *\n * Пример: http://best.seller.ru/product_page.asp?pid=12346\n */\n url?: string\n /**\n * **Убрать из продажи**\n *\n * Поле позволяет приостановить продажу товара.\n *\n * Укажите значение true, если нужно приостановить продажу.\n */\n disabled?: boolean\n /**\n * **Доступное количество товара**\n *\n * Общее количество товара, доступное для продажи\n *\n * Укажите 0, если товара нет в наличии.\n *\n * Пример: 7\n */\n count?: number\n /**\n * **Товар в наличии (DBS)**\n *\n * Поле указывает, есть ли товар в наличии.\n */\n available?: boolean\n /**\n * **Минимальное количество товара**\n *\n * Если значение задано, покупатель не сможет заказать меньше единиц товара. Ограничение не работает, когда товара на складе осталось меньше этого количества — тогда покупатель сможет сделать заказ на остаток.\n *\n * Целое число.\n */\n minQuantity?: number\n /**\n * **Квант продажи**\n *\n * Если значение задано, покупатель сможет добавить к заказу только кратное количество товара. Ограничение не работает, когда на складе осталось меньше этого количества — тогда покупатель сможет сделать заказ на остаток.\n *\n * Целое число.\n */\n stepQuantity?: number\n /**\n * **Штрихкод**\n *\n * Указывайте в виде последовательности символов. Подойдут коды EAN-13, EAN-8, UPC-A, UPC-E или Code 128.\n *\n * Для книг указывайте ISBN.\n *\n * Для товаров [определенных категорий и торговых марок](https://yastatic.net/s3/doc-binary/src/support/market/ru/yandex-market-list-for-gtin.xlsx) штрихкод должен быть действительным кодом GTIN. Обратите внимание: внутренние штрихкоды, начинающиеся на 2 или 02, и коды формата Code 128 не являются GTIN.\n *\n * Если штрихкодов несколько, напишите все через запятую.\n *\n * Пример: 46012300000000\n */\n barcode?: string\n /**\n * **Код ТН ВЭД**\n *\n * Для некоторых категорий товаров код ТН ВЭД обязателен. Если это касается ваших товаров, вы получите уведомление в каталоге.\n *\n * 10 или 14 цифр без пробелов.\n *\n * Пример: 8517610008\n */\n codesTN?: string[]\n /**\n * **С какого возраста пользоваться**\n *\n * Если товар не предназначен для детей младше определенного возраста, укажите это.\n *\n * Возрастные ограничения можно задавать в годах (с нуля, с 6, 12, 16 или 18) или в месяцах (любое число от 0 до 12).\n */\n age?: { unit: \"year\" | \"month\", value: number }\n /**\n * **Вес с упаковкой**\n *\n * Вес товара с упаковкой.\n *\n * Единица измерения — килограммы. Можно дроби: разделитель — точка или запятая, не больше трех цифр после него.\n *\n * Пример: 3.1\n */\n weight?: number\n /**\n * **Габариты с упаковкой**\n *\n * Длина, ширина, высота в упаковке.\n *\n * Единица измерения — сантиметры. Можно дроби: разделитель — точка или запятая, не больше трех цифр после него.\n *\n * Пример: 20.1/20.551/22.5\n */\n dimensions?: string\n /**\n * **Товар занимает больше одного места**\n *\n * Если товар занимает одно место (представляет собой одну коробку, упаковку и так далее), оставьте поле пустым. Если товар занимает несколько мест — укажите их количество. Например, кондиционер занимает два места — внешний и внутренний блоки в двух коробках.\n *\n * Укажите количество мест.\n *\n * Пример: 2\n */\n boxCount?: number\n /**\n * **Ставка НДС**\n *\n * Значение ставки НДС для товара.\n *\n * Выберите одно из значений:\n *\n ** НДС не облагается — 6 или NO_VAT\n *\n ** 0 % — 5 или VAT_0\n *\n ** 10 % — 2 или VAT_10\n *\n ** 20 % — 7 или VAT_20\n *\n * Если не заполнено, Маркет устанавливает ставку, соответствующую схеме налогообложения.\n *\n * Пример: VAT_20\n */\n vat: Vat\n /**\n * **Характеристики, которые есть только у товаров конкретной категории**\n *\n * Кроме общих свойств, у товара есть характеристики, присущие конкретной категории, к которой он относится. Например, у велосипеда есть размер рамы, а детское пюре бывает овощное, мясное или фруктовое.\n */\n params?: IParam[]\n /**\n * **Теги**\n *\n * Придумайте любое название — его можно будет изменить после.\n *\n * Максимальная длина тега — 20 символов.\n *\n * У одного товара — максимум 10 тегов.\n *\n * Всего можно создать не больше 50 разных тегов.\n *\n * Пример: apple, до 500 рублей\n */\n tags?: string[]\n /**\n * **Товар для взрослых**\n *\n * Параметр включает для товара пометку 18+. Устанавливайте ее только для товаров, которые относятся к удовлетворению сексуальных потребностей.\n */\n adult?: boolean\n /**\n * **Цифровой товар**\n *\n * Параметр, устанавливаемый для цифровых товаров, которые просто скачиваются.\n */\n downloadable?: boolean\n /**\n * **Срок годности**\n *\n * Период с момента изготовления, по прошествии которого товар становится непригоден.\n *\n * Указывайте срок, указанный на банке или упаковке. Текущая дата, дата поставки или дата отгрузки значения не имеет.\n *\n * Срок можно указывать в годах, месяцах, днях, неделях и часах.\n *\n * Обязательно указывайте срок, если он есть.\n *\n * Продолжительность указывается согласно ISO 8601, то есть в виде строчки, начинающейся буквой P:\n *\n ** P1Y — 1 год;\n ** P1Y6M — 1 год и 6 месяцев;\n ** P15D — 15 дней.\n */\n validityPeriod?: string\n /**\n * **Комментарий к сроку годности**\n *\n * Поле предназначено для описаний условий хранения.\n *\n * Не длиннее 250 знаков и без спецсимволов.\n *\n * Пример: Хранить в сухом помещении\n */\n validityComment?: string\n /**\n * **Срок службы**\n *\n * В течение срока службы товар должен исправно выполнять свою функцию.\n *\n * Обязательно указывайте срок, если он есть.\n *\n * Срок можно указывать в годах, месяцах и днях.\n * Продолжительность указывается согласно ISO 8601, то есть в виде строчки, начинающейся буквой P:\n *\n ** P1Y — 1 год;\n ** P1Y2M — 1 год и 2 месяца;\n ** P15D — 15 дней;\n ** P2Y10D — 2 года, 10 дней;\n ** P2Y6M10D — 2 года, 6 месяцев и 10 дней.\n */\n serviceLifePeriod?: string\n /**\n * **Комментарий к сроку службы**\n *\n * Поле предназначено для описаний условий использования.\n *\n * Не длиннее 250 знаков и без спецсимволов.\n *\n * Пример: Использовать при температуре не ниже −10 градусов\n */\n serviceLifeComment?: string\n /**\n * **Гарантийный срок**\n *\n * В течение какого времени можно бесплатно заменить или починить товар.\n *\n * Срок можно указывать в годах, месяцах или днях.\n *\n * Продолжительность указывается согласно ISO 8601, то есть в виде строчки, начинающейся буквой P:\n *\n ** P1Y — 1 год;\n ** P1Y2M — 1 год и 2 месяца;\n ** P15D — 15 дней;\n ** P2Y10D — 2 года, 10 дней;\n ** P2Y6M10D — 2 года, 6 месяцев и 10 дней.\n */\n warrantyPeriod?: string\n /**\n * **Комментарий к гарантийному сроку**\n *\n * Поле предназначено для описания особенностей гарантийных условий.\n *\n * Указывайте только то, что относится к гарантии изготовителя.\n *\n * Не длиннее 250 знаков и без спецсимволов.\n *\n * Пример: Гарантия на аккумулятор — 6 месяцев\n */\n warrantyComment?: string\n /**\n * **Официальная гарантия производителя**\n */\n manufacturerWarranty?: boolean\n /**\n * **Номер документа**\n *\n * Номер документа на товар: сертификата, декларации соответствия и т. п.\n *\n * Прежде чем указывать номер документа, загрузите скан документа через кабинет.\n *\n * Укажите номер документа.\n *\n * Пример: 6241421\n */\n certificate?: string\n}\n\nexport enum Vat {\n NO_VAT = \"NO_VAT\",\n VAT_0 = \"VAT_0\",\n VAT_10 = \"VAT_10\",\n VAT_20 = \"VAT_20\"\n}\n\nexport enum Currency {\n RUR = \"RUR\",\n BYN = \"BYN\",\n EUR = \"EUR\",\n USD = \"USD\",\n UAN = \"UAN\",\n KZT = \"KZT\"\n}\n\nexport interface IParam {\n /**\n * **Название характеристики**\n */\n key: string,\n /**\n * **Значение**\n */\n value: string\n}"],"names":["json2csv","XMLBuilder","Vat","Currency"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../../src/formatter/CSV.formatter.ts","../../src/formatter/YML.formatter.ts","../../src/formatter/formater.types.ts","../../src/exporter/goodsExporter.ts","../../src/types/Product.types.ts"],"sourcesContent":["import {Category, Product} from \"../types\";\r\nimport {json2csv} from \"json-2-csv\";\r\nimport {Formatter, FormatterOptions} from \"./formater.types\";\r\n\r\nexport class CSVFormatter implements Formatter {\r\n 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) => {\r\n const params: Record<string, string> = {};\r\n\r\n if (!option?.splitParams)\r\n return params\r\n\r\n product.params?.forEach(({key, value}) => params[`Param [${key}]`] = value)\r\n return params\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 }))\r\n return json2csv(data, {emptyFieldValue: \"\"})\r\n }\r\n}\r\n\r\n","import {XMLBuilder} from \"fast-xml-parser\";\r\nimport {Product, Category} from \"../types\";\r\nimport {Formatter, FormatterOptions} from \"./formater.types\";\r\n\r\n\r\nexport class YMLFormatter implements Formatter {\r\n builder = new XMLBuilder({ignoreAttributes: false, cdataPropName: '__cdata',});\r\n\r\n 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) {\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 && {\r\n \"@_unit\": product.age.unit,\r\n \"#text\": product.age.value,\r\n },\r\n \"tn-ved-codes\": product.codesTN?.length && {\r\n \"tn-ved-code\": product.codesTN\r\n }\r\n };\r\n if (product.parentId)\r\n return {\r\n ...result,\r\n \"@_group_id\": product.parentId\r\n };\r\n return result;\r\n }\r\n}\r\n\r\n","import {YMLFormatter} from \"./YML.formatter\";\r\nimport {Category, Product} from \"../types\";\r\nimport {CSVFormatter} from \"./CSV.formatter\";\r\n\r\nexport interface Formatter {\r\n format(products: Product[], categories?: Category[], option?: FormatterOptions): Promise<string>;\r\n}\r\n\r\nexport interface FormatterOptions {\r\n shopName?: string\r\n companyName?: string\r\n splitParams?: boolean\r\n}\r\n\r\nexport const Formatters = {\r\n CSV: new CSVFormatter(),\r\n YML: new YMLFormatter(),\r\n}\r\n\r\n","import {Formatter, FormatterOptions, Formatters} from \"../formatter\";\r\nimport {Exporter, Transformer} from \"./exporter.types\";\r\nimport {Category, Product} from \"../types\";\r\nimport deepcopy from \"deepcopy\";\r\nimport * as fs from \"fs\";\r\n\r\nexport class GoodsExporter {\r\n private formatter: Formatter = Formatters.YML\r\n private exporter: Exporter = (data: Buffer) => {\r\n fs.writeFileSync(\"output.yml\", data);\r\n return data;\r\n };\r\n\r\n private transformers = new Array<Transformer>()\r\n\r\n\r\n setTransformers(transformers: Transformer[]) {\r\n this.transformers = transformers\r\n }\r\n\r\n setFormatter(formatter: Formatter) {\r\n this.formatter = formatter\r\n }\r\n\r\n setExporter(exporter: Exporter) {\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}","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 ** <h>, <h1>, <h2> и так далее — для заголовков;\r\n ** <br> и <p> — для переноса строки;\r\n ** <ol> — для нумерованного списка;\r\n ** <ul> — для маркированного списка;\r\n ** <li> — для создания элементов списка (должен находиться внутри <ol> или <ul>);\r\n ** <div> — поддерживается, но не влияет на отображение текста.\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 * Категория, к которой вы относите товар. Она помогает точнее определить для товара категорию на Маркете.\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 * Придумайте любое название — его можно будет изменить после.\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}"],"names":["json2csv","__publicField","XMLBuilder","fs","Vat","Currency"],"mappings":"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"}
|
package/dist/esm/index.mjs
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { json2csv } from 'json-2-csv';
|
|
2
2
|
import { XMLBuilder } from 'fast-xml-parser';
|
|
3
3
|
import deepcopy from 'deepcopy';
|
|
4
|
+
import * as fs from 'fs';
|
|
4
5
|
|
|
5
6
|
class CSVFormatter {
|
|
6
7
|
async format(products, categories, option) {
|
|
@@ -27,9 +28,15 @@ class CSVFormatter {
|
|
|
27
28
|
}
|
|
28
29
|
}
|
|
29
30
|
|
|
31
|
+
var __defProp$1 = Object.defineProperty;
|
|
32
|
+
var __defNormalProp$1 = (obj, key, value) => key in obj ? __defProp$1(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
33
|
+
var __publicField$1 = (obj, key, value) => {
|
|
34
|
+
__defNormalProp$1(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
35
|
+
return value;
|
|
36
|
+
};
|
|
30
37
|
class YMLFormatter {
|
|
31
38
|
constructor() {
|
|
32
|
-
this
|
|
39
|
+
__publicField$1(this, "builder", new XMLBuilder({ ignoreAttributes: false, cdataPropName: "__cdata" }));
|
|
33
40
|
}
|
|
34
41
|
async format(products, categories, options) {
|
|
35
42
|
const mappedCategories = {
|
|
@@ -127,10 +134,20 @@ const Formatters = {
|
|
|
127
134
|
YML: new YMLFormatter()
|
|
128
135
|
};
|
|
129
136
|
|
|
130
|
-
|
|
137
|
+
var __defProp = Object.defineProperty;
|
|
138
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
139
|
+
var __publicField = (obj, key, value) => {
|
|
140
|
+
__defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
141
|
+
return value;
|
|
142
|
+
};
|
|
143
|
+
class GoodsExporter {
|
|
131
144
|
constructor() {
|
|
132
|
-
this
|
|
133
|
-
this
|
|
145
|
+
__publicField(this, "formatter", Formatters.YML);
|
|
146
|
+
__publicField(this, "exporter", (data) => {
|
|
147
|
+
fs.writeFileSync("output.yml", data);
|
|
148
|
+
return data;
|
|
149
|
+
});
|
|
150
|
+
__publicField(this, "transformers", new Array());
|
|
134
151
|
}
|
|
135
152
|
setTransformers(transformers) {
|
|
136
153
|
this.transformers = transformers;
|
|
@@ -138,6 +155,9 @@ class Exporter {
|
|
|
138
155
|
setFormatter(formatter) {
|
|
139
156
|
this.formatter = formatter;
|
|
140
157
|
}
|
|
158
|
+
setExporter(exporter) {
|
|
159
|
+
this.exporter = exporter;
|
|
160
|
+
}
|
|
141
161
|
async export(products, categories, option) {
|
|
142
162
|
const transformedProducts = deepcopy(products).map((product) => {
|
|
143
163
|
let transformedProduct = product;
|
|
@@ -146,7 +166,8 @@ class Exporter {
|
|
|
146
166
|
});
|
|
147
167
|
return transformedProduct;
|
|
148
168
|
});
|
|
149
|
-
|
|
169
|
+
const data = await this.formatter.format(transformedProducts, categories, option);
|
|
170
|
+
return this.exporter(Buffer.from(data, "utf-8"));
|
|
150
171
|
}
|
|
151
172
|
}
|
|
152
173
|
|
|
@@ -167,5 +188,5 @@ var Currency = /* @__PURE__ */ ((Currency2) => {
|
|
|
167
188
|
return Currency2;
|
|
168
189
|
})(Currency || {});
|
|
169
190
|
|
|
170
|
-
export { CSVFormatter, Currency,
|
|
191
|
+
export { CSVFormatter, Currency, Formatters, GoodsExporter, Vat, YMLFormatter };
|
|
171
192
|
//# sourceMappingURL=index.mjs.map
|
package/dist/esm/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../../src/formatter/CSV.formatter.ts","../../src/formatter/YML.formatter.ts","../../src/formatter/formater.types.ts","../../src/exporter/exporter.ts","../../src/types/Product.types.ts"],"sourcesContent":["import {Category, Product} from \"../types\";\nimport {json2csv} from \"json-2-csv\";\nimport {Formatter, FormatterOptions} from \"./formater.types\";\n\nexport class CSVFormatter implements Formatter {\n async format(products: Product[], categories?: Category[], option?: FormatterOptions): Promise<string> {\n const mappedCategories: Record<number, string> = {};\n categories?.forEach(({id, name}) => mappedCategories[id] = name);\n\n const getParams = (product: Product) => {\n const params: Record<string, string> = {};\n\n if (!option?.splitParams)\n return params\n\n product.params?.forEach(({key, value}) => params[`Param [${key}]`] = value)\n return params\n }\n const data = products.map(product => ({\n ...product,\n category: mappedCategories[product.categoryId],\n images: product.images?.join(\",\"),\n videos: product.videos?.join(\",\"),\n tags: product.tags?.join(\",\"),\n codesTN: product.codesTN?.join(\", \"),\n params: product.params?.map(({key, value}) => `${key}=${value}`).join(\",\"),\n ...getParams(product)\n }))\n return json2csv(data, {emptyFieldValue: \"\"})\n }\n}\n\n","import {XMLBuilder} from \"fast-xml-parser\";\nimport {Product, Category} from \"../types\";\nimport {Formatter, FormatterOptions} from \"./formater.types\";\n\n\nexport class YMLFormatter implements Formatter {\n builder = new XMLBuilder({ignoreAttributes: false, cdataPropName: '__cdata',});\n\n async format(products: Product[], categories?: Category[], options?: FormatterOptions): Promise<string> {\n const mappedCategories = {\n category: categories?.map(cat => ({\n \"@_id\": cat.id, \"@_parentId\": cat.parentId, \"#text\": cat.name\n }))\n };\n const shopName = options?.shopName ?? \"ShopName\";\n const companyName = options?.companyName ?? \"CompanyName\";\n const offers = {\"offer\": products.map(this.getOffers)};\n const result = {\n \"?xml\": {\n \"@_version\": '1.0',\n \"@_encoding\": 'UTF-8',\n \"@_standalone\": 'yes'\n },\n \"yml_catalog\": {\n \"@_date\": new Date().toISOString().replace(/.\\d+Z/, ''),\n \"shop\": {\n name: shopName,\n company: companyName,\n categories: mappedCategories,\n offers\n }\n }\n };\n\n return this.builder.build(result);\n }\n\n private getOffers(product: Product) {\n const result = {\n \"@_id\": product.variantId,\n \"name\": product.title,\n \"price\": product.price,\n \"oldprice\": product.oldPrice,\n \"purchase_price\": product.purchasePrice,\n \"additional_expenses\": product.additionalExpenses,\n \"cofinance_price\": product.cofinancePrice,\n \"currencyId\": product.currency,\n \"categoryId\": product.categoryId,\n \"vendor\": product.vendor,\n \"vendorCode\": product.vendorCode,\n \"picture\": product.images,\n \"video\": product.videos,\n \"available\": product.available,\n \"min-quantity\": product.minQuantity,\n \"step-quantity\": product.stepQuantity,\n \"param\": product.params?.map(param => ({\n \"#text\": param.value,\n \"@_name\": param.key\n })),\n \"description\": {\n __cdata: product.description\n },\n \"country_of_origin\": product.countryOfOrigin,\n \"barcode\": product.barcode,\n \"vat\": product.vat,\n \"count\": product.count,\n \"set-ids\": product.tags?.join(\", \"),\n \"adult\": product.adult,\n \"downloadable\": product.downloadable,\n \"period-of-validity-days\": product.validityPeriod,\n \"comment-validity-days\": product.validityComment,\n \"service-life-days\": product.serviceLifePeriod,\n \"comment-life-days\": product.serviceLifeComment,\n \"warranty-days\": product.warrantyPeriod,\n \"comment-warranty\": product.warrantyComment,\n \"manufacturer_warranty\": product.manufacturerWarranty,\n \"certificate\": product.certificate,\n \"url\": product.url,\n \"weight\": product.weight,\n \"dimensions\": product.dimensions,\n \"boxCount\": product.boxCount,\n \"disabled\": product.disabled,\n \"age\": product.age && {\n \"@_unit\": product.age.unit,\n \"#text\": product.age.value,\n },\n \"tn-ved-codes\": product.codesTN?.length && {\n \"tn-ved-code\": product.codesTN\n }\n };\n if (product.parentId)\n return {\n ...result,\n \"@_group_id\": product.parentId\n };\n return result;\n }\n}\n\n","import {YMLFormatter} from \"./YML.formatter\";\nimport {Category, Product} from \"../types\";\nimport {CSVFormatter} from \"./CSV.formatter\";\n\nexport interface Formatter {\n format(products: Product[], categories?: Category[], option?: FormatterOptions): Promise<string>;\n}\n\nexport interface FormatterOptions {\n shopName?: string\n companyName?: string\n splitParams?: boolean\n}\n\nexport const Formatters = {\n CSV: new CSVFormatter(),\n YML: new YMLFormatter(),\n}\n\n","import {Formatter, FormatterOptions, Formatters} from \"../formatter\";\nimport {Transformer} from \"./exporter.types\";\nimport {Category, Product} from \"../types\";\nimport deepcopy from \"deepcopy\";\n\nexport class Exporter {\n private formatter: Formatter = Formatters.YML\n private transformers = new Array<Transformer>()\n\n\n setTransformers(transformers: Transformer[]) {\n this.transformers = transformers\n }\n\n setFormatter(formatter: Formatter) {\n this.formatter = formatter\n }\n\n async export(products: Product[], categories?: Category[], option?: FormatterOptions): Promise<string> {\n const transformedProducts = deepcopy(products).map(product => {\n let transformedProduct: Product = product;\n this.transformers.forEach(transformer => {\n transformedProduct = transformer(transformedProduct)\n })\n return transformedProduct\n })\n return this.formatter.format(transformedProducts, categories, option)\n }\n}","export interface Product {\n /**\n * **ID товара**\n *\n * Любая последовательность длиной до 80 знаков. В нее могут входить английские и русские (кроме ё) буквы, цифры и символы . , / \\ ( ) [ ] - = _\n *\n * Пример: belaya-kofta-12345\n */\n productId: number\n /**\n * **Родительскй SKU**\n *\n * Любая последовательность длиной до 80 знаков. В нее могут входить английские и русские (кроме ё) буквы, цифры и символы . , / \\ ( ) [ ] - = _\n *\n * Пример: belaya-kofta-12345\n */\n parentId?: number\n /**\n * **SKU**\n *\n * Любая последовательность длиной до 80 знаков. В нее могут входить английские и русские (кроме ё) буквы, цифры и символы . , / \\ ( ) [ ] - = _\n *\n * Пример: belaya-kofta-12345\n */\n variantId: number\n /**\n * **Название**\n *\n * Составляйте название по схеме: тип + бренд или производитель + модель + особенности, если есть (например, цвет, размер или вес) и количество в упаковке.\n *\n * Не включайте в название условия продажи (например, «скидка», «бесплатная доставка» и т. д.), эмоциональные характеристики («хит», «супер» и т. д.). Не пишите слова большими буквами — кроме устоявшихся названий брендов и моделей.\n *\n * Оптимальная длина — 50–60 символов, максимальная — 150.\n *\n * Составлять хорошие названия помогут [рекомендации](https://yandex.ru/support/marketplace/assortment/fields/title.html).\n *\n * Пример: Ударная дрель Makita HP1630, 710 Вт\n */\n title: string\n /**\n * **Описание**\n *\n * Подробное описание товара: например, его преимущества и особенности.\n *\n * Не давайте в описании инструкций по установке и сборке. Не используйте слова «скидка», «распродажа», «дешевый», «подарок» (кроме подарочных категорий), «бесплатно», «акция», «специальная цена», «новинка», «new», «аналог», «заказ», «хит». Не указывайте никакой контактной информации и не давайте ссылок.\n *\n * Можно использовать теги:\n *\n ** <h>, <h1>, <h2> и так далее — для заголовков;\n ** <br> и <p> — для переноса строки;\n ** <ol> — для нумерованного списка;\n ** <ul> — для маркированного списка;\n ** <li> — для создания элементов списка (должен находиться внутри <ol> или <ul>);\n ** <div> — поддерживается, но не влияет на отображение текста.\n * Оптимальная длина — 400–600 символов, максимальная — 6000.\n *\n * Составить хорошее описание помогут рекомендации.\n *\n * Пример: В комплекте с детским микроскопом есть все, что нужно вашему ребенку для изучения микромира\n */\n description: string\n /**\n * **Бренд**\n *\n * Название бренда или производителя.\n *\n * Записывайте название так, как его пишет сам бренд.\n *\n * Пример: LEVENHUK\n */\n vendor?: string\n /**\n * **Артикул производителя**\n *\n * Код товара, который ему присвоил производитель.\n *\n * Если артикулов несколько, укажите их через запятую.\n *\n * Пример: VNDR-0005A, VNDR-0005B\n */\n vendorCode?: string\n /**\n * **Категория в магазине**\n *\n * Категория, к которой вы относите товар. Она помогает точнее определить для товара категорию на Маркете.\n *\n * Указывайте конкретные категории — например, набор ножей лучше отнести к категории Столовые приборы, а не просто Посуда.\n *\n * Выбирайте категории, которые описывают товар, а не абстрактный признак — например, лучше указать Духи, а не Подарки.\n *\n * Содержит номер категории, а не ее название.\n */\n categoryId: number\n /**\n * **Страна производства**\n *\n * Страна, где был произведен товар.\n *\n * Записывайте названия стран так, как они записаны в [списке](https://yastatic.net/s3/doc-binary/src/support/market/ru/countries.xlsx).\n *\n * Пример: Россия\n */\n countryOfOrigin?: string\n /**\n * **Изображение**\n *\n * До двадцати изображений, которые показываются на карточке товара.\n *\n * Принимаются jpg- или png-изображения товара, соответствующие [требованиям](https://yandex.ru/support/marketplace/assortment/fields/images.html).\n *\n * В кабинете изображения добавляются в виде файлов. В Excel-файле — в виде ссылок через запятую. Первое фото становится основным.\n *\n * Чтобы изменить изображение, выложите новое по новой ссылке, иначе картинка не обновится.\n */\n images?: string[]\n /**\n * **Видео**\n *\n * Видеоиллюстрации для карточки товара.\n *\n * Видео должно соответствовать [требованиям](https://yandex.ru/support/marketplace/assortment/fields/video.html).\n *\n * Можно добавить не больше 6 видео.\n *\n * В кабинете можно загрузить видеофайлы. В Excel-шаблоне укажите ссылки на файлы.\n */\n videos?: string[]\n /**\n * **Базовая цена**\n *\n * Цена указывается в рублях. Число должно быть целым.\n *\n * Пример:\n *\n * 240\n */\n price: number\n /**\n * **Цена до скидки**\n *\n * Цена указывается в рублях. Число должно быть целым.\n *\n * Вы можете указать цену со скидкой от 5 до 75 %.\n *\n * Пример:\n *\n * 250\n */\n oldPrice?: number\n /**\n * **Себестоимость**\n *\n * Цена указывается в рублях. Число должно быть целым.\n *\n * Пример:\n *\n * 200\n */\n purchasePrice?: number\n /**\n * **Дополнительные расходы**\n *\n * Дополнительные расходы на товар. Например, на доставку или упаковку.\n *\n * После заполнения этого поля в калькуляторе и на странице управления ценами рассчитается потенциальная маржинальность товара.\n *\n * Цена указывается в рублях. Число должно быть целым.\n *\n * Пример:\n *\n * 75\n */\n additionalExpenses?: number\n /**\n * **Порог для скидок с Маркетом**\n *\n * Цена указывается в рублях. Число должно быть целым.\n *\n * Пример:\n *\n * 300\n */\n cofinancePrice?: number\n /**\n * **Валюта (DBS)**\n *\n * Валюта, в которой указана цена товара. Покупателям Маркет показывает цену в рублях, пересчитывая ее по курсу Центробанка.\n *\n * Поле используется, если для кабинета еще не включена работа с базовыми ценами.\n *\n * Поддерживаются российские и белорусские рубли, евро, доллары, украинские гривны и казахстанские тенге.\n *\n * В кабинете валюту можно просто выбрать из списка. В Excel-файле указывается код валюты: RUR, BYN, EUR, USD, UAN, KZT.\n */\n currency: Currency\n /**\n * **Ссылка на страницу товара**\n *\n * Адрес страницы на вашем сайте с фотографиями и описанием товара.\n *\n * Максимальная длина URL — 512 символов. Записывайте его согласно стандарту RFC 3986.\n *\n * Пример: http://best.seller.ru/product_page.asp?pid=12346\n */\n url?: string\n /**\n * **Убрать из продажи**\n *\n * Поле позволяет приостановить продажу товара.\n *\n * Укажите значение true, если нужно приостановить продажу.\n */\n disabled?: boolean\n /**\n * **Доступное количество товара**\n *\n * Общее количество товара, доступное для продажи\n *\n * Укажите 0, если товара нет в наличии.\n *\n * Пример: 7\n */\n count?: number\n /**\n * **Товар в наличии (DBS)**\n *\n * Поле указывает, есть ли товар в наличии.\n */\n available?: boolean\n /**\n * **Минимальное количество товара**\n *\n * Если значение задано, покупатель не сможет заказать меньше единиц товара. Ограничение не работает, когда товара на складе осталось меньше этого количества — тогда покупатель сможет сделать заказ на остаток.\n *\n * Целое число.\n */\n minQuantity?: number\n /**\n * **Квант продажи**\n *\n * Если значение задано, покупатель сможет добавить к заказу только кратное количество товара. Ограничение не работает, когда на складе осталось меньше этого количества — тогда покупатель сможет сделать заказ на остаток.\n *\n * Целое число.\n */\n stepQuantity?: number\n /**\n * **Штрихкод**\n *\n * Указывайте в виде последовательности символов. Подойдут коды EAN-13, EAN-8, UPC-A, UPC-E или Code 128.\n *\n * Для книг указывайте ISBN.\n *\n * Для товаров [определенных категорий и торговых марок](https://yastatic.net/s3/doc-binary/src/support/market/ru/yandex-market-list-for-gtin.xlsx) штрихкод должен быть действительным кодом GTIN. Обратите внимание: внутренние штрихкоды, начинающиеся на 2 или 02, и коды формата Code 128 не являются GTIN.\n *\n * Если штрихкодов несколько, напишите все через запятую.\n *\n * Пример: 46012300000000\n */\n barcode?: string\n /**\n * **Код ТН ВЭД**\n *\n * Для некоторых категорий товаров код ТН ВЭД обязателен. Если это касается ваших товаров, вы получите уведомление в каталоге.\n *\n * 10 или 14 цифр без пробелов.\n *\n * Пример: 8517610008\n */\n codesTN?: string[]\n /**\n * **С какого возраста пользоваться**\n *\n * Если товар не предназначен для детей младше определенного возраста, укажите это.\n *\n * Возрастные ограничения можно задавать в годах (с нуля, с 6, 12, 16 или 18) или в месяцах (любое число от 0 до 12).\n */\n age?: { unit: \"year\" | \"month\", value: number }\n /**\n * **Вес с упаковкой**\n *\n * Вес товара с упаковкой.\n *\n * Единица измерения — килограммы. Можно дроби: разделитель — точка или запятая, не больше трех цифр после него.\n *\n * Пример: 3.1\n */\n weight?: number\n /**\n * **Габариты с упаковкой**\n *\n * Длина, ширина, высота в упаковке.\n *\n * Единица измерения — сантиметры. Можно дроби: разделитель — точка или запятая, не больше трех цифр после него.\n *\n * Пример: 20.1/20.551/22.5\n */\n dimensions?: string\n /**\n * **Товар занимает больше одного места**\n *\n * Если товар занимает одно место (представляет собой одну коробку, упаковку и так далее), оставьте поле пустым. Если товар занимает несколько мест — укажите их количество. Например, кондиционер занимает два места — внешний и внутренний блоки в двух коробках.\n *\n * Укажите количество мест.\n *\n * Пример: 2\n */\n boxCount?: number\n /**\n * **Ставка НДС**\n *\n * Значение ставки НДС для товара.\n *\n * Выберите одно из значений:\n *\n ** НДС не облагается — 6 или NO_VAT\n *\n ** 0 % — 5 или VAT_0\n *\n ** 10 % — 2 или VAT_10\n *\n ** 20 % — 7 или VAT_20\n *\n * Если не заполнено, Маркет устанавливает ставку, соответствующую схеме налогообложения.\n *\n * Пример: VAT_20\n */\n vat: Vat\n /**\n * **Характеристики, которые есть только у товаров конкретной категории**\n *\n * Кроме общих свойств, у товара есть характеристики, присущие конкретной категории, к которой он относится. Например, у велосипеда есть размер рамы, а детское пюре бывает овощное, мясное или фруктовое.\n */\n params?: IParam[]\n /**\n * **Теги**\n *\n * Придумайте любое название — его можно будет изменить после.\n *\n * Максимальная длина тега — 20 символов.\n *\n * У одного товара — максимум 10 тегов.\n *\n * Всего можно создать не больше 50 разных тегов.\n *\n * Пример: apple, до 500 рублей\n */\n tags?: string[]\n /**\n * **Товар для взрослых**\n *\n * Параметр включает для товара пометку 18+. Устанавливайте ее только для товаров, которые относятся к удовлетворению сексуальных потребностей.\n */\n adult?: boolean\n /**\n * **Цифровой товар**\n *\n * Параметр, устанавливаемый для цифровых товаров, которые просто скачиваются.\n */\n downloadable?: boolean\n /**\n * **Срок годности**\n *\n * Период с момента изготовления, по прошествии которого товар становится непригоден.\n *\n * Указывайте срок, указанный на банке или упаковке. Текущая дата, дата поставки или дата отгрузки значения не имеет.\n *\n * Срок можно указывать в годах, месяцах, днях, неделях и часах.\n *\n * Обязательно указывайте срок, если он есть.\n *\n * Продолжительность указывается согласно ISO 8601, то есть в виде строчки, начинающейся буквой P:\n *\n ** P1Y — 1 год;\n ** P1Y6M — 1 год и 6 месяцев;\n ** P15D — 15 дней.\n */\n validityPeriod?: string\n /**\n * **Комментарий к сроку годности**\n *\n * Поле предназначено для описаний условий хранения.\n *\n * Не длиннее 250 знаков и без спецсимволов.\n *\n * Пример: Хранить в сухом помещении\n */\n validityComment?: string\n /**\n * **Срок службы**\n *\n * В течение срока службы товар должен исправно выполнять свою функцию.\n *\n * Обязательно указывайте срок, если он есть.\n *\n * Срок можно указывать в годах, месяцах и днях.\n * Продолжительность указывается согласно ISO 8601, то есть в виде строчки, начинающейся буквой P:\n *\n ** P1Y — 1 год;\n ** P1Y2M — 1 год и 2 месяца;\n ** P15D — 15 дней;\n ** P2Y10D — 2 года, 10 дней;\n ** P2Y6M10D — 2 года, 6 месяцев и 10 дней.\n */\n serviceLifePeriod?: string\n /**\n * **Комментарий к сроку службы**\n *\n * Поле предназначено для описаний условий использования.\n *\n * Не длиннее 250 знаков и без спецсимволов.\n *\n * Пример: Использовать при температуре не ниже −10 градусов\n */\n serviceLifeComment?: string\n /**\n * **Гарантийный срок**\n *\n * В течение какого времени можно бесплатно заменить или починить товар.\n *\n * Срок можно указывать в годах, месяцах или днях.\n *\n * Продолжительность указывается согласно ISO 8601, то есть в виде строчки, начинающейся буквой P:\n *\n ** P1Y — 1 год;\n ** P1Y2M — 1 год и 2 месяца;\n ** P15D — 15 дней;\n ** P2Y10D — 2 года, 10 дней;\n ** P2Y6M10D — 2 года, 6 месяцев и 10 дней.\n */\n warrantyPeriod?: string\n /**\n * **Комментарий к гарантийному сроку**\n *\n * Поле предназначено для описания особенностей гарантийных условий.\n *\n * Указывайте только то, что относится к гарантии изготовителя.\n *\n * Не длиннее 250 знаков и без спецсимволов.\n *\n * Пример: Гарантия на аккумулятор — 6 месяцев\n */\n warrantyComment?: string\n /**\n * **Официальная гарантия производителя**\n */\n manufacturerWarranty?: boolean\n /**\n * **Номер документа**\n *\n * Номер документа на товар: сертификата, декларации соответствия и т. п.\n *\n * Прежде чем указывать номер документа, загрузите скан документа через кабинет.\n *\n * Укажите номер документа.\n *\n * Пример: 6241421\n */\n certificate?: string\n}\n\nexport enum Vat {\n NO_VAT = \"NO_VAT\",\n VAT_0 = \"VAT_0\",\n VAT_10 = \"VAT_10\",\n VAT_20 = \"VAT_20\"\n}\n\nexport enum Currency {\n RUR = \"RUR\",\n BYN = \"BYN\",\n EUR = \"EUR\",\n USD = \"USD\",\n UAN = \"UAN\",\n KZT = \"KZT\"\n}\n\nexport interface IParam {\n /**\n * **Название характеристики**\n */\n key: string,\n /**\n * **Значение**\n */\n value: string\n}"],"names":["Vat","Currency"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../../src/formatter/CSV.formatter.ts","../../src/formatter/YML.formatter.ts","../../src/formatter/formater.types.ts","../../src/exporter/goodsExporter.ts","../../src/types/Product.types.ts"],"sourcesContent":["import {Category, Product} from \"../types\";\r\nimport {json2csv} from \"json-2-csv\";\r\nimport {Formatter, FormatterOptions} from \"./formater.types\";\r\n\r\nexport class CSVFormatter implements Formatter {\r\n 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) => {\r\n const params: Record<string, string> = {};\r\n\r\n if (!option?.splitParams)\r\n return params\r\n\r\n product.params?.forEach(({key, value}) => params[`Param [${key}]`] = value)\r\n return params\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 }))\r\n return json2csv(data, {emptyFieldValue: \"\"})\r\n }\r\n}\r\n\r\n","import {XMLBuilder} from \"fast-xml-parser\";\r\nimport {Product, Category} from \"../types\";\r\nimport {Formatter, FormatterOptions} from \"./formater.types\";\r\n\r\n\r\nexport class YMLFormatter implements Formatter {\r\n builder = new XMLBuilder({ignoreAttributes: false, cdataPropName: '__cdata',});\r\n\r\n 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) {\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 && {\r\n \"@_unit\": product.age.unit,\r\n \"#text\": product.age.value,\r\n },\r\n \"tn-ved-codes\": product.codesTN?.length && {\r\n \"tn-ved-code\": product.codesTN\r\n }\r\n };\r\n if (product.parentId)\r\n return {\r\n ...result,\r\n \"@_group_id\": product.parentId\r\n };\r\n return result;\r\n }\r\n}\r\n\r\n","import {YMLFormatter} from \"./YML.formatter\";\r\nimport {Category, Product} from \"../types\";\r\nimport {CSVFormatter} from \"./CSV.formatter\";\r\n\r\nexport interface Formatter {\r\n format(products: Product[], categories?: Category[], option?: FormatterOptions): Promise<string>;\r\n}\r\n\r\nexport interface FormatterOptions {\r\n shopName?: string\r\n companyName?: string\r\n splitParams?: boolean\r\n}\r\n\r\nexport const Formatters = {\r\n CSV: new CSVFormatter(),\r\n YML: new YMLFormatter(),\r\n}\r\n\r\n","import {Formatter, FormatterOptions, Formatters} from \"../formatter\";\r\nimport {Exporter, Transformer} from \"./exporter.types\";\r\nimport {Category, Product} from \"../types\";\r\nimport deepcopy from \"deepcopy\";\r\nimport * as fs from \"fs\";\r\n\r\nexport class GoodsExporter {\r\n private formatter: Formatter = Formatters.YML\r\n private exporter: Exporter = (data: Buffer) => {\r\n fs.writeFileSync(\"output.yml\", data);\r\n return data;\r\n };\r\n\r\n private transformers = new Array<Transformer>()\r\n\r\n\r\n setTransformers(transformers: Transformer[]) {\r\n this.transformers = transformers\r\n }\r\n\r\n setFormatter(formatter: Formatter) {\r\n this.formatter = formatter\r\n }\r\n\r\n setExporter(exporter: Exporter) {\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}","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 ** <h>, <h1>, <h2> и так далее — для заголовков;\r\n ** <br> и <p> — для переноса строки;\r\n ** <ol> — для нумерованного списка;\r\n ** <ul> — для маркированного списка;\r\n ** <li> — для создания элементов списка (должен находиться внутри <ol> или <ul>);\r\n ** <div> — поддерживается, но не влияет на отображение текста.\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 * Категория, к которой вы относите товар. Она помогает точнее определить для товара категорию на Маркете.\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 * Придумайте любое название — его можно будет изменить после.\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}"],"names":["__publicField","Vat","Currency"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,70 +1,73 @@
|
|
|
1
|
-
{
|
|
2
|
-
"author": {
|
|
3
|
-
"name": "German Bagdasaryan",
|
|
4
|
-
"email": "german.bagdasaryan@mail.ru"
|
|
5
|
-
},
|
|
6
|
-
"repository": {
|
|
7
|
-
"type": "git",
|
|
8
|
-
"url": "https://github.com/Bagi4-source/goods-converter.git"
|
|
9
|
-
},
|
|
10
|
-
"bugs": {
|
|
11
|
-
"url": "https://github.com/Bagi4-source/goods-converter/issues"
|
|
12
|
-
},
|
|
13
|
-
"name": "goods-exporter",
|
|
14
|
-
"version": "0.2.
|
|
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
|
-
"main": "./dist/cjs/index.cjs",
|
|
17
|
-
"exports": {
|
|
18
|
-
"require": "./dist/cjs/index.cjs",
|
|
19
|
-
"import": "./dist/esm/index.mjs"
|
|
20
|
-
},
|
|
21
|
-
"types": "./dist/bundle.d.ts",
|
|
22
|
-
"type": "module",
|
|
23
|
-
"files": [
|
|
24
|
-
"dist"
|
|
25
|
-
],
|
|
26
|
-
"scripts": {
|
|
27
|
-
"
|
|
28
|
-
"
|
|
29
|
-
"test": "
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
"
|
|
34
|
-
"
|
|
35
|
-
"
|
|
36
|
-
"
|
|
37
|
-
"
|
|
38
|
-
"
|
|
39
|
-
"
|
|
40
|
-
"
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
"
|
|
45
|
-
"
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
"@rollup/plugin-
|
|
50
|
-
"@
|
|
51
|
-
"@types/
|
|
52
|
-
"@types/
|
|
53
|
-
"@types/
|
|
54
|
-
"@types/
|
|
55
|
-
"
|
|
56
|
-
"
|
|
57
|
-
"esbuild
|
|
58
|
-
"
|
|
59
|
-
"
|
|
60
|
-
"rollup
|
|
61
|
-
"rollup-plugin-
|
|
62
|
-
"
|
|
63
|
-
"
|
|
64
|
-
"
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
"
|
|
68
|
-
},
|
|
69
|
-
"
|
|
70
|
-
|
|
1
|
+
{
|
|
2
|
+
"author": {
|
|
3
|
+
"name": "German Bagdasaryan",
|
|
4
|
+
"email": "german.bagdasaryan@mail.ru"
|
|
5
|
+
},
|
|
6
|
+
"repository": {
|
|
7
|
+
"type": "git",
|
|
8
|
+
"url": "https://github.com/Bagi4-source/goods-converter.git"
|
|
9
|
+
},
|
|
10
|
+
"bugs": {
|
|
11
|
+
"url": "https://github.com/Bagi4-source/goods-converter/issues"
|
|
12
|
+
},
|
|
13
|
+
"name": "goods-exporter",
|
|
14
|
+
"version": "0.2.3",
|
|
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
|
+
"main": "./dist/cjs/index.cjs",
|
|
17
|
+
"exports": {
|
|
18
|
+
"require": "./dist/cjs/index.cjs",
|
|
19
|
+
"import": "./dist/esm/index.mjs"
|
|
20
|
+
},
|
|
21
|
+
"types": "./dist/bundle.d.ts",
|
|
22
|
+
"type": "module",
|
|
23
|
+
"files": [
|
|
24
|
+
"dist"
|
|
25
|
+
],
|
|
26
|
+
"scripts": {
|
|
27
|
+
"build": "rollup -c",
|
|
28
|
+
"test": "vitest",
|
|
29
|
+
"test-ui": "vitest --ui",
|
|
30
|
+
"coverage": "vitest run --coverage"
|
|
31
|
+
},
|
|
32
|
+
"keywords": [
|
|
33
|
+
"YML",
|
|
34
|
+
"CSV",
|
|
35
|
+
"EXCEL",
|
|
36
|
+
"goods",
|
|
37
|
+
"export",
|
|
38
|
+
"exporter",
|
|
39
|
+
"tool",
|
|
40
|
+
"yandex",
|
|
41
|
+
"market"
|
|
42
|
+
],
|
|
43
|
+
"dependencies": {
|
|
44
|
+
"deepcopy": "^2.1.0",
|
|
45
|
+
"fast-xml-parser": "^4.3.2",
|
|
46
|
+
"json-2-csv": "^5.0.1"
|
|
47
|
+
},
|
|
48
|
+
"devDependencies": {
|
|
49
|
+
"@rollup/plugin-multi-entry": "^6.0.1",
|
|
50
|
+
"@rollup/plugin-typescript": "^11.1.5",
|
|
51
|
+
"@types/chai": "^4.3.9",
|
|
52
|
+
"@types/expect": "^24.3.0",
|
|
53
|
+
"@types/mocha": "^10.0.3",
|
|
54
|
+
"@types/node": "^20.8.7",
|
|
55
|
+
"@types/sinon": "^10.0.20",
|
|
56
|
+
"chai": "^4.3.10",
|
|
57
|
+
"esbuild": "0.19.5",
|
|
58
|
+
"esbuild-node-externals": "^1.9.0",
|
|
59
|
+
"mocha": "^10.2.0",
|
|
60
|
+
"rollup": "^4.3.0",
|
|
61
|
+
"rollup-plugin-dts": "^6.1.0",
|
|
62
|
+
"rollup-plugin-esbuild": "^6.1.0",
|
|
63
|
+
"sinon": "^17.0.0",
|
|
64
|
+
"ts-mocha": "^10.0.0",
|
|
65
|
+
"tsconfig-paths": "^4.2.0",
|
|
66
|
+
"typescript": "^5.2.2",
|
|
67
|
+
"vitest": "^0.34.6"
|
|
68
|
+
},
|
|
69
|
+
"engines": {
|
|
70
|
+
"node": ">= 16"
|
|
71
|
+
},
|
|
72
|
+
"license": "MIT"
|
|
73
|
+
}
|