jtcsv 2.1.1 → 2.1.5
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 +64 -327
- package/bin/jtcsv.js +7 -24
- package/csv-to-json.js +35 -26
- package/dist/jtcsv.cjs.js +807 -133
- package/dist/jtcsv.cjs.js.map +1 -1
- package/dist/jtcsv.esm.js +800 -134
- package/dist/jtcsv.esm.js.map +1 -1
- package/dist/jtcsv.umd.js +807 -133
- package/dist/jtcsv.umd.js.map +1 -1
- package/errors.js +20 -0
- package/examples/browser-vanilla.html +37 -0
- package/examples/cli-batch-processing.js +38 -0
- package/examples/simple-usage.js +12 -10
- package/examples/web-workers-advanced.js +28 -0
- package/json-save.js +2 -1
- package/package.json +41 -21
- package/plugins/README.md +50 -332
- package/plugins/express-middleware/README.md +32 -274
- package/plugins/hono/README.md +28 -0
- package/plugins/hono/index.d.ts +12 -0
- package/plugins/hono/index.js +36 -0
- package/plugins/hono/package.json +35 -0
- package/plugins/nestjs/README.md +35 -0
- package/plugins/nestjs/index.d.ts +25 -0
- package/plugins/nestjs/index.js +77 -0
- package/plugins/nestjs/package.json +37 -0
- package/plugins/nextjs-api/README.md +28 -423
- package/plugins/nextjs-api/index.js +1 -2
- package/plugins/nextjs-api/route.js +1 -2
- package/plugins/nuxt/README.md +24 -0
- package/plugins/nuxt/index.js +21 -0
- package/plugins/nuxt/package.json +35 -0
- package/plugins/nuxt/runtime/composables/useJtcsv.js +6 -0
- package/plugins/nuxt/runtime/plugin.js +6 -0
- package/plugins/remix/README.md +26 -0
- package/plugins/remix/index.d.ts +16 -0
- package/plugins/remix/index.js +62 -0
- package/plugins/remix/package.json +35 -0
- package/plugins/sveltekit/README.md +28 -0
- package/plugins/sveltekit/index.d.ts +17 -0
- package/plugins/sveltekit/index.js +54 -0
- package/plugins/sveltekit/package.json +33 -0
- package/plugins/trpc/README.md +25 -0
- package/plugins/trpc/index.d.ts +7 -0
- package/plugins/trpc/index.js +32 -0
- package/plugins/trpc/package.json +34 -0
- package/src/browser/browser-functions.js +33 -3
- package/src/browser/csv-to-json-browser.js +269 -11
- package/src/browser/errors-browser.js +19 -1
- package/src/browser/index.js +39 -5
- package/src/browser/streams.js +393 -0
- package/src/browser/workers/csv-parser.worker.js +20 -2
- package/src/browser/workers/worker-pool.js +507 -447
- package/src/core/plugin-system.js +4 -0
- package/src/engines/fast-path-engine.js +31 -23
- package/src/formats/ndjson-parser.js +54 -5
- package/src/formats/tsv-parser.js +4 -1
- package/stream-csv-to-json.js +11 -2
- package/stream-json-to-csv.js +13 -1
- package/cli-tui.js +0 -1498
package/plugins/README.md
CHANGED
|
@@ -1,17 +1,35 @@
|
|
|
1
|
-
# JTCSV
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
##
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
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,354 +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
|
-
|
|
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
|
-
|
|
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';
|
|
67
|
-
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
|
-
```
|
|
78
|
-
|
|
79
|
-
[📚 Документация](./nextjs-api/README.md)
|
|
80
|
-
|
|
81
|
-
## 🎯 Особенности
|
|
82
|
-
|
|
83
|
-
### Единый API
|
|
84
|
-
|
|
85
|
-
Все плагины предоставляют согласованный API:
|
|
86
|
-
|
|
87
|
-
```javascript
|
|
88
|
-
// Express
|
|
89
|
-
app.use(jtcsvMiddleware({ delimiter: ',' }));
|
|
90
|
-
|
|
91
|
-
// Fastify
|
|
92
|
-
await fastify.register(jtcsvPlugin, { delimiter: ',' });
|
|
93
|
-
|
|
94
|
-
// Next.js
|
|
95
|
-
const { convertCsvToJson } = useJtcsv({ delimiter: ',' });
|
|
96
|
-
```
|
|
97
|
-
|
|
98
|
-
### Автоматическое определение формата
|
|
99
|
-
|
|
100
|
-
- Определение по Content-Type заголовку
|
|
101
|
-
- Автоматическое определение по содержимому
|
|
102
|
-
- Поддержка query параметров для ручного указания
|
|
103
|
-
|
|
104
|
-
### Безопасность
|
|
105
|
-
|
|
106
|
-
- Защита от CSV инъекций (по умолчанию включена)
|
|
107
|
-
- Валидация размера запросов
|
|
108
|
-
- RFC 4180 compliance
|
|
109
|
-
|
|
110
|
-
### Производительность
|
|
111
|
-
|
|
112
|
-
- Fast-Path Engine для оптимизации
|
|
113
|
-
- Streaming поддержка для больших файлов
|
|
114
|
-
- Кеширование парсеров
|
|
115
|
-
|
|
116
|
-
## 🔧 Конфигурация
|
|
117
|
-
|
|
118
|
-
### Общие опции
|
|
119
|
-
|
|
120
|
-
| Опция | Тип | По умолчанию | Описание |
|
|
121
|
-
|-------|-----|--------------|----------|
|
|
122
|
-
| `delimiter` | `string` | `','` | Разделитель CSV |
|
|
123
|
-
| `preventCsvInjection` | `boolean` | `true` | Защита от CSV инъекций |
|
|
124
|
-
| `rfc4180Compliant` | `boolean` | `true` | Соответствие RFC 4180 |
|
|
125
|
-
| `useFastPath` | `boolean` | `true` | Использовать Fast-Path Engine |
|
|
126
|
-
|
|
127
|
-
### Специфичные опции
|
|
128
|
-
|
|
129
|
-
#### Express Middleware
|
|
130
|
-
|
|
131
56
|
```javascript
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
autoDetect: true // Автоматическое определение формата
|
|
135
|
-
}
|
|
136
|
-
```
|
|
137
|
-
|
|
138
|
-
#### Fastify Plugin
|
|
139
|
-
|
|
140
|
-
```javascript
|
|
141
|
-
{
|
|
142
|
-
prefix: '/convert' // Префикс для routes
|
|
143
|
-
}
|
|
144
|
-
```
|
|
145
|
-
|
|
146
|
-
#### Next.js Integration
|
|
147
|
-
|
|
148
|
-
```javascript
|
|
149
|
-
{
|
|
150
|
-
parseNumbers: true, // Парсить числа
|
|
151
|
-
parseBooleans: true // Парсить булевы значения
|
|
152
|
-
}
|
|
57
|
+
import handler from '@jtcsv/nextjs/route';
|
|
58
|
+
export default handler;
|
|
153
59
|
```
|
|
154
60
|
|
|
155
|
-
##
|
|
156
|
-
|
|
157
|
-
### REST API
|
|
158
|
-
|
|
61
|
+
## NestJS
|
|
159
62
|
```bash
|
|
160
|
-
|
|
161
|
-
curl -X POST https://api.example.com/convert \
|
|
162
|
-
-H "Content-Type: application/json" \
|
|
163
|
-
-d '[{"name":"John","age":30}]'
|
|
164
|
-
|
|
165
|
-
# CSV → JSON
|
|
166
|
-
curl -X POST https://api.example.com/convert \
|
|
167
|
-
-H "Content-Type: text/csv" \
|
|
168
|
-
-d 'name,age\nJohn,30\nJane,25'
|
|
63
|
+
npm install @jtcsv/nestjs jtcsv
|
|
169
64
|
```
|
|
170
65
|
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
```jsx
|
|
174
|
-
// React/Next.js компонент
|
|
175
|
-
function DataExporter({ data }) {
|
|
176
|
-
const { convertJsonToCsv } = useJtcsv();
|
|
177
|
-
|
|
178
|
-
const handleExport = async () => {
|
|
179
|
-
const csv = await convertJsonToCsv(data);
|
|
180
|
-
downloadCsv(csv, 'export.csv');
|
|
181
|
-
};
|
|
182
|
-
|
|
183
|
-
return (
|
|
184
|
-
<button onClick={handleExport}>
|
|
185
|
-
Export as CSV
|
|
186
|
-
</button>
|
|
187
|
-
);
|
|
188
|
-
}
|
|
189
|
-
```
|
|
190
|
-
|
|
191
|
-
### Backend Service
|
|
192
|
-
|
|
193
|
-
```javascript
|
|
194
|
-
// Express приложение для обработки загрузок
|
|
195
|
-
app.post('/api/upload', upload.single('file'), async (req, res) => {
|
|
196
|
-
const csv = req.file.buffer.toString();
|
|
197
|
-
const json = await csvToJson(csv);
|
|
198
|
-
|
|
199
|
-
// Сохранение в базу данных
|
|
200
|
-
await db.insert('data', json);
|
|
201
|
-
|
|
202
|
-
res.json({ success: true, rows: json.length });
|
|
203
|
-
});
|
|
204
|
-
```
|
|
205
|
-
|
|
206
|
-
## 📊 Мониторинг и Health Check
|
|
207
|
-
|
|
208
|
-
Все плагины предоставляют health check endpoints:
|
|
209
|
-
|
|
66
|
+
## Remix
|
|
210
67
|
```bash
|
|
211
|
-
|
|
212
|
-
GET /api/health
|
|
213
|
-
|
|
214
|
-
# Fastify
|
|
215
|
-
GET /convert/health
|
|
216
|
-
|
|
217
|
-
# Next.js
|
|
218
|
-
GET /api/convert/health
|
|
68
|
+
npm install @jtcsv/remix jtcsv
|
|
219
69
|
```
|
|
220
70
|
|
|
221
|
-
|
|
222
|
-
```
|
|
223
|
-
|
|
224
|
-
"service": "jtcsv-integration",
|
|
225
|
-
"status": "healthy",
|
|
226
|
-
"version": "1.0.0",
|
|
227
|
-
"features": {
|
|
228
|
-
"csvToJson": true,
|
|
229
|
-
"jsonToCsv": true,
|
|
230
|
-
"fastPathEngine": true,
|
|
231
|
-
"csvInjectionProtection": true
|
|
232
|
-
}
|
|
233
|
-
}
|
|
234
|
-
```
|
|
235
|
-
|
|
236
|
-
## 🔌 Расширяемость
|
|
237
|
-
|
|
238
|
-
### Кастомные middleware
|
|
239
|
-
|
|
240
|
-
```javascript
|
|
241
|
-
// Express
|
|
242
|
-
app.use((req, res, next) => {
|
|
243
|
-
// Логирование
|
|
244
|
-
console.log(`[${new Date()}] ${req.method} ${req.url}`);
|
|
245
|
-
|
|
246
|
-
// Rate limiting
|
|
247
|
-
// ...
|
|
248
|
-
|
|
249
|
-
next();
|
|
250
|
-
});
|
|
251
|
-
|
|
252
|
-
app.use(jtcsvMiddleware());
|
|
71
|
+
## Nuxt
|
|
72
|
+
```bash
|
|
73
|
+
npm install @jtcsv/nuxt jtcsv
|
|
253
74
|
```
|
|
254
75
|
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
```javascript
|
|
260
|
-
const jtcsv = require('jtcsv;
|
|
261
|
-
|
|
262
|
-
jtcsv.use('my-plugin', {
|
|
263
|
-
hooks: {
|
|
264
|
-
'before:csvToJson': (csv) => {
|
|
265
|
-
// Кастомная обработка
|
|
266
|
-
return csv;
|
|
267
|
-
}
|
|
268
|
-
}
|
|
269
|
-
});
|
|
76
|
+
## SvelteKit
|
|
77
|
+
```bash
|
|
78
|
+
npm install @jtcsv/sveltekit jtcsv
|
|
270
79
|
```
|
|
271
80
|
|
|
272
|
-
##
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
| Операция | Без плагина | С плагином | Ускорение |
|
|
277
|
-
|----------|-------------|------------|-----------|
|
|
278
|
-
| CSV → JSON (10k rows) | 120ms | 45ms | 2.7x |
|
|
279
|
-
| JSON → CSV (10k rows) | 85ms | 32ms | 2.7x |
|
|
280
|
-
| File Upload (1MB) | 210ms | 95ms | 2.2x |
|
|
281
|
-
|
|
282
|
-
### Оптимизации
|
|
283
|
-
|
|
284
|
-
1. **Fast-Path Engine** - автоматический выбор оптимального парсера
|
|
285
|
-
2. **Streaming** - обработка больших файлов без загрузки в память
|
|
286
|
-
3. **Кеширование** - кеширование скомпилированных парсеров
|
|
287
|
-
4. **Пакетная обработка** - оптимизация для bulk операций
|
|
288
|
-
|
|
289
|
-
## 🔐 Безопасность
|
|
290
|
-
|
|
291
|
-
### Защитные механизмы
|
|
292
|
-
|
|
293
|
-
1. **CSV Injection Protection** - экранирование опасных символов
|
|
294
|
-
2. **Size Limits** - ограничение размера запросов
|
|
295
|
-
3. **Input Validation** - валидация входных данных
|
|
296
|
-
4. **Error Handling** - безопасная обработка ошибок
|
|
297
|
-
|
|
298
|
-
### Рекомендации
|
|
299
|
-
|
|
300
|
-
```javascript
|
|
301
|
-
// Production конфигурация
|
|
302
|
-
app.use(jtcsvMiddleware({
|
|
303
|
-
maxSize: '10mb',
|
|
304
|
-
preventCsvInjection: true,
|
|
305
|
-
rfc4180Compliant: true
|
|
306
|
-
}));
|
|
307
|
-
|
|
308
|
-
// Rate limiting
|
|
309
|
-
app.use(rateLimit({
|
|
310
|
-
windowMs: 15 * 60 * 1000,
|
|
311
|
-
max: 100
|
|
312
|
-
}));
|
|
81
|
+
## Hono
|
|
82
|
+
```bash
|
|
83
|
+
npm install @jtcsv/hono jtcsv
|
|
313
84
|
```
|
|
314
85
|
|
|
315
|
-
##
|
|
316
|
-
|
|
317
|
-
- [Express Middleware](./express-middleware/README.md)
|
|
318
|
-
- [Fastify Plugin](./fastify-plugin/README.md)
|
|
319
|
-
- [Next.js Integration](./nextjs-api/README.md)
|
|
320
|
-
- [Основная документация JTCSV](../README.md)
|
|
321
|
-
|
|
322
|
-
## 🧪 Тестирование
|
|
323
|
-
|
|
86
|
+
## tRPC
|
|
324
87
|
```bash
|
|
325
|
-
|
|
326
|
-
cd plugins
|
|
327
|
-
npm test
|
|
328
|
-
|
|
329
|
-
# Тестирование конкретного плагина
|
|
330
|
-
cd express-middleware
|
|
331
|
-
npm test
|
|
332
|
-
|
|
333
|
-
# Запуск примеров
|
|
334
|
-
cd nextjs-api/examples
|
|
335
|
-
node api-convert.js
|
|
88
|
+
npm install @jtcsv/trpc jtcsv
|
|
336
89
|
```
|
|
337
90
|
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
Мы приветствуем вклады в развитие плагинов!
|
|
341
|
-
|
|
342
|
-
### Как помочь
|
|
343
|
-
|
|
344
|
-
1. **Сообщить о баге** - создайте issue с подробным описанием
|
|
345
|
-
2. **Предложить улучшение** - обсудите в Discussions
|
|
346
|
-
3. **Создать pull request** - реализуйте новую функцию
|
|
347
|
-
4. **Улучшить документацию** - помогите другим разработчикам
|
|
348
|
-
|
|
349
|
-
### Руководство по разработке
|
|
350
|
-
|
|
351
|
-
1. Клонируйте репозиторий
|
|
352
|
-
2. Установите зависимости: `npm install`
|
|
353
|
-
3. Создайте ветку: `git checkout -b feature/amazing`
|
|
354
|
-
4. Внесите изменения и протестируйте
|
|
355
|
-
5. Запушьте изменения: `git push origin feature/amazing`
|
|
356
|
-
6. Откройте Pull Request
|
|
357
|
-
|
|
358
|
-
## 📞 Поддержка
|
|
359
|
-
|
|
360
|
-
- **Issues**: [GitHub Issues](https://github.com/Linol-Hamelton/jtcsv/issues)
|
|
361
|
-
- **Discussions**: [GitHub Discussions](https://github.com/Linol-Hamelton/jtcsv/discussions)
|
|
362
|
-
- **Documentation**: [Основная документация](../README.md)
|
|
363
|
-
- **Email**: [Указать email если есть]
|
|
364
|
-
|
|
365
|
-
## 📄 Лицензия
|
|
366
|
-
|
|
367
|
-
Все плагины распространяются под лицензией MIT. См. файл [LICENSE](../LICENSE) для подробностей.
|
|
368
|
-
|
|
369
|
-
---
|
|
370
|
-
|
|
371
|
-
**JTCSV Плагины** - делаем работу с CSV/JSON проще в любом фреймворке! 🚀
|
|
372
|
-
|
|
373
|
-
|
|
91
|
+
See each package README in this folder for API details.
|