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.
Files changed (140) hide show
  1. package/README.md +31 -1
  2. package/bin/jtcsv.js +891 -821
  3. package/bin/jtcsv.ts +2534 -0
  4. package/csv-to-json.js +168 -145
  5. package/dist/jtcsv-core.cjs.js +1407 -0
  6. package/dist/jtcsv-core.cjs.js.map +1 -0
  7. package/dist/jtcsv-core.esm.js +1379 -0
  8. package/dist/jtcsv-core.esm.js.map +1 -0
  9. package/dist/jtcsv-core.umd.js +1413 -0
  10. package/dist/jtcsv-core.umd.js.map +1 -0
  11. package/dist/jtcsv-full.cjs.js +1912 -0
  12. package/dist/jtcsv-full.cjs.js.map +1 -0
  13. package/dist/jtcsv-full.esm.js +1880 -0
  14. package/dist/jtcsv-full.esm.js.map +1 -0
  15. package/dist/jtcsv-full.umd.js +1918 -0
  16. package/dist/jtcsv-full.umd.js.map +1 -0
  17. package/dist/jtcsv-workers.esm.js +759 -0
  18. package/dist/jtcsv-workers.esm.js.map +1 -0
  19. package/dist/jtcsv-workers.umd.js +773 -0
  20. package/dist/jtcsv-workers.umd.js.map +1 -0
  21. package/dist/jtcsv.cjs.js +61 -19
  22. package/dist/jtcsv.cjs.js.map +1 -1
  23. package/dist/jtcsv.esm.js +61 -19
  24. package/dist/jtcsv.esm.js.map +1 -1
  25. package/dist/jtcsv.umd.js +61 -19
  26. package/dist/jtcsv.umd.js.map +1 -1
  27. package/errors.js +188 -2
  28. package/examples/advanced/conditional-transformations.js +446 -0
  29. package/examples/advanced/conditional-transformations.ts +446 -0
  30. package/examples/advanced/csv-parser.worker.js +89 -0
  31. package/examples/advanced/csv-parser.worker.ts +89 -0
  32. package/examples/advanced/nested-objects-example.js +306 -0
  33. package/examples/advanced/nested-objects-example.ts +306 -0
  34. package/examples/advanced/performance-optimization.js +504 -0
  35. package/examples/advanced/performance-optimization.ts +504 -0
  36. package/examples/advanced/run-demo-server.js +116 -0
  37. package/examples/advanced/run-demo-server.ts +116 -0
  38. package/examples/advanced/web-worker-usage.html +874 -0
  39. package/examples/async-multithreaded-example.ts +335 -0
  40. package/examples/cli-advanced-usage.md +288 -0
  41. package/examples/cli-batch-processing.ts +38 -0
  42. package/examples/cli-tool.js +0 -3
  43. package/examples/cli-tool.ts +183 -0
  44. package/examples/error-handling.js +21 -7
  45. package/examples/error-handling.ts +356 -0
  46. package/examples/express-api.js +0 -3
  47. package/examples/express-api.ts +164 -0
  48. package/examples/large-dataset-example.js +0 -3
  49. package/examples/large-dataset-example.ts +204 -0
  50. package/examples/ndjson-processing.js +1 -1
  51. package/examples/ndjson-processing.ts +456 -0
  52. package/examples/plugin-excel-exporter.js +3 -4
  53. package/examples/plugin-excel-exporter.ts +406 -0
  54. package/examples/react-integration.tsx +637 -0
  55. package/examples/schema-validation.ts +640 -0
  56. package/examples/simple-usage.js +254 -254
  57. package/examples/simple-usage.ts +194 -0
  58. package/examples/streaming-example.js +4 -5
  59. package/examples/streaming-example.ts +419 -0
  60. package/examples/web-workers-advanced.ts +28 -0
  61. package/index.d.ts +1 -3
  62. package/index.js +15 -1
  63. package/json-save.js +9 -3
  64. package/json-to-csv.js +168 -21
  65. package/package.json +69 -10
  66. package/plugins/express-middleware/README.md +21 -2
  67. package/plugins/express-middleware/example.js +3 -4
  68. package/plugins/express-middleware/example.ts +135 -0
  69. package/plugins/express-middleware/index.d.ts +1 -1
  70. package/plugins/express-middleware/index.js +270 -118
  71. package/plugins/express-middleware/index.ts +557 -0
  72. package/plugins/fastify-plugin/index.js +2 -4
  73. package/plugins/fastify-plugin/index.ts +443 -0
  74. package/plugins/hono/index.ts +226 -0
  75. package/plugins/nestjs/index.ts +201 -0
  76. package/plugins/nextjs-api/examples/ConverterComponent.tsx +386 -0
  77. package/plugins/nextjs-api/examples/api-convert.js +0 -2
  78. package/plugins/nextjs-api/examples/api-convert.ts +67 -0
  79. package/plugins/nextjs-api/index.tsx +339 -0
  80. package/plugins/nextjs-api/route.js +2 -3
  81. package/plugins/nextjs-api/route.ts +370 -0
  82. package/plugins/nuxt/index.ts +94 -0
  83. package/plugins/nuxt/runtime/composables/useJtcsv.ts +100 -0
  84. package/plugins/nuxt/runtime/plugin.ts +71 -0
  85. package/plugins/remix/index.js +1 -1
  86. package/plugins/remix/index.ts +260 -0
  87. package/plugins/sveltekit/index.js +1 -1
  88. package/plugins/sveltekit/index.ts +301 -0
  89. package/plugins/trpc/index.ts +267 -0
  90. package/src/browser/browser-functions.ts +402 -0
  91. package/src/browser/core.js +92 -0
  92. package/src/browser/core.ts +152 -0
  93. package/src/browser/csv-to-json-browser.d.ts +3 -0
  94. package/src/browser/csv-to-json-browser.js +36 -14
  95. package/src/browser/csv-to-json-browser.ts +264 -0
  96. package/src/browser/errors-browser.ts +303 -0
  97. package/src/browser/extensions/plugins.js +92 -0
  98. package/src/browser/extensions/plugins.ts +93 -0
  99. package/src/browser/extensions/workers.js +39 -0
  100. package/src/browser/extensions/workers.ts +39 -0
  101. package/src/browser/globals.d.ts +5 -0
  102. package/src/browser/index.ts +192 -0
  103. package/src/browser/json-to-csv-browser.d.ts +3 -0
  104. package/src/browser/json-to-csv-browser.js +13 -3
  105. package/src/browser/json-to-csv-browser.ts +262 -0
  106. package/src/browser/streams.js +12 -2
  107. package/src/browser/streams.ts +336 -0
  108. package/src/browser/workers/csv-parser.worker.ts +377 -0
  109. package/src/browser/workers/worker-pool.ts +548 -0
  110. package/src/core/delimiter-cache.js +22 -8
  111. package/src/core/delimiter-cache.ts +310 -0
  112. package/src/core/node-optimizations.ts +449 -0
  113. package/src/core/plugin-system.js +29 -11
  114. package/src/core/plugin-system.ts +400 -0
  115. package/src/core/transform-hooks.ts +558 -0
  116. package/src/engines/fast-path-engine-new.ts +347 -0
  117. package/src/engines/fast-path-engine.ts +854 -0
  118. package/src/errors.ts +72 -0
  119. package/src/formats/ndjson-parser.ts +469 -0
  120. package/src/formats/tsv-parser.ts +334 -0
  121. package/src/index-with-plugins.js +16 -9
  122. package/src/index-with-plugins.ts +395 -0
  123. package/src/types/index.ts +255 -0
  124. package/src/utils/bom-utils.js +259 -0
  125. package/src/utils/bom-utils.ts +373 -0
  126. package/src/utils/encoding-support.js +124 -0
  127. package/src/utils/encoding-support.ts +155 -0
  128. package/src/utils/schema-validator.js +19 -19
  129. package/src/utils/schema-validator.ts +819 -0
  130. package/src/utils/transform-loader.js +1 -1
  131. package/src/utils/transform-loader.ts +389 -0
  132. package/src/utils/zod-adapter.js +170 -0
  133. package/src/utils/zod-adapter.ts +280 -0
  134. package/src/web-server/index.js +10 -10
  135. package/src/web-server/index.ts +683 -0
  136. package/src/workers/csv-multithreaded.ts +310 -0
  137. package/src/workers/csv-parser.worker.ts +227 -0
  138. package/src/workers/worker-pool.ts +409 -0
  139. package/stream-csv-to-json.js +26 -8
  140. 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
+ });