jtcsv 2.2.7 → 3.0.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.
- package/README.md +31 -1
- package/bin/jtcsv.js +891 -821
- package/bin/jtcsv.ts +2534 -0
- package/csv-to-json.js +168 -145
- package/dist/jtcsv-core.cjs.js +1407 -0
- package/dist/jtcsv-core.cjs.js.map +1 -0
- package/dist/jtcsv-core.esm.js +1379 -0
- package/dist/jtcsv-core.esm.js.map +1 -0
- package/dist/jtcsv-core.umd.js +1413 -0
- package/dist/jtcsv-core.umd.js.map +1 -0
- package/dist/jtcsv-full.cjs.js +1912 -0
- package/dist/jtcsv-full.cjs.js.map +1 -0
- package/dist/jtcsv-full.esm.js +1880 -0
- package/dist/jtcsv-full.esm.js.map +1 -0
- package/dist/jtcsv-full.umd.js +1918 -0
- package/dist/jtcsv-full.umd.js.map +1 -0
- package/dist/jtcsv-workers.esm.js +759 -0
- package/dist/jtcsv-workers.esm.js.map +1 -0
- package/dist/jtcsv-workers.umd.js +773 -0
- package/dist/jtcsv-workers.umd.js.map +1 -0
- package/dist/jtcsv.cjs.js +61 -19
- package/dist/jtcsv.cjs.js.map +1 -1
- package/dist/jtcsv.esm.js +61 -19
- package/dist/jtcsv.esm.js.map +1 -1
- package/dist/jtcsv.umd.js +61 -19
- package/dist/jtcsv.umd.js.map +1 -1
- package/errors.js +188 -2
- package/examples/advanced/conditional-transformations.js +446 -0
- package/examples/advanced/conditional-transformations.ts +446 -0
- package/examples/advanced/csv-parser.worker.js +89 -0
- package/examples/advanced/csv-parser.worker.ts +89 -0
- package/examples/advanced/nested-objects-example.js +306 -0
- package/examples/advanced/nested-objects-example.ts +306 -0
- package/examples/advanced/performance-optimization.js +504 -0
- package/examples/advanced/performance-optimization.ts +504 -0
- package/examples/advanced/run-demo-server.js +116 -0
- package/examples/advanced/run-demo-server.ts +116 -0
- package/examples/advanced/web-worker-usage.html +874 -0
- package/examples/async-multithreaded-example.ts +335 -0
- package/examples/cli-advanced-usage.md +288 -0
- package/examples/cli-batch-processing.ts +38 -0
- package/examples/cli-tool.js +0 -3
- package/examples/cli-tool.ts +183 -0
- package/examples/error-handling.js +21 -7
- package/examples/error-handling.ts +356 -0
- package/examples/express-api.js +0 -3
- package/examples/express-api.ts +164 -0
- package/examples/large-dataset-example.js +0 -3
- package/examples/large-dataset-example.ts +204 -0
- package/examples/ndjson-processing.js +1 -1
- package/examples/ndjson-processing.ts +456 -0
- package/examples/plugin-excel-exporter.js +3 -4
- package/examples/plugin-excel-exporter.ts +406 -0
- package/examples/react-integration.tsx +637 -0
- package/examples/schema-validation.ts +640 -0
- package/examples/simple-usage.js +254 -254
- package/examples/simple-usage.ts +194 -0
- package/examples/streaming-example.js +4 -5
- package/examples/streaming-example.ts +419 -0
- package/examples/web-workers-advanced.ts +28 -0
- package/index.d.ts +1 -3
- package/index.js +15 -1
- package/json-save.js +9 -3
- package/json-to-csv.js +168 -21
- package/package.json +69 -10
- package/plugins/express-middleware/README.md +21 -2
- package/plugins/express-middleware/example.js +3 -4
- package/plugins/express-middleware/example.ts +135 -0
- package/plugins/express-middleware/index.d.ts +1 -1
- package/plugins/express-middleware/index.js +270 -118
- package/plugins/express-middleware/index.ts +557 -0
- package/plugins/fastify-plugin/index.js +2 -4
- package/plugins/fastify-plugin/index.ts +443 -0
- package/plugins/hono/index.ts +226 -0
- package/plugins/nestjs/index.ts +201 -0
- package/plugins/nextjs-api/examples/ConverterComponent.tsx +386 -0
- package/plugins/nextjs-api/examples/api-convert.js +0 -2
- package/plugins/nextjs-api/examples/api-convert.ts +67 -0
- package/plugins/nextjs-api/index.tsx +339 -0
- package/plugins/nextjs-api/route.js +2 -3
- package/plugins/nextjs-api/route.ts +370 -0
- package/plugins/nuxt/index.ts +94 -0
- package/plugins/nuxt/runtime/composables/useJtcsv.ts +100 -0
- package/plugins/nuxt/runtime/plugin.ts +71 -0
- package/plugins/remix/index.js +1 -1
- package/plugins/remix/index.ts +260 -0
- package/plugins/sveltekit/index.js +1 -1
- package/plugins/sveltekit/index.ts +301 -0
- package/plugins/trpc/index.ts +267 -0
- package/src/browser/browser-functions.ts +402 -0
- package/src/browser/core.js +92 -0
- package/src/browser/core.ts +152 -0
- package/src/browser/csv-to-json-browser.d.ts +3 -0
- package/src/browser/csv-to-json-browser.js +36 -14
- package/src/browser/csv-to-json-browser.ts +264 -0
- package/src/browser/errors-browser.ts +303 -0
- package/src/browser/extensions/plugins.js +92 -0
- package/src/browser/extensions/plugins.ts +93 -0
- package/src/browser/extensions/workers.js +39 -0
- package/src/browser/extensions/workers.ts +39 -0
- package/src/browser/globals.d.ts +5 -0
- package/src/browser/index.ts +192 -0
- package/src/browser/json-to-csv-browser.d.ts +3 -0
- package/src/browser/json-to-csv-browser.js +13 -3
- package/src/browser/json-to-csv-browser.ts +262 -0
- package/src/browser/streams.js +12 -2
- package/src/browser/streams.ts +336 -0
- package/src/browser/workers/csv-parser.worker.ts +377 -0
- package/src/browser/workers/worker-pool.ts +548 -0
- package/src/core/delimiter-cache.js +22 -8
- package/src/core/delimiter-cache.ts +310 -0
- package/src/core/node-optimizations.ts +449 -0
- package/src/core/plugin-system.js +29 -11
- package/src/core/plugin-system.ts +400 -0
- package/src/core/transform-hooks.ts +558 -0
- package/src/engines/fast-path-engine-new.ts +347 -0
- package/src/engines/fast-path-engine.ts +854 -0
- package/src/errors.ts +72 -0
- package/src/formats/ndjson-parser.ts +469 -0
- package/src/formats/tsv-parser.ts +334 -0
- package/src/index-with-plugins.js +16 -9
- package/src/index-with-plugins.ts +395 -0
- package/src/types/index.ts +255 -0
- package/src/utils/bom-utils.js +259 -0
- package/src/utils/bom-utils.ts +373 -0
- package/src/utils/encoding-support.js +124 -0
- package/src/utils/encoding-support.ts +155 -0
- package/src/utils/schema-validator.js +19 -19
- package/src/utils/schema-validator.ts +819 -0
- package/src/utils/transform-loader.js +1 -1
- package/src/utils/transform-loader.ts +389 -0
- package/src/utils/zod-adapter.js +170 -0
- package/src/utils/zod-adapter.ts +280 -0
- package/src/web-server/index.js +10 -10
- package/src/web-server/index.ts +683 -0
- package/src/workers/csv-multithreaded.ts +310 -0
- package/src/workers/csv-parser.worker.ts +227 -0
- package/src/workers/worker-pool.ts +409 -0
- package/stream-csv-to-json.js +26 -8
- package/stream-json-to-csv.js +1 -0
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Простой HTTP сервер для запуска демо web worker
|
|
5
|
+
* Решает проблему CORS при запуске из файловой системы
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import http from "http";
|
|
9
|
+
import fs from "fs";
|
|
10
|
+
import path from "path";
|
|
11
|
+
import url from "url";
|
|
12
|
+
|
|
13
|
+
const PORT = 3000;
|
|
14
|
+
const DEMO_DIR = __dirname;
|
|
15
|
+
|
|
16
|
+
const MIME_TYPES = {
|
|
17
|
+
'.html': 'text/html; charset=utf-8',
|
|
18
|
+
'.js': 'text/javascript; charset=utf-8',
|
|
19
|
+
'.css': 'text/css',
|
|
20
|
+
'.json': 'application/json',
|
|
21
|
+
'.png': 'image/png',
|
|
22
|
+
'.jpg': 'image/jpeg',
|
|
23
|
+
'.svg': 'image/svg+xml',
|
|
24
|
+
'.ico': 'image/x-icon'
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
const server = http.createServer((req, res) => {
|
|
28
|
+
console.log(`${new Date().toISOString()} ${req.method} ${req.url}`);
|
|
29
|
+
|
|
30
|
+
// Parse URL
|
|
31
|
+
const parsedUrl = url.parse(req.url);
|
|
32
|
+
let pathname = parsedUrl.pathname;
|
|
33
|
+
|
|
34
|
+
// Default to index.html
|
|
35
|
+
if (pathname === '/') {
|
|
36
|
+
pathname = '/web-worker-usage.html';
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
// Security: prevent directory traversal
|
|
40
|
+
const sanitizedPath = pathname.replace(/\.\./g, '');
|
|
41
|
+
const filePath = path.join(DEMO_DIR, sanitizedPath);
|
|
42
|
+
|
|
43
|
+
// Check if file exists
|
|
44
|
+
fs.access(filePath, fs.constants.F_OK, (err) => {
|
|
45
|
+
if (err) {
|
|
46
|
+
// File not found
|
|
47
|
+
res.writeHead(404, { 'Content-Type': 'text/plain; charset=utf-8' });
|
|
48
|
+
res.end('404 Not Found');
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
// Get file extension
|
|
53
|
+
const ext = path.extname(filePath);
|
|
54
|
+
const contentType = MIME_TYPES[ext] || 'application/octet-stream';
|
|
55
|
+
|
|
56
|
+
// Read and serve file
|
|
57
|
+
fs.readFile(filePath, (err, content) => {
|
|
58
|
+
if (err) {
|
|
59
|
+
res.writeHead(500, { 'Content-Type': 'text/plain; charset=utf-8' });
|
|
60
|
+
res.end('500 Internal Server Error');
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
// Special handling for worker.js to set correct MIME type
|
|
65
|
+
if (ext === '.js' && filePath.includes('worker')) {
|
|
66
|
+
res.writeHead(200, {
|
|
67
|
+
'Content-Type': 'text/javascript; charset=utf-8',
|
|
68
|
+
'Access-Control-Allow-Origin': '*'
|
|
69
|
+
});
|
|
70
|
+
} else {
|
|
71
|
+
res.writeHead(200, {
|
|
72
|
+
'Content-Type': contentType,
|
|
73
|
+
'Access-Control-Allow-Origin': '*'
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
res.end(content);
|
|
78
|
+
});
|
|
79
|
+
});
|
|
80
|
+
});
|
|
81
|
+
|
|
82
|
+
server.listen(PORT, () => {
|
|
83
|
+
console.log(`
|
|
84
|
+
🚀 Демо сервер запущен!
|
|
85
|
+
📁 Директория: ${DEMO_DIR}
|
|
86
|
+
🌐 Откройте в браузере: http://localhost:${PORT}
|
|
87
|
+
|
|
88
|
+
📋 Доступные файлы:
|
|
89
|
+
• http://localhost:${PORT}/web-worker-usage.html - Демо Web Workers
|
|
90
|
+
• http://localhost:${PORT}/csv-parser.worker.js - Web Worker файл
|
|
91
|
+
• http://localhost:${PORT}/nested-objects-example.js - Пример вложенных объектов
|
|
92
|
+
|
|
93
|
+
🛑 Для остановки сервера нажмите Ctrl+C
|
|
94
|
+
`);
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
// Handle graceful shutdown
|
|
98
|
+
process.on('SIGINT', () => {
|
|
99
|
+
console.log('\n🛑 Останавливаем сервер...');
|
|
100
|
+
server.close(() => {
|
|
101
|
+
console.log('✅ Сервер остановлен');
|
|
102
|
+
process.exit(0);
|
|
103
|
+
});
|
|
104
|
+
});
|
|
105
|
+
|
|
106
|
+
// Error handling
|
|
107
|
+
server.on('error', (err) => {
|
|
108
|
+
if (err.code === 'EADDRINUSE') {
|
|
109
|
+
console.error(`❌ Порт ${PORT} уже занят. Попробуйте другой порт:`);
|
|
110
|
+
console.log(` node ${__filename} --port 3001`);
|
|
111
|
+
process.exit(1);
|
|
112
|
+
} else {
|
|
113
|
+
console.error('❌ Ошибка сервера:', err.message);
|
|
114
|
+
process.exit(1);
|
|
115
|
+
}
|
|
116
|
+
});
|