jtcsv 2.2.8 → 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 (246) hide show
  1. package/README.md +204 -115
  2. package/bin/jtcsv.ts +2612 -0
  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 +1736 -0
  23. package/dist/jtcsv-core.cjs.js.map +1 -0
  24. package/dist/jtcsv-core.esm.js +1708 -0
  25. package/dist/jtcsv-core.esm.js.map +1 -0
  26. package/dist/jtcsv-core.umd.js +1742 -0
  27. package/dist/jtcsv-core.umd.js.map +1 -0
  28. package/dist/jtcsv-full.cjs.js +2241 -0
  29. package/dist/jtcsv-full.cjs.js.map +1 -0
  30. package/dist/jtcsv-full.esm.js +2209 -0
  31. package/dist/jtcsv-full.esm.js.map +1 -0
  32. package/dist/jtcsv-full.umd.js +2247 -0
  33. package/dist/jtcsv-full.umd.js.map +1 -0
  34. package/dist/jtcsv-workers.esm.js +768 -0
  35. package/dist/jtcsv-workers.esm.js.map +1 -0
  36. package/dist/jtcsv-workers.umd.js +782 -0
  37. package/dist/jtcsv-workers.umd.js.map +1 -0
  38. package/dist/jtcsv.cjs.js +1996 -2048
  39. package/dist/jtcsv.cjs.js.map +1 -1
  40. package/dist/jtcsv.esm.js +1992 -2048
  41. package/dist/jtcsv.esm.js.map +1 -1
  42. package/dist/jtcsv.umd.js +2157 -2209
  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/dist/src/web-server/index.js +648 -0
  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 +446 -0
  131. package/examples/advanced/csv-parser.worker.ts +89 -0
  132. package/examples/advanced/nested-objects-example.ts +306 -0
  133. package/examples/advanced/performance-optimization.ts +504 -0
  134. package/examples/advanced/run-demo-server.ts +116 -0
  135. package/examples/advanced/web-worker-usage.html +874 -0
  136. package/examples/async-multithreaded-example.ts +335 -0
  137. package/examples/cli-advanced-usage.md +290 -0
  138. package/examples/{cli-batch-processing.js → cli-batch-processing.ts} +38 -38
  139. package/examples/{cli-tool.js → cli-tool.ts} +5 -8
  140. package/examples/{error-handling.js → error-handling.ts} +356 -324
  141. package/examples/{express-api.js → express-api.ts} +161 -164
  142. package/examples/{large-dataset-example.js → large-dataset-example.ts} +201 -182
  143. package/examples/{ndjson-processing.js → ndjson-processing.ts} +456 -434
  144. package/examples/{plugin-excel-exporter.js → plugin-excel-exporter.ts} +6 -7
  145. package/examples/react-integration.tsx +637 -0
  146. package/examples/{schema-validation.js → schema-validation.ts} +2 -2
  147. package/examples/simple-usage.ts +194 -0
  148. package/examples/{streaming-example.js → streaming-example.ts} +12 -12
  149. package/index.d.ts +187 -18
  150. package/package.json +75 -81
  151. package/plugins.d.ts +37 -0
  152. package/schema.d.ts +103 -0
  153. package/src/browser/browser-functions.ts +402 -0
  154. package/src/browser/core.ts +152 -0
  155. package/src/browser/csv-to-json-browser.d.ts +3 -0
  156. package/src/browser/csv-to-json-browser.ts +494 -0
  157. package/src/browser/{errors-browser.js → errors-browser.ts} +305 -197
  158. package/src/browser/extensions/plugins.ts +93 -0
  159. package/src/browser/extensions/workers.ts +39 -0
  160. package/src/browser/globals.d.ts +5 -0
  161. package/src/browser/index.ts +192 -0
  162. package/src/browser/json-to-csv-browser.d.ts +3 -0
  163. package/src/browser/json-to-csv-browser.ts +338 -0
  164. package/src/browser/streams.ts +403 -0
  165. package/src/browser/workers/{csv-parser.worker.js → csv-parser.worker.ts} +3 -3
  166. package/src/browser/workers/{worker-pool.js → worker-pool.ts} +51 -30
  167. package/src/core/delimiter-cache.ts +320 -0
  168. package/src/core/{node-optimizations.js → node-optimizations.ts} +448 -407
  169. package/src/core/plugin-system.ts +588 -0
  170. package/src/core/transform-hooks.ts +566 -0
  171. package/src/engines/{fast-path-engine-new.js → fast-path-engine-new.ts} +11 -2
  172. package/src/engines/{fast-path-engine.js → fast-path-engine.ts} +79 -53
  173. package/src/errors.ts +1 -0
  174. package/src/formats/{ndjson-parser.js → ndjson-parser.ts} +24 -16
  175. package/src/formats/{tsv-parser.js → tsv-parser.ts} +18 -17
  176. package/src/{index-with-plugins.js → index-with-plugins.ts} +381 -357
  177. package/src/types/index.ts +275 -0
  178. package/src/utils/bom-utils.ts +373 -0
  179. package/src/utils/encoding-support.ts +155 -0
  180. package/src/utils/{schema-validator.js → schema-validator.ts} +814 -589
  181. package/src/utils/transform-loader.ts +389 -0
  182. package/src/utils/validators.ts +35 -0
  183. package/src/utils/zod-adapter.ts +280 -0
  184. package/src/web-server/{index.js → index.ts} +19 -19
  185. package/src/workers/csv-multithreaded.ts +310 -0
  186. package/src/workers/csv-parser.worker.ts +227 -0
  187. package/src/workers/worker-pool.ts +409 -0
  188. package/bin/jtcsv.js +0 -2462
  189. package/csv-to-json.js +0 -688
  190. package/errors.js +0 -208
  191. package/examples/simple-usage.js +0 -282
  192. package/index.js +0 -68
  193. package/json-save.js +0 -254
  194. package/json-to-csv.js +0 -526
  195. package/plugins/README.md +0 -91
  196. package/plugins/express-middleware/README.md +0 -64
  197. package/plugins/express-middleware/example.js +0 -136
  198. package/plugins/express-middleware/index.d.ts +0 -114
  199. package/plugins/express-middleware/index.js +0 -360
  200. package/plugins/express-middleware/package.json +0 -52
  201. package/plugins/fastify-plugin/index.js +0 -406
  202. package/plugins/fastify-plugin/package.json +0 -55
  203. package/plugins/hono/README.md +0 -28
  204. package/plugins/hono/index.d.ts +0 -12
  205. package/plugins/hono/index.js +0 -36
  206. package/plugins/hono/package.json +0 -35
  207. package/plugins/nestjs/README.md +0 -35
  208. package/plugins/nestjs/index.d.ts +0 -25
  209. package/plugins/nestjs/index.js +0 -77
  210. package/plugins/nestjs/package.json +0 -37
  211. package/plugins/nextjs-api/README.md +0 -57
  212. package/plugins/nextjs-api/examples/ConverterComponent.jsx +0 -386
  213. package/plugins/nextjs-api/examples/api-convert.js +0 -69
  214. package/plugins/nextjs-api/index.js +0 -387
  215. package/plugins/nextjs-api/package.json +0 -63
  216. package/plugins/nextjs-api/route.js +0 -371
  217. package/plugins/nuxt/README.md +0 -24
  218. package/plugins/nuxt/index.js +0 -21
  219. package/plugins/nuxt/package.json +0 -35
  220. package/plugins/nuxt/runtime/composables/useJtcsv.js +0 -6
  221. package/plugins/nuxt/runtime/plugin.js +0 -6
  222. package/plugins/remix/README.md +0 -26
  223. package/plugins/remix/index.d.ts +0 -16
  224. package/plugins/remix/index.js +0 -62
  225. package/plugins/remix/package.json +0 -35
  226. package/plugins/sveltekit/README.md +0 -28
  227. package/plugins/sveltekit/index.d.ts +0 -17
  228. package/plugins/sveltekit/index.js +0 -54
  229. package/plugins/sveltekit/package.json +0 -33
  230. package/plugins/trpc/README.md +0 -25
  231. package/plugins/trpc/index.d.ts +0 -7
  232. package/plugins/trpc/index.js +0 -32
  233. package/plugins/trpc/package.json +0 -34
  234. package/src/browser/browser-functions.js +0 -219
  235. package/src/browser/csv-to-json-browser.js +0 -700
  236. package/src/browser/index.js +0 -113
  237. package/src/browser/json-to-csv-browser.js +0 -309
  238. package/src/browser/streams.js +0 -393
  239. package/src/core/delimiter-cache.js +0 -186
  240. package/src/core/plugin-system.js +0 -476
  241. package/src/core/transform-hooks.js +0 -350
  242. package/src/errors.js +0 -26
  243. package/src/utils/transform-loader.js +0 -205
  244. package/stream-csv-to-json.js +0 -542
  245. package/stream-json-to-csv.js +0 -464
  246. /package/examples/{web-workers-advanced.js → web-workers-advanced.ts} +0 -0
@@ -1,387 +0,0 @@
1
- /**
2
- * Next.js интеграция для JTCSV
3
- * Утилиты и компоненты для использования JTCSV в Next.js приложениях
4
- *
5
- * @version 1.0.0
6
- * @date 2026-01-23
7
- */
8
-
9
- import { csvToJson, jsonToCsv } from 'jtcsv';
10
-
11
- export { csvToJson, jsonToCsv };
12
-
13
- /**
14
- * React hook для конвертации данных на клиенте
15
- *
16
- * @param {Object} options - Опции конвертации
17
- * @returns {Object} Хук с функциями конвертации и состоянием
18
- *
19
- * @example
20
- * // Использование в React компоненте
21
- * function ConverterComponent() {
22
- * const {
23
- * convertCsvToJson,
24
- * convertJsonToCsv,
25
- * isLoading,
26
- * error,
27
- * result
28
- * } = useJtcsv();
29
- *
30
- * return (
31
- * <div>
32
- * <button onClick={() => convertCsvToJson('name,age\nJohn,30')}>
33
- * Convert CSV to JSON
34
- * </button>
35
- * {result && <pre>{JSON.stringify(result, null, 2)}</pre>}
36
- * </div>
37
- * );
38
- * }
39
- */
40
- export function useJtcsv(options = {}) {
41
- const [state, setState] = React.useState({
42
- isLoading: false,
43
- error: null,
44
- result: null,
45
- stats: null
46
- });
47
-
48
- const convertCsvToJson = React.useCallback(async (csv, convertOptions = {}) => {
49
- setState(prev => ({ ...prev, isLoading: true, error: null }));
50
-
51
- try {
52
- const startTime = Date.now();
53
- const result = await csvToJson(csv, { ...options, ...convertOptions });
54
- const processingTime = Date.now() - startTime;
55
-
56
- setState({
57
- isLoading: false,
58
- error: null,
59
- result,
60
- stats: {
61
- rows: result.length,
62
- processingTime,
63
- conversion: 'csv→json'
64
- }
65
- });
66
-
67
- return result;
68
- } catch (error) {
69
- setState(prev => ({
70
- ...prev,
71
- isLoading: false,
72
- error: error.message,
73
- result: null
74
- }));
75
- throw error;
76
- }
77
- }, [options]);
78
-
79
- const convertJsonToCsv = React.useCallback(async (json, convertOptions = {}) => {
80
- setState(prev => ({ ...prev, isLoading: true, error: null }));
81
-
82
- try {
83
- const startTime = Date.now();
84
- const result = await jsonToCsv(json, { ...options, ...convertOptions });
85
- const processingTime = Date.now() - startTime;
86
-
87
- setState({
88
- isLoading: false,
89
- error: null,
90
- result,
91
- stats: {
92
- size: result.length,
93
- processingTime,
94
- conversion: 'json→csv'
95
- }
96
- });
97
-
98
- return result;
99
- } catch (error) {
100
- setState(prev => ({
101
- ...prev,
102
- isLoading: false,
103
- error: error.message,
104
- result: null
105
- }));
106
- throw error;
107
- }
108
- }, [options]);
109
-
110
- const reset = React.useCallback(() => {
111
- setState({
112
- isLoading: false,
113
- error: null,
114
- result: null,
115
- stats: null
116
- });
117
- }, []);
118
-
119
- return {
120
- ...state,
121
- convertCsvToJson,
122
- convertJsonToCsv,
123
- reset
124
- };
125
- }
126
-
127
- /**
128
- * React компонент для загрузки и конвертации CSV файлов
129
- *
130
- * @param {Object} props - Свойства компонента
131
- * @param {Function} props.onConvert - Callback при успешной конвертации
132
- * @param {Function} props.onError - Callback при ошибке
133
- * @param {Object} props.options - Опции конвертации
134
- *
135
- * @example
136
- * // Использование компонента
137
- * function FileUploader() {
138
- * const handleConvert = (result, stats) => {
139
- * console.log('Converted:', result, stats);
140
- * };
141
- *
142
- * return (
143
- * <CsvFileUploader
144
- * onConvert={handleConvert}
145
- * options={{ delimiter: ',', parseNumbers: true }}
146
- * />
147
- * );
148
- * }
149
- */
150
- export function CsvFileUploader({ onConvert, onError, options = {}, children }) {
151
- const fileInputRef = React.useRef(null);
152
- const [isProcessing, setIsProcessing] = React.useState(false);
153
-
154
- const handleFileSelect = React.useCallback(async (event) => {
155
- const file = event.target.files[0];
156
- if (!file) return;
157
-
158
- setIsProcessing(true);
159
-
160
- try {
161
- const text = await file.text();
162
- const startTime = Date.now();
163
- const result = await csvToJson(text, options);
164
- const processingTime = Date.now() - startTime;
165
-
166
- if (onConvert) {
167
- onConvert(result, {
168
- fileName: file.name,
169
- fileSize: file.size,
170
- rows: result.length,
171
- processingTime,
172
- conversion: 'csv→json'
173
- });
174
- }
175
- } catch (error) {
176
- if (onError) {
177
- onError(error, file);
178
- } else {
179
- console.error('Error converting CSV:', error);
180
- }
181
- } finally {
182
- setIsProcessing(false);
183
- // Сбрасываем input
184
- if (fileInputRef.current) {
185
- fileInputRef.current.value = '';
186
- }
187
- }
188
- }, [onConvert, onError, options]);
189
-
190
- const handleClick = React.useCallback(() => {
191
- if (fileInputRef.current) {
192
- fileInputRef.current.click();
193
- }
194
- }, []);
195
-
196
- return (
197
- <>
198
- <input
199
- ref={fileInputRef}
200
- type="file"
201
- accept=".csv,.txt"
202
- onChange={handleFileSelect}
203
- style={{ display: 'none' }}
204
- />
205
- {children ? (
206
- React.cloneElement(children, { onClick: handleClick, disabled: isProcessing })
207
- ) : (
208
- <button
209
- onClick={handleClick}
210
- disabled={isProcessing}
211
- style={{
212
- padding: '10px 20px',
213
- background: isProcessing ? '#ccc' : '#007acc',
214
- color: 'white',
215
- border: 'none',
216
- borderRadius: '4px',
217
- cursor: isProcessing ? 'not-allowed' : 'pointer'
218
- }}
219
- >
220
- {isProcessing ? 'Processing...' : 'Upload CSV'}
221
- </button>
222
- )}
223
- </>
224
- );
225
- }
226
-
227
- /**
228
- * Утилита для скачивания CSV файла
229
- *
230
- * @param {Array} data - JSON данные
231
- * @param {string} filename - Имя файла
232
- * @param {Object} options - Опции конвертации
233
- *
234
- * @example
235
- * // Использование в браузере
236
- * const data = [{ name: 'John', age: 30 }];
237
- * downloadCsv(data, 'users.csv', { delimiter: ',' });
238
- */
239
- export async function downloadCsv(data, filename = 'data.csv', options = {}) {
240
- const csv = await jsonToCsv(data, options);
241
-
242
- const blob = new Blob([csv], { type: 'text/csv;charset=utf-8;' });
243
- const url = URL.createObjectURL(blob);
244
-
245
- const link = document.createElement('a');
246
- link.href = url;
247
- link.setAttribute('download', filename);
248
- document.body.appendChild(link);
249
- link.click();
250
- document.body.removeChild(link);
251
-
252
- URL.revokeObjectURL(url);
253
- }
254
-
255
- /**
256
- * Утилита для работы с API endpoint
257
- *
258
- * @param {string} endpoint - URL API endpoint
259
- * @param {Object} options - Опции
260
- *
261
- * @example
262
- * // Использование с Next.js API route
263
- * const api = createJtcsvApiClient('/api/convert');
264
- *
265
- * // Конвертация CSV в JSON
266
- * const result = await api.csvToJson('name,age\nJohn,30');
267
- *
268
- * // Конвертация JSON в CSV
269
- * const csv = await api.jsonToCsv([{ name: 'John', age: 30 }]);
270
- */
271
- export function createJtcsvApiClient(endpoint = '/api/convert', options = {}) {
272
- const {
273
- headers = {},
274
- timeout = 30000,
275
- ...fetchOptions
276
- } = options;
277
-
278
- const request = async (path, data, method = 'POST') => {
279
- const controller = new AbortController();
280
- const timeoutId = setTimeout(() => controller.abort(), timeout);
281
-
282
- try {
283
- const response = await fetch(`${endpoint}${path}`, {
284
- method,
285
- headers: {
286
- 'Content-Type': 'application/json',
287
- ...headers
288
- },
289
- body: JSON.stringify(data),
290
- signal: controller.signal,
291
- ...fetchOptions
292
- });
293
-
294
- clearTimeout(timeoutId);
295
-
296
- if (!response.ok) {
297
- const error = await response.json().catch(() => ({
298
- error: `HTTP ${response.status}`
299
- }));
300
- throw new Error(error.error || `HTTP ${response.status}`);
301
- }
302
-
303
- const contentType = response.headers.get('content-type');
304
-
305
- if (contentType?.includes('text/csv')) {
306
- return await response.text();
307
- }
308
-
309
- return await response.json();
310
- } catch (error) {
311
- clearTimeout(timeoutId);
312
- throw error;
313
- }
314
- };
315
-
316
- return {
317
- csvToJson: (csv, options = {}) =>
318
- request('/csv-to-json', { csv, ...options }),
319
-
320
- jsonToCsv: (json, options = {}) =>
321
- request('/json-to-csv', { json, ...options }),
322
-
323
- convert: (data, options = {}) =>
324
- request('/auto', { data, ...options }),
325
-
326
- health: () =>
327
- fetch(`${endpoint}/health`).then(r => r.json())
328
- };
329
- }
330
-
331
- /**
332
- * Провайдер контекста для JTCSV
333
- *
334
- * @example
335
- * // В _app.js
336
- * import { JtcsvProvider } from '@jtcsv/nextjs';
337
- *
338
- * function MyApp({ Component, pageProps }) {
339
- * return (
340
- * <JtcsvProvider options={{ delimiter: ',' }}>
341
- * <Component {...pageProps} />
342
- * </JtcsvProvider>
343
- * );
344
- * }
345
- *
346
- * // В компоненте
347
- * import { useJtcsvContext } from '@jtcsv/nextjs';
348
- *
349
- * function MyComponent() {
350
- * const { convertCsvToJson } = useJtcsvContext();
351
- * // ...
352
- * }
353
- */
354
- const JtcsvContext = React.createContext(null);
355
-
356
- export function JtcsvProvider({ children, options = {} }) {
357
- const value = React.useMemo(() => ({
358
- csvToJson: (csv, convertOptions = {}) =>
359
- csvToJson(csv, { ...options, ...convertOptions }),
360
-
361
- jsonToCsv: (json, convertOptions = {}) =>
362
- jsonToCsv(json, { ...options, ...convertOptions }),
363
-
364
- downloadCsv: (data, filename, convertOptions = {}) =>
365
- downloadCsv(data, filename, { ...options, ...convertOptions })
366
- }), [options]);
367
-
368
- return (
369
- <JtcsvContext.Provider value={value}>
370
- {children}
371
- </JtcsvContext.Provider>
372
- );
373
- }
374
-
375
- export function useJtcsvContext() {
376
- const context = React.useContext(JtcsvContext);
377
-
378
- if (!context) {
379
- throw new Error('useJtcsvContext must be used within JtcsvProvider');
380
- }
381
-
382
- return context;
383
- }
384
-
385
- // Экспортируем все из route.js
386
- export * from './route';
387
-
@@ -1,63 +0,0 @@
1
- {
2
- "name": "@jtcsv/nextjs",
3
- "version": "1.0.0",
4
- "description": "Next.js интеграция для JTCSV - API routes, React hooks и компоненты",
5
- "main": "index.js",
6
- "module": "index.esm.js",
7
- "types": "index.d.ts",
8
- "scripts": {
9
- "test": "jest",
10
- "lint": "eslint index.js route.js",
11
- "build": "rollup -c",
12
- "dev": "rollup -c -w"
13
- },
14
- "keywords": [
15
- "nextjs",
16
- "react",
17
- "csv",
18
- "json",
19
- "converter",
20
- "jtcsv",
21
- "api",
22
- "route",
23
- "hook",
24
- "component",
25
- "typescript"
26
- ],
27
- "author": "Ruslan Fomenko",
28
- "license": "MIT",
29
- "repository": {
30
- "type": "git",
31
- "url": "git+https://github.com/Linol-Hamelton/jtcsv.git",
32
- "directory": "plugins/nextjs-api"
33
- },
34
- "bugs": {
35
- "url": "https://github.com/Linol-Hamelton/jtcsv/issues"
36
- },
37
- "homepage": "https://github.com/Linol-Hamelton/jtcsv/tree/main/plugins/nextjs-api#readme",
38
- "peerDependencies": {
39
- "next": "^13.0.0 || ^14.0.0",
40
- "react": "^18.0.0",
41
- "react-dom": "^18.0.0",
42
- "jtcsv": "^2.1.0"
43
- },
44
- "devDependencies": {
45
- "@types/react": "^18.0.0",
46
- "@types/node": "^20.0.0",
47
- "jest": "^29.0.0",
48
- "eslint": "^8.57.0",
49
- "rollup": "^4.0.0",
50
- "@rollup/plugin-node-resolve": "^15.0.0",
51
- "@rollup/plugin-commonjs": "^25.0.0"
52
- },
53
- "files": [
54
- "index.js",
55
- "index.esm.js",
56
- "index.d.ts",
57
- "route.js",
58
- "README.md",
59
- "examples/"
60
- ]
61
- }
62
-
63
-