jtcsv 2.1.3 → 2.2.2

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 (52) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +60 -341
  3. package/bin/jtcsv.js +2462 -1372
  4. package/csv-to-json.js +35 -26
  5. package/dist/jtcsv.cjs.js +807 -133
  6. package/dist/jtcsv.cjs.js.map +1 -1
  7. package/dist/jtcsv.esm.js +800 -134
  8. package/dist/jtcsv.esm.js.map +1 -1
  9. package/dist/jtcsv.umd.js +807 -133
  10. package/dist/jtcsv.umd.js.map +1 -1
  11. package/errors.js +20 -0
  12. package/examples/browser-vanilla.html +37 -0
  13. package/examples/cli-batch-processing.js +38 -0
  14. package/examples/error-handling.js +324 -0
  15. package/examples/ndjson-processing.js +434 -0
  16. package/examples/react-integration.jsx +637 -0
  17. package/examples/schema-validation.js +640 -0
  18. package/examples/simple-usage.js +10 -7
  19. package/examples/typescript-example.ts +486 -0
  20. package/examples/web-workers-advanced.js +28 -0
  21. package/index.d.ts +2 -0
  22. package/json-save.js +2 -1
  23. package/json-to-csv.js +171 -131
  24. package/package.json +20 -4
  25. package/plugins/README.md +41 -467
  26. package/plugins/express-middleware/README.md +32 -274
  27. package/plugins/hono/README.md +16 -13
  28. package/plugins/nestjs/README.md +13 -11
  29. package/plugins/nextjs-api/README.md +28 -423
  30. package/plugins/nextjs-api/index.js +1 -2
  31. package/plugins/nextjs-api/route.js +1 -2
  32. package/plugins/nuxt/README.md +6 -7
  33. package/plugins/remix/README.md +9 -9
  34. package/plugins/sveltekit/README.md +8 -8
  35. package/plugins/trpc/README.md +8 -5
  36. package/src/browser/browser-functions.js +33 -3
  37. package/src/browser/csv-to-json-browser.js +269 -11
  38. package/src/browser/errors-browser.js +19 -1
  39. package/src/browser/index.js +39 -5
  40. package/src/browser/streams.js +393 -0
  41. package/src/browser/workers/csv-parser.worker.js +20 -2
  42. package/src/browser/workers/worker-pool.js +507 -447
  43. package/src/core/plugin-system.js +4 -0
  44. package/src/engines/fast-path-engine.js +31 -23
  45. package/src/errors.js +26 -0
  46. package/src/formats/ndjson-parser.js +54 -5
  47. package/src/formats/tsv-parser.js +4 -1
  48. package/src/utils/schema-validator.js +594 -0
  49. package/src/utils/transform-loader.js +205 -0
  50. package/src/web-server/index.js +683 -0
  51. package/stream-csv-to-json.js +16 -87
  52. package/stream-json-to-csv.js +18 -86
package/plugins/README.md CHANGED
@@ -1,17 +1,35 @@
1
- # JTCSV Плагины и Интеграции
2
-
3
- Пакеты интеграций JTCSV с популярными фреймворками и платформами.
4
-
5
- ## 📦 Доступные плагины
6
-
7
- ### 1. Express Middleware (@jtcsv/express-middleware)
8
-
9
- **Express middleware для автоматической конвертации CSV/JSON в HTTP запросах.**
10
-
1
+ # JTCSV framework integrations
2
+
3
+ This folder contains optional adapters published as separate packages. Each adapter depends on `jtcsv`.
4
+
5
+ ## Available packages
6
+ - @jtcsv/express-middleware
7
+ - @jtcsv/fastify
8
+ - @jtcsv/nextjs
9
+ - @jtcsv/nestjs
10
+ - @jtcsv/remix
11
+ - @jtcsv/nuxt
12
+ - @jtcsv/sveltekit
13
+ - @jtcsv/hono
14
+ - @jtcsv/trpc
15
+
16
+ ## Main package shortcuts
17
+ If you already depend on `jtcsv`, the adapters are also exported from the main package:
18
+ - jtcsv/express
19
+ - jtcsv/fastify
20
+ - jtcsv/nextjs
21
+ - jtcsv/nextjs/route
22
+ - jtcsv/nestjs
23
+ - jtcsv/remix
24
+ - jtcsv/nuxt
25
+ - jtcsv/sveltekit
26
+ - jtcsv/hono
27
+ - jtcsv/trpc
28
+
29
+ ## Express
11
30
  ```bash
12
31
  npm install @jtcsv/express-middleware express jtcsv
13
32
  ```
14
-
15
33
  ```javascript
16
34
  const express = require('express');
17
35
  const { middleware } = require('@jtcsv/express-middleware');
@@ -20,498 +38,54 @@ const app = express();
20
38
  app.use(express.json());
21
39
  app.use(express.text({ type: 'text/csv' }));
22
40
  app.use(middleware());
23
-
24
- app.post('/api/convert', (req, res) => {
25
- res.json({
26
- data: req.converted.data,
27
- format: req.converted.format,
28
- stats: req.converted.stats
29
- });
30
- });
31
41
  ```
32
42
 
33
- [📚 Документация](./express-middleware/README.md)
34
-
35
- ### 2. Fastify Plugin (@jtcsv/fastify)
36
-
37
- **Fastify plugin для автоматической конвертации CSV/JSON.**
38
-
43
+ ## Fastify
39
44
  ```bash
40
45
  npm install @jtcsv/fastify fastify fastify-plugin jtcsv
41
46
  ```
42
-
43
47
  ```javascript
44
48
  const fastify = require('fastify')();
45
-
46
- await fastify.register(require('@jtcsv/fastify'), {
47
- prefix: '/api/convert'
48
- });
49
-
50
- // Доступ через fastify.jtcsv
51
- const csv = await fastify.jtcsv.jsonToCsv([{ name: 'John' }]);
49
+ await fastify.register(require('@jtcsv/fastify'), { prefix: '/api' });
52
50
  ```
53
51
 
54
- [📚 Документация](./fastify-plugin/README.md)
55
-
56
- ### 3. Next.js Integration (@jtcsv/nextjs)
57
-
58
- **Next.js интеграция - API routes, React hooks и компоненты.**
59
-
52
+ ## Next.js
60
53
  ```bash
61
54
  npm install @jtcsv/nextjs jtcsv
62
55
  ```
63
-
64
- ```jsx
65
- // pages/api/convert.js
66
- import { handler } from '@jtcsv/nextjs/route';
56
+ ```javascript
57
+ import handler from '@jtcsv/nextjs/route';
67
58
  export default handler;
68
-
69
- // components/Converter.jsx
70
- 'use client';
71
- import { useJtcsv } from '@jtcsv/nextjs';
72
-
73
- export default function Converter() {
74
- const { convertCsvToJson } = useJtcsv();
75
- // ...
76
- }
77
59
  ```
78
60
 
79
- [📚 Документация](./nextjs-api/README.md)
80
-
81
- ### 4. NestJS Integration (@jtcsv/nestjs)
82
-
83
- **NestJS interceptors and decorators for CSV upload/download.**
84
-
61
+ ## NestJS
85
62
  ```bash
86
63
  npm install @jtcsv/nestjs jtcsv
87
64
  ```
88
65
 
89
- ```typescript
90
- import { CsvParserInterceptor, CsvDownloadDecorator } from 'jtcsv/nestjs';
91
-
92
- @Controller('data')
93
- export class DataController {
94
- @Post('upload')
95
- @CsvParserInterceptor({ delimiter: ',' })
96
- uploadCsv(@Body() jsonData: any[]) {
97
- return { parsed: jsonData };
98
- }
99
-
100
- @Get('export')
101
- @CsvDownloadDecorator({ filename: 'export.csv' })
102
- exportData() {
103
- return [{ id: 1, name: 'John' }];
104
- }
105
- }
106
- ```
107
-
108
- [📚 Документация](./nestjs/README.md)
109
-
110
- ### 5. Remix Integration (@jtcsv/remix)
111
-
112
- **Helpers for form-data parsing and CSV downloads in Remix.**
113
-
66
+ ## Remix
114
67
  ```bash
115
68
  npm install @jtcsv/remix jtcsv
116
69
  ```
117
70
 
118
- ```typescript
119
- import { parseFormData, generateCsvResponse } from 'jtcsv/remix';
120
-
121
- export async function action({ request }) {
122
- const rows = await parseFormData(request, { delimiter: ',' });
123
- return { parsed: rows };
124
- }
125
-
126
- export async function loader() {
127
- return generateCsvResponse([{ id: 1, name: 'John' }], 'export.csv');
128
- }
129
- ```
130
-
131
- [📚 Документация](./remix/README.md)
132
-
133
- ### 6. Nuxt Integration (@jtcsv/nuxt)
134
-
135
- **Nuxt module with auto-imported composable.**
136
-
71
+ ## Nuxt
137
72
  ```bash
138
73
  npm install @jtcsv/nuxt jtcsv
139
74
  ```
140
75
 
141
- ```typescript
142
- export default defineNuxtConfig({
143
- modules: ['@jtcsv/nuxt'],
144
- jtcsv: { autoimport: true }
145
- });
146
- ```
147
-
148
- ```vue
149
- <script setup>
150
- const { csvToJson, jsonToCsv } = useJtcsv();
151
- </script>
152
- ```
153
-
154
- [📚 Документация](./nuxt/README.md)
155
-
156
- ### 7. SvelteKit Integration (@jtcsv/sveltekit)
157
-
158
- **Request helpers for SvelteKit actions/endpoints.**
159
-
76
+ ## SvelteKit
160
77
  ```bash
161
78
  npm install @jtcsv/sveltekit jtcsv
162
79
  ```
163
80
 
164
- ```typescript
165
- import { parseCsv, generateCsv } from 'jtcsv/sveltekit';
166
-
167
- export const actions = {
168
- upload: async ({ request }) => {
169
- const rows = await parseCsv(request, { delimiter: ',' });
170
- return { rows };
171
- }
172
- };
173
-
174
- export async function GET() {
175
- return generateCsv([{ id: 1 }], 'export.csv');
176
- }
177
- ```
178
-
179
- [📚 Документация](./sveltekit/README.md)
180
-
181
- ### 8. Hono Integration (@jtcsv/hono)
182
-
183
- **Minimal middleware for CSV parsing with Hono.**
184
-
81
+ ## Hono
185
82
  ```bash
186
83
  npm install @jtcsv/hono jtcsv
187
84
  ```
188
85
 
189
- ```typescript
190
- import { Hono } from 'hono';
191
- import { csvMiddleware, createCsvResponse } from 'jtcsv/hono';
192
-
193
- const app = new Hono()
194
- .use('/upload', csvMiddleware())
195
- .post('/upload', (c) => c.json({ rows: c.get('csv') }))
196
- .get('/export', (c) => {
197
- const { csv, headers } = createCsvResponse([{ id: 1 }], 'export.csv');
198
- return c.text(csv, 200, headers);
199
- });
200
- ```
201
-
202
- [📚 Документация](./hono/README.md)
203
-
204
- ### 9. tRPC Integration (@jtcsv/trpc)
205
-
206
- **Middleware helper for CSV input parsing in tRPC procedures.**
207
-
86
+ ## tRPC
208
87
  ```bash
209
88
  npm install @jtcsv/trpc jtcsv
210
89
  ```
211
90
 
212
- ```typescript
213
- import { initTRPC } from '@trpc/server';
214
- import { z } from 'zod';
215
- import { createCsvProcedure } from 'jtcsv/trpc';
216
-
217
- const t = initTRPC.create();
218
-
219
- export const router = t.router({
220
- parseCsv: createCsvProcedure(t, z.string())
221
- .mutation(async ({ input }) => ({ parsed: input }))
222
- });
223
- ```
224
-
225
- [📚 Документация](./trpc/README.md)
226
-
227
- ## 🎯 Особенности
228
-
229
- ### Единый API
230
-
231
- Все плагины предоставляют согласованный API:
232
-
233
- ```javascript
234
- // Express
235
- app.use(jtcsvMiddleware({ delimiter: ',' }));
236
-
237
- // Fastify
238
- await fastify.register(jtcsvPlugin, { delimiter: ',' });
239
-
240
- // Next.js
241
- const { convertCsvToJson } = useJtcsv({ delimiter: ',' });
242
- ```
243
-
244
- ### Автоматическое определение формата
245
-
246
- - Определение по Content-Type заголовку
247
- - Автоматическое определение по содержимому
248
- - Поддержка query параметров для ручного указания
249
-
250
- ### Безопасность
251
-
252
- - Защита от CSV инъекций (по умолчанию включена)
253
- - Валидация размера запросов
254
- - RFC 4180 compliance
255
-
256
- ### Производительность
257
-
258
- - Fast-Path Engine для оптимизации
259
- - Streaming поддержка для больших файлов
260
- - Кеширование парсеров
261
-
262
- ## 🔧 Конфигурация
263
-
264
- ### Общие опции
265
-
266
- | Опция | Тип | По умолчанию | Описание |
267
- |-------|-----|--------------|----------|
268
- | `delimiter` | `string` | `','` | Разделитель CSV |
269
- | `preventCsvInjection` | `boolean` | `true` | Защита от CSV инъекций |
270
- | `rfc4180Compliant` | `boolean` | `true` | Соответствие RFC 4180 |
271
- | `useFastPath` | `boolean` | `true` | Использовать Fast-Path Engine |
272
-
273
- ### Специфичные опции
274
-
275
- #### Express Middleware
276
-
277
- ```javascript
278
- {
279
- maxSize: '10mb', // Максимальный размер тела запроса
280
- autoDetect: true // Автоматическое определение формата
281
- }
282
- ```
283
-
284
- #### Fastify Plugin
285
-
286
- ```javascript
287
- {
288
- prefix: '/convert' // Префикс для routes
289
- }
290
- ```
291
-
292
- #### Next.js Integration
293
-
294
- ```javascript
295
- {
296
- parseNumbers: true, // Парсить числа
297
- parseBooleans: true // Парсить булевы значения
298
- }
299
- ```
300
-
301
- ## 🌐 Примеры использования
302
-
303
- ### REST API
304
-
305
- ```bash
306
- # JSON → CSV
307
- curl -X POST https://api.example.com/convert \
308
- -H "Content-Type: application/json" \
309
- -d '[{"name":"John","age":30}]'
310
-
311
- # CSV → JSON
312
- curl -X POST https://api.example.com/convert \
313
- -H "Content-Type: text/csv" \
314
- -d 'name,age\nJohn,30\nJane,25'
315
- ```
316
-
317
- ### Web Application
318
-
319
- ```jsx
320
- // React/Next.js компонент
321
- function DataExporter({ data }) {
322
- const { convertJsonToCsv } = useJtcsv();
323
-
324
- const handleExport = async () => {
325
- const csv = await convertJsonToCsv(data);
326
- downloadCsv(csv, 'export.csv');
327
- };
328
-
329
- return (
330
- <button onClick={handleExport}>
331
- Export as CSV
332
- </button>
333
- );
334
- }
335
- ```
336
-
337
- ### Backend Service
338
-
339
- ```javascript
340
- // Express приложение для обработки загрузок
341
- app.post('/api/upload', upload.single('file'), async (req, res) => {
342
- const csv = req.file.buffer.toString();
343
- const json = await csvToJson(csv);
344
-
345
- // Сохранение в базу данных
346
- await db.insert('data', json);
347
-
348
- res.json({ success: true, rows: json.length });
349
- });
350
- ```
351
-
352
- ## 📊 Мониторинг и Health Check
353
-
354
- Все плагины предоставляют health check endpoints:
355
-
356
- ```bash
357
- # Express
358
- GET /api/health
359
-
360
- # Fastify
361
- GET /convert/health
362
-
363
- # Next.js
364
- GET /api/convert/health
365
- ```
366
-
367
- **Пример ответа:**
368
- ```json
369
- {
370
- "service": "jtcsv-integration",
371
- "status": "healthy",
372
- "version": "1.0.0",
373
- "features": {
374
- "csvToJson": true,
375
- "jsonToCsv": true,
376
- "fastPathEngine": true,
377
- "csvInjectionProtection": true
378
- }
379
- }
380
- ```
381
-
382
- ## 🔌 Расширяемость
383
-
384
- ### Кастомные middleware
385
-
386
- ```javascript
387
- // Express
388
- app.use((req, res, next) => {
389
- // Логирование
390
- console.log(`[${new Date()}] ${req.method} ${req.url}`);
391
-
392
- // Rate limiting
393
- // ...
394
-
395
- next();
396
- });
397
-
398
- app.use(jtcsvMiddleware());
399
- ```
400
-
401
- ### Плагины JTCSV
402
-
403
- Все интеграции совместимы с plugin system JTCSV:
404
-
405
- ```javascript
406
- const jtcsv = require('jtcsv;
407
-
408
- jtcsv.use('my-plugin', {
409
- hooks: {
410
- 'before:csvToJson': (csv) => {
411
- // Кастомная обработка
412
- return csv;
413
- }
414
- }
415
- });
416
- ```
417
-
418
- ## 🚀 Производительность
419
-
420
- ### Бенчмарки
421
-
422
- | Операция | Без плагина | С плагином | Ускорение |
423
- |----------|-------------|------------|-----------|
424
- | CSV → JSON (10k rows) | 120ms | 45ms | 2.7x |
425
- | JSON → CSV (10k rows) | 85ms | 32ms | 2.7x |
426
- | File Upload (1MB) | 210ms | 95ms | 2.2x |
427
-
428
- ### Оптимизации
429
-
430
- 1. **Fast-Path Engine** - автоматический выбор оптимального парсера
431
- 2. **Streaming** - обработка больших файлов без загрузки в память
432
- 3. **Кеширование** - кеширование скомпилированных парсеров
433
- 4. **Пакетная обработка** - оптимизация для bulk операций
434
-
435
- ## 🔐 Безопасность
436
-
437
- ### Защитные механизмы
438
-
439
- 1. **CSV Injection Protection** - экранирование опасных символов
440
- 2. **Size Limits** - ограничение размера запросов
441
- 3. **Input Validation** - валидация входных данных
442
- 4. **Error Handling** - безопасная обработка ошибок
443
-
444
- ### Рекомендации
445
-
446
- ```javascript
447
- // Production конфигурация
448
- app.use(jtcsvMiddleware({
449
- maxSize: '10mb',
450
- preventCsvInjection: true,
451
- rfc4180Compliant: true
452
- }));
453
-
454
- // Rate limiting
455
- app.use(rateLimit({
456
- windowMs: 15 * 60 * 1000,
457
- max: 100
458
- }));
459
- ```
460
-
461
- ## 📚 Документация
462
-
463
- - [Express Middleware](./express-middleware/README.md)
464
- - [Fastify Plugin](./fastify-plugin/README.md)
465
- - [Next.js Integration](./nextjs-api/README.md)
466
- - [Основная документация JTCSV](../README.md)
467
-
468
- ## 🧪 Тестирование
469
-
470
- ```bash
471
- # Тестирование всех плагинов
472
- cd plugins
473
- npm test
474
-
475
- # Тестирование конкретного плагина
476
- cd express-middleware
477
- npm test
478
-
479
- # Запуск примеров
480
- cd nextjs-api/examples
481
- node api-convert.js
482
- ```
483
-
484
- ## 🤝 Вклад в развитие
485
-
486
- Мы приветствуем вклады в развитие плагинов!
487
-
488
- ### Как помочь
489
-
490
- 1. **Сообщить о баге** - создайте issue с подробным описанием
491
- 2. **Предложить улучшение** - обсудите в Discussions
492
- 3. **Создать pull request** - реализуйте новую функцию
493
- 4. **Улучшить документацию** - помогите другим разработчикам
494
-
495
- ### Руководство по разработке
496
-
497
- 1. Клонируйте репозиторий
498
- 2. Установите зависимости: `npm install`
499
- 3. Создайте ветку: `git checkout -b feature/amazing`
500
- 4. Внесите изменения и протестируйте
501
- 5. Запушьте изменения: `git push origin feature/amazing`
502
- 6. Откройте Pull Request
503
-
504
- ## 📞 Поддержка
505
-
506
- - **Issues**: [GitHub Issues](https://github.com/Linol-Hamelton/jtcsv/issues)
507
- - **Discussions**: [GitHub Discussions](https://github.com/Linol-Hamelton/jtcsv/discussions)
508
- - **Documentation**: [Основная документация](../README.md)
509
- - **Email**: [Указать email если есть]
510
-
511
- ## 📄 Лицензия
512
-
513
- Все плагины распространяются под лицензией MIT. См. файл [LICENSE](../LICENSE) для подробностей.
514
-
515
- ---
516
-
517
- **JTCSV Плагины** - делаем работу с CSV/JSON проще в любом фреймворке! 🚀
91
+ See each package README in this folder for API details.