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
@@ -1,306 +0,0 @@
1
- /**
2
- * Пример обработки вложенных объектов в jtcsv
3
- * Демонстрирует улучшенную поддержку сложных JSON структур
4
- */
5
-
6
- const { jsonToCsv, preprocessData, deepUnwrap } = require('../../index');
7
-
8
- // Пример 1: Простые вложенные объекты
9
- const simpleNestedData = [
10
- {
11
- id: 1,
12
- name: 'John Doe',
13
- profile: {
14
- age: 30,
15
- email: 'john@example.com',
16
- address: {
17
- city: 'New York',
18
- country: 'USA'
19
- }
20
- },
21
- tags: ['developer', 'javascript', 'nodejs']
22
- },
23
- {
24
- id: 2,
25
- name: 'Jane Smith',
26
- profile: {
27
- age: 25,
28
- email: 'jane@example.com',
29
- address: {
30
- city: 'London',
31
- country: 'UK'
32
- }
33
- },
34
- tags: ['designer', 'ui', 'ux']
35
- }
36
- ];
37
-
38
- console.log('=== Пример 1: Простые вложенные объекты ===\n');
39
-
40
- // Текущая реализация (deepUnwrap)
41
- console.log('Текущая реализация (deepUnwrap):');
42
- const processed1 = preprocessData(simpleNestedData);
43
- console.log('Обработанные данные:', JSON.stringify(processed1, null, 2));
44
-
45
- const csv1 = jsonToCsv(processed1);
46
- console.log('\nCSV результат:');
47
- console.log(csv1);
48
-
49
- // Пример 2: Сложные вложенные структуры
50
- const complexNestedData = [
51
- {
52
- orderId: 'ORD-001',
53
- customer: {
54
- id: 'CUST-001',
55
- name: 'Acme Corp',
56
- contact: {
57
- primary: {
58
- name: 'Alice Johnson',
59
- phone: '+1-555-1234',
60
- email: 'alice@acme.com'
61
- },
62
- secondary: {
63
- name: 'Bob Smith',
64
- phone: '+1-555-5678',
65
- email: 'bob@acme.com'
66
- }
67
- }
68
- },
69
- items: [
70
- {
71
- productId: 'PROD-001',
72
- name: 'Laptop',
73
- quantity: 2,
74
- price: 999.99,
75
- specifications: {
76
- cpu: 'Intel i7',
77
- ram: '16GB',
78
- storage: '512GB SSD'
79
- }
80
- },
81
- {
82
- productId: 'PROD-002',
83
- name: 'Mouse',
84
- quantity: 1,
85
- price: 49.99
86
- }
87
- ],
88
- metadata: {
89
- createdAt: '2024-01-15T10:30:00Z',
90
- updatedAt: '2024-01-16T14:45:00Z',
91
- status: 'completed',
92
- notes: ['Urgent delivery', 'Gift wrapping requested']
93
- }
94
- }
95
- ];
96
-
97
- console.log('\n\n=== Пример 2: Сложные вложенные структуры ===\n');
98
-
99
- console.log('Текущая реализация (ограничения):');
100
- const processed2 = preprocessData(complexNestedData);
101
- console.log('Обработанные данные (первые 500 символов):');
102
- console.log(JSON.stringify(processed2, null, 2).substring(0, 500) + '...');
103
-
104
- // Пример 3: Предлагаемые улучшения
105
- console.log('\n\n=== Пример 3: Предлагаемые улучшения ===\n');
106
-
107
- /**
108
- * Улучшенная функция flattenObject для автоматического разворачивания вложенных структур
109
- */
110
- function flattenObject(obj, prefix = '', separator = '.', maxDepth = 3, currentDepth = 0) {
111
- if (currentDepth >= maxDepth) {
112
- return { [prefix || 'value']: JSON.stringify(obj) };
113
- }
114
-
115
- const result = {};
116
-
117
- for (const key in obj) {
118
- if (Object.prototype.hasOwnProperty.call(obj, key)) {
119
- const value = obj[key];
120
- const newKey = prefix ? `${prefix}${separator}${key}` : key;
121
-
122
- if (value && typeof value === 'object' && !Array.isArray(value)) {
123
- // Рекурсивно разворачиваем объекты
124
- const flattened = flattenObject(
125
- value,
126
- newKey,
127
- separator,
128
- maxDepth,
129
- currentDepth + 1
130
- );
131
- Object.assign(result, flattened);
132
- } else if (Array.isArray(value)) {
133
- // Обработка массивов
134
- if (value.length === 0) {
135
- result[newKey] = '';
136
- } else if (value.every(item => typeof item === 'string' || typeof item === 'number')) {
137
- // Простые массивы - объединяем через запятую
138
- result[newKey] = value.join(', ');
139
- } else {
140
- // Сложные массивы - сериализуем
141
- result[newKey] = JSON.stringify(value);
142
- }
143
- } else {
144
- // Примитивные значения
145
- result[newKey] = value;
146
- }
147
- }
148
- }
149
-
150
- return result;
151
- }
152
-
153
- /**
154
- * Улучшенная функция preprocessData с поддержкой flattening
155
- */
156
- function preprocessDataWithFlattening(data, options = {}) {
157
- const {
158
- flatten = false,
159
- separator = '.',
160
- maxDepth = 3,
161
- arrayHandling = 'stringify' // 'stringify', 'join', 'expand'
162
- } = options;
163
-
164
- if (!Array.isArray(data)) {
165
- return [];
166
- }
167
-
168
- return data.map(item => {
169
- if (!item || typeof item !== 'object') {
170
- return {};
171
- }
172
-
173
- if (flatten) {
174
- return flattenObject(item, '', separator, maxDepth);
175
- }
176
-
177
- // Стандартная обработка (совместимость)
178
- const processed = {};
179
- for (const key in item) {
180
- if (Object.prototype.hasOwnProperty.call(item, key)) {
181
- const value = item[key];
182
- if (value && typeof value === 'object') {
183
- processed[key] = deepUnwrap(value);
184
- } else {
185
- processed[key] = value;
186
- }
187
- }
188
- }
189
- return processed;
190
- });
191
- }
192
-
193
- // Демонстрация улучшенной обработки
194
- console.log('Улучшенная обработка с flattening:');
195
- const flattened = preprocessDataWithFlattening(simpleNestedData, { flatten: true });
196
- console.log('Развернутые данные:');
197
- console.log(JSON.stringify(flattened, null, 2));
198
-
199
- const csvFlattened = jsonToCsv(flattened);
200
- console.log('\nCSV с развернутыми полями:');
201
- console.log(csvFlattened);
202
-
203
- // Пример 4: Разные стратегии обработки массивов
204
- console.log('\n\n=== Пример 4: Обработка массивов ===\n');
205
-
206
- const arrayData = [
207
- {
208
- id: 1,
209
- name: 'Product A',
210
- categories: ['Electronics', 'Computers', 'Laptops'],
211
- reviews: [
212
- { user: 'Alice', rating: 5, comment: 'Great product!' },
213
- { user: 'Bob', rating: 4, comment: 'Good value' }
214
- ],
215
- attributes: {
216
- colors: ['Black', 'Silver', 'Space Gray'],
217
- sizes: ['13"', '15"', '17"']
218
- }
219
- }
220
- ];
221
-
222
- console.log('Разные стратегии обработки массивов:');
223
-
224
- // Стратегия 1: Объединение через запятую (по умолчанию)
225
- const strategy1 = preprocessDataWithFlattening(arrayData, {
226
- flatten: true,
227
- arrayHandling: 'join'
228
- });
229
- console.log('\n1. Объединение через запятую:');
230
- console.log(JSON.stringify(strategy1, null, 2));
231
-
232
- // Стратегия 2: Сериализация JSON
233
- const strategy2 = preprocessDataWithFlattening(arrayData, {
234
- flatten: true,
235
- arrayHandling: 'stringify'
236
- });
237
- console.log('\n2. Сериализация JSON:');
238
- console.log(JSON.stringify(strategy2, null, 2));
239
-
240
- // Пример 5: Интеграция с существующим API
241
- console.log('\n\n=== Пример 5: Интеграция с существующим API ===\n');
242
-
243
- /**
244
- * Расширенная версия jsonToCsv с поддержкой flattening
245
- */
246
- function jsonToCsvWithFlattening(data, options = {}) {
247
- const {
248
- flatten = false,
249
- flattenSeparator = '.',
250
- flattenMaxDepth = 3,
251
- arrayHandling = 'stringify',
252
- ...csvOptions
253
- } = options;
254
-
255
- // Предобработка с flattening
256
- const processedData = preprocessDataWithFlattening(data, {
257
- flatten,
258
- separator: flattenSeparator,
259
- maxDepth: flattenMaxDepth,
260
- arrayHandling
261
- });
262
-
263
- // Используем существующую функцию jsonToCsv
264
- return jsonToCsv(processedData, csvOptions);
265
- }
266
-
267
- // Демонстрация
268
- const complexData = [
269
- {
270
- id: 'USER-001',
271
- personal: {
272
- name: 'Charlie Brown',
273
- birth: {
274
- date: '1990-05-15',
275
- place: 'Springfield'
276
- }
277
- },
278
- employment: {
279
- company: 'Tech Corp',
280
- position: 'Senior Developer',
281
- skills: ['JavaScript', 'TypeScript', 'Node.js', 'React']
282
- }
283
- }
284
- ];
285
-
286
- console.log('Без flattening:');
287
- const csvWithout = jsonToCsvWithFlattening(complexData, { flatten: false });
288
- console.log(csvWithout);
289
-
290
- console.log('\nС flattening:');
291
- const csvWith = jsonToCsvWithFlattening(complexData, {
292
- flatten: true,
293
- flattenSeparator: '_',
294
- flattenMaxDepth: 4
295
- });
296
- console.log(csvWith);
297
-
298
- console.log('\n\n=== Рекомендации по улучшению jtcsv ===\n');
299
- console.log('1. Добавить опцию "flatten" в jsonToCsv для автоматического разворачивания вложенных объектов');
300
- console.log('2. Добавить параметры для контроля flattening:');
301
- console.log(' - flattenSeparator: разделитель для вложенных ключей (по умолчанию ".")');
302
- console.log(' - flattenMaxDepth: максимальная глубина разворачивания');
303
- console.log(' - arrayHandling: стратегия обработки массивов');
304
- console.log('3. Добавить функцию flattenObject в публичное API');
305
- console.log('4. Обновить документацию с примерами обработки сложных JSON структур');
306
- console.log('5. Добавить тесты для edge cases вложенных объектов');