jtcsv 3.0.0 → 3.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (258) hide show
  1. package/README.md +205 -146
  2. package/bin/jtcsv.ts +280 -202
  3. package/browser.d.ts +142 -0
  4. package/dist/benchmark.js +446 -0
  5. package/dist/benchmark.js.map +1 -0
  6. package/dist/bin/jtcsv.js +1940 -0
  7. package/dist/bin/jtcsv.js.map +1 -0
  8. package/dist/csv-to-json.js +1262 -0
  9. package/dist/csv-to-json.js.map +1 -0
  10. package/dist/errors.js +291 -0
  11. package/dist/errors.js.map +1 -0
  12. package/dist/eslint.config.js +147 -0
  13. package/dist/eslint.config.js.map +1 -0
  14. package/dist/index-core.js +95 -0
  15. package/dist/index-core.js.map +1 -0
  16. package/dist/index.js +93 -0
  17. package/dist/index.js.map +1 -0
  18. package/dist/json-save.js +229 -0
  19. package/dist/json-save.js.map +1 -0
  20. package/dist/json-to-csv.js +576 -0
  21. package/dist/json-to-csv.js.map +1 -0
  22. package/dist/jtcsv-core.cjs.js +336 -7
  23. package/dist/jtcsv-core.cjs.js.map +1 -1
  24. package/dist/jtcsv-core.esm.js +336 -7
  25. package/dist/jtcsv-core.esm.js.map +1 -1
  26. package/dist/jtcsv-core.umd.js +336 -7
  27. package/dist/jtcsv-core.umd.js.map +1 -1
  28. package/dist/jtcsv-full.cjs.js +336 -7
  29. package/dist/jtcsv-full.cjs.js.map +1 -1
  30. package/dist/jtcsv-full.esm.js +336 -7
  31. package/dist/jtcsv-full.esm.js.map +1 -1
  32. package/dist/jtcsv-full.umd.js +336 -7
  33. package/dist/jtcsv-full.umd.js.map +1 -1
  34. package/dist/jtcsv-workers.esm.js +9 -0
  35. package/dist/jtcsv-workers.esm.js.map +1 -1
  36. package/dist/jtcsv-workers.umd.js +9 -0
  37. package/dist/jtcsv-workers.umd.js.map +1 -1
  38. package/dist/jtcsv.cjs.js +1998 -2092
  39. package/dist/jtcsv.cjs.js.map +1 -1
  40. package/dist/jtcsv.esm.js +1994 -2092
  41. package/dist/jtcsv.esm.js.map +1 -1
  42. package/dist/jtcsv.umd.js +2157 -2251
  43. package/dist/jtcsv.umd.js.map +1 -1
  44. package/dist/plugins/express-middleware/index.js +350 -0
  45. package/dist/plugins/express-middleware/index.js.map +1 -0
  46. package/dist/plugins/fastify-plugin/index.js +315 -0
  47. package/dist/plugins/fastify-plugin/index.js.map +1 -0
  48. package/dist/plugins/hono/index.js +111 -0
  49. package/dist/plugins/hono/index.js.map +1 -0
  50. package/dist/plugins/nestjs/index.js +112 -0
  51. package/dist/plugins/nestjs/index.js.map +1 -0
  52. package/dist/plugins/nuxt/index.js +53 -0
  53. package/dist/plugins/nuxt/index.js.map +1 -0
  54. package/dist/plugins/remix/index.js +133 -0
  55. package/dist/plugins/remix/index.js.map +1 -0
  56. package/dist/plugins/sveltekit/index.js +155 -0
  57. package/dist/plugins/sveltekit/index.js.map +1 -0
  58. package/dist/plugins/trpc/index.js +136 -0
  59. package/dist/plugins/trpc/index.js.map +1 -0
  60. package/dist/run-demo.js +49 -0
  61. package/dist/run-demo.js.map +1 -0
  62. package/dist/src/browser/browser-functions.js +193 -0
  63. package/dist/src/browser/browser-functions.js.map +1 -0
  64. package/dist/src/browser/core.js +123 -0
  65. package/dist/src/browser/core.js.map +1 -0
  66. package/dist/src/browser/csv-to-json-browser.js +353 -0
  67. package/dist/src/browser/csv-to-json-browser.js.map +1 -0
  68. package/dist/src/browser/errors-browser.js +219 -0
  69. package/dist/src/browser/errors-browser.js.map +1 -0
  70. package/dist/src/browser/extensions/plugins.js +106 -0
  71. package/dist/src/browser/extensions/plugins.js.map +1 -0
  72. package/dist/src/browser/extensions/workers.js +66 -0
  73. package/dist/src/browser/extensions/workers.js.map +1 -0
  74. package/dist/src/browser/index.js +140 -0
  75. package/dist/src/browser/index.js.map +1 -0
  76. package/dist/src/browser/json-to-csv-browser.js +225 -0
  77. package/dist/src/browser/json-to-csv-browser.js.map +1 -0
  78. package/dist/src/browser/streams.js +340 -0
  79. package/dist/src/browser/streams.js.map +1 -0
  80. package/dist/src/browser/workers/csv-parser.worker.js +264 -0
  81. package/dist/src/browser/workers/csv-parser.worker.js.map +1 -0
  82. package/dist/src/browser/workers/worker-pool.js +338 -0
  83. package/dist/src/browser/workers/worker-pool.js.map +1 -0
  84. package/dist/src/core/delimiter-cache.js +196 -0
  85. package/dist/src/core/delimiter-cache.js.map +1 -0
  86. package/dist/src/core/node-optimizations.js +279 -0
  87. package/dist/src/core/node-optimizations.js.map +1 -0
  88. package/dist/src/core/plugin-system.js +399 -0
  89. package/dist/src/core/plugin-system.js.map +1 -0
  90. package/dist/src/core/transform-hooks.js +348 -0
  91. package/dist/src/core/transform-hooks.js.map +1 -0
  92. package/dist/src/engines/fast-path-engine-new.js +262 -0
  93. package/dist/src/engines/fast-path-engine-new.js.map +1 -0
  94. package/dist/src/engines/fast-path-engine.js +671 -0
  95. package/dist/src/engines/fast-path-engine.js.map +1 -0
  96. package/dist/src/errors.js +18 -0
  97. package/dist/src/errors.js.map +1 -0
  98. package/dist/src/formats/ndjson-parser.js +332 -0
  99. package/dist/src/formats/ndjson-parser.js.map +1 -0
  100. package/dist/src/formats/tsv-parser.js +230 -0
  101. package/dist/src/formats/tsv-parser.js.map +1 -0
  102. package/dist/src/index-with-plugins.js +259 -0
  103. package/dist/src/index-with-plugins.js.map +1 -0
  104. package/dist/src/types/index.js +3 -0
  105. package/dist/src/types/index.js.map +1 -0
  106. package/dist/src/utils/bom-utils.js +267 -0
  107. package/dist/src/utils/bom-utils.js.map +1 -0
  108. package/dist/src/utils/encoding-support.js +77 -0
  109. package/dist/src/utils/encoding-support.js.map +1 -0
  110. package/dist/src/utils/schema-validator.js +609 -0
  111. package/dist/src/utils/schema-validator.js.map +1 -0
  112. package/dist/src/utils/transform-loader.js +281 -0
  113. package/dist/src/utils/transform-loader.js.map +1 -0
  114. package/dist/src/utils/validators.js +40 -0
  115. package/dist/src/utils/validators.js.map +1 -0
  116. package/dist/src/utils/zod-adapter.js +144 -0
  117. package/dist/src/utils/zod-adapter.js.map +1 -0
  118. package/{src → dist/src}/web-server/index.js +251 -286
  119. package/dist/src/web-server/index.js.map +1 -0
  120. package/dist/src/workers/csv-multithreaded.js +211 -0
  121. package/dist/src/workers/csv-multithreaded.js.map +1 -0
  122. package/dist/src/workers/csv-parser.worker.js +179 -0
  123. package/dist/src/workers/csv-parser.worker.js.map +1 -0
  124. package/dist/src/workers/worker-pool.js +228 -0
  125. package/dist/src/workers/worker-pool.js.map +1 -0
  126. package/dist/stream-csv-to-json.js +665 -0
  127. package/dist/stream-csv-to-json.js.map +1 -0
  128. package/dist/stream-json-to-csv.js +389 -0
  129. package/dist/stream-json-to-csv.js.map +1 -0
  130. package/examples/advanced/conditional-transformations.ts +2 -2
  131. package/examples/advanced/performance-optimization.ts +2 -2
  132. package/examples/cli-advanced-usage.md +2 -0
  133. package/examples/cli-tool.ts +1 -1
  134. package/examples/large-dataset-example.ts +2 -2
  135. package/examples/simple-usage.ts +2 -2
  136. package/examples/streaming-example.ts +1 -1
  137. package/index.d.ts +186 -15
  138. package/package.json +43 -108
  139. package/plugins.d.ts +37 -0
  140. package/schema.d.ts +103 -0
  141. package/src/browser/csv-to-json-browser.ts +233 -3
  142. package/src/browser/errors-browser.ts +45 -28
  143. package/src/browser/json-to-csv-browser.ts +81 -5
  144. package/src/browser/streams.ts +73 -6
  145. package/src/core/delimiter-cache.ts +21 -11
  146. package/src/core/plugin-system.ts +343 -155
  147. package/src/core/transform-hooks.ts +20 -12
  148. package/src/engines/fast-path-engine.ts +48 -32
  149. package/src/errors.ts +1 -72
  150. package/src/formats/ndjson-parser.ts +6 -0
  151. package/src/formats/tsv-parser.ts +6 -0
  152. package/src/types/index.ts +21 -1
  153. package/src/utils/validators.ts +35 -0
  154. package/src/web-server/index.ts +1 -1
  155. package/bin/jtcsv.js +0 -2532
  156. package/csv-to-json.js +0 -711
  157. package/errors.js +0 -394
  158. package/examples/advanced/conditional-transformations.js +0 -446
  159. package/examples/advanced/csv-parser.worker.js +0 -89
  160. package/examples/advanced/nested-objects-example.js +0 -306
  161. package/examples/advanced/performance-optimization.js +0 -504
  162. package/examples/advanced/run-demo-server.js +0 -116
  163. package/examples/cli-batch-processing.js +0 -38
  164. package/examples/cli-tool.js +0 -183
  165. package/examples/error-handling.js +0 -338
  166. package/examples/express-api.js +0 -164
  167. package/examples/large-dataset-example.js +0 -182
  168. package/examples/ndjson-processing.js +0 -434
  169. package/examples/plugin-excel-exporter.js +0 -406
  170. package/examples/schema-validation.js +0 -640
  171. package/examples/simple-usage.js +0 -282
  172. package/examples/streaming-example.js +0 -418
  173. package/examples/web-workers-advanced.js +0 -28
  174. package/index.js +0 -82
  175. package/json-save.js +0 -255
  176. package/json-to-csv.js +0 -668
  177. package/plugins/README.md +0 -91
  178. package/plugins/express-middleware/README.md +0 -83
  179. package/plugins/express-middleware/example.js +0 -135
  180. package/plugins/express-middleware/example.ts +0 -135
  181. package/plugins/express-middleware/index.d.ts +0 -114
  182. package/plugins/express-middleware/index.js +0 -512
  183. package/plugins/express-middleware/index.ts +0 -557
  184. package/plugins/express-middleware/package.json +0 -52
  185. package/plugins/fastify-plugin/index.js +0 -404
  186. package/plugins/fastify-plugin/index.ts +0 -443
  187. package/plugins/fastify-plugin/package.json +0 -55
  188. package/plugins/hono/README.md +0 -28
  189. package/plugins/hono/index.d.ts +0 -12
  190. package/plugins/hono/index.js +0 -36
  191. package/plugins/hono/index.ts +0 -226
  192. package/plugins/hono/package.json +0 -35
  193. package/plugins/nestjs/README.md +0 -35
  194. package/plugins/nestjs/index.d.ts +0 -25
  195. package/plugins/nestjs/index.js +0 -77
  196. package/plugins/nestjs/index.ts +0 -201
  197. package/plugins/nestjs/package.json +0 -37
  198. package/plugins/nextjs-api/README.md +0 -57
  199. package/plugins/nextjs-api/examples/ConverterComponent.jsx +0 -386
  200. package/plugins/nextjs-api/examples/ConverterComponent.tsx +0 -386
  201. package/plugins/nextjs-api/examples/api-convert.js +0 -67
  202. package/plugins/nextjs-api/examples/api-convert.ts +0 -67
  203. package/plugins/nextjs-api/index.js +0 -387
  204. package/plugins/nextjs-api/index.tsx +0 -339
  205. package/plugins/nextjs-api/package.json +0 -63
  206. package/plugins/nextjs-api/route.js +0 -370
  207. package/plugins/nextjs-api/route.ts +0 -370
  208. package/plugins/nuxt/README.md +0 -24
  209. package/plugins/nuxt/index.js +0 -21
  210. package/plugins/nuxt/index.ts +0 -94
  211. package/plugins/nuxt/package.json +0 -35
  212. package/plugins/nuxt/runtime/composables/useJtcsv.js +0 -6
  213. package/plugins/nuxt/runtime/composables/useJtcsv.ts +0 -100
  214. package/plugins/nuxt/runtime/plugin.js +0 -6
  215. package/plugins/nuxt/runtime/plugin.ts +0 -71
  216. package/plugins/remix/README.md +0 -26
  217. package/plugins/remix/index.d.ts +0 -16
  218. package/plugins/remix/index.js +0 -62
  219. package/plugins/remix/index.ts +0 -260
  220. package/plugins/remix/package.json +0 -35
  221. package/plugins/sveltekit/README.md +0 -28
  222. package/plugins/sveltekit/index.d.ts +0 -17
  223. package/plugins/sveltekit/index.js +0 -54
  224. package/plugins/sveltekit/index.ts +0 -301
  225. package/plugins/sveltekit/package.json +0 -33
  226. package/plugins/trpc/README.md +0 -25
  227. package/plugins/trpc/index.d.ts +0 -7
  228. package/plugins/trpc/index.js +0 -32
  229. package/plugins/trpc/index.ts +0 -267
  230. package/plugins/trpc/package.json +0 -34
  231. package/src/browser/browser-functions.js +0 -219
  232. package/src/browser/core.js +0 -92
  233. package/src/browser/csv-to-json-browser.js +0 -722
  234. package/src/browser/errors-browser.js +0 -212
  235. package/src/browser/extensions/plugins.js +0 -92
  236. package/src/browser/extensions/workers.js +0 -39
  237. package/src/browser/index.js +0 -113
  238. package/src/browser/json-to-csv-browser.js +0 -319
  239. package/src/browser/streams.js +0 -403
  240. package/src/browser/workers/csv-parser.worker.js +0 -377
  241. package/src/browser/workers/worker-pool.js +0 -527
  242. package/src/core/delimiter-cache.js +0 -200
  243. package/src/core/node-optimizations.js +0 -408
  244. package/src/core/plugin-system.js +0 -494
  245. package/src/core/transform-hooks.js +0 -350
  246. package/src/engines/fast-path-engine-new.js +0 -338
  247. package/src/engines/fast-path-engine.js +0 -844
  248. package/src/errors.js +0 -26
  249. package/src/formats/ndjson-parser.js +0 -467
  250. package/src/formats/tsv-parser.js +0 -339
  251. package/src/index-with-plugins.js +0 -378
  252. package/src/utils/bom-utils.js +0 -259
  253. package/src/utils/encoding-support.js +0 -124
  254. package/src/utils/schema-validator.js +0 -594
  255. package/src/utils/transform-loader.js +0 -205
  256. package/src/utils/zod-adapter.js +0 -170
  257. package/stream-csv-to-json.js +0 -560
  258. package/stream-json-to-csv.js +0 -465
@@ -1,406 +0,0 @@
1
- /**
2
- * Пример плагина: Excel Exporter для JTCSV
3
- * Демонстрирует возможности плагинной системы
4
- *
5
- * @version 1.0.0
6
- * @date 2026-01-22
7
- */
8
-
9
- const ExcelJS = require('exceljs');
10
-
11
- /**
12
- * Плагин для экспорта в Excel формат
13
- */
14
- const excelExporterPlugin = {
15
- name: 'Excel Exporter',
16
- version: '1.0.0',
17
- description: 'Экспорт данных в Excel формат с форматированием',
18
-
19
- hooks: {
20
- /**
21
- * После конвертации JSON в CSV, предлагаем экспорт в Excel
22
- */
23
- 'after:jsonToCsv': async (csv, context) => {
24
- if (context.options?.exportToExcel) {
25
- console.log('📊 Экспорт в Excel...');
26
-
27
- // Парсим CSV обратно в JSON для Excel
28
- const json = await context.instance.csvToJson(csv, {
29
- ...context.options,
30
- useFastPath: false
31
- });
32
-
33
- // Экспортируем в Excel
34
- const excelPath = await exportToExcel(json, context.options);
35
-
36
- console.log(`✅ Excel файл создан: ${excelPath}`);
37
-
38
- // Возвращаем путь к Excel файлу вместо CSV
39
- return {
40
- csv,
41
- excel: excelPath,
42
- format: 'excel'
43
- };
44
- }
45
-
46
- return csv;
47
- },
48
-
49
- /**
50
- * После чтения CSV файла, предлагаем конвертацию в Excel
51
- */
52
- 'after:readCsvAsJson': async (json, context) => {
53
- if (context.options?.convertToExcel) {
54
- const excelPath = await exportToExcel(json, context.options);
55
- console.log(`✅ CSV конвертирован в Excel: ${excelPath}`);
56
-
57
- return {
58
- json,
59
- excel: excelPath
60
- };
61
- }
62
-
63
- return json;
64
- }
65
- },
66
-
67
- middlewares: [
68
- /**
69
- * Middleware для добавления информации о Excel экспорте
70
- */
71
- async (ctx, next) => {
72
- if (ctx.operation === 'jsonToCsv' && ctx.options?.exportToExcel) {
73
- console.log('🔄 Excel экспорт активирован');
74
- ctx.metadata.excelExport = {
75
- requested: true,
76
- timestamp: new Date().toISOString()
77
- };
78
- }
79
-
80
- await next();
81
-
82
- if (ctx.metadata?.excelExport) {
83
- ctx.metadata.excelExport.completed = true;
84
- ctx.metadata.excelExport.duration = Date.now() - ctx.startTime;
85
- }
86
- }
87
- ]
88
- };
89
-
90
- /**
91
- * Экспортирует данные в Excel файл
92
- */
93
- async function exportToExcel(data, options = {}) {
94
- const {
95
- outputPath = `export-${Date.now()}.xlsx`,
96
- sheetName = 'Data',
97
- includeHeaders = true,
98
- autoWidth = true,
99
- styling = true
100
- } = options;
101
-
102
- const workbook = new ExcelJS.Workbook();
103
- const worksheet = workbook.addWorksheet(sheetName);
104
-
105
- if (!Array.isArray(data) || data.length === 0) {
106
- throw new Error('Данные должны быть непустым массивом');
107
- }
108
-
109
- // Получаем заголовки
110
- const headers = Object.keys(data[0]);
111
-
112
- // Добавляем заголовки
113
- if (includeHeaders) {
114
- const headerRow = worksheet.addRow(headers);
115
-
116
- // Форматирование заголовков
117
- if (styling) {
118
- headerRow.font = {
119
- bold: true,
120
- color: { argb: 'FFFFFFFF' },
121
- size: 12
122
- };
123
- headerRow.fill = {
124
- type: 'pattern',
125
- pattern: 'solid',
126
- fgColor: { argb: 'FF4472C4' } // Синий
127
- };
128
- headerRow.alignment = {
129
- horizontal: 'center',
130
- vertical: 'middle'
131
- };
132
- headerRow.border = {
133
- top: { style: 'thin' },
134
- left: { style: 'thin' },
135
- bottom: { style: 'thin' },
136
- right: { style: 'thin' }
137
- };
138
- }
139
- }
140
-
141
- // Добавляем данные
142
- data.forEach((item, rowIndex) => {
143
- const values = headers.map(header => item[header]);
144
- const row = worksheet.addRow(values);
145
-
146
- // Чередующаяся раскраска строк
147
- if (styling && rowIndex % 2 === 0) {
148
- row.fill = {
149
- type: 'pattern',
150
- pattern: 'solid',
151
- fgColor: { argb: 'FFF2F2F2' } // Светло-серый
152
- };
153
- }
154
-
155
- // Форматирование числовых значений
156
- headers.forEach((header, colIndex) => {
157
- const value = item[header];
158
- const cell = row.getCell(colIndex + 1);
159
-
160
- if (typeof value === 'number') {
161
- cell.numFmt = '#,##0.00';
162
- cell.alignment = { horizontal: 'right' };
163
- } else if (value instanceof Date) {
164
- cell.numFmt = 'dd.mm.yyyy';
165
- cell.alignment = { horizontal: 'center' };
166
- } else if (typeof value === 'boolean') {
167
- cell.value = value ? 'Да' : 'Нет';
168
- cell.alignment = { horizontal: 'center' };
169
- }
170
- });
171
- });
172
-
173
- // Автоматическая ширина колонок
174
- if (autoWidth) {
175
- headers.forEach((_, index) => {
176
- const column = worksheet.getColumn(index + 1);
177
- column.width = Math.max(
178
- 15, // Минимальная ширина
179
- Math.min(
180
- 50, // Максимальная ширина
181
- headers[index]?.length || 10
182
- )
183
- );
184
- });
185
- }
186
-
187
- // Добавляем фильтры
188
- if (includeHeaders) {
189
- worksheet.autoFilter = {
190
- from: 'A1',
191
- to: `${String.fromCharCode(65 + headers.length - 1)}1`
192
- };
193
- }
194
-
195
- // Сохраняем файл
196
- await workbook.xlsx.writeFile(outputPath);
197
- return outputPath;
198
- }
199
-
200
- /**
201
- * Плагин для импорта из Excel
202
- */
203
- const excelImporterPlugin = {
204
- name: 'Excel Importer',
205
- version: '1.0.0',
206
- description: 'Импорт данных из Excel файлов',
207
-
208
- hooks: {
209
- /**
210
- * Перехватывает чтение CSV файлов и поддерживает Excel
211
- */
212
- 'before:readCsvAsJson': async (filePath, context) => {
213
- if (filePath.endsWith('.xlsx') || filePath.endsWith('.xls')) {
214
- console.log(`📥 Обнаружен Excel файл: ${filePath}`);
215
-
216
- const data = await importFromExcel(filePath, context.options);
217
-
218
- // Пропускаем стандартную обработку CSV
219
- context.skipStandardProcessing = true;
220
-
221
- return data;
222
- }
223
-
224
- return filePath;
225
- }
226
- }
227
- };
228
-
229
- /**
230
- * Импортирует данные из Excel файла
231
- */
232
- async function importFromExcel(filePath, options = {}) {
233
- const {
234
- sheetIndex = 1,
235
- hasHeaders = true,
236
- skipRows = 0
237
- } = options;
238
-
239
- const workbook = new ExcelJS.Workbook();
240
- await workbook.xlsx.readFile(filePath);
241
-
242
- const worksheet = workbook.worksheets[sheetIndex - 1] || workbook.getWorksheet(1);
243
-
244
- if (!worksheet) {
245
- throw new Error('Лист не найден в Excel файле');
246
- }
247
-
248
- const data = [];
249
- let headers = [];
250
-
251
- worksheet.eachRow((row, rowNumber) => {
252
- if (rowNumber <= skipRows) {
253
- return;
254
- }
255
-
256
- if (hasHeaders && rowNumber === skipRows + 1) {
257
- // Первая строка - заголовки
258
- headers = row.values.slice(1); // Пропускаем первый пустой элемент
259
- } else {
260
- const rowData = {};
261
- const values = row.values.slice(1); // Пропускаем первый пустой элемент
262
-
263
- values.forEach((value, index) => {
264
- const header = headers[index] || `column_${index + 1}`;
265
-
266
- // Конвертируем Excel типы в JavaScript типы
267
- if (value instanceof Date) {
268
- rowData[header] = value.toISOString();
269
- } else if (value && typeof value === 'object' && value.formula) {
270
- // Формулы - сохраняем как строку
271
- rowData[header] = value.formula;
272
- } else if (value === null || value === undefined) {
273
- rowData[header] = '';
274
- } else {
275
- rowData[header] = value;
276
- }
277
- });
278
-
279
- data.push(rowData);
280
- }
281
- });
282
-
283
- console.log(`✅ Импортировано ${data.length} строк из Excel`);
284
- return data;
285
- }
286
-
287
- /**
288
- * Пример использования плагинов
289
- */
290
- async function exampleUsage() {
291
- console.log('🚀 Пример использования плагинов JTCSV\n');
292
-
293
- // Создаем экземпляр JTCSV с плагинами
294
- const JtcsvWithPlugins = require('../src/index-with-plugins');
295
- const jtcsv = JtcsvWithPlugins.create({
296
- enablePlugins: true,
297
- enableFastPath: true
298
- });
299
-
300
- // Регистрируем плагины
301
- jtcsv.use('excel-exporter', excelExporterPlugin);
302
- jtcsv.use('excel-importer', excelImporterPlugin);
303
-
304
- console.log('📋 Зарегистрированные плагины:');
305
- jtcsv.listPlugins().forEach(plugin => {
306
- console.log(` • ${plugin.name} v${plugin.version} - ${plugin.description}`);
307
- });
308
-
309
- console.log('\n📊 Пример 1: Конвертация JSON в CSV с экспортом в Excel');
310
-
311
- const sampleData = [
312
- { id: 1, name: 'John Doe', age: 30, salary: 50000, hired: new Date('2023-01-15') },
313
- { id: 2, name: 'Jane Smith', age: 25, salary: 45000, hired: new Date('2023-03-20') },
314
- { id: 3, name: 'Bob Johnson', age: 35, salary: 60000, hired: new Date('2022-11-10') }
315
- ];
316
-
317
- try {
318
- // Конвертируем в CSV с опцией экспорта в Excel
319
- const result = await jtcsv.jsonToCsv(sampleData, {
320
- delimiter: ',',
321
- exportToExcel: true,
322
- outputPath: 'example-export.xlsx',
323
- styling: true
324
- });
325
-
326
- console.log('✅ Результат:', result);
327
-
328
- // Показываем статистику
329
- const stats = jtcsv.getStats();
330
- console.log('\n📈 Статистика:');
331
- console.log(' Плагины:', stats.plugins.plugins);
332
- console.log(' Hooks выполнено:', stats.plugins.hookExecutions);
333
- console.log(' Middleware выполнено:', stats.plugins.middlewareExecutions);
334
- console.log(' Fast Path парсеры:', stats.fastPath.simpleParserCount);
335
-
336
- } catch (error) {
337
- console.error('❌ Ошибка:', error.message);
338
- }
339
-
340
- console.log('\n📥 Пример 2: Импорт из Excel файла');
341
-
342
- try {
343
- // Создаем тестовый Excel файл
344
- const testWorkbook = new ExcelJS.Workbook();
345
- const testSheet = testWorkbook.addWorksheet('Test Data');
346
-
347
- testSheet.addRow(['ID', 'Name', 'Department', 'Score']);
348
- testSheet.addRow([1, 'Alice', 'Engineering', 95]);
349
- testSheet.addRow([2, 'Bob', 'Marketing', 88]);
350
- testSheet.addRow([3, 'Charlie', 'Sales', 92]);
351
-
352
- await testWorkbook.xlsx.writeFile('test-import.xlsx');
353
-
354
- // Импортируем из Excel
355
- const importedData = await jtcsv.readCsvAsJson('test-import.xlsx', {
356
- convertToExcel: false // Просто импортируем
357
- });
358
-
359
- console.log('✅ Импортированные данные:');
360
- console.log(JSON.stringify(importedData, null, 2));
361
-
362
- // Конвертируем импортированные данные в CSV
363
- const csvFromExcel = await jtcsv.jsonToCsv(importedData, {
364
- delimiter: ';'
365
- });
366
-
367
- console.log('\n📄 CSV из импортированных данных:');
368
- console.log(csvFromExcel);
369
-
370
- } catch (error) {
371
- console.error('❌ Ошибка импорта:', error.message);
372
- }
373
-
374
- console.log('\n🎯 Пример 3: Использование NDJSON');
375
-
376
- try {
377
- // Конвертируем в NDJSON
378
- const ndjson = jtcsv.toNdjson(sampleData, { space: 2 });
379
- console.log('📝 NDJSON:');
380
- console.log(ndjson);
381
-
382
- // Парсим NDJSON обратно
383
- const parsed = await jtcsv.parseNdjson(ndjson);
384
- console.log('\n🔁 Парсированный NDJSON:');
385
- console.log(JSON.stringify(parsed, null, 2));
386
-
387
- } catch (error) {
388
- console.error('❌ Ошибка NDJSON:', error.message);
389
- }
390
-
391
- console.log('\n🏁 Пример завершен!');
392
- }
393
-
394
- // Экспортируем плагины и функции
395
- module.exports = {
396
- excelExporterPlugin,
397
- excelImporterPlugin,
398
- exportToExcel,
399
- importFromExcel,
400
- exampleUsage
401
- };
402
-
403
- // Если файл запущен напрямую
404
- if (require.main === module) {
405
- exampleUsage().catch(console.error);
406
- }