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
@@ -0,0 +1,193 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.downloadAsCsv = downloadAsCsv;
4
+ exports.downloadAsCsvAsync = downloadAsCsvAsync;
5
+ exports.parseCsvFile = parseCsvFile;
6
+ exports.parseCsvFileStream = parseCsvFileStream;
7
+ exports.jsonToCsvStream = jsonToCsvStream;
8
+ exports.jsonToNdjsonStream = jsonToNdjsonStream;
9
+ exports.csvToJsonStream = csvToJsonStream;
10
+ exports.loadCsvFromUrl = loadCsvFromUrl;
11
+ exports.loadCsvFromUrlAsync = loadCsvFromUrlAsync;
12
+ exports.openCsvInNewTab = openCsvInNewTab;
13
+ exports.openCsvInNewTabAsync = openCsvInNewTabAsync;
14
+ exports.copyCsvToClipboard = copyCsvToClipboard;
15
+ exports.saveCsvToLocalStorage = saveCsvToLocalStorage;
16
+ exports.loadCsvFromLocalStorage = loadCsvFromLocalStorage;
17
+ exports.loadCsvFromLocalStorageAsync = loadCsvFromLocalStorageAsync;
18
+ exports.createCsvBlob = createCsvBlob;
19
+ exports.createCsvBlobAsync = createCsvBlobAsync;
20
+ exports.parseCsvBlob = parseCsvBlob;
21
+ exports.parseCsvBlobAsync = parseCsvBlobAsync;
22
+ const json_to_csv_browser_1 = require("./json-to-csv-browser");
23
+ const csv_to_json_browser_1 = require("./csv-to-json-browser");
24
+ const streams_1 = require("./streams");
25
+ const errors_browser_1 = require("./errors-browser");
26
+ function downloadAsCsv(data, filename = 'data.csv', options = {}) {
27
+ if (typeof window === 'undefined') {
28
+ throw new errors_browser_1.ValidationError('downloadAsCsv() работает только в браузере. Используйте saveAsCsv() в Node.js');
29
+ }
30
+ if (typeof filename !== 'string' || filename.trim() === '') {
31
+ throw new errors_browser_1.ValidationError('Filename must be a non-empty string');
32
+ }
33
+ if (!filename.toLowerCase().endsWith('.csv')) {
34
+ filename += '.csv';
35
+ }
36
+ const csv = (0, json_to_csv_browser_1.jsonToCsv)(data, options);
37
+ const blob = new Blob([csv], {
38
+ type: 'text/csv;charset=utf-8;'
39
+ });
40
+ const link = document.createElement('a');
41
+ const url = URL.createObjectURL(blob);
42
+ link.setAttribute('href', url);
43
+ link.setAttribute('download', filename);
44
+ link.style.visibility = 'hidden';
45
+ document.body.appendChild(link);
46
+ link.click();
47
+ document.body.removeChild(link);
48
+ setTimeout(() => URL.revokeObjectURL(url), 100);
49
+ }
50
+ async function downloadAsCsvAsync(data, filename = 'data.csv', options = {}) {
51
+ return downloadAsCsv(data, filename, options);
52
+ }
53
+ async function parseCsvFile(file, options = {}) {
54
+ if (!(file instanceof File)) {
55
+ throw new errors_browser_1.ValidationError('parseCsvFile() ожидает объект File');
56
+ }
57
+ const text = await file.text();
58
+ return (0, csv_to_json_browser_1.csvToJson)(text, options);
59
+ }
60
+ function parseCsvFileStream(file, options = {}) {
61
+ if (!(file instanceof File)) {
62
+ throw new errors_browser_1.ValidationError('parseCsvFileStream() ожидает объект File');
63
+ }
64
+ return (0, csv_to_json_browser_1.csvToJsonIterator)(file, options);
65
+ }
66
+ function jsonToCsvStream(options = {}) {
67
+ return (0, streams_1.jsonToCsvStream)(options);
68
+ }
69
+ function jsonToNdjsonStream(options = {}) {
70
+ return (0, streams_1.jsonToNdjsonStream)(options);
71
+ }
72
+ function csvToJsonStream(options = {}) {
73
+ return (0, streams_1.csvToJsonStream)(options);
74
+ }
75
+ async function loadCsvFromUrl(url, options = {}) {
76
+ if (typeof window === 'undefined') {
77
+ throw new errors_browser_1.ValidationError('loadCsvFromUrl() работает только в браузере');
78
+ }
79
+ const response = await fetch(url);
80
+ if (!response.ok) {
81
+ throw new errors_browser_1.ValidationError(`Failed to load CSV from URL: ${response.status} ${response.statusText}`);
82
+ }
83
+ const text = await response.text();
84
+ return (0, csv_to_json_browser_1.csvToJson)(text, options);
85
+ }
86
+ async function loadCsvFromUrlAsync(url, options = {}) {
87
+ return loadCsvFromUrl(url, options);
88
+ }
89
+ function openCsvInNewTab(data, options = {}) {
90
+ if (typeof window === 'undefined') {
91
+ throw new errors_browser_1.ValidationError('openCsvInNewTab() работает только в браузере');
92
+ }
93
+ const csv = (0, json_to_csv_browser_1.jsonToCsv)(data, options);
94
+ const blob = new Blob([csv], { type: 'text/csv;charset=utf-8' });
95
+ const url = URL.createObjectURL(blob);
96
+ window.open(url, '_blank');
97
+ setTimeout(() => URL.revokeObjectURL(url), 1000);
98
+ }
99
+ async function openCsvInNewTabAsync(data, options = {}) {
100
+ return openCsvInNewTab(data, options);
101
+ }
102
+ async function copyCsvToClipboard(data, options = {}) {
103
+ if (typeof window === 'undefined' || !navigator.clipboard) {
104
+ throw new errors_browser_1.ValidationError('copyCsvToClipboard() требует поддержки Clipboard API');
105
+ }
106
+ const csv = (0, json_to_csv_browser_1.jsonToCsv)(data, options);
107
+ try {
108
+ await navigator.clipboard.writeText(csv);
109
+ return true;
110
+ }
111
+ catch (error) {
112
+ console.error('Failed to copy to clipboard:', error);
113
+ return false;
114
+ }
115
+ }
116
+ function saveCsvToLocalStorage(key, data, options = {}) {
117
+ if (typeof window === 'undefined' || !localStorage) {
118
+ throw new errors_browser_1.ValidationError('saveCsvToLocalStorage() требует localStorage');
119
+ }
120
+ const csv = (0, json_to_csv_browser_1.jsonToCsv)(data, options);
121
+ localStorage.setItem(key, csv);
122
+ }
123
+ function loadCsvFromLocalStorage(key, options = {}) {
124
+ if (typeof window === 'undefined' || !localStorage) {
125
+ throw new errors_browser_1.ValidationError('loadCsvFromLocalStorage() требует localStorage');
126
+ }
127
+ const csv = localStorage.getItem(key);
128
+ if (!csv) {
129
+ return null;
130
+ }
131
+ return (0, csv_to_json_browser_1.csvToJson)(csv, options);
132
+ }
133
+ async function loadCsvFromLocalStorageAsync(key, options = {}) {
134
+ return loadCsvFromLocalStorage(key, options);
135
+ }
136
+ function createCsvBlob(data, options = {}) {
137
+ const csv = (0, json_to_csv_browser_1.jsonToCsv)(data, options);
138
+ return new Blob([csv], {
139
+ type: 'text/csv;charset=utf-8;'
140
+ });
141
+ }
142
+ async function createCsvBlobAsync(data, options = {}) {
143
+ return createCsvBlob(data, options);
144
+ }
145
+ async function parseCsvBlob(blob, options = {}) {
146
+ if (!(blob instanceof Blob)) {
147
+ throw new errors_browser_1.ValidationError('Input must be a Blob object');
148
+ }
149
+ return new Promise((resolve, reject) => {
150
+ const reader = new FileReader();
151
+ reader.onload = function (event) {
152
+ try {
153
+ const csvText = event.target?.result;
154
+ const json = (0, csv_to_json_browser_1.csvToJson)(csvText, options);
155
+ resolve(json);
156
+ }
157
+ catch (error) {
158
+ reject(error);
159
+ }
160
+ };
161
+ reader.onerror = function () {
162
+ reject(new errors_browser_1.ValidationError('Ошибка чтения Blob'));
163
+ };
164
+ reader.readAsText(blob, 'UTF-8');
165
+ });
166
+ }
167
+ async function parseCsvBlobAsync(blob, options = {}) {
168
+ return parseCsvBlob(blob, options);
169
+ }
170
+ if (typeof module !== 'undefined' && module.exports) {
171
+ module.exports = {
172
+ downloadAsCsv,
173
+ downloadAsCsvAsync,
174
+ parseCsvFile,
175
+ parseCsvFileStream,
176
+ createCsvBlob,
177
+ createCsvBlobAsync,
178
+ parseCsvBlob,
179
+ parseCsvBlobAsync,
180
+ jsonToCsvStream,
181
+ jsonToNdjsonStream,
182
+ csvToJsonStream,
183
+ loadCsvFromUrl,
184
+ loadCsvFromUrlAsync,
185
+ openCsvInNewTab,
186
+ openCsvInNewTabAsync,
187
+ copyCsvToClipboard,
188
+ saveCsvToLocalStorage,
189
+ loadCsvFromLocalStorage,
190
+ loadCsvFromLocalStorageAsync
191
+ };
192
+ }
193
+ //# sourceMappingURL=browser-functions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser-functions.js","sourceRoot":"","sources":["../../../src/browser/browser-functions.ts"],"names":[],"mappings":"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","sourcesContent":["// Браузерные специфичные функции для jtcsv\r\n// Функции, которые работают только в браузере\r\n\r\nimport { jsonToCsv } from './json-to-csv-browser';\nimport { csvToJson, csvToJsonIterator } from './csv-to-json-browser';\nimport { \r\n csvToJsonStream as createCsvToJsonStream, \r\n jsonToCsvStream as createJsonToCsvStream, \r\n jsonToNdjsonStream as createJsonToNdjsonStream \r\n} from './streams';\nimport { ValidationError } from './errors-browser';\n\r\nimport type { JsonToCsvOptions, CsvToJsonOptions } from '../types';\r\n\r\n/**\r\n * Скачивает JSON данные как CSV файл\r\n * \r\n * @param data - Массив объектов для конвертации\r\n * @param filename - Имя файла для скачивания (по умолчанию 'data.csv')\r\n * @param options - Опции для jsonToCsv\r\n * \r\n * @example\r\n * const data = [\r\n * { id: 1, name: 'John' },\r\n * { id: 2, name: 'Jane' }\r\n * ];\r\n * downloadAsCsv(data, 'users.csv', { delimiter: ',' });\r\n */\r\nexport function downloadAsCsv(\r\n data: any[],\r\n filename: string = 'data.csv',\r\n options: JsonToCsvOptions = {}\r\n): void {\r\n // Проверка что мы в браузере\r\n if (typeof window === 'undefined') {\r\n throw new ValidationError('downloadAsCsv() работает только в браузере. Используйте saveAsCsv() в Node.js');\r\n }\r\n \r\n // Валидация имени файла\r\n if (typeof filename !== 'string' || filename.trim() === '') {\r\n throw new ValidationError('Filename must be a non-empty string');\r\n }\r\n \r\n // Добавление расширения .csv если его нет\r\n if (!filename.toLowerCase().endsWith('.csv')) {\r\n filename += '.csv';\r\n }\r\n \r\n // Конвертация в CSV\r\n const csv = jsonToCsv(data, options);\r\n \r\n // Создание Blob\r\n const blob = new Blob([csv], { \r\n type: 'text/csv;charset=utf-8;' \r\n });\r\n \r\n // Создание ссылки для скачивания\r\n const link = document.createElement('a');\r\n const url = URL.createObjectURL(blob);\r\n \r\n link.setAttribute('href', url);\r\n link.setAttribute('download', filename);\r\n link.style.visibility = 'hidden';\r\n \r\n document.body.appendChild(link);\r\n link.click();\r\n document.body.removeChild(link);\r\n \r\n // Освобождение URL\r\n setTimeout(() => URL.revokeObjectURL(url), 100);\r\n}\r\n\r\n/**\r\n * Асинхронная версия downloadAsCsv\r\n */\r\nexport async function downloadAsCsvAsync(\r\n data: any[],\r\n filename: string = 'data.csv',\r\n options: JsonToCsvOptions = {}\r\n): Promise<void> {\r\n return downloadAsCsv(data, filename, options);\r\n}\r\n\r\n/**\r\n * Парсит CSV файл из input[type=\"file\"]\r\n * \r\n * @param file - File объект из input\r\n * @param options - Опции для csvToJson\r\n * @returns Promise с распарсенными данными\r\n */\r\nexport async function parseCsvFile(\r\n file: File,\r\n options: CsvToJsonOptions = {}\r\n): Promise<any[]> {\r\n if (!(file instanceof File)) {\r\n throw new ValidationError('parseCsvFile() ожидает объект File');\r\n }\r\n \r\n // Чтение файла как текст\r\n const text = await file.text();\r\n \r\n // Парсинг CSV\r\n return csvToJson(text, options);\r\n}\r\n\r\n/**\r\n * Парсит CSV файл потоково\r\n * \r\n * @param file - File объект\r\n * @param options - Опции для потокового парсинга\r\n * @returns AsyncIterator с данными\r\n */\r\nexport function parseCsvFileStream(\r\n file: File,\r\n options: CsvToJsonOptions = {}\r\n): AsyncIterator<any> {\r\n if (!(file instanceof File)) {\r\n throw new ValidationError('parseCsvFileStream() ожидает объект File');\r\n }\r\n \r\n // Используем csvToJsonIterator из импортированного модуля\r\n return csvToJsonIterator(file, options);\r\n}\r\n\r\n/**\r\n * Создает поток для конвертации JSON в CSV\r\n * \r\n * @param options - Опции для jsonToCsv\r\n * @returns ReadableStream\r\n */\r\nexport function jsonToCsvStream(options: JsonToCsvOptions = {}): ReadableStream {\r\n return createJsonToCsvStream(options);\r\n}\r\n\r\n/**\r\n * Создает поток для конвертации JSON в NDJSON\r\n * \r\n * @param options - Опции для конвертации\r\n * @returns ReadableStream\r\n */\r\nexport function jsonToNdjsonStream(options: any = {}): ReadableStream {\r\n return createJsonToNdjsonStream(options);\r\n}\r\n\r\n/**\r\n * Создает поток для парсинга CSV в JSON\r\n * \r\n * @param options - Опции для csvToJson\r\n * @returns ReadableStream\r\n */\r\nexport function csvToJsonStream(options: CsvToJsonOptions = {}): ReadableStream {\r\n return createCsvToJsonStream(options);\r\n}\r\n\r\n/**\r\n * Загружает CSV файл по URL\r\n * \r\n * @param url - URL CSV файла\r\n * @param options - Опции для csvToJson\r\n * @returns Promise с распарсенными данными\r\n */\r\nexport async function loadCsvFromUrl(\r\n url: string,\r\n options: CsvToJsonOptions = {}\r\n): Promise<any[]> {\r\n if (typeof window === 'undefined') {\r\n throw new ValidationError('loadCsvFromUrl() работает только в браузере');\r\n }\r\n \r\n const response = await fetch(url);\r\n \r\n if (!response.ok) {\r\n throw new ValidationError(`Failed to load CSV from URL: ${response.status} ${response.statusText}`);\r\n }\r\n \r\n const text = await response.text();\r\n return csvToJson(text, options);\r\n}\r\n\r\n/**\r\n * Асинхронная версия loadCsvFromUrl\r\n */\r\nexport async function loadCsvFromUrlAsync(\r\n url: string,\r\n options: CsvToJsonOptions = {}\r\n): Promise<any[]> {\r\n return loadCsvFromUrl(url, options);\r\n}\r\n\r\n/**\r\n * Экспортирует данные в CSV и открывает в новой вкладке\r\n * \r\n * @param data - Данные для экспорта\r\n * @param options - Опции для jsonToCsv\r\n */\r\nexport function openCsvInNewTab(\r\n data: any[],\r\n options: JsonToCsvOptions = {}\r\n): void {\r\n if (typeof window === 'undefined') {\r\n throw new ValidationError('openCsvInNewTab() работает только в браузере');\r\n }\r\n \r\n const csv = jsonToCsv(data, options);\r\n const blob = new Blob([csv], { type: 'text/csv;charset=utf-8' });\r\n const url = URL.createObjectURL(blob);\r\n \r\n window.open(url, '_blank');\r\n \r\n // Освобождение URL через некоторое время\r\n setTimeout(() => URL.revokeObjectURL(url), 1000);\r\n}\r\n\r\n/**\r\n * Асинхронная версия openCsvInNewTab\r\n */\r\nexport async function openCsvInNewTabAsync(\r\n data: any[],\r\n options: JsonToCsvOptions = {}\r\n): Promise<void> {\r\n return openCsvInNewTab(data, options);\r\n}\r\n\r\n/**\r\n * Копирует CSV в буфер обмена\r\n * \r\n * @param data - Данные для копирования\r\n * @param options - Опции для jsonToCsv\r\n * @returns Promise с результатом копирования\r\n */\r\nexport async function copyCsvToClipboard(\r\n data: any[],\r\n options: JsonToCsvOptions = {}\r\n): Promise<boolean> {\r\n if (typeof window === 'undefined' || !navigator.clipboard) {\r\n throw new ValidationError('copyCsvToClipboard() требует поддержки Clipboard API');\r\n }\r\n \r\n const csv = jsonToCsv(data, options);\r\n \r\n try {\r\n await navigator.clipboard.writeText(csv);\r\n return true;\r\n } catch (error) {\r\n console.error('Failed to copy to clipboard:', error);\r\n return false;\r\n }\r\n}\r\n\r\n/**\r\n * Сохраняет CSV в localStorage\r\n * \r\n * @param key - Ключ для сохранения\r\n * @param data - Данные для сохранения\r\n * @param options - Опции для jsonToCsv\r\n */\r\nexport function saveCsvToLocalStorage(\r\n key: string,\r\n data: any[],\r\n options: JsonToCsvOptions = {}\r\n): void {\r\n if (typeof window === 'undefined' || !localStorage) {\r\n throw new ValidationError('saveCsvToLocalStorage() требует localStorage');\r\n }\r\n \r\n const csv = jsonToCsv(data, options);\r\n localStorage.setItem(key, csv);\r\n}\r\n\r\n/**\r\n * Загружает CSV из localStorage\r\n * \r\n * @param key - Ключ для загрузки\r\n * @param options - Опции для csvToJson\r\n * @returns Распарсенные данные или null\r\n */\r\nexport function loadCsvFromLocalStorage(\r\n key: string,\r\n options: CsvToJsonOptions = {}\r\n): any[] | null {\r\n if (typeof window === 'undefined' || !localStorage) {\r\n throw new ValidationError('loadCsvFromLocalStorage() требует localStorage');\r\n }\r\n \r\n const csv = localStorage.getItem(key);\r\n \r\n if (!csv) {\r\n return null;\r\n }\r\n \r\n return csvToJson(csv, options);\r\n}\r\n\r\n/**\r\n * Асинхронная версия loadCsvFromLocalStorage\r\n */\r\nexport async function loadCsvFromLocalStorageAsync(\r\n key: string,\r\n options: CsvToJsonOptions = {}\r\n): Promise<any[] | null> {\r\n return loadCsvFromLocalStorage(key, options);\r\n}\r\n\r\n/**\r\n * Создает CSV файл из JSON данных (альтернатива downloadAsCsv)\r\n * Возвращает Blob вместо автоматического скачивания\r\n * \r\n * @param data - Массив объектов\r\n * @param options - Опции для jsonToCsv\r\n * @returns CSV Blob\r\n */\r\nexport function createCsvBlob(\r\n data: any[],\r\n options: JsonToCsvOptions = {}\r\n): Blob {\r\n const csv = jsonToCsv(data, options);\r\n return new Blob([csv], { \r\n type: 'text/csv;charset=utf-8;' \r\n });\r\n}\r\n\r\n/**\r\n * Асинхронная версия createCsvBlob\r\n */\r\nexport async function createCsvBlobAsync(\r\n data: any[],\r\n options: JsonToCsvOptions = {}\r\n): Promise<Blob> {\r\n return createCsvBlob(data, options);\r\n}\r\n\r\n/**\r\n * Парсит CSV строку из Blob\r\n * \r\n * @param blob - CSV Blob\r\n * @param options - Опции для csvToJson\r\n * @returns Promise с JSON данными\r\n */\r\nexport async function parseCsvBlob(\r\n blob: Blob,\r\n options: CsvToJsonOptions = {}\r\n): Promise<any[]> {\r\n if (!(blob instanceof Blob)) {\r\n throw new ValidationError('Input must be a Blob object');\r\n }\r\n \r\n return new Promise((resolve, reject) => {\r\n const reader = new FileReader();\r\n \r\n reader.onload = function (event: ProgressEvent<FileReader>) {\r\n try {\r\n const csvText = event.target?.result as string;\r\n const json = csvToJson(csvText, options);\r\n resolve(json);\r\n } catch (error) {\r\n reject(error);\r\n }\r\n };\r\n \r\n reader.onerror = function () {\r\n reject(new ValidationError('Ошибка чтения Blob'));\r\n };\r\n \r\n reader.readAsText(blob, 'UTF-8');\r\n });\r\n}\r\n\r\n/**\r\n * Асинхронная версия parseCsvBlob\r\n */\r\nexport async function parseCsvBlobAsync(\r\n blob: Blob,\r\n options: CsvToJsonOptions = {}\r\n): Promise<any[]> {\r\n return parseCsvBlob(blob, options);\r\n}\r\n\r\n// Экспорт для Node.js совместимости\r\nif (typeof module !== 'undefined' && module.exports) {\r\n module.exports = {\r\n downloadAsCsv,\r\n downloadAsCsvAsync,\r\n parseCsvFile,\r\n parseCsvFileStream,\r\n createCsvBlob,\r\n createCsvBlobAsync,\r\n parseCsvBlob,\r\n parseCsvBlobAsync,\r\n jsonToCsvStream,\r\n jsonToNdjsonStream,\r\n csvToJsonStream,\r\n loadCsvFromUrl,\r\n loadCsvFromUrlAsync,\r\n openCsvInNewTab,\r\n openCsvInNewTabAsync,\r\n copyCsvToClipboard,\r\n saveCsvToLocalStorage,\r\n loadCsvFromLocalStorage,\r\n loadCsvFromLocalStorageAsync\r\n };\r\n}\r\n\r\n"]}
@@ -0,0 +1,123 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.ERROR_CODES = exports.ConfigurationError = exports.LimitError = exports.ParsingError = exports.FileSystemError = exports.SecurityError = exports.ValidationError = exports.autoDetectDelimiter = exports.csvToJsonStream = exports.jsonToNdjsonStream = exports.jsonToCsvStream = exports.parseCsvFileStream = exports.parseCsvFile = exports.csvToJsonIterator = exports.csvToJson = exports.deepUnwrap = exports.downloadAsCsv = exports.preprocessData = exports.jsonToCsv = void 0;
37
+ exports.jsonToCsvAsync = jsonToCsvAsync;
38
+ exports.csvToJsonAsync = csvToJsonAsync;
39
+ exports.parseCsvFileAsync = parseCsvFileAsync;
40
+ exports.autoDetectDelimiterAsync = autoDetectDelimiterAsync;
41
+ exports.downloadAsCsvAsync = downloadAsCsvAsync;
42
+ const jsonToCsvBrowser = __importStar(require("./json-to-csv-browser"));
43
+ const csvToJsonBrowser = __importStar(require("./csv-to-json-browser"));
44
+ const browser_functions_1 = require("./browser-functions");
45
+ Object.defineProperty(exports, "downloadAsCsv", { enumerable: true, get: function () { return browser_functions_1.downloadAsCsv; } });
46
+ Object.defineProperty(exports, "parseCsvFile", { enumerable: true, get: function () { return browser_functions_1.parseCsvFile; } });
47
+ Object.defineProperty(exports, "parseCsvFileStream", { enumerable: true, get: function () { return browser_functions_1.parseCsvFileStream; } });
48
+ Object.defineProperty(exports, "jsonToCsvStream", { enumerable: true, get: function () { return browser_functions_1.jsonToCsvStream; } });
49
+ Object.defineProperty(exports, "jsonToNdjsonStream", { enumerable: true, get: function () { return browser_functions_1.jsonToNdjsonStream; } });
50
+ Object.defineProperty(exports, "csvToJsonStream", { enumerable: true, get: function () { return browser_functions_1.csvToJsonStream; } });
51
+ const errors_browser_1 = require("./errors-browser");
52
+ Object.defineProperty(exports, "ValidationError", { enumerable: true, get: function () { return errors_browser_1.ValidationError; } });
53
+ Object.defineProperty(exports, "SecurityError", { enumerable: true, get: function () { return errors_browser_1.SecurityError; } });
54
+ Object.defineProperty(exports, "FileSystemError", { enumerable: true, get: function () { return errors_browser_1.FileSystemError; } });
55
+ Object.defineProperty(exports, "ParsingError", { enumerable: true, get: function () { return errors_browser_1.ParsingError; } });
56
+ Object.defineProperty(exports, "LimitError", { enumerable: true, get: function () { return errors_browser_1.LimitError; } });
57
+ Object.defineProperty(exports, "ConfigurationError", { enumerable: true, get: function () { return errors_browser_1.ConfigurationError; } });
58
+ Object.defineProperty(exports, "ERROR_CODES", { enumerable: true, get: function () { return errors_browser_1.ERROR_CODES; } });
59
+ const { jsonToCsv, preprocessData, deepUnwrap } = jsonToCsvBrowser;
60
+ exports.jsonToCsv = jsonToCsv;
61
+ exports.preprocessData = preprocessData;
62
+ exports.deepUnwrap = deepUnwrap;
63
+ const { csvToJson, csvToJsonIterator, autoDetectDelimiter } = csvToJsonBrowser;
64
+ exports.csvToJson = csvToJson;
65
+ exports.csvToJsonIterator = csvToJsonIterator;
66
+ exports.autoDetectDelimiter = autoDetectDelimiter;
67
+ async function jsonToCsvAsync(data, options = {}) {
68
+ return jsonToCsv(data, options);
69
+ }
70
+ async function csvToJsonAsync(csv, options = {}) {
71
+ return csvToJson(csv, options);
72
+ }
73
+ async function parseCsvFileAsync(file, options = {}) {
74
+ return (0, browser_functions_1.parseCsvFile)(file, options);
75
+ }
76
+ async function autoDetectDelimiterAsync(csv) {
77
+ return autoDetectDelimiter(csv);
78
+ }
79
+ async function downloadAsCsvAsync(data, filename = 'export.csv', options = {}) {
80
+ return (0, browser_functions_1.downloadAsCsv)(data, filename, options);
81
+ }
82
+ const jtcsvCore = {
83
+ jsonToCsv,
84
+ preprocessData,
85
+ downloadAsCsv: browser_functions_1.downloadAsCsv,
86
+ deepUnwrap,
87
+ csvToJson,
88
+ csvToJsonIterator,
89
+ parseCsvFile: browser_functions_1.parseCsvFile,
90
+ parseCsvFileStream: browser_functions_1.parseCsvFileStream,
91
+ jsonToCsvStream: browser_functions_1.jsonToCsvStream,
92
+ jsonToNdjsonStream: browser_functions_1.jsonToNdjsonStream,
93
+ csvToJsonStream: browser_functions_1.csvToJsonStream,
94
+ autoDetectDelimiter,
95
+ jsonToCsvAsync,
96
+ csvToJsonAsync,
97
+ parseCsvFileAsync,
98
+ autoDetectDelimiterAsync,
99
+ downloadAsCsvAsync,
100
+ ValidationError: errors_browser_1.ValidationError,
101
+ SecurityError: errors_browser_1.SecurityError,
102
+ FileSystemError: errors_browser_1.FileSystemError,
103
+ ParsingError: errors_browser_1.ParsingError,
104
+ LimitError: errors_browser_1.LimitError,
105
+ ConfigurationError: errors_browser_1.ConfigurationError,
106
+ ERROR_CODES: errors_browser_1.ERROR_CODES,
107
+ parse: csvToJson,
108
+ unparse: jsonToCsv,
109
+ parseAsync: csvToJsonAsync,
110
+ unparseAsync: jsonToCsvAsync,
111
+ version: '3.0.0-core'
112
+ };
113
+ if (typeof module !== 'undefined' && module.exports) {
114
+ module.exports = jtcsvCore;
115
+ }
116
+ else if (typeof define === 'function' && define.amd) {
117
+ define([], () => jtcsvCore);
118
+ }
119
+ else if (typeof window !== 'undefined') {
120
+ window.jtcsv = jtcsvCore;
121
+ }
122
+ exports.default = jtcsvCore;
123
+ //# sourceMappingURL=core.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core.js","sourceRoot":"","sources":["../../../src/browser/core.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0IE,wCAAc;AACd,wCAAc;AACd,8CAAiB;AACjB,4DAAwB;AACxB,gDAAkB;AA3IpB,wEAA0D;AAC1D,wEAA0D;AAC1D,2DAO6B;AAmH3B,8FAzHA,iCAAa,OAyHA;AAIb,6FA5HA,gCAAY,OA4HA;AACZ,mGA5HA,sCAAkB,OA4HA;AAClB,gGA5HA,mCAAe,OA4HA;AACf,mGA5HA,sCAAkB,OA4HA;AAClB,gGA5HA,mCAAe,OA4HA;AA1HjB,qDAQ0B;AA2HxB,gGAlIA,gCAAe,OAkIA;AACf,8FAlIA,8BAAa,OAkIA;AACb,gGAlIA,gCAAe,OAkIA;AACf,6FAlIA,6BAAY,OAkIA;AACZ,2FAlIA,2BAAU,OAkIA;AACV,mGAlIA,mCAAkB,OAkIA;AAClB,4FAlIA,4BAAW,OAkIA;AA7Hb,MAAM,EAAE,SAAS,EAAE,cAAc,EAAE,UAAU,EAAE,GAAG,gBAAuB,CAAC;AAoGxE,8BAAS;AACT,wCAAc;AAEd,gCAAU;AAtGZ,MAAM,EAAE,SAAS,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,GAAG,gBAAuB,CAAC;AAuGpF,8BAAS;AACT,8CAAiB;AAMjB,kDAAmB;AAzGrB,KAAK,UAAU,cAAc,CAAC,IAAS,EAAE,UAA4B,EAAE;IACrE,OAAO,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AAClC,CAAC;AAKD,KAAK,UAAU,cAAc,CAAC,GAAW,EAAE,UAA4B,EAAE;IACvE,OAAO,SAAS,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;AACjC,CAAC;AAKD,KAAK,UAAU,iBAAiB,CAAC,IAAU,EAAE,UAA4B,EAAE;IACzE,OAAO,IAAA,gCAAY,EAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AACrC,CAAC;AAKD,KAAK,UAAU,wBAAwB,CAAC,GAAW;IACjD,OAAO,mBAAmB,CAAC,GAAG,CAAC,CAAC;AAClC,CAAC;AAKD,KAAK,UAAU,kBAAkB,CAC/B,IAAS,EACT,WAAmB,YAAY,EAC/B,UAA4B,EAAE;IAE9B,OAAO,IAAA,iCAAa,EAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;AAChD,CAAC;AAGD,MAAM,SAAS,GAAG;IAEhB,SAAS;IACT,cAAc;IACd,aAAa,EAAb,iCAAa;IACb,UAAU;IAGV,SAAS;IACT,iBAAiB;IACjB,YAAY,EAAZ,gCAAY;IACZ,kBAAkB,EAAlB,sCAAkB;IAClB,eAAe,EAAf,mCAAe;IACf,kBAAkB,EAAlB,sCAAkB;IAClB,eAAe,EAAf,mCAAe;IACf,mBAAmB;IAGnB,cAAc;IACd,cAAc;IACd,iBAAiB;IACjB,wBAAwB;IACxB,kBAAkB;IAGlB,eAAe,EAAf,gCAAe;IACf,aAAa,EAAb,8BAAa;IACb,eAAe,EAAf,gCAAe;IACf,YAAY,EAAZ,6BAAY;IACZ,UAAU,EAAV,2BAAU;IACV,kBAAkB,EAAlB,mCAAkB;IAClB,WAAW,EAAX,4BAAW;IAGX,KAAK,EAAE,SAAS;IAChB,OAAO,EAAE,SAAS;IAClB,UAAU,EAAE,cAAc;IAC1B,YAAY,EAAE,cAAc;IAG5B,OAAO,EAAE,YAAY;CACtB,CAAC;AAGF,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;IAEpD,MAAM,CAAC,OAAO,GAAG,SAAS,CAAC;AAC7B,CAAC;KAAM,IAAI,OAAO,MAAM,KAAK,UAAU,IAAK,MAAc,CAAC,GAAG,EAAE,CAAC;IAE9D,MAAc,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;AACvC,CAAC;KAAM,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;IAExC,MAAc,CAAC,KAAK,GAAG,SAAS,CAAC;AACpC,CAAC;AAED,kBAAe,SAAS,CAAC","sourcesContent":["// Ядро jtcsv - только базовые функции JSON<->CSV\r\n// Минимальный размер, максимальная производительность\r\n\r\nimport * as jsonToCsvBrowser from './json-to-csv-browser';\nimport * as csvToJsonBrowser from './csv-to-json-browser';\nimport {\n downloadAsCsv,\r\n parseCsvFile,\r\n parseCsvFileStream,\r\n jsonToCsvStream,\r\n jsonToNdjsonStream,\r\n csvToJsonStream\r\n} from './browser-functions';\nimport {\r\n ValidationError,\r\n SecurityError,\r\n FileSystemError,\r\n ParsingError,\r\n LimitError,\r\n ConfigurationError,\r\n ERROR_CODES\r\n} from './errors-browser';\n\r\nimport type { JsonToCsvOptions, CsvToJsonOptions } from '../types';\n\nconst { jsonToCsv, preprocessData, deepUnwrap } = jsonToCsvBrowser as any;\nconst { csvToJson, csvToJsonIterator, autoDetectDelimiter } = csvToJsonBrowser as any;\n\r\n/**\r\n * Асинхронная версия jsonToCsv\r\n */\r\nasync function jsonToCsvAsync(data: any, options: JsonToCsvOptions = {}): Promise<string> {\r\n return jsonToCsv(data, options);\r\n}\r\n\r\n/**\r\n * Асинхронная версия csvToJson\r\n */\r\nasync function csvToJsonAsync(csv: string, options: CsvToJsonOptions = {}): Promise<any[]> {\r\n return csvToJson(csv, options);\r\n}\r\n\r\n/**\r\n * Асинхронная версия parseCsvFile\r\n */\r\nasync function parseCsvFileAsync(file: File, options: CsvToJsonOptions = {}): Promise<any[]> {\r\n return parseCsvFile(file, options);\r\n}\r\n\r\n/**\r\n * Асинхронная версия autoDetectDelimiter\r\n */\r\nasync function autoDetectDelimiterAsync(csv: string): Promise<string> {\r\n return autoDetectDelimiter(csv);\r\n}\r\n\r\n/**\r\n * Асинхронная версия downloadAsCsv\r\n */\r\nasync function downloadAsCsvAsync(\r\n data: any,\r\n filename: string = 'export.csv',\r\n options: JsonToCsvOptions = {}\r\n): Promise<void> {\r\n return downloadAsCsv(data, filename, options);\r\n}\r\n\r\n// Основной экспорт ядра\r\nconst jtcsvCore = {\r\n // JSON to CSV функции\r\n jsonToCsv,\r\n preprocessData,\r\n downloadAsCsv,\r\n deepUnwrap,\r\n \r\n // CSV to JSON функции\r\n csvToJson,\r\n csvToJsonIterator,\r\n parseCsvFile,\r\n parseCsvFileStream,\r\n jsonToCsvStream,\r\n jsonToNdjsonStream,\r\n csvToJsonStream,\r\n autoDetectDelimiter,\r\n \r\n // Асинхронные функции\r\n jsonToCsvAsync,\r\n csvToJsonAsync,\r\n parseCsvFileAsync,\r\n autoDetectDelimiterAsync,\r\n downloadAsCsvAsync,\r\n \r\n // Error classes\r\n ValidationError,\r\n SecurityError,\r\n FileSystemError,\r\n ParsingError,\r\n LimitError,\r\n ConfigurationError,\r\n ERROR_CODES,\r\n \r\n // Удобные алиасы\r\n parse: csvToJson,\r\n unparse: jsonToCsv,\r\n parseAsync: csvToJsonAsync,\r\n unparseAsync: jsonToCsvAsync,\r\n \r\n // Версия\r\n version: '3.0.0-core'\r\n};\r\n\r\n// Экспорт для разных сред\r\nif (typeof module !== 'undefined' && module.exports) {\r\n // Node.js CommonJS\r\n module.exports = jtcsvCore;\r\n} else if (typeof define === 'function' && (define as any).amd) {\r\n // AMD\r\n (define as any)([], () => jtcsvCore);\r\n} else if (typeof window !== 'undefined') {\r\n // Браузер (глобальная переменная)\r\n (window as any).jtcsv = jtcsvCore;\r\n}\r\n\r\nexport default jtcsvCore;\r\nexport {\r\n jsonToCsv,\r\n preprocessData,\r\n downloadAsCsv,\r\n deepUnwrap,\r\n csvToJson,\r\n csvToJsonIterator,\r\n parseCsvFile,\r\n parseCsvFileStream,\r\n jsonToCsvStream,\r\n jsonToNdjsonStream,\r\n csvToJsonStream,\r\n autoDetectDelimiter,\r\n // Асинхронные функции\r\n jsonToCsvAsync,\r\n csvToJsonAsync,\r\n parseCsvFileAsync,\r\n autoDetectDelimiterAsync,\r\n downloadAsCsvAsync,\r\n // Error classes\r\n ValidationError,\r\n SecurityError,\r\n FileSystemError,\r\n ParsingError,\r\n LimitError,\r\n ConfigurationError,\r\n ERROR_CODES\r\n};\n"]}