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
package/README.md CHANGED
@@ -1,146 +1,205 @@
1
- # jtcsv - JSON <-> CSV toolkit for Node.js and browser
2
-
3
- [![npm version](https://img.shields.io/npm/v/jtcsv)](https://www.npmjs.com/package/jtcsv)
4
- [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
5
- [![Zero-Deps Core](https://img.shields.io/badge/core-zero%20deps-brightgreen.svg)](https://www.npmjs.com/package/jtcsv)
6
-
7
- Fast JSON <-> CSV conversion with streaming helpers, NDJSON/TSV support, and optional integrations.
8
-
9
- ## Features
10
- - JSON <-> CSV conversion with security defaults
11
- - Streaming helpers and async iterator API
12
- - NDJSON and TSV helpers
13
- - Browser bundle with Web Worker helpers
14
- - Optional plugin system and framework adapters
15
- - CLI and optional TUI
16
- - **Performance‑optimized** fast number parsing, single‑pass BOM stripping, efficient delimiter detection
17
-
18
- ## Installation
19
- ```bash
20
- npm install jtcsv
21
- ```
22
-
23
- ### Optional add-ons
24
- ```bash
25
- npm install @jtcsv/tui
26
- npm install @jtcsv/excel exceljs
27
- npm install @jtcsv/validator
28
- ```
29
-
30
- ## Quick start (Node.js)
31
- ```javascript
32
- const { jsonToCsv, csvToJson } = require('jtcsv');
33
-
34
- const data = [
35
- { id: 1, name: 'John', email: 'john@example.com' },
36
- { id: 2, name: 'Jane', email: 'jane@example.com' }
37
- ];
38
-
39
- const csv = jsonToCsv(data, { delimiter: ',', includeHeaders: true });
40
- const json = csvToJson(csv, { delimiter: ',', parseNumbers: true });
41
-
42
- console.log(csv);
43
- console.log(json);
44
- ```
45
-
46
- ### Async iterator
47
- ```javascript
48
- const { csvToJsonIterator } = require('jtcsv');
49
-
50
- const csv = 'id,name\n1,Jane\n2,John';
51
-
52
- ### Command Line Interface
53
-
54
- JTCSV includes a powerful CLI for batch conversion, file processing, and data transformation.
55
-
56
- ```bash
57
- # Convert CSV file to JSON
58
- npx jtcsv csv-to-json data.csv --output data.json
59
-
60
- # Convert JSON to CSV with custom delimiter
61
- npx jtcsv json-to-csv data.json --delimiter ";" --output out.csv
62
-
63
- # Stream processing with NDJSON
64
- npx jtcsv csv-to-ndjson large.csv --stream > output.ndjson
65
-
66
- # See all options
67
- npx jtcsv --help
68
- ```
69
-
70
- Full documentation: [CLI.md](CLI.md)
71
- for await (const row of csvToJsonIterator(csv, { fastPathMode: 'compact' })) {
72
- console.log(row);
73
- }
74
- ```
75
-
76
- ## Browser usage
77
- - Bundler: `import { csvToJson, jsonToCsv } from 'jtcsv/browser';`
78
- - CDN UMD: `https://cdn.jsdelivr.net/npm/jtcsv/dist/jtcsv.umd.js`
79
- - CDN ESM: `https://cdn.jsdelivr.net/npm/jtcsv/dist/jtcsv.esm.js`
80
-
81
- See `README-browser.md` for full browser API and worker helpers.
82
-
83
- ## CLI
84
- ```bash
85
- npx jtcsv csv-to-json input.csv output.json
86
- npx jtcsv json-to-csv input.json output.csv
87
- npx jtcsv stream csv-to-json big.csv output.json
88
- npx jtcsv batch json-to-csv "data/*.json" output/
89
-
90
- # optional TUI
91
- npx jtcsv tui
92
- ```
93
-
94
- See `CLI.md` for full command list and options.
95
-
96
- ## Demos
97
- Run these from the repo root:
98
- ```bash
99
- # Express API demo
100
- npm run demo
101
-
102
- # Web demo (Vite dev server on http://localhost:3000)
103
- npm run demo:web
104
-
105
- # Preview built demo
106
- npm run demo:serve
107
- ```
108
-
109
- From inside `demo/` use:
110
- ```bash
111
- npm run dev
112
- npm run preview
113
- npm run serve
114
- ```
115
-
116
- ## Plugin system
117
- The plugin-enabled API is exported from `jtcsv/plugins`.
118
-
119
- ```javascript
120
- const { create } = require('jtcsv/plugins');
121
-
122
- const jtcsv = create();
123
- jtcsv.use('my-plugin', { name: 'My Plugin', version: '1.0.0' });
124
- ```
125
-
126
- See `README-PLUGINS.md` and `plugins/README.md` for integrations.
127
-
128
- ## Development
129
- Run from the repo root:
130
- ```bash
131
- npm test
132
- npm run test:coverage
133
- npm run test:coverage:entry
134
- npm run test:coverage:ts
135
- npm run test:types
136
- npm run tsc:types
137
- npm run build
138
- ```
139
-
140
- Linux validation (Docker):
141
- ```bash
142
- docker run --rm -v /path/to/jtcsv:/work -w /work node:20 bash -lc "npm ci && npm test"
143
- ```
144
-
145
- ## License
146
- MIT. See `LICENSE`.
1
+ # jtcsv - JSON <-> CSV toolkit for Node.js and browser
2
+ Current version: 3.1.0
3
+
4
+
5
+ [![npm version](https://img.shields.io/npm/v/jtcsv)](https://www.npmjs.com/package/jtcsv)
6
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
7
+ [![Zero-Deps Core](https://img.shields.io/badge/core-zero%20deps-brightgreen.svg)](https://www.npmjs.com/package/jtcsv)
8
+
9
+ Fast JSON <-> CSV conversion with streaming helpers, NDJSON/TSV support, and optional integrations.
10
+
11
+ **Try Live:** `playground.html` (local) - `npm run demo:web`
12
+ [TRY LIVE](playground.html)
13
+
14
+ ## Features
15
+ - JSON <-> CSV conversion with security defaults
16
+ - Streaming helpers and async iterator API
17
+ - NDJSON and TSV helpers
18
+ - Browser bundle with Web Worker helpers
19
+ - Optional plugin system and framework adapters
20
+ - CLI and optional TUI
21
+ - Fast‑path engine for 2–3× faster parsing of simple CSV patterns
22
+ - Comprehensive security features: CSV injection prevention, path traversal protection, RFC 4180 compliance, automatic row shift repair, quote normalization
23
+ - Performance-optimized - fast number parsing, single-pass BOM stripping, efficient delimiter detection
24
+ - Built‑in benchmarks and performance monitoring (see `BENCHMARK-RESULTS.md`)
25
+
26
+ ## Documentation
27
+ - docs/README.md (docs hub)
28
+ - docs/GETTING_STARTED.md (5-minute quick start)
29
+ - docs/API_DECISION_TREE.md (pick the right API)
30
+ - docs/API_CANONICALIZATION.md (canonical names and aliases)
31
+ - docs/ERRORS.md (error reference)
32
+ - docs/TROUBLESHOOTING.md (common errors and fixes)
33
+ - docs/recipes/index.md (practical recipes)
34
+ - docs/SCHEMA_VALIDATOR.md (schema format)
35
+ - docs/BROWSER.md (browser API)
36
+ - docs/CLI.md (CLI usage)
37
+ - docs/PLUGINS.md (plugin system)
38
+ - docs/PLUGIN_AUTHORING.md (plugin authoring guide)
39
+ - docs/BENCHMARKS.md (public benchmarks)
40
+ - docs/PLUGIN_REGISTRY.md (community plugins)
41
+ - docs/integrations/index.md (framework integrations)
42
+
43
+ ## Playground
44
+ - Local HTML playground: `playground.html` (open in a browser)
45
+ - Vite demo: `npm run demo:web` (runs on http://localhost:3000)
46
+
47
+ <iframe
48
+ src="https://stackblitz.com/github/Linol-Hamelton/jtcsv?embed=1&file=playground.html&view=preview"
49
+ width="100%"
50
+ height="520"
51
+ style="border:0;border-radius:12px;overflow:hidden;"
52
+ title="JTCSV Playground (StackBlitz)"
53
+ ></iframe>
54
+
55
+
56
+ ## Integrations
57
+ - docs/integrations/index.md (overview)
58
+ - docs/integrations/express.md (Express upload API)
59
+ - docs/integrations/fastify.md (Fastify upload API)
60
+ - docs/integrations/react-hook-form.md (React Hook Form uploader)
61
+ - docs/integrations/nextjs-app-router.md (Next.js App Router upload)
62
+ - docs/integrations/drizzle-orm.md (Drizzle ORM import)
63
+ - docs/integrations/graphql.md (GraphQL upload)
64
+
65
+ ## Entry points
66
+ - `jtcsv` (main)
67
+ - `jtcsv/browser` (browser build)
68
+ - `jtcsv/plugins` (plugin manager)
69
+ - `jtcsv/cli` (CLI runner)
70
+ - `jtcsv/schema` (schema validator helpers)
71
+
72
+ ## Installation
73
+ ```bash
74
+ npm install jtcsv
75
+ ```
76
+
77
+ ### Optional add-ons
78
+ ```bash
79
+ npm install @jtcsv/tui
80
+ npm install @jtcsv/excel exceljs
81
+ npm install @jtcsv/validator
82
+ ```
83
+
84
+ ## Quick start (Node.js)
85
+ ```javascript
86
+ const { jsonToCsv, csvToJson } = require('jtcsv');
87
+
88
+ const data = [
89
+ { id: 1, name: 'John', email: 'john@example.com' },
90
+ { id: 2, name: 'Jane', email: 'jane@example.com' }
91
+ ];
92
+
93
+ const csv = jsonToCsv(data, { delimiter: ',', includeHeaders: true });
94
+ const json = csvToJson(csv, { delimiter: ',', parseNumbers: true });
95
+
96
+ console.log(csv);
97
+ console.log(json);
98
+ ```
99
+
100
+ ### Naming aliases (CSV -> JSON)
101
+ - `csvToJsonFile` / `csvToJsonFileSync` -> aliases of `readCsvAsJson` / `readCsvAsJsonSync`
102
+ - `csvToJsonStream` / `csvFileToJsonStream` -> aliases of `createCsvToJsonStream` / `createCsvFileToJsonStream`
103
+
104
+ ### Async iterator
105
+ ```javascript
106
+ const { csvToJsonIterator } = require('jtcsv');
107
+
108
+ const csv = 'id,name\n1,Jane\n2,John';
109
+
110
+ for await (const row of csvToJsonIterator(csv, { fastPathMode: 'compact' })) {
111
+ console.log(row);
112
+ }
113
+ ```
114
+
115
+ ### Command Line Interface
116
+
117
+ JTCSV includes a powerful CLI for batch conversion, file processing, and data transformation.
118
+
119
+ ```bash
120
+ # Convert CSV file to JSON
121
+ npx jtcsv csv-to-json data.csv --output data.json
122
+
123
+ # Convert JSON to CSV with custom delimiter
124
+ npx jtcsv json-to-csv data.json --delimiter ";" --output out.csv
125
+
126
+ # Stream processing with NDJSON
127
+ npx jtcsv csv-to-ndjson large.csv output.ndjson --stream
128
+
129
+ # See all options
130
+ npx jtcsv --help
131
+ ```
132
+
133
+ Full documentation: `docs/CLI.md`
134
+
135
+ ## Browser usage
136
+ - Bundler: `import { csvToJson, jsonToCsv } from 'jtcsv/browser';`
137
+ - CDN UMD: `https://cdn.jsdelivr.net/npm/jtcsv/dist/jtcsv.umd.js`
138
+ - CDN ESM: `https://cdn.jsdelivr.net/npm/jtcsv/dist/jtcsv.esm.js`
139
+
140
+ See `docs/BROWSER.md` for full browser API and worker helpers.
141
+
142
+ ## CLI
143
+ ```bash
144
+ npx jtcsv csv-to-json input.csv output.json
145
+ npx jtcsv json-to-csv input.json output.csv
146
+ npx jtcsv stream csv-to-json big.csv output.json
147
+ npx jtcsv batch json-to-csv "data/*.json" output/
148
+
149
+ # optional TUI
150
+ npx jtcsv tui
151
+ ```
152
+
153
+ See `docs/CLI.md` for full command list and options.
154
+
155
+ ## Demos
156
+ Run these from the repo root:
157
+ ```bash
158
+ # Express API demo
159
+ npm run demo
160
+
161
+ # Web demo (Vite dev server on http://localhost:3000)
162
+ npm run demo:web
163
+
164
+ # Preview built demo
165
+ npm run demo:serve
166
+ ```
167
+
168
+ From inside `demo/` use:
169
+ ```bash
170
+ npm run dev
171
+ npm run preview
172
+ npm run serve
173
+ ```
174
+
175
+ ## Plugin system
176
+ The plugin-enabled API is exported from `jtcsv/plugins`.
177
+
178
+ ```javascript
179
+ const { create } = require('jtcsv/plugins');
180
+
181
+ const jtcsv = create();
182
+ jtcsv.use('my-plugin', { name: 'My Plugin', version: '1.0.0' });
183
+ ```
184
+
185
+ See `docs/PLUGINS.md` and `plugins/README.md` for integrations.
186
+
187
+ ## Development
188
+ Run from the repo root:
189
+ ```bash
190
+ npm test
191
+ npm run test:coverage
192
+ npm run test:coverage:entry
193
+ npm run test:coverage:ts
194
+ npm run test:types
195
+ npm run tsc:types
196
+ npm run build
197
+ ```
198
+
199
+ Linux validation (Docker):
200
+ ```bash
201
+ docker run --rm -v /path/to/jtcsv:/work -w /work node:20 bash -lc "npm ci && npm test"
202
+ ```
203
+
204
+ ## License
205
+ MIT. See `LICENSE`.